var data;
var moving = false;
var ie6;
var over;
var lang;
var objectpath = "/objects/";
var infopath = "/info/";


window.onload = initForm;


function initForm() {

	if (!window.XMLHttpRequest){
	   window.XMLHttpRequest = function(){
		 return new ActiveXObject("Microsoft.XMLHTTP");
	   }
	}

	var xr = new XMLHttpRequest();

	xr.open("GET", "/showerguide.xml", true);
	xr.onreadystatechange = function() {
		if (xr.readyState == 4) {
			if (xr.status == 200) {
				data = xr.responseXML;
				getBrowser();
			}
		}
	}
	xr.send(null);

	document.onselectstart = cancelEvent;
	document.ondragstart = cancelEvent;
	document.onmouseup = function() {if (moving == true) {moving = false; setCursor("ready");}}
}


function cancelEvent() {

	return false;
}


function getBrowser() {

	var ver = navigator.appVersion;

	ie6 = (ver.indexOf("MSIE 5.5") == -1 && ver.indexOf("MSIE 6") == -1)?false:true;
}


function setCursor(cursorType) {

	var div = document.getElementById("stage");

	switch (cursorType) {
		case "ready":
			div.style.cursor = "pointer";
			div.style.cursor = "url(/handopen.cur), pointer";
			break;
		case "move":
			div.style.cursor = "move";
			div.style.cursor = "url(/handclosed.cur), move";
			break;
		default:
			div.style.cursor = "auto";
	}
}


function setImage(containerId, srcFile, imagePosition) {

	var div = document.getElementById(containerId);

	if (ie6) {
		div.style.backgroundImage = "none";
		div.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + objectpath + srcFile + "', sizingMethod='scale')";
	} else {
		div.style.backgroundImage = "url(" + objectpath + srcFile + ")";
	}

	if (srcFile)
		div.setAttribute("src", srcFile);

	if (imagePosition)
		div.setAttribute("position", imagePosition);
}


function getNodeById(Id) {

	var objNodes = data.getElementsByTagName("*");

	for (var i = 0; i < objNodes.length; i++) {
		if (objNodes[i].getAttribute("id") == Id)
			return objNodes[i];
	}
}


function startShowerguide() {

	document.getElementById("start").style.display = "none";
	document.getElementById("stage").style.display = "block";
	loadNext("01");
}


function loadNext(groupId) {

	loadSelection(loadMenu(groupId));
}


function loadPrevious(groupId) {

	document.getElementById("stage").removeChild(document.getElementById(getSelectedId()));

	var selectedId = groupExists(groupId);

	if (selectedId) {
		loadMenu(groupId);
		loadSelection(selectedId, document.getElementById(selectedId).getAttribute("position"));
	}
}


function getSelectedId() {

	var menuPanel = document.getElementById("menulist");

	for (var i = 0; i < menuPanel.childNodes.length; i++) {
		if (menuPanel.childNodes[i].firstChild.className == "selected") {
			return menuPanel.childNodes[i].firstChild.id.substring(1);
		}
	}
}


function loadMenu(groupId) {

	var groupNode = getNodeById(groupId);
	var groupNodes = groupNode.childNodes;
	var menuId;
	var menuCaption;
	var menuList = document.getElementById("menulist");
	var hoverNodes;
	var loadList = new Array();
	var defaultNode;


	document.getElementById("menuaction").innerHTML = groupNode.getAttribute("action_" + lang);
	menuList.innerHTML = "";

	for (var i = 0; i < groupNodes.length; i++) {

		if (isCompatible(groupNodes[i])) {

			menuId = groupNodes[i].getAttribute("id");
			menuCaption = groupNodes[i].getAttribute("caption_" + lang);

			menuList.innerHTML += "<li><a id='a" + menuId + "' href=\"javascript:loadSelection('" + menuId + "');\" onmouseover=\"switchInfo('" + menuId + "');\" onmouseout=\"switchInfo();\">" + menuCaption + "</a></li>";

			hoverNodes = groupNodes[i].getElementsByTagName("hover");
			if (hoverNodes[0])
				loadList[loadList.length] = infopath + hoverNodes[0].getAttribute("src");

			if (defaultNode == null)
				defaultNode = menuId; 
		}
	}

	loadImages("preloadhover", loadList);

	return defaultNode;
}


function loadImages(containerId, imageList) {

	var div = document.getElementById(containerId);
	var img;

	div.innerHTML = "";

	for (var i = 0; i < imageList.length; i++) {
		img = new Image();
		img.src = imageList[i];
		div.appendChild(img);
	}
}


function isCompatible(thisNode) {

	var nodeConditions = thisNode.getAttribute("condition");

	if (nodeConditions) {
		var orConditions = nodeConditions.split(" || ");
		for (var i = 0; i < orConditions.length; i++) {
			var b = true;
			var andConditions = orConditions[i].split(" ");
			for (var n = 0; n < andConditions.length; n++) {
				if (groupExists(andConditions[n]) == null) {
					b = false;
					break;
				}
			}
			if (b == true)
				return true;
		}
		return false;
	}
	return true;
}


