﻿/**
* @author giuseppe
*/

page = new Object();
page._x_sizeA = 1280;
page._y_sizeA = 840;
page._x_sizeB = 1024;
page._y_sizeB = 659;
//default value
page.shop_draggable_opacity = '0.95';
page.window_x_size = page._x_sizeB;
page.window_y_size = page._y_sizeB;
page.current_clicked = null;
page.current_selected = null;
page.first_time = true;
page.default_page = (NETJOHNHENRY.getQueryString('page') == '') ? page.default_page : NETJOHNHENRY.getQueryString('page');
page.ssl_registered_url = '';
page.content_url = '';
page.is_ssl_forced = '';
page.landing_shop_page = NETJOHNHENRY.getQueryString('shop_page');

page.image__template = {
	filename: '',
	name: '',
	i: new Image()
};
page.images = new Array();
page.current_image = 'b';
page.current_image_index = 0;
page.is_regenerating = 'true';
page.image_loading_timeout = null;
page.image_loading_timeout_time = 9000;
page.image_effect_time = 2000;
page.image_is_transitioning = false;
page.current_clicked_type = null;
page.sitemap_folder_path = 'http://cms5.jhadmin.net/exported/lanesborough/';

page.init = function() {
	//Getting shop config values
	page.ssl_registered_url = document.getElementById('ssl_registered_url').value;
	page.content_url = document.getElementById('content_url').value;
	page.is_ssl_forced = document.getElementById('is_ssl_forced').value;


	window.onresize = this.onresize;
	window.onresize();
	window.onscroll = this.onscroll;
	NETJOHNHENRY.Ajax.load({
		url: '/lanesborough.partials.aspx?xml_folder_path=' + page.sitemap_folder_path + '&output_file=sitemap.xml&xsl_path=' + location.protocol + '//' + page.content_url + '/xslt/sitemap.xsl&is_regenerating=' + page.is_regenerating,
		onloadfunction: page.sitemapLoaded
	});
	NETJOHNHENRY.Ajax.start_navigating_by_ajax({
		file_extension: '.xml',
		urlconstructfunction: page.urlconstructfunction,
		onloadfunction: page.xmlLoaded,
		onchangefunction: page.findOwnMenu,
		default_page: page.default_page
	});
	page.startDraggable();
	page.startDraggable('shop_');


	page.return_to_shop = document.getElementById('return_to_shop');
	page.return_to_shop.style.left = NETJOHNHENRY.XY.getCoordinateX(document.getElementById('navigation_1a')) + 'px';
	page.return_to_shop.onclick = page.displayShop;

	if (document.getElementById("shop_iframe").src.indexOf('default.aspx?status=0') < 0) {
		page.closeShopOpenDraggable(false);
	}

	var main_menu = document.getElementById('navigation_1a');
	var myFx = new Fx.Style(main_menu.id, 'opacity').set(0); //will make it immediately transparent	
	var myFx = new Fx.Style(document.getElementById('bottom').id, 'opacity').set(0.7); //will make it immediately transparent		
	var myFx = new Fx.Style(document.getElementById('draggable__target').id, 'opacity').set(0.9); //will make it immediately transparent
	var myFx = new Fx.Style(document.getElementById('draggable__handle').id, 'opacity').set(0.7); //will make it immediately transparent	

	//var myFx = new Fx.Style(document.getElementById('shop_draggable__target').id, 'opacity').set(page.shop_draggable_opacity); //will make it immediately transparent
	//var myFx = new Fx.Style(document.getElementById('shop_draggable__handle').id, 'opacity').set(0.7); //will make it immediately transparent
	document.getElementById('shop_draggable__target').style.opacity = page.shop_draggable_opacity;
	document.getElementById('shop_draggable__handle').style.opacity = 0.7;
	
	page.navigation_2__apply_mouseevents();

}

