/************************************************************************/
// Inject Dojo
/************************************************************************/

/*
var head = document.getElementsByTagName("head")[0];
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "http://o.aolcdn.com/dojo/1.3.2/dojo/dojo.xd.js";
script.setAttribute("djConfig","parseOnLoad:true, isDebug:false");
head.appendChild(script);
return;
*/


/************************************************************************/
// Inject Google Analytics - depreciated
/************************************************************************/

/*
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
*/

/************************************************************************/
// Core JavaScript
/************************************************************************/

dojo.require("dojo.cookie");
dojo.require("dijit.layout.ContentPane");

dojo.addOnLoad(function() 
{
	// Inject Google Analytics asynchronously

/*
	setTimeout(function() 
	{
		dojo.require("dojox.analytics.Urchin");
		dojo.addOnLoad(function()
		{
			pageTracker = new dojox.analytics.Urchin( { acct: "UA-10702995-4" });
			console.log("Tracking with Google Analytics");
		});
	}, 100);
*/

	// Process page

	if (dojo.byId("text_writeup")) dojo.style("text_writeup", "visibility", "hidden");
	if (dojo.byId("text_details_left")) dojo.style("text_details_left", "visibility", "hidden");
	if (dojo.byId("text_details_right")) dojo.style("text_details_right", "visibility", "hidden");
	if (dojo.byId("process_elements")) dojo.style("process_elements", "visibility", "hidden");

	// Get language

	var lang = null;

	if (dojo.doc.location.search.length > 1) {
		var queryParams = dojo.queryToObject(dojo.doc.location.search.slice(1));
		if (queryParams["lang"]) {
			lang = queryParams["lang"];
			if (lang) dojo.cookie("Language", lang, { expires: 365 });
		}
	}

	if (!lang) lang = dojo.cookie("Language");
	
	if (lang) mpGlobal.currentLanguage = lang;
	mpGlobal.currentHotel = dojo.query("html")[0].id;
	mpGlobal.currentPage = dojo.body().id;
	dojo.addClass(dojo.body(), "lang_"+mpGlobal.currentLanguage);

	// Create page

	console.debug("Current Hotel = [" + mpGlobal.currentHotel + "], Current Page = [" + mpGlobal.currentPage + "]");
	
	mpMain.CreatePage();


	// Google Analytics - depreciated

	/*
	try {
		pageTracker = _gat._getTracker("UA-10702995-4");
		pageTracker._trackPageview();
		console.log("Tracking with Google Analytics");
	} catch(err) {
		console.error(err);
	}
	*/

	// Add background music

	var item = dojo.byId("bgmusic");
	if (item) {
		setTimeout(function() {
			if (!dojo.isIE) {
				dojo.create("embed", {
					src: "../media/MinglePlace.mp3",
					AutoStart: "true",
					ShowStatusBar:"0",
					ShowControls: "0",
					ShowDisplay: "0",
					hidden: "true", 
					volume: "1",
					height: "1",
					width: "1",
					loop: "3"
				}, item);
			} else {
				dojo.create("bgsound", {
					src: "../media/MinglePlace.mp3",
					loop: "3"
				}, item);
			}
		}, 2000);
	}
});

/************************************************************************/
// Global parameters
/************************************************************************/

mpGlobal = 
{
	loadingMessage :	"<img src='../images/loading.gif' />",
	
	currentLanguage:	"en",
	currentHotel:			null,
	currentPage:			null,
	
	templateLoaded:		false,
	menuLoaded:				false,
	submenuLoaded:		false	
};


/************************************************************************/
// Load a new page
/************************************************************************/