function groupExists(groupId) {

	var divs = document.getElementById("stage").getElementsByTagName("div");

	for (var i = 0; i < divs.length; i++) {
		if (divs[i].className == "object" && divs[i].id.indexOf(groupId) == 0)
			return divs[i].id;
	}
}


function loadSelection(newId, defaultPosition) {

	var selectedNode = getNodeById(newId);
	var nodeGroup = selectedNode.parentNode;
	var selectedId = groupExists(nodeGroup.getAttribute("id"));
	var selectedParts = selectedNode.getAttribute("parts");
	var div;


	if (selectedId) {
		div = document.getElementById(selectedId);
		div.id = newId;
		div.removeAttribute("src");
		div.removeAttribute("position");
		div.removeAttribute("parts");
		document.getElementById("a" + selectedId).className = "";
	} else {
		div = document.createElement("div");
		div.id = newId;
		div.className= "object";
		div.style.zIndex = nodeGroup.getAttribute("z-index");
		document.getElementById("stage").appendChild(div);
	}

	if (selectedParts)
		div.setAttribute("parts", selectedParts);

	document.getElementById("a" + newId).className = "selected";

	showImage(newId, selectedNode.getAttribute("id"), defaultPosition);
	showInfo(newId);
	loadNavigation(selectedNode);
}


function overDiv(id, src, position) {

	this.id = id;
	this.src = src;
	this.position = position;
}


function showImage(containerId, Id, defaultPosition) {

	var div = document.getElementById("stage");
	var divs = div.getElementsByTagName("div");
	var imageNodes = getNodeById(Id).getElementsByTagName("img");
	var objectPositions = new Array();
	var loadList = new Array();
	var defaultImage;
	var defaultSource;


	if (imageNodes.length > 1) {

		setCursor("ready");
		div.onmousedown = function() {moving = true; setCursor("move")}

		var i;

		for (i = 0; i < imageNodes.length; i++) {

			var imagePositions = imageNodes[i].getAttribute("position").split(" ");

			if (isCompatible(imageNodes[i]) && isEmpty(imagePositions)) {

				loadList[loadList.length] = objectpath + imageNodes[i].getAttribute("src");

				for (var n = 0; n < imagePositions.length; n++) {

					objectPositions[objectPositions.length] = new overDiv(imagePositions[n], imageNodes[i].getAttribute("src"), imageNodes[i].getAttribute("position"));

					if (defaultImage == null || defaultPosition == imageNodes[i].getAttribute("position"))defaultImage = i;
				}
			}
		}

		loadImages("preloadobject", loadList);

		for (i = 0; i < divs.length; i++) {

			if (divs[i].className == "over") {

				over = divs[i].id;
				objectPositions.sort(sortPositions);

				div = document.getElementById(over);
				div.setAttribute("src", objectPositions[0].src);
				div.setAttribute("position", objectPositions[0].position);
				div.onmouseover = function() {if(moving)setImage(containerId, this.getAttribute("src"), this.getAttribute("position"));}
			}
		}

	} else {

		setCursor();
		div.onmousedown = null;
		defaultImage = 0;
	}


	if (imageNodes[defaultImage]) {
		defaultSource = imageNodes[defaultImage].getAttribute("src");
		defaultPosition = imageNodes[defaultImage].getAttribute("position");
	}

	setImage(containerId, defaultSource, defaultPosition);
}


function sortPositions(a, b) {

	return(Math.abs(over - a.id) > Math.abs(over - b.id))?1:-1;

}


function isEmpty(reqPositions) {

	var divs = document.getElementById("stage").getElementsByTagName("div");

	for (var i = 0; i < reqPositions.length; i++) {
		for (var n = 0; n < divs.length; n++) {
			var usedPositions = divs[n].getAttribute("position");
			if (usedPositions && divs[n].className == "object") {
				usedPositions = usedPositions.split(" ");
				for (var s = 0; s < usedPositions.length; s++) {
					if (usedPositions[s] == reqPositions[i])return false;
				}
			}
		}
	}
	return true;
}


function showInfo(Id) {

	var selectedNode = getNodeById(Id);

	showInfoImage("selectedvideo", selectedNode)
	showVideoList(Id);
	showDescription("selectedtext", Id);
	switchInfo();
}


function switchInfo(Id) {

	var hoverStyle;

	if (Id) {
		var hoverNode = getNodeById(Id);
		showInfoImage("hovervideo", hoverNode)
		showDescription("hovertext", Id);
		hoverStyle = "visible";
	} else {
		hoverStyle = "hidden";
	}

	document.getElementById("hover").style.visibility = hoverStyle;
}


function showInfoImage(ContainerId, objectNode) {

	var infoNode = objectNode.getElementsByTagName("hover");
	var imageSrc = "none";


	if (infoNode[0])
		imageSrc = "url(" + infopath + infoNode[0].getAttribute("src") + ")";

	document.getElementById(ContainerId).style.backgroundImage = imageSrc;
}