page.setFullOpacity = function(object_id) {
	var myFx = new Fx.Style(object_id, 'opacity').set(1);
}
page.setShopOpacity = function(object_id) {
	var myFx = new Fx.Style(object_id, 'opacity').set(page.shop_draggable_opacity);
}
page.urlconstructfunction = function(pagename) {
	//Used by NETJOHNHENRY.Ajax.start_navigating_by_ajax to construct the url where to find the partials generator.	
	// the path could be passed as full path #the_residence/guestrooms
	// or #guestrooms, the following lines split the pagename before creating the final url.
	var path = pagename.split('/');
	pagename = path[path.length - 1];
	return '/lanesborough.partials.aspx?is_regenerating=' + page.is_regenerating + '&output_file=' + escape(pagename) + '.xml&xsl_path=' + location.protocol + '//' + page.content_url + '/xslt/page.xsl';
}

page.sitemapLoaded = function(xmlobj) {
	//Sitemap loaded, split it into top navigation an bottom one	
	xmlobj = arguments[0].responseXML;
	var contentPattern = '//sitemap/branch';
	var contentIterator = NETJOHNHENRY.Document.evaluate(contentPattern, xmlobj, null, 0, null);
	var branch;

	var main_menu = document.getElementById('navigation_1a');


	while (branch = contentIterator.iterateNext()) {
		//top and bottom navigation a and b
		switch (branch.attributes['type'].value) {
			case 'a':
				document.getElementById('navigation_1a').innerHTML = branch.textContent;
				break;
			case 'b':
				document.getElementById('navigation_1b').innerHTML = branch.textContent;
				break;
		}
	}
	var myFx = new Fx.Style(main_menu.id, 'opacity', {
		duration: 800
	}).start(0, 0.8); //display a transition from transparent to opaque.
}

