// requires starwoodAjax.js

//var req;
var mapResponseHandler;
var hotBoxArray = new Array();
var debugMode = false;
var mapLoaded = false;
var navigateSession = "";
var zoomLevel = -1;

function propertyIconOnClick(elem,event, hrefX, hrefY) {
	var mapPoint = new point( hrefX, hrefY);
	propertiesClicked = 0;
	for( i = 0; i < hotBoxArray.length; i++) {
		var show = hotBoxArray[i].contains(mapPoint);
		if (show) {
			document.getElementById("propertyDetail" + hotBoxArray[i].propertyID).style.display = "block";
			//currentClassName = document.getElementById("propIcon" + hotBoxArray[i].propertyID).className;
			//document.getElementById("propIcon" + hotBoxArray[i].propertyID).className = currentClassName + " selected";
			propertiesClicked++;
		} else {
			document.getElementById("propertyDetail" + hotBoxArray[i].propertyID).style.display = "none";
			//currentClassName = document.getElementById("propIcon" + hotBoxArray[i].propertyID).className;
			//document.getElementById("propIcon" + hotBoxArray[i].propertyID).className = currentClassName.replace(" selected", "");
		}
	}
	if (propertiesClicked > 2) {
		document.getElementById("details").className = "many";
	} else {
		document.getElementById("details").className = "few";
	}
	document.getElementById("detailsPopup").style.display = "block";
	return false;
}
function toggleMap() {
	mapSectionDiv = document.getElementById("mapSection");
	if (mapSectionDiv.style.display == "block") {
		setShowMap(false);
		mapToggleLinkViewA = document.getElementById("mapToggleLinkView");
		mapToggleLinkHideA = document.getElementById("mapToggleLinkHide");
		mapSectionDiv.style.display = "none";
		mapToggleLinkViewA.style.display = "inline";
		mapToggleLinkHideA.style.display = "none";
	} else {
		showMap();
	}
}
function showMap() {
	if (!mapLoaded) {
		handleLoad();
	} else {
		setShowMap(true);
	}
	mapSectionDiv = document.getElementById("mapSection");
	mapToggleLinkViewA = document.getElementById("mapToggleLinkView");
	mapToggleLinkHideA = document.getElementById("mapToggleLinkHide");

	mapSectionDiv.style.display = "block";
	mapToggleLinkViewA.style.display = "none";
	mapToggleLinkHideA.style.display = "inline";
}
function point(x,y) {
	this.x = x;
	this.y = y;
	this.printAlert = function() {
		alert("POINT: " + this.x + ":" + this.y);
	}
}
function hotBox(x , y, propertyID) {
	x = x - 0;
	y = y - 0;
	this.propertyID = propertyID;
	this.upperLeft = new point(x -23,y - 40);
	this.lowerRight = new point(x + 23, y + 1);
	this.contains = function(point) {
		if (point.x > this.upperLeft.x && point.x < this.lowerRight.x) {
			if (point.y > this.upperLeft.y && point.y < this.lowerRight.y) {
			 	return true;
			}
		}
		return false;
	}
	this.printAlert = function() {
		alert("BOX: " + this.upperLeft.x + ":" + this.lowerRight.x + ":" + this.upperLeft.y + ":" + this.lowerRight.y);
	}
}
function pan(direction) {
    ax = new ajax();
    ax.setURL("/ajax/search");
	ax.addParameter("searchType", "panRequest");
	ax.addParameter("sessionId", navigateSession);
    ax.addParameter("startIndex", startIndex);
    ax.addParameter("endIndex", endIndex);
    ax.addParameter("direction", direction);
    ax.addParameter("userLocale", userLocale);
    ax.setSuccessHandler(displayHandler);
    ax.setFailureHandler(errorhandler);
    ax.execute();
}
function zoomIn_onClick() {
	mapResponseHandler = displayHandler;
	handleZoom(zoomLevel - 1);
}
function zoomOut_onClick() {
	mapResponseHandler = displayHandler;
	handleZoom(zoomLevel + 1);
}
function handleZoom(level) {
	if (level >0 && level <11){
		zoomLevel = level;
        ax = new ajax();
	    ax.setURL("/ajax/search");
	    ax.addParameter("searchType", "zoomRequest");
	    ax.addParameter("sessionId", navigateSession);
        ax.addParameter("startIndex", startIndex);
        ax.addParameter("endIndex", endIndex);
        ax.addParameter("zoomLevel", level);
        ax.addParameter("userLocale", userLocale);
        ax.setSuccessHandler(displayHandler);
        ax.setFailureHandler(errorhandler);
        ax.execute();
    }
}