mpMain =
{
	SelectCurrentLanguage: function(root, node)
	{
		// Remove all elements with a "lang" attribute which is not the current language

		var querystr = "[lang]";
		if (root) querystr = "#" + root + " " + querystr;
		
		dojo.query(querystr, node).forEach(function(ele) 
		{
			if (ele.tagName.toLowerCase() == "html") return;
			if (dojo.hasClass(ele, "language")) return;

			if (dojo.attr(ele, "lang") != mpGlobal.currentLanguage) {
				dojo.destroy(ele);
			} else {
				dojo.removeAttr(ele, "lang");
			}
		});
	},
	
	GetTextByCurrentLanguage: function(nodes)
	{
		var found = null;
		
		dojo.forEach(nodes.childNodes, function(div) 
		{
			if (!dojo.hasAttr(div, "lang")) return;
			if (dojo.attr(div, "lang") != mpGlobal.currentLanguage) return;
			found = div.innerHTML;
		});
		
		return found;
	},

	ChangeLanguage: function(lang)
	{
		lang = lang.toLowerCase();
		if (mpGlobal.currentLanguage.toLowerCase() == lang) return;

		if (dojo.doc.location.search.length > 1) {
			// Has search parameters -- Add/change lang=XXX parameter to the URL and reload
			var queryParams = dojo.queryToObject(dojo.doc.location.search.slice(1));
			queryParams["lang"] = lang;
			var url = dojo.objectToQuery(queryParams);
			if (url.length > 0) url = "?" + url;
			url = url + dojo.doc.location.hash;
			url = dojo.doc.location.protocol + "//" + dojo.doc.location.host + dojo.doc.location.pathname + url;

			console.log("Redirect to [" + url + "]")
			dojo.doc.location = url; 
		} else {
			// No search parameters --  Change the language stored in the cookie and simply reload
			dojo.cookie("Language", lang, { expires: 365 });
			dojo.doc.location.reload();
		}
	},

	CreatePage: function()
	{
		mpGlobal.templateLoaded = false;
		mpGlobal.menuLoaded = false;
		mpGlobal.submenuLoaded = false;

		mpMain.SelectCurrentLanguage();

		// Load the template

		var frame = dijit.byId("frame");
		frame.onDownloadEnd = function() 
		{
			mpMain.SelectCurrentLanguage("frame");

			// Update the menu

			var menu = dijit.byId("menu");
			menu.onDownloadEnd = function()
			{
				mpMain.SelectCurrentLanguage("menu");

				// Mark the current menu
				dojo.forEach(menu.domNode.childNodes, function(item) {
					if (!dojo.hasAttr(item, "menugroup")) return;
					var menugroup = dojo.attr(item, "menugroup");
					if (mpGlobal.currentPage.substring(0, menugroup.length) != menugroup) return;
					dojo.addClass(item, "current");
					dojo.removeAttr(item, "href");
				});

				mpGlobal.menuLoaded = true;
			};
			menu.loadingMessage = mpGlobal.loadingMessage;
			menu.set("href", "menu_" + mpGlobal.currentLanguage + ".html");

			// Update the submenu

			var submenu = dijit.byId("submenu_template");
			if (submenu) {
				submenu.onDownloadEnd = function()
				{
					mpMain.SelectCurrentLanguage("submenu_template");

					// Process the submenus

					for (var x = 1; x <= 5; x++) {
						var submenuitem = dojo.byId("submenuitem" + x);
						if (!submenuitem) continue;
						
						var submenu = dojo.byId("submenu" + x);
						if (!submenu) continue;
						
						dojo.place(submenuitem, submenu);
						dojo.addClass(submenu, "submenuitem");

						// Highlight the current one
						
						if (dojo.hasAttr(submenuitem, "menugroup")) {
							var submenugroup = "_" + dojo.attr(submenuitem, "menugroup");
							if (mpGlobal.currentPage.substring(mpGlobal.currentPage.length - submenugroup.length) == submenugroup) {
								dojo.addClass(submenu, "current");
								dojo.removeAttr(submenuitem, "href");
							}
						}
					}
					
					// Process the small submenus
					
					for (var x = 1; x <= 8; x++) {
						var submenuright = dojo.byId("submenuright" + x);
						if (!submenuright) continue;

						var submenurightitem = dojo.byId("submenurightitem" + x);
						if (!submenurightitem) {
							dojo.destroy(submenuright);
							continue;
						}
						
						dojo.place(submenurightitem, submenuright);

						// Highlight the current one

						if (dojo.hasAttr(submenurightitem, "menugroup")) {
							var submenurightgroup = "_" + dojo.attr(submenurightitem, "menugroup");
							if (mpGlobal.currentPage.substring(mpGlobal.currentPage.length - submenurightgroup.length) == submenurightgroup) {
								dojo.addClass(submenuright, "current");
								dojo.removeAttr(submenurightitem, "href");
							}
						}
					}
					
					this.destroy();
					mpGlobal.submenuLoaded = true;
				};
				
				var src = submenu.domNode.innerHTML;
				submenu.set("href", src);
			}

			// Update the language icons
			
			dojo.query("#languages .language").forEach(function(ele) {
				if (!dojo.hasAttr(ele, "lang")) return;
				var lang = dojo.attr(ele, "lang");
				if (lang == mpGlobal.currentLanguage) {
					dojo.addClass(ele, "current");
					dojo.removeAttr(ele, "title");
					dojo.removeAttr(ele, "href");
				}
			});
			
			// Update the writeup

			var writeup = dojo.byId("text_writeup");
			if (writeup) {
				dojo.place(writeup, dojo.byId("writeuptext"));
				dojo.style(writeup, "visibility", "");
			} else {
				dojo.byId("writeuptext").innerHTML = "";
			}
			
			// Update the details columns

			if (dojo.byId("detailscolumns")) {
				var detailsleft = dojo.byId("text_details_left");
				if (detailsleft) {
					dojo.place(detailsleft, dojo.byId("detailsleft"));
					dojo.style(detailsleft, "visibility", "");
				} else {
					dojo.byId("detailsleft").innerHTML = "";
				}
				var detailsright = dojo.byId("text_details_right");
				if (detailsright) {
					dojo.place(detailsright, dojo.byId("detailsright"));
					dojo.style(detailsright, "visibility", "");
				} else {
					dojo.byId("detailsright").innerHTML = "";
				}
			}

			// Update pictures
			
			dojo.style("logo", "backgroundImage", "url(images/logo.jpg)");
			dojo.style("picture", "backgroundImage", "url(images/pic_" + mpGlobal.currentPage + ".jpg)");
			dojo.style("detailspicturesleft", "backgroundImage", "url(images/pic_" + mpGlobal.currentPage + "_left.jpg)");
			dojo.style("detailspicturesright", "backgroundImage", "url(images/pic_" + mpGlobal.currentPage + "_right.jpg)");
	
			// Do ad hoc processing of all elements

			var elelist = dojo.byId("process_elements");
			if (elelist) {
				dojo.forEach(elelist.childNodes, function(ele) {
					if (!dojo.hasAttr(ele, "elementid")) return;
					if (!dojo.hasAttr(ele, "prop")) return;
					var eleID = dojo.attr(ele, "elementid");
					var propName = dojo.attr(ele, "prop").toLowerCase();
					
					switch (propName) {
						case "id": 
						case "elementid": { break; }
						default: { dojo.attr(eleID, propName, ele.innerHTML); break; }
					}
				});
				
				dojo.destroy(elelist);
			}

			mpGlobal.templateLoaded = true;
		};
		frame.loadingMessage = mpGlobal.loadingMessage;
		frame.set("href", "template.html");
	}
};