//This function is called by NETJOHNHENRY.Ajax.start_navigating_by_ajax once a the content of a new page is loaded.
page.xmlLoaded = function(xmlobj) {

    var xmlobj = arguments[0].responseXML;
    var contentPattern = '//page/contents';
    var contentIterator = NETJOHNHENRY.Document.evaluate(contentPattern, xmlobj, null, 0, null);
    var content = contentIterator.iterateNext();
    var draggable = document.getElementById('draggable');
    var draggable__target = document.getElementById('draggable__target');

    //The following function will check if the page requested is a nav_1 type and won't display its content	
    page.closeShopOpenDraggable(true);
    page.first_time = false;
    //we want to update the content of the draggable only when the loaded content doesn't belong to a '1a' type navigation.	
    if (page.current_clicked_type != '1a') {
        var c = content.textContent;
        /*var re = new RegExp(/<h1>\s*(\w)([^<]+)<\/h1>/);
        var m = re.exec(c);
        if(m != null){
        var finalTitle = '<h1><span class="firstLetter">&nbsp;' + m[1]+'</span><span class="otherLetters">'+m[2]+'</span></h1>';
        c = c.replace(m[0],finalTitle);
        }*/
        document.getElementById('main__content').innerHTML = c;
        //applying sifr text.


        FlashDetector.initialize();
        if (FlashDetector.version >= 6) {
            if (typeof sIFR == "function") {
                sIFR.bHideBrowserText = true;
                sIFR.setup();
                sIFR.replaceElement("h1", named({ sFlashSrc: "flash/TimesNewRoman.swf", sColor: "#000", sWmode: "transparent", nPaddingTop: 0, nPaddingBottom: 0, sFlashVars: "textalign=left&offsetTop=0" }));
            };
        }


        var myFx = new Fx.Style(document.getElementById('draggable__target').id, 'opacity').set(0.9); //will make it immediately transparent			        




        //called by the ajax set by the onchangefunction parameters
        //page.findOwnMenu();					

        var imagePattern = '//page/extras/images/image';
        var imagesIterator = NETJOHNHENRY.Document.evaluate(imagePattern, xmlobj, null, 0, null);
        var images;
        page.images = new Array();
        while (images = imagesIterator.iterateNext()) {
            page.images.push({
                filename: images.attributes['filename'].value//,
                //caption: images.attributes['caption'].value			
            });
        }
        //we have changed the page.images array so we want to clear any loadImages action that	
        //was set a timeout
        if (page.image_loading_timeout) {
            clearTimeout(page.image_loading_timeout)
        };
        if (page.images.length > 0) {
            page.current_image_index = -1;
            page.loadImages();
        }


        var metaPattern = '//page/extras/metatags';
        var metaIterator = NETJOHNHENRY.Document.evaluate(metaPattern, xmlobj, null, 0, null);
        var metaContent = metaIterator.iterateNext();
        var r = RegExp(/\<meta\s+name\s*=\s*\"title\"\s+content=\s*\"([^\"]+)\"\s*\/?\>/);
        var matches = r.exec(metaContent.textContent);
        if (matches.length > 1) {
            document.title = matches[1];
        }




    }
}


//loading images 
page.loadImages = function(imagelist, is_leaving_shop_open) {

	//NOTE: imagelist parameter is passed by the shop to load product images
	//The current page navigation works without the imagelist parameter

	//note if there is already a transition taking place we want to set a time out to load the new image
	if (page.image_is_transitioning) {
		console.log('trans');
		if (page.image_loading_timeout) {
			clearTimeout(page.image_loading_timeout);
		}
		page.image_loading_timeout = setTimeout
		(
				function() {
					//using closure
					page.loadImages(imagelist, is_leaving_shop_open);
					parameters = null;
				},
				parseInt(page.image_effect_time * 1.5)
		);
	}
	else {
		//console.log('typeof(imagelist) ' + typeof(imagelist));
		if (typeof (imagelist) == 'object') {

			page.images = imagelist;
			page.current_image_index = 0;
			if (!is_leaving_shop_open) {
				document.getElementById('shop_draggable').style.display = 'none';
				document.getElementById('return_to_shop').style.display = 'block';
			}
		}

		console.log('no trans');
		//loading the next image in the image list in an Image object.
		var i = new Image();
		var i_name;
		page.current_image_index = (++page.current_image_index >= page.images.length) ? 0 : page.current_image_index;
		//if links get clicked very quickly we may end up in a situation where a 
		//loadImages() is fired from a setTimeout and actually the page.images is an empty array.

		//when the image has loaded we want it to replace it with the current showing.		
		i.onload = function() {
			//we are starting the transition process
			//we want to lock the possibility of having any other image to start loading
			page.image_is_transitioning = true;
			var old_img;
			var img_type = page.current_image == 'a' ? 'b' : 'a';
			var img_id = 'image_' + img_type;
			var img;
			//if the image tag doesn't exist we are creating one.
			if (!(img = document.getElementById(img_id))) {
				var images = document.getElementById('images');
				var image_element = new Element('img');
				image_element.id = img_id;
				images.appendChild(image_element);
				img = document.getElementById(img_id);
			};
			//setting the image with lower zIndex to be transparent
			//then bringing it up and start a transition
			img.style.display = "block";
			var myFx = new Fx.Style(img.id, 'opacity').set(0); //will make it immediately transparent				
			img.src = i.src;

			//due to a problem with IE messing about the fading and image swapping I'm adding a timeout.			
			var fadein = function(img, old_img) {
				clearTimeout(page.image_src_changed_timeout);

				img.style.zIndex = 3;
				if (old_img = document.getElementById('image_' + page.current_image)) {
					old_img.style.zIndex = 2;
				}
				//display a transition from transparent to opaque.	
				var myFx = new Fx.Style(img.id, 'opacity', {
					duration: page.image_effect_time
				}).start(0, 1);


				//we want to know if there is a transition going on.
				myFx.addEvent('onComplete', function() {
					page.image_is_transitioning = false;
				});

				page.current_image = img_type;

				if (page.images.length > 1) {
					page.image_loading_timeout = setTimeout(page.loadImages, page.image_loading_timeout_time);
				}
			}
			//due to a problem with IE messing about the fading and image swapping I'm adding a timeout.
			page.image_src_changed_timeout = setTimeout(
				function() {
					fadein(img, old_img)
				},
				500);
			}
		
		//The following try catch should prevent it to generate an error.
		try {
			console.log(page.images[page.current_image_index]);
			i_name = page.images[page.current_image_index];
			i.src = '/images/' + page.window_x_size + '/' + i_name.filename;
		}
		catch (e) {
			console.log(e);
			return;
		}
	}
}

page.getLocationArray = function() {
	//we don't own control over the address bar so let it handle gracefully in a try catch	
	try {
		return location.href.split('#')[1].split('/');
	}
	catch (e) {
		return page.default_page.split('/');
	}
}
page.findOwnMenu = function() {
	/*	try{*/
	if (page.current_clicked_type == '1a') {
		return;
	}
	var location_array = page.getLocationArray();
	try {
		page.current_selected.className = 'off';
	}
	catch (e) {
	}
	page.current_selected = document.getElementById('nav_1a.li.node_of::' + location_array[0] + '::') || document.getElementById('nav_1b.li.node_of::' + location_array[0] + '::');
	try {
		page.current_selected.className = 'on'
	}
	catch (e) {
	};
	page.copyMenuIntoDraggable(location_array);

	/*	}catch(e){
	try {console.log(e);}catch(e){}
	}
	*/
}
page.copyMenuIntoDraggable = function(location_array) {

	var cleanup_node = function(params) {
		//called from NETJOHNHENRY.dom.recurseAllChildNodesWithDelegate
		var replace_duplicated_ids = function(params) {
			if (params.currentNode.id != '') {
				params.currentNode.id = 'duplicate.' + params.currentNode.id;
			}
			return params;
		}
		var expand_3rd_menu = function(params) {
			var node_id_A = 'duplicate.nav_1a.nav_2a.nav_3a.node_of::' + location_array[0] + '__' + location_array[1] + '::';
			var node_id_B = 'duplicate.nav_1b.nav_2a.nav_3a.node_of::' + location_array[0] + '__' + location_array[1] + '::';
			if (params.currentNode.id == node_id_A || params.currentNode.id == node_id_B) {
				params.currentNode.className = 'navigation_3a_expanded';
			}
			return params;
		}
		var applyExpandFunctionality = function(params) {
			if (params.currentNode.tagName == 'a') {
				params.currentNode.onclick = page.expandSecondNavigationMenu;
			}
			return params;
		}

		if (params && params.currentNode) {
			params = replace_duplicated_ids(params);
			if (params.is_applying_expand_functionality) {
				params = applyExpandFunctionality(params);
			}
			if (params.is_expanding_3rd_menu) {
				params = expand_3rd_menu(params);
			}
		}
	}

	try {

		var node;

		if (location_array.length == 1) {
			node = (document.getElementById('nav_1a.container_of_nav_2a.node_of::' + location_array[0] + '::') || document.getElementById('nav_1b.container_of_nav_2a.node_of::' + location_array[0] + '::'));
			node = node.cloneNode(true);
			//cleaning up the node	
			node = NETJOHNHENRY.dom.recurseAllChildNodesWithDelegate(node, page, cleanup_node, {});
			var newNode = node.childNodes[0];
		}
		if (location_array.length == 2 || location_array.length == 3) {
			node = (document.getElementById('nav_1a.nav_2a.nav_3a.node_of::' + location_array[0] + '__' + location_array[1] + '::') || document.getElementById('nav_1b.container_of_nav_2a.node_of::' + location_array[0] + '::'));
			node = node.cloneNode(true);
			node.className = 'navigation_3a_expanded';
			//cleaning up the node	
			node = NETJOHNHENRY.dom.recurseAllChildNodesWithDelegate(node, page, cleanup_node, {
				is_applying_expand_functionality: false,
				is_expanding_3rd_menu: false
			});
			var newNode = node;
		}
		document.getElementById('main__navigation__caption').style.display = 'block';
		document.getElementById('main__navigation').replaceChild(newNode, document.getElementById('main__navigation').childNodes[0]);
		//the following line fixes a problem with Firefox where it caches the underline of previous selected <a/>
		document.getElementById('main__navigation').innerHTML = document.getElementById('main__navigation').innerHTML;
		document.getElementById('main__navigation').style.display = 'block';
		try {
			//#node: here we are adding the underline to the link
			//NETJOHNHENRY.dom.recurseAllChildNodesWithDelegate(document.getElementById('main__navigation'), page, {});
			var a = document.getElementsByName(location_array[location_array.length - 1])[1];
			a.className = 'on';
		}
		catch (e) {
		}


		//document.getElementById('main__navigation').replaceChild(node.childNodes[0], document.getElementById('main__navigation').childNodes[0]);							
	}
	catch (e) {
		//#note: we are putting an empty div inside the main__navigation otherwise next time we run the node.replaceChild there would be no child to replace and would fail.
		document.getElementById('main__navigation').innerHTML = '<div>&nbsp;</div>';
		document.getElementById('main__navigation').style.display = 'none';
		document.getElementById('main__navigation__caption').style.display = 'none';
	}
}



page.nav_1a__click = function(sender) {
	try {
		if (page.current_selected != page.current_clicked) {
			page.current_clicked.className = 'off';
		}
	}
	catch (e) {
	}
	page.current_clicked = sender.parentNode;
	page.current_clicked_type = '1a';
	page.openMenu();
}
page.nav_1b__click = function(sender) {
	page.current_clicked_type = '1b';
}
//second level navigation click event
page.nav_2__click = function() {
	page.current_clicked_type = '2a';
	var menu = document.getElementById('container__navigation_2a');
	if (menu.style.display == 'block') {
		page.closeMenu();
	}
}
//third level navigation click event
page.nav_3__click = function(s) {
	page.current_clicked_type = '3a';
}


//Opening second level navigation menu.
page.openMenu = function() {
	var location_array = new Array(page.current_clicked.id.split('::')[1]);
	var menu_container = document.getElementById('container__navigation_2a');
	if (menu_container.style.display == 'block' && menu_container.style.visibility == 'visible' && (document.getElementById('duplicate_2.nav_1a.nav2a.node_of::' + location_array[0] + '::') != undefined)) {
		page.closeMenu();
		return;
	}
	page.current_clicked.className = 'over';
	var cleanup_node = function(params) {
		//called from NETJOHNHENRY.dom.recurseAllChildNodesWithDelegate
		var replace_duplicated_ids = function(params) {
			if (params.currentNode.id != '') {
				params.currentNode.id = 'duplicate_2.' + params.currentNode.id;
			}
			return params;
		}
		if (params && params.currentNode) {
			params = replace_duplicated_ids(params);
		}
	}

	try {
		var node = document.getElementById('nav_1a.container_of_nav_2a.node_of::' + location_array[0] + '::');
		node = node.cloneNode(true);
		//cleaning up the node	
		node = NETJOHNHENRY.dom.recurseAllChildNodesWithDelegate(node, page, cleanup_node, {});

		document.getElementById('navigation_2a').replaceChild(node.childNodes[0], document.getElementById('navigation_2a').childNodes[0]);
		if (document.getElementById('nav_1a.description.node_of::' + location_array[0] + '::') != undefined) {
			document.getElementById('navigation_2__description').innerHTML = document.getElementById('nav_1a.description.node_of::' + location_array[0] + '::').innerHTML;
		}
		else {
			document.getElementById('navigation_2__description').innerHTML = '';
		}

		menu_container.style.left = NETJOHNHENRY.XY.getCoordinateX(page.current_clicked) + 'px';
		menu_container.style.display = 'block';
		var myFx = new Fx.Style(menu_container.id, 'opacity').set(0); //will make it immediately transparent		
		var myFx = new Fx.Style(menu_container.id, 'opacity', {
			duration: 500
		}).start(0, 0.8); //display a transition from transparent to opaque.		
	}
	catch (e) {
		//alert(e);
		console.log(e);
		//#note: we are putting an empty div inside the main__navigation otherwise next time we run the node.replaceChild there would be no child to replace and would fail.
		document.getElementById('navigation_2a').innerHTML = '<div>&nbsp;</div>';
		var myFx = new Fx.Style(menu_container.id, 'opacity').set(0); //will make it immediately transparent			    
	}

}
//Closing second level navigation menu.
page.closeMenu = function() {
	var menu_container = document.getElementById('container__navigation_2a');
	if (menu_container.style.opacity != '0') {
		var myFx = new Fx.Style(menu_container.id, 'opacity', {
			duration: 200
		}).start(0.8, 0); //display a transition from transparent to opaque.	
	}
}
page.onresize = function() {
	//What to do when the window size changes.	
	var applyResize = function(size_name) {
		var menu_container = document.getElementById('container__navigation_2a');
		menu_container.style.display = 'none';
		var myFx = new Fx.Style(menu_container.id, 'opacity').set(0); //will make it immediately transparent			
		menu_container.style.display = 'block';
		page.window_x_size = page['_x_' + size_name];
		page.window_y_size = page['_y_' + size_name];
		document.getElementById('container').className = size_name;
		try {
			document.getElementById('image_a').className = size_name;
		}
		catch (e) {
		};
		try {
			document.getElementById('image_b').className = size_name;
		}
		catch (e) {
		};
		//document.getElementById('container').style.width = window.innerWidth + 'px';
		try {
			page.return_to_shop.style.left = NETJOHNHENRY.XY.getCoordinateX(document.getElementById('navigation_1a')) + 'px';
			document.getElementById('shop_draggable').style.left = NETJOHNHENRY.XY.getCoordinateX(document.getElementById('navigation_1a')) + 'px';
		} catch (e) { }
	};

	var size;

	if (NETJOHNHENRY.Window.innerWidth() < (page._x_sizeA * 0.9) || NETJOHNHENRY.Window.innerHeight() < (page._y_sizeA * 0.9)) {
		applyResize('sizeB');
		size = page._y_sizeB;
	}
	else {
		applyResize('sizeA');
		size = page._y_sizeA;
	}


	if (NETJOHNHENRY.Window.innerHeight() >= size) {
		document.getElementById('bottom').style.bottom = '0px';
	}
	else {
		var newBottom = (size - NETJOHNHENRY.Window.innerHeight()) - (NETJOHNHENRY.Window.pageYOffset() ? NETJOHNHENRY.Window.pageYOffset() : 0);
		document.getElementById('bottom').style.bottom = newBottom + 'px';
	}
}
page.onscroll = page.onresize;
page.navigation_2__apply_mouseevents = function() {
	var n = document.getElementById('container__navigation_2a');
	var status = 0; // 1 | 0 = open | close
	var close_timeout;
	n.onmouseover = function() {
		clearTimeout(close_timeout);
		status = 1;
	}
	n.onmouseout = function() {
		if (n.style.display == 'none') {
			return;
		}
		var closeMenu = function() {
			console.log("out " + status);
			if (status == 0) {
				page.closeMenu();
			}
		}
		status = 0;
		clearTimeout(close_timeout);
		close_timeout = setTimeout(closeMenu, 200);
	}
}
page.displayShop = function() {
	document.getElementById('shop_draggable').style.display = 'block';
	page.return_to_shop.style.display = 'none';
}
page.closeShopOpenDraggable = function(is_closing, params) {
	if (is_closing) {

		if ((!(page.first_time) || (location.href.indexOf('#') > 0)) && (page.current_clicked_type != '1a') || NETJOHNHENRY.getQueryString('page') != undefined && NETJOHNHENRY.getQueryString('page').split('/').length >= 2) {
			page.return_to_shop.style.display = 'none';
			document.getElementById('shop_draggable').style.display = 'none';
			document.getElementById('draggable').style.display = 'block';
		}
	} else {
		document.getElementById('shop_draggable').style.display = 'block';
		document.getElementById('return_to_shop').style.display = 'none';
		document.getElementById('draggable').style.display = 'none';

		try {
			page.open_shop_function();
		} catch (e) { }

		try {
			//Note: params is an object passed by the Shop button in the bottom navigation and has the reload parameter set to true.
			//this will force the iframe to reload the default page.
			if (params.reload) {
				var iframe = document.getElementById('shop_iframe');
				iframe.src = '/default.aspx';

			}
		} catch (e) { }

	}

}

page.startDraggable = function(draggable_type) {
	draggable_type = draggable_type ? draggable_type : '';
	//set up window to be draggable	
	var draggable = document.getElementById(draggable_type + 'draggable');
	var handle = document.getElementById(draggable_type + 'draggable__handle');
	var draggable__close = document.getElementById(draggable_type + 'draggable__close');
	var draggable__minimize = document.getElementById(draggable_type + 'draggable__minimize');
	var draggable__target = document.getElementById(draggable_type + 'draggable__target');
	//331 is the height of the draggable_target, 80 is a rough figure from the bottom
	if (draggable_type == '') {
		NETJOHNHENRY.Drag.top = parseInt((page.window_y_size - 301) - 230) + 'px';
	} else {
		NETJOHNHENRY.Drag.top = '36px';
	}

	NETJOHNHENRY.Drag.left = NETJOHNHENRY.XY.getCoordinateX(document.getElementById('navigation_1a')) + 'px';
	NETJOHNHENRY.Drag.init(handle, draggable);

	draggable__minimize.onclick = function() {

		draggable__target.style.display = draggable__target.style.display == 'none' ? 'block' : 'none';
		this.className = (this.className.indexOf('minimize') >= 0) ? 'maximize_over' : 'minimize_over';
	}
	draggable__close.onclick = function() {
		draggable.style.display = 'none';
	}

	var fade_status = 0;
	var fade_timeout;

	draggable.onDrag = function() {
		// Note: the onDragEnd event is fired even when no real dragging occurrs (ie. draggable__minimize or draggable__maximize is clicked
		// This behaviour caused a problem therefore the introduction of the draggable__target.isDragEntered flag to check if it the event 
		// is fired from an authentic drag or just a click.
		draggable__target.isDragEntered = true;
		if (draggable__target.style.display != 'none') {
			draggable__minimize.onclick();
		}
	}
	draggable.onDragEnd = function() {
		// Note: the onDragEnd event is fired even when no real dragging occurrs (ie. draggable__minimize or draggable__maximize is clicked
		// This behaviour caused a problem therefore the introduction of the draggable__target.isDragEntered flag to check if it the event 
		// is fired from an authentic drag or just a click.		
		if (draggable__target.isDragEntered) {
			draggable__target.isDragEntered = false;
			/*if (draggable__target.style.display != 'block') 
			{*/
			draggable__minimize.onclick();
			/*}*/
			//draggable__target.style.display = 'block';
			//console.log('dragend');
		}
	}
	handle.onmouseover = function() {
		{//handling the buttons inside this node
			var draggable__minimize = document.getElementById(draggable_type + 'draggable__minimize');
			draggable__minimize.className += draggable__minimize.className.indexOf('_over') < 0 ? '_over' : '';
		}
		/*var fade_down = function()
		{
		fade_status = 1;
		draggable__target.style.display = 'none';
		var myFx = new Fx.Style(draggable__target.id, 'opacity').set(0.0); //will make it immediately transparent
		}
		if (fade_status == 1) 
		{
		clearTimeout(fade_timeout);
		}
		else 
		{
		clearTimeout(fade_timeout);
		fade_timeout = setTimeout(fade_down, 100);
		}*/
	}
	handle.onmouseout = function() {

		{//handling the buttons inside this node
			var draggable__minimize = document.getElementById(draggable_type + 'draggable__minimize');
			draggable__minimize.className = draggable__minimize.className.indexOf('_over') > 0 ? draggable__minimize.className.split('_over')[0] : draggable__minimize.className;
		}

		/*var fade_up = function()
		{
		var fade_value = 0.9;
		fade_status = 0;
		if(draggable__target.id.toString().indexOf('shop')>0){
		fade_value = page.shop_draggable_opacity;
		}
		var myFx = new Fx.Style(draggable__target.id, 'opacity').set(fade_value); //will make it immediately transparent
		draggable__target.style.display = 'block';
		}
		if (fade_status == 0) 
		{
		clearTimeout(fade_timeout);
			
		}
		else 
		{
		clearTimeout(fade_timeout);
		fade_timeout = setTimeout(fade_up, 50);
		}*/
	}
}
page.loadBookNow = function(sender) {
	menu_container = document.getElementById("book_now");
	if (menu_container.style.display == 'block' && menu_container.style.visibility == 'visible') {
		//alert('already open');
		page.closeBookNow();
	}
	else {

		menu_container.style.left = NETJOHNHENRY.XY.getCoordinateX(sender) + 'px';
		menu_container.style.display = 'block';
		var myFx = new Fx.Style(menu_container.id, 'opacity').set(0); //will make it immediately transparent		
		var myFx = new Fx.Style(menu_container.id, 'opacity', {
			duration: 500
		}).start(0, 0.8); //display a transition from transparent to opaque.				
	}

   }
   page.go_to_modify_reservation = function() {
   	window.open(page.modify_reservation_url);
   }
page.go_to_modify_reservation = function() {
	window.open(page.modify_reservation_url);
}
page.go_to_booking = function() {
	var arr_day = document.getElementById('arr_day')[document.getElementById('arr_day').selectedIndex].value;
	var arr_month = document.getElementById('arr_month')[document.getElementById('arr_month').selectedIndex].value;
	var arr_year = document.getElementById('arr_year')[document.getElementById('arr_year').selectedIndex].value;
	var length_of_stay = document.getElementById('nights')[document.getElementById('nights').selectedIndex].value;
	var arr_year = document.getElementById('arr_year')[document.getElementById('arr_year').selectedIndex].value;
	var adults = document.getElementById('adults')[document.getElementById('adults').selectedIndex].value;
	var children = document.getElementById('children')[document.getElementById('children').selectedIndex].value;


	if (page.validate_date(parseInt(arr_day, 10), parseInt(arr_month, 10), parseInt(arr_year, 10))) {
		//formatting the arrival date in the requested format
		var arrival_date = (arr_year + '-' + arr_month + '-' + arr_day);

		//creating a date object to add dates correctly in order to calculate the arrival date 	
		var temp_departure_date = new Date;
		temp_departure_date.setDate(arr_day);
		temp_departure_date.setMonth(arr_month - 1);
		temp_departure_date.setYear(arr_year);

		//adding the length of stay to the arrival date
		temp_departure_date.setDate(temp_departure_date.getDate() + parseInt(length_of_stay, 10));

		//formating the departure date
		//note that this does not correctly zero-pad the days and months
		//var departure_date = (temp_departure_date.getFullYear().toString() + '-' + (temp_departure_date.getMonth() + 1).toString() + '-' + temp_departure_date.getDate().toString());

		//formating the departure date, correctly zero-padded
		var dep_year = temp_departure_date.getFullYear().toString();
		var dep_month = (temp_departure_date.getMonth() + 1).toString();
		var dep_day = temp_departure_date.getDate().toString();
		var departure_date = dep_year + '-' + (dep_month.length == 1 ? '0' + dep_month : dep_month) + '-' + (dep_day.length == 1 ? '0' + dep_day : dep_day);

		//Declaring the final URL
		var url = page.book_now_url;
		url += '&departureDate=' + departure_date;
		url += '&arrivalDate=' + arrival_date;
		url += '&lengthOfStay=' + length_of_stay;
		url += '&propertyID=1435';
		url += '&requestedChainCode=XR';
		url += '&roomOccupancyTotal=1';
		url += '&numberOfRooms=1';
		url += '&numberOfAdults=' + adults;
		url += '&requestedAffiliationCode=XR';

		window.open(url);
	}

}
page.go_to_special_offer = function() {
	window.open(page.special_offer_link);
}
page.validate_date = function(day, month, year) {
	var date_evaluator = new Date;
	date_evaluator.setDate(day);
	date_evaluator.setMonth(month - 1);
	date_evaluator.setYear(year);

	if ((date_evaluator.getDate() == (day)) && (date_evaluator.getMonth() == (month - 1)) && (date_evaluator.getFullYear() == year)) {
		return true;
	}
	else {
		alert('The date combination you entered is invalid. for example November has 30 days only not 31.')
		return false;
	}
}
page.closeBookNow = function() {
	var menu_container = document.getElementById('book_now');
	if (menu_container.style.opacity != '0') {
		var myFx = new Fx.Style(menu_container.id, 'opacity', {
			duration: 200
		}).start(0.8, 0); //display a transition from transparent to opaque.	
	}
}

// Function that handles the reloading of the page and setting the HTTPS protocol
page.loadHTTPS = function(s) {

	if (location.protocol != 'https:' || NETJOHNHENRY.getQueryString('shop_page') != s) {

		var protocol = (eval(page.is_ssl_forced)) ? 'https://' : 'http://';
		location.href = protocol + page.ssl_registered_url + '/?shop_page=' + s;
	}
}

// Function that handles the reloading of the page if the protocol used is not http
page.unloadHTTPS = function(s) {

	if (location.protocol != 'http:' || NETJOHNHENRY.getQueryString('shop_page') != s) {
		location.href = 'http://' + page.ssl_registered_url + '/?shop_page=' + s;
	}
}