function handleLoad() {
	document.getElementById("detailsPopup").style.display = "none";
	ax = new ajax();
	ax.setURL("/ajax/search");
	ax.addParameter("searchType", "propertyID");
	ax.addParameter("showMap", "true");
    ax.addParameter("startIndex", startIndex);
    ax.addParameter("endIndex", endIndex);
    ax.addParameter("mapWidth", mapWidth);
    ax.addParameter("mapHeight", mapHeight);
    ax.addParameter("userLocale", userLocale);
    ax.addParameter("LaunchLocation", launchLocation);
    ax.addParameter("iataNumber", iataNumber)
    ax.setSuccessHandler(displayHandler);
    ax.setFailureHandler(errorhandler);
    ax.execute();
}
function setShowMap(b) {
	mapResponseHandler = emptyFunction;
	ax = new ajax();
	ax.setURL("/ajax/search");
	ax.addParameter("searchType", "setShowMap");
	ax.addParameter("showMap", b);
    ax.addParameter("userLocale", userLocale);
    ax.setSuccessHandler(emptyFunction);
    ax.setFailureHandler(emptyFunction);
    ax.execute();
}
function emptyFunction() {
}
function errorhandler(req) {
	req.statusText
}
function displayHandler(req) {
	if (getSubNodeValue(req.responseXML, "errorCode") == "") {
		document.getElementById("mqmap").setAttribute('src','/common/images/shim.gif');
		clearResults();
		setMapUri(req);
		setNavigateSession(req);
		setZoomLevel(req);
		setIcons(req);
		mapLoaded = true;
	} else {
		window.alert(getSubNodeValue(req.responseXML, "errorDesctiption"));
	}
}
function setMapUri(req) {
	document.getElementById("mqmap").setAttribute('src',  getSubNodeValue(req.responseXML, "MapUri"));
}
function setZoomLevel(req) {
	zoomLevel =  getSubNodeValue(req.responseXML, "ZoomLevel") * 1;
	for (i = 1; i < 11; i ++) {
		if ( ( i > (zoomLevel - .5)) && ( i < ((zoomLevel)+ .499)) ) {
			document.getElementById("zoomLevel" + i).className = "zoomLevelLocked";
		} else {
			document.getElementById("zoomLevel" + i).className = "zoomLevelOff";
		}
	}
}
function setNavigateSession(req) {
	if (debugMode) {
		alert("Setting SessionId: " + getSubNodeValue(req.responseXML, "SessionID"));
	}
	navigateSession = getSubNodeValue(req.responseXML, "SessionID");
}
function setIcons(req) {
	var items = req.responseXML.getElementsByTagName("property");
	iconsDiv = document.getElementById("icons");
	detailsDiv = document.getElementById("details");
	hotBoxArray = new Array();
	for (var i= items.length - 1; i >= 0 ; i--) {
		propertyNode = items[i];
		onMapNode = propertyNode.getElementsByTagName("onMap");
		onMap = (onMapNode[0].firstChild != null)? onMapNode[0].firstChild.nodeValue : "false";
		if (onMap == "true") {
			propertyID = getSubNodeValue(propertyNode, "propertyID");
			x = getSubNodeValue(propertyNode, "X");
			y = getSubNodeValue(propertyNode, "Y");
			displayIndex = getSubNodeValue(propertyNode, "displayIndex");
			brandCode = getSubNodeValue(propertyNode, "brand");

			hotBoxArray[hotBoxArray.length] = new hotBox(x,y,propertyID);
			textToAppend = "<a class='icon_" + brandCode + "' href='' id='propIcon" + propertyID + "' onclick='return propertyIconOnClick(this, event, " + x + ", " + y + ")' style='position:absolute; top:" + (y - 35) + "px; left: " + (x - 17) + "px;'>" + displayIndex + "</a>";
			iconsDiv.innerHTML = iconsDiv.innerHTML + textToAppend;
			//
			var contentItems = propertyNode.getElementsByTagName("content");
			contentInnerText = contentItems[0];
			if (contentInnerText != null) {
				var textToAppend = "";
				if (contentInnerText.textContent) {
					textToAppend = contentInnerText.textContent;
				} else {
					textToAppend = contentInnerText.firstChild.nodeValue;
				}
				detailsDiv.innerHTML = textToAppend + detailsDiv.innerHTML;
			}
		}
	}
}

function clearResults() {
	elem = document.getElementById("icons");
	while (elem.childNodes.length > 0) {
		elem.removeChild(elem.firstChild);
	}
	elem = document.getElementById("details");
	while (elem.childNodes.length > 0) {
		elem.removeChild(elem.firstChild);
	}
}
function closeDetails() {
	//for( i = 0; i < hotBoxArray.length; i++) {
	//	currentClassName = document.getElementById("propIcon" + hotBoxArray[i].propertyID).className;
	//	document.getElementById("propIcon" + hotBoxArray[i].propertyID).className = currentClassName.replace(" selected", "");
	//}
	document.getElementById("detailsPopup").style.display = "none";
	return false;
}

// onmouseover action for images
//  takes Array var wich holds the objects to change
function panOver(arr) {
	for (i = 0; i < eval(arr).length; i++) {
	    var img = eval(arr)[i];
	    document[img].src = eval(img + '_' + arr + '.src');
	}
	hoverOn(arr);
}

// onmouseout action for images
//  takes Array var wich holds the objects to change
function panOff(arr) {
	for (i = 0; i < eval(arr).length; i++) {
	    var img = eval(arr)[i];
	    document[img].src = eval(img);
	}
	hoverOff(arr);
}

// change the hover classes for <td> cells
function hoverOff(hoverElement) {
	var element = document.getElementById(hoverElement);
	if (element != null){
		element.className = "hoverOff";
	}
}

function hoverOn(hoverElement) {
	var element = document.getElementById(hoverElement);
	if (element != null){
		element.className = "hoverOn";
	}
}

function swapZoomClass(element) {
	var elementRef = document.getElementById(element);
	if (elementRef.className != "zoomLevelLocked"){
		if(elementRef.className == "zoomLevelOn"){
			elementRef.className = "zoomLevelOff";
		} else {
			elementRef.className = "zoomLevelOn";
		}
	}
}