function showVideoList(Id) {

	var selectedlist = document.getElementById("selectedlist");
	var videoNodes = getNodeById(Id).getElementsByTagName("video");


	document.getElementById("selectedvideo").innerHTML = "";
	selectedlist.innerHTML = "";


	if (videoNodes[0]) {

		if (videoNodes.length != 1) {
			for (var i = 0; i < videoNodes.length; i++) {
				var videoSrc = videoNodes[i].getAttribute("src");
				selectedlist.innerHTML += "<li><a href=\"javascript:showVideo('" + videoSrc + "');\">" + Number(i + 1) + "</a></li>";
			}
		}

		showVideo(videoNodes[0].getAttribute("src"));
	}
}


function showVideo(videoSrc) {

	var selectedlist = document.getElementById("selectedlist").childNodes;

	for (i = 0; i < selectedlist.length; i++)
		selectedlist[i].firstChild.className = (selectedlist[i].firstChild.href.indexOf(videoSrc) == -1)?"":"selected";

	var so = new SWFObject(infopath + videoSrc, "movie", "198", "360", "8", "#ebebeb;");
	so.addParam("wmode", "transparent");
	so.write("selectedvideo");
}


function showDescription(containerId, Id) {

	var div = document.getElementById(containerId);
	var objectInfo = getNodeById(Id).getAttribute("info_" + lang);

	div.innerHTML = (objectInfo)?objectInfo:"";
}


function loadNavigation(selectedNode) {

	var nextNode = selectedNode.parentNode.nextSibling;
	var prevNode = selectedNode.parentNode.previousSibling;
	var nextObject;
	var prevObject;


	while (nextNode) {
		if (isCompatible(nextNode)) {
			nextObject = nextNode.getAttribute("id");
			break;
		}
		nextNode = nextNode.nextSibling;
	}


	while (prevNode) {
		if (groupExists(prevNode.getAttribute("id"))) {
			prevObject = prevNode.getAttribute("id");
			break;
		}
		prevNode = prevNode.previousSibling;
	}


	setNavButton("menuprev", "loadPrevious", prevObject);
	setNavButton("menunext", "loadNext", nextObject);
	setEnd(nextObject);
}


function setNavButton(buttonId, buttonAction, linkTarget) {

	var a = document.getElementById(buttonId);

	a.href = "javascript:" + buttonAction + "('" + linkTarget + "');";
	a.style.visibility = (linkTarget)?"visible":"hidden";
}


function setEnd(nextObject) {

	var arr = new Array("block", "none");
	var i;

	i = (nextObject)?0:1;
	document.getElementById("menuaction").style.display = arr[i];
	document.getElementById("menulist").style.display = arr[i];

	i = (nextObject)?1:0;
	document.getElementById("menuactionend").style.display = arr[i];
	document.getElementById("menulistend").style.display = arr[i];
}


function showPdf() {

	var divs = document.getElementById("stage").getElementsByTagName("div");
	var sendForm = document.createElement("form");
	var listImages = new Array();
	var listParts = new Array();
	var sumParts = new Array();
	var objectData;
	var partNode;
	var arr;
	var and;
	var or;
	var i;
	var n;
	var s;


	for (i = 0; i < divs.length; i++) {

		if (divs[i].className == "object") {

			objectData = divs[i].getAttribute("src");
			if (objectData)
				listImages[listImages.length] = new Array(String.fromCharCode(divs[i].style.zIndex), objectData);

			objectData = divs[i].getAttribute("parts");
			if (objectData)
				sumParts[sumParts.length] = objectData;
		}
	}

	listImages.sort(sortObjects);
	sumParts.sort();

	for (i = 0; i < sumParts.length; i++) {

		or = sumParts[i].split(" || ");
		for (n = 0; n < or.length; n++) {

			and = or[n].split(" ");
			for (s = 0; s < and.length; s++) {

				arr = and[s].split("*");
				partNode = getNodeById(arr[0]);
				listParts[listParts.length] = new Array(partNode.parentNode.getAttribute("caption_" + lang), n, Number((arr[1])?arr[1]:1), partNode.getAttribute("caption_" + lang), partNode.getAttribute("no"), partNode.getAttribute("price_" + lang.split("-")[0]));
			}
		}
	}


	sendForm.method = "post";
	sendForm.action = "/showerguide.php";
	sendForm.target = "_blank";
	sendForm.innerHTML += "<input type=\"hidden\" name=\"lang\" value=\"" + lang + "\" />";
	sendForm.innerHTML += getInputElements("files", listImages);
	sendForm.innerHTML += getInputElements("parts", listParts);

	document.body.appendChild(sendForm);
	sendForm.submit();
	document.body.removeChild(sendForm);
}


function sortObjects(a, b) {

	return(a > b)?1:-1;
}


function getInputElements(elementName, valueList) {

	var inputElements = "";
	var n;

	for (var i = 0; i < valueList.length; i++)
		for (n = 0; n < valueList[i].length; n++)
			inputElements += "<input type=\"hidden\" name=\"" + elementName + "[" + i + "][" + n + "]\" value=\"" + encodeURI(valueList[i][n]) + "\" />";

	return inputElements;
}
