d			= document;
dd_active	= false;
oDrop		= new Object;
oBody		= new Object;
iLayer		= new Object; // info layer
popup 		= new Object;
bookTimer	= 0;
bPagelayer	= false; // pagelayer visible?
IE6 		= (navigator.userAgent.indexOf("MSIE 6.0") != -1) ? true : false;
formdata 	= [];
aToday		= [];
today		= new Date();  
year		= today.getFullYear();
month		= today.getMonth();
galCur		= 0; // currently shown gallery entry
galItems	= Array(0); // Items in gallery
galIval		= -1; // interval for gallery slideshow
galSlide	= false; // gallery slideshow running?
xMouse		= 0; // mouse x-position
yMouse		= 0; // mouse y-position
oPageType	= new Object();
linkVar		= [];
ddscroll	= false; // if scroll in dropdown is active
// scroll values
bDrag		= false; // drag element
iVal		= 0;
clicked		= false;
refreshitv  = 600000;
refreshTime = 0;
hasInit     = false;
stopRefresh = false;
callLinkCnt	= 0;
curAutDD	= ""; // dropdowns outside booking module
var thisdomain = document.domain;
accordianEntry = ""; // keep track of selected entry
var autoRunSifr = true;
var pageLoaded = false;
var firstLoad = true;

$(function() {
	window.setInterval(function(){keepAlive();},refreshitv);
});

//Get cookie routine by Shelley Powers 
function get_cookie(Name) {
  var search = Name + "=";
  var returnvalue = "";
  if (document.cookie.length > 0) {
    offset = document.cookie.indexOf(search)
    // if cookie exists
    if (offset != -1) { 
      offset += search.length
      // set index of beginning of value
      end = document.cookie.indexOf(";", offset);
      // set index of end of cookie value
      if (end == -1) end = document.cookie.length;
      returnvalue=unescape(document.cookie.substring(offset, end))
      }
   }
  return returnvalue;
}


function pageCounter() {

	var co = getCookie("pageviews");
	if (isNaN(co)) {
		co = 1;
	} else {
		co++;
	}
	setCookie("pageviews", co, 0, "/");
}

function setCookie( name, value, expires, path, domain, secure ) 
{
   var today = new Date();
   today.setTime( today.getTime() );

   if ( expires )
   {
      expires = expires * 1000 * 60 * 60 * 24;
   }

    var expires_date = new Date( today.getTime() + (expires) );

    document.cookie = name + "=" +escape( value ) +
    ( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) + 
    ( ( path ) ? ";path=" + path : "" ) + 
    ( ( domain ) ? ";domain=" + domain : "" ) +
    ( ( secure ) ? ";secure" : "" );
}
// document.cookie = 'campaign=-1; expires=Fri, 3 Aug 2001 20:47:11 UTC;';

// this function gets the cookie, if it exists
function getCookie( name ) {
   var start = document.cookie.indexOf( name + "=" );
   var len = start + name.length + 1;
   if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {
      return null;
   }
   if ( start == -1 ) { return null; }

   var end = document.cookie.indexOf( ";", len );
   if ( end == -1 ) { end = document.cookie.length; }
   
   return unescape( document.cookie.substring( len, end ) );
}

function setPageCookie(name, value) {
   setCookie( name, value, 30, '/', thisdomain, '' );
}
function deletePageCookie(name) {
   deleteCookie( name, '/', thisdomain );
}

function keepAlive() {
	if(!stopRefresh) {
		refreshTime = refreshTime + refreshitv;
		jQuery.getJSON("/templates/ajax/refresh.aspx",{time: (refreshTime/1000)},function(jsonMessage, responseStatus){
			if(jsonMessage != null) {
				switch(String(jsonMessage.Action).toLowerCase()) {
					case "redirect":
						stopRefresh = true;
						window.location = jsonMessage.Message;
						break;
					case "clearsession":
						stopRefresh = true;
						$("#info-AlertWarningMessage").hide();
					case "clearsessionwarning":
						createInfoText("info-AlertMessage", jsonMessage.Message);
						showInfoLayer("AlertMessage", -1, -1, -1); //250,170,-1);
						break;
				}
				
				/*if(jsonMessage.Action == "redirect") {
					
				} else if(jsonMessage.Action == "clearsession") {
					stopRefresh = true;
					$("#info-AlertWarningMessage").hide();
					createInfoText("info-AlertMessage", jsonMessage.Message);
					showInfoLayer("AlertMessage", -1, -1, -1); //250,170,-1);
				} else if(jsonMessage.Action == "clearsessionwarning") {
					createInfoText("info-AlertWarningMessage", jsonMessage.Message);
					showInfoLayer("AlertWarningMessage", -1, -1, -1); //250,170,-1);
				}*/
	
			}
		}, "json");
	}
}

function createInfoText(textID, textMessage) {
	$("#infoLayer .content").append("<div id=" + textID + ">" + textMessage + "</div>");
}

function doOut(){}

function init() {

	if(hasInit) { return }
	hasInit = true;
	oBody	= d.getElementsByTagName("body")[0];

	d.onclick = checkmouse;
	d.onmousemove = getmouse;
//	d.onkeydown = checkkey;
//	d.onmouseup = mouseup;

	if (d.getElementById("comparebutton")) { fixsIFR("comparebutton"); }
	if (d.getElementById("confirmbutton")) { fixsIFR("confirmbutton"); }
	if (d.getElementById("searchbutton")) { fixsIFR("searchbutton"); }
	if (d.getElementById("backButton")) { fixsIFR("backButton"); }

	// get additional data from page
	if (typeof addData == "function") {
		addData();
	}
	// get current date if available
	if (d.forms["thisdate"]) {
		tmp = d.forms["thisdate"].today.value;
		aToday["day"] = parseInt(tmp.split("-")[2], 10);
		aToday["month"] = parseInt(tmp.split("-")[1], 10);
		aToday["year"] = parseInt(tmp.split("-")[0], 10);
	}
	
	// booking module
	/*if (d.getElementById("book")) {
		getForm('booking');
		if (d.getElementById("bookcontent")) {
			setBookingTransparency();
		}
	}*/
	
	if($("#book").length > 0) {
		getForm('booking');
		setBookingTransparency();
	}

	// dropdowns for selecting other destination
	if (d.getElementById("destselect")) {
		getForm('destselectform');
	}

	if (d.getElementById("tab-nav")) {
		setTabs();
	}

	pageCounter();

	// checkboxes for wishlist
	if (oPageType.className && oPageType.className == "sys-wishlist") {
//		initCheckCompare();
	}

	// check for scrollbars
	var myobj = d.getElementsByTagName("*");
	for (i=0; i<myobj.length; i++) {
		var o = myobj[i];
		var cn = (o)? String(o.className) : "";
		if (cn.indexOf("scrollContainer") != -1 && !/\bglScroll\b/.test(cn.className)) {
			initScroll(o);
		}
	}

	if ($("#infoLayer").length > 0) {
		iLayer = $("#infoLayer").get(0);
		initInfoLayer();
	}
	
	// add mouseover on dropdowns
	var oDrops = $(".dropdown").not(".r2");
	for (t=0; t<oDrops.length; t++) {
		//setDropdownMouse(oDrops[t]);
	}
//		setDropdownMouse(d.getElementById("dd-lastminute").parentNode.getElementsByTagName("div")[0]);


	// showing page in frame?
	if (self != top && d.getElementById("pageEnd")) {
		doIframe();
	}

	// set location of global search
	if(d.getElementById("globalSearch")) {
		posGlobalSearch();
	}

	// check confirm checkbox
	if (d.getElementById("confirmbox")) {
		userConfirmed = d.getElementById("confirmbox").childNodes[0].childNodes[0].checked;
	}


	// show rendered content
	if (d.getElementById("maintopwrap")) {
		d.getElementById("maintopwrap").style.visibility = "visible";
	}

	if( autoRunSifr && location.href.indexOf("nosifr") == -1 && typeof(doSifr) == "function"){
		doSifr();
	}
	
	// fix for pages not having sifr but still calls it
	if (typeof(doSifr) === "undefined") {
		doSifr = function(){};
	}
	// call inpage load
	if (typeof(init2) == "function") {
	    init2();
	}

	// make sure page has minimum height
	if (d.getElementById("pageEnd") && self == top) {
		checkPageHeight();
	}

	// facebook like
	if (d.getElementById("fb-root")) {
		doFacebook();
	}
	
	// readmore/readless
	/*
	$(".shortText").each(function() {
		alert($(".inner", this).height());
	
	});
	*/
	initFormKeys();
	
	inputKeyLimit();
	
	// init readmore elements
	initReadmore();
	
}


function inputKeyLimit() {

	// 8 = backspace
	// 9 = tab
	// 46 = delete
	// 32 = space
	// 37-40 = arrows
	
	
	$(".val-phoneNum").blur(function () {
		var newStr = "";
		var chars = [8,9,46,32,37,38,39,40,43,48,49,50,51,52,53,54,55,56,57];
		for (var t=0; t<$(this).val().length; t++) {
			if ($.inArray($(this).val().charCodeAt(t), chars) != -1) {
				newStr += $(this).val().substr(t,1);
			}
		}
		$(this).val(newStr);
		
	});
	
	$(".val-phoneNum").keypress(function (e) {
		var key = e.charCode || e.keyCode || 0;
		if (String.fromCharCode(key).match(/[^0-9+]/g) && !(key == 8 || key == 9 || key == 46 || key == 32 || (key >= 37 && key <= 40) )) {
			return false;
		}
	});
	
	$(".val-onlyNum").blur(function () {
		var newStr = "";
		var chars = [8,9,46,37,38,39,40,48,49,50,51,52,53,54,55,56,57];
		for (var t=0; t<$(this).val().length; t++) {
			if ($.inArray($(this).val().charCodeAt(t), chars) != -1) {
				newStr += $(this).val().substr(t,1);
			}
		}
		$(this).val(newStr);
	});
	
	$(".val-onlyNum").keypress(function (e) {
		var key = e.charCode || e.keyCode || 0;
		if (String.fromCharCode(key).match(/[^0-9]/g) && !(key == 8 || key == 9 || key == 46 || (key >= 37 && key <= 40) )) {
			return false;
		}

	});
	

}


function gup(name) {  
	name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	var regexS = "[\\?&]"+name+"=([^&#]*)";
	var regex = new RegExp(regexS);
	var results = regex.exec(window.location.href);
	if(results == null)
		return "";
	else
		return results[1];
}

function doResize() {
	if (d.getElementById("dim")) {
		setDimHeight();
		setDimWidth();
	}
	
	if (bPagelayer) {
		posPageLayer();
	}
	
	// set location of global search
	if(d.getElementById("globalSearch")) {
		posGlobalSearch();
	}

}

function mouseup() {

	clearInterval(iVal);
	enableSelection(oBody);

}

function callLink(nr) {
	d.location.href = linkVar[nr];
}


function fixsIFR(id) {
		callLinkCnt++;
		linkVar[callLinkCnt] = d.getElementById(id).getElementsByTagName("a")[0].href;
		d.getElementById(id).getElementsByTagName("a")[0].href = "javascript:callLink("+callLinkCnt+")";

}


function posGlobalSearch() {
	/*d.getElementById("globalSearch").style.top = getAbsTop(d.getElementById("searchLocation"))+"px";
	d.getElementById("globalSearch").style.left = getAbsLeft(d.getElementById("searchLocation"))+ 12 + "px";*/
}


function checkPageHeight() {
	// only do this on old pages
	if ($("body").attr("class") && $("body").attr("class").indexOf("pg-") == -1) {

		if ($("#mainwrap").length > 0) {
			$(".articleRight").css("display","none");
			$("#mainwrap ul.footerNav").css("zoom","0").css("zoom","1");
			d.getElementById("mainwrap").style.height = "auto";
			var minHeight = 480;

			var mainwrapHeight = d.getElementById("mainwrap").offsetHeight;
			var maintopwrapHeight = 0;
			if (d.getElementById("maintopwrap")) {
				maintopwrapHeight = d.getElementById("maintopwrap").offsetHeight;
			}
			
			// if main tabs doesn't exist, add tab-height as mainwrap will be located higher on screen
			if (!d.getElementById("tab-nav")) {
				minHeight += 59;
			}

			var mw = d.getElementById("mainwrap");
			if (mainwrapHeight + maintopwrapHeight < minHeight) {

				if( mw )
					mw.style.height = minHeight - maintopwrapHeight + "px";

					
			} else {
				if(firstLoad == false){
					mw.style.height = mainwrapHeight-100+"px";
				}
				firstLoad = false;
			}
			$(".articleRight").css("display","block");
		}
	}
}


function setBookingTransparency() {
	/*d.getElementById("book").onmouseover = function() { clearTimeout(bookTimer); d.getElementById("bookcontent").parentNode.className = "notrans"; }
	d.getElementById("book").onmouseout = function() { bookTimer = setTimeout("setBookingTrans()",1000); }*/
	
	
	var me = function() { $("#book .content-wrap .bg").fadeTo(250, 1); }
	var ml = function() { $("#book .content-wrap .bg").fadeTo(250, 0.7); }
	
	$(".sys-front #book").hover(me, ml).mouseleave();
}

/*function setBookingTrans() {
	clearTimeout(bookTimer);
	if (!dd_active) {
		d.getElementById("bookcontent").parentNode.className = "trans50";
	} else {
		setTimeout("setBookingTrans()",1000);
	}
}*/



/* form handler */
function getForm( frm ) {

	// new pages use a different child-indication
	if ($("body").attr("class") && $("body").is(".pg-front, .pg-campaign, .pg-bookstep1")) { /* $("body").attr("class").match(/\pg-/) */
		formdata["children"] = formdata["child"];
	}

	try {
	
	$(d.forms[frm]).each(function() {
		var $form = $(this)[0];
		var formElms = $form.elements;
		var formElmsCount = formElms.length;
		makeDates($form);
		
		//$($form.elements).each(function( i ) {
		for(var i=0; i < formElmsCount; i++) {
			var $formItem = $(formElms[i]);
			var $fiParent = $formItem.parent();
			var fdName = $formItem.attr("name");
			var fdVal = $formItem.val();
			var data = formdata[fdName.split("-")[0]];

			//alert(fdName +" :: "+ fdName.split("-")[0] +" :: "+ data);
			
			// Break the current loop if no data is found
			//if(!data) return true;
			
			switch( true ) {
				case $fiParent.hasClass("form-select"):
					var $dd = $("#"+ frm +"_"+ fdName);

					$("a:first", $dd).each(function() {
						var $fl = $(this);
						var hasDestFilter = (($form["destinationfilter"] && $form["destinationfilter"].value.indexOf(",") >= 0));
						
						var txt = (data)? data[0].text : "";
						var val = (data)? data[0].value : "";
						
						// if form value exist, use it
						if( fdVal != "" || hasDestFilter ) {
							if(fdName == "destination") {
								var destData = formdata["dest"];
								
								// list of specified items in list
								if (fdVal == "" && hasDestFilter) {
									var oFormdatatmp = getFilteredDestinations(destData, $form[0]);
									
									txt = oFormdatatmp[0].text;
									val = oFormdatatmp[0].value;
								} else {
									for (t=0; t < destData.length; t++) {
										var currDestData = destData[t];
										
										if (fdVal == currDestData.value) {
											txt = currDestData.text;
											val = currDestData.value;
											break;
										}
									}
								}
							} else if( data ) {
								// all other dropdowns have array-content to choose from
								for (t=0; t < data.length; t++) {
									var currData = data[t];
									
									if (fdVal == currData.value) {
										txt = currData.text;
										val = currData.value;
										break;
									}
								}
							}
						}
						
						$fl.html(txt).attr("title", txt);
						$formItem.val(val);

						if ($fiParent.hasClass("locked")) {
							$dd.html("<span>"+ $fl.html() +"</span>").addClass("locked").removeClass("dropdown");
						}
					});
					
					break;
				case $fiParent.hasClass("form-checkbox"):
					if( fdVal == 1 )
						$("#"+ frm +"_"+ fdName).addClass("checkbnOff").removeClass("checkbnOn");
						
					break;
					/*
				case $fiParent.hasClass("form-radio"):
					if($(".pg-front").length < 1) {
						try {
							var sel = d.getElementById(frm +"_"+ fdName +"_"+ fdVal);

							if(!sel) {
								sel = d.getElementById(frm +"_flighttype_package");
								$form["flighttype"].value = "package";
								switchRadio(sel.getElementsByTagName("a")[0]);
							}
		
							if (fdVal != "") {
								sel.className = replaceStr("radiobnOff","radiobnOn", sel.className);
							}

							// specific flighttype check
							if (sel.id.indexOf("flightonly") != -1 && sel.className.indexOf("radiobnOn") != -1) {
								d.getElementById(frm+"_destination").style.visibility = "hidden";
							}
							if (sel.id.indexOf("roundtrip") != -1 && sel.className.indexOf("radiobnOn") != -1) {
								d.getElementById(frm+"_duration").style.visibility = "hidden";
							}
							if (sel.id.indexOf("oneway") != -1 && sel.className.indexOf("radiobnOn") != -1) {
								d.getElementById(frm+"_duration").style.visibility = "hidden";
								d.getElementById(frm+"_destination").style.visibility = "hidden";
							}

						}catch(eex) {
						}
					} 
					break;
				*/
				case $fiParent.hasClass("form-input"):
					var id = frm +"_"+ fdName;

					var onInputChange = function( e ) {
						var $inp = $(this);
						var $fi = $inp.data("formItem");
						var change = $inp.data("changeaction");
						if( typeof(change) == "function" )
							change( $inp );
							
						$fi.val($inp.val());
					};
					
					$("form[name='aspnetForm'] input[name='"+ id +"_txt']:first").each(function() {
						var $inp = $(this)
									.val( fdVal )
									.attr("id", id)
									.data("nr", i)
									.data("formItem", $formItem)
									.change(onInputChange)
									.blur(onInputChange)
									.bind("validate", onInputChange);
									
									
						if( $inp.is("[name*='childrenage']")) {
							$inp.data("changeaction", correctChildrenAge);
						}
						
						$formItem
						.data("transferField", $inp)
						.bind("validate", function() { $($(this).data("transferField")).trigger("validate") })
					});

					if (fdName == "childrenage" && $("#book .child").length > 0) {
						showChildrenAge($form);
					}
					break;
				
				case $fiParent.hasClass("form-textarea"):
					var id = frm +"_"+ fdName;
										
					var onInputChange = function( e ) {
						var $inp = $(this);
						var $fi = $inp.data("formItem");
						var change = $inp.data("changeaction");
						if( typeof(change) == "function" )
							change( $inp );

						$fi.val($inp.val());
					};
					
					
					$("form[name='aspnetForm'] textarea[name='"+ id +"_txt']:first").each(function() {
						var $inp = $(this)
									.val( fdVal )
									.attr("id", id)
									.data("nr", i)
									.data("formItem", $formItem)
									.change(onInputChange)
									.blur(onInputChange)
									.bind("validate", onInputChange);
									
									
					  $formItem
						.data("transferField", $inp)
						.bind("validate", function() { $($(this).data("transferField")).trigger("validate") })
					});
					break;
			}
		}
		
	});
	
	} catch(ex) { 
	var msg = (typeof(ex) == "string")? ex : ex.message;
//	alert(msg)
	}
}


/*
function makeDropdown(obj, oFormdata) {
	var output = "";
	for (t=0; t<oFormdata.length; t++) {
		output+="<a href=\"javascript:alert('"+oFormdata[t].value+"')\">"+oFormdata[t].text+"</a>";
	}

	var oDrop = d.createElement("div");
	var nLength = oFormdata.length;

	// limit the height of dropdown and create scroll
	var act = "";
	if (oFormdata.length > 12) {
		act = "activeDropdownLimit";
	} else {
		act = "activeDropdown";
	}
	
	$("body").add("<div id=\""+act+"\">");
	$("#"+act).addClass("activedd").css({"z-index":999, "left":getAbsLeft(obj), "top":getAbsTop(obj) + obj.offsetHeight - 1, "width":obj.offsetWidth+1}).html(output);

}
*/

function setDropdown(oForm, elm) {
	var sel = d.getElementById(oForm.name+"_"+oForm[elm].name);
	var dataObj = formdata[oForm[elm].name.split("-")[0]];

	// if form value exist, use it
	if (oForm[elm].value != "") {
		for (t=0; t<dataObj.length; t++) {
			if (oForm[elm].value == dataObj[t].value) {
				sel.getElementsByTagName("a")[0].innerHTML = dataObj[t].text;
			}
		}
	} else {

		// otherwise use first entry in formdata array and set it in form
		sel.getElementsByTagName("a")[0].innerHTML = dataObj[0].text;
		sel.getElementsByTagName("a")[0].title = dataObj[0].text;
		oForm[elm].value = dataObj[0].value
	}
	setDropdownMouse(sel);

}

function setDropdownMouse(obj) {
	obj.onmouseover = function() {this.w = this.offsetWidth;this.className=replaceStr("dropdown","dropdownOver",this.className); this.style.width=this.w+"px"; };
	obj.onmouseout = function() {this.className=replaceStr("dropdownOver","dropdown", this.className)};

	$(obj).children("a").bind("focus", function() { $(this).parent().removeClass("dropdown").addClass("dropdownOver"); });
	$(obj).children("a").bind("blur", function() { $(this).parent().removeClass("dropdownOver").addClass("dropdown"); });
	
}

// get value from formdata
function getValue(arr, txt) {

	var dataObj = formdata[arr];
	var str = "";
	for (t=0; t<dataObj.length; t++) {
		if (txt == dataObj[t].txt) {
			str = dataObj[t].value;
		}
	}
	return str;
}

// get text from formdata
function getText(arr, val) {
	var dataObj = formdata[arr];
	var str = "";
	for (t=0; t<dataObj.length; t++) {
		if (val == dataObj[t].value) {
			str = dataObj[t].text;
		}
	}
	return str;
}

function getIndexFromValue(arr, val) {
	var dataObj = formdata[arr];
	var idx = -1;
	for (t=0; t<dataObj.length; t++) {
		if (val == dataObj[t].value) {
			idx = t;
		}
	}
	return idx;
}

function makeDates(oForm, oDate, oMonth, oYear) {
	// if no objects has been specified we assume the default booking elements
	if (!oDate)
		oDate = oForm.date;
	
	if(!oDate) return;
		
	if (!oMonth)
		oMonth = oForm.month;
		
	if (!oYear)
		oYear = oForm.year;
	
	var $d = parseInt(oDate.value);
	var $m = parseInt(oMonth.value) -1;
	var $y = parseInt(oYear.value);
	
	var date = new Date();
		date.setFullYear( $y, $m, $d );
	
	var daysInMonth = getDaysInMonth(date);
	
	// create array of dates
	formdata["date"] = [];
	for (i=0; i < daysInMonth; i++) { // monthLength[date.getMonth()]
		formdata["date"].push({"text":i+1,"value":i+1});
	}
	
	// set date to 1 if currently selected date doesn't exist in month/year
	if ($m != date.getMonth()) { // monthLength[oMonth.value]
		oDate.value = 1;
		$( oForm.name +"_date a:first" ).html(1);
	}
}

function getDaysInMonth( date ) {
	var tmp = new Date( date );
		tmp.setDate(32);
		
	return 32 - tmp.getDate();
}

function makeDates_old(oForm, oDate, oMonth, oYear) {
	var monthLength = new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);

	// if no objects has been specified we assume the default booking elements
	if (!oDate) {
		var oDate = oForm.date;
		var oYear = oForm.year;
		var oMonth = oForm.month;
	}

	if (((oYear.value % 4 == 0) && (oYear.value % 100 != 0)) || (oYear.value % 400 == 0)) {
		monthLength[2]=29; 
	}
	
	// create array of dates
	formdata["date"] = [];
	for (i=0; i<monthLength[oMonth.value]; i++) {
		formdata["date"].push({"text":i+1,"value":i+1});
	}
	
	// set date to 1 if currently selected date doesn't exist in month/year
	if (oDate.value > monthLength[oMonth.value]) {
		oDate.value = 1;
		var sel = d.getElementById(oForm.name+"_date");
		sel.getElementsByTagName("a")[0].innerHTML = 1;
	}

}

// build array of destinations for currently selected country
function makeDestinations(oForm) {
	if (typeof(oForm.epiglcountry) == "object") {
		var dataObj = formdata["epidestination"];
		var country = oForm.epiglcountry.value;
		oForm.epidestination.value = "";	
		var sel = d.getElementById(oForm.name+"_epidestination");
	} else if (typeof(oForm.epicountry) == "object") {
		var dataObj = formdata["epidestination"];
		var country = oForm.epicountry.value;
		oForm.epidestination.value = "";	
		var sel = d.getElementById(oForm.name+"_epidestination");
	} else {
		var dataObj = formdata["dest"];
		var country = oForm.country.value;
		oForm.destination.value = "";	
		var sel = d.getElementById(oForm.name+"_destination");
	}


	formdata["destination"] = [];

	formdata["destination"].push({"text":dataObj[0].text, "value":dataObj[0].value, "gl":dataObj[0].gl});
	for (var i=0; i<dataObj.length; i++) {
		if (dataObj[i].parent == country) {
			formdata["destination"].push({"text":dataObj[i].text, "value":dataObj[i].value, "gl":dataObj[i].gl});
		}
	}
	if (oForm["destinatiofilter"]) {
		sel.getElementsByTagName("a")[0].innerHTML = formdata["destination"][0].text;
	}
}

function replaceStr(old, rep, str) {
	return str.replace(RegExp(old, "gi"), rep);
}
function doinput() {}

function setForm(obj) {

	if (obj.act != "") {
	
		eval(obj.act)(obj);
	}
	
	var sel = d.getElementById(obj.myid);
	var withinLimit = true;

	// check if number of persons exceed limit before setting value
	if (obj.ref.name == "adults" || obj.ref.name == "children") {
		withinLimit = checkMaxPersons(obj);
	}

	var oldVar = obj.ref.value; // store previous selection
	
	if (withinLimit) {
		$("a", sel).html(obj.txt);
		$("a", sel).attr("title",obj.txt);
	//	sel.getElementsByTagName("a")[0].innerHTML = obj.txt;
	//	sel.getElementsByTagName("a")[0].title = obj.txt;
		obj.ref.value = obj.val;
	}
	
	if (obj.ref.name == "country" || obj.ref.name == "epicountry") {
		makeDestinations(obj.form);
		if (oldVar != obj.ref.value) {
			d.getElementById(obj.form.name+"_destination").getElementsByTagName("a")[0].innerHTML = sFlightOnlyDefault;
		}
	}
	
	if (obj.ref.name == "carstartdate" || obj.ref.name == "carrentaldays" || obj.ref.name == "carpickupplace" || obj.ref.name == "cardeliverplace") {
		getRentalPrice();
	}

	if (obj.ref.name == "golfteeday" || obj.ref.name == "golfcourse" || obj.ref.name == "golfteetime") {
		updateTeedays(obj.ref.name);
	}
	// one way
	if (obj.ref.name == "departure" && (obj.form["flighttype"] && obj.form["flighttype"].value == "oneway")) {
		var tmparray = makeOnewayDest(formdata["oneway"], obj.form);
		d.getElementById(obj.form.name+"_country").getElementsByTagName("a")[0].innerHTML = tmparray[0].text;
		obj.form["country"].value = tmparray[0].value;
	}
	
	if(obj.ref.name == "children") {
		checkChildrenAge(obj.form);
	}
	
}


function showDropdown(obj, spec, fn) {

	if (dd_active) {
	//	checkmouse();
	} else {
		if (obj.parentNode.id != "") {
			setTimeout("doDropdown('"+obj.parentNode.id+"', '"+spec+"', '"+fn+"')",20);
		}
	}
}

function doDropdown(id, spec, fn) {
	var obj = d.getElementById(id);
	var idSplit = id.split("_");
	var frm = idSplit[0];
	var dd = idSplit[1];
	var ddSplit = dd.split("-");

	var foldDir = 0;

	var oForm = d.forms[frm];
	if (oForm == undefined) { oForm = new Object; }
	// fix number of days before reading from array
	if (dd == "date") {
		makeDates(oForm);
	}

	switch (spec) {
		// alternative form element reference for dynamic created golf tee days
		case "golf":
			dd = ddSplit[0];
			spec = "";
			break;			
	}
	/*
	if (dd.indexOf("birthdate") != -1) {
		makeDates(oForm, oForm["birthdate-"+dd.split('-')[1]],oForm["birthmonth-"+dd.split('-')[1]], oForm["birthyear-"+dd.split('-')[1]]);
	}
	*/

	var oFormdata = formdata[ddSplit[0]];

	// filter dropdown content based on flighttype
	switch( dd ) {
			case "country":

			// flightonly
			var srcAirportCode = d.getElementById("departure").value;
			var flightOnly = d.getElementById(frm+"_flighttype_flightonly");
			var roundTrip = d.getElementById(frm+"_flighttype_roundtrip");
			var oneWay = d.getElementById(frm+"_flighttype_oneway");

				if(flightOnly && flightOnly.className.indexOf("radiobnOn") != -1) {
				var tempdata = oFormdata;

				for (i=0; i < tempdata.length; i++) {
					if (tempdata[i].fo && tempdata[i].fo == 1) {
					    if(tempdata[i].parent.indexOf(srcAirportCode)!=-1){
						    oFormdata.push(tempdata[i]);
						}

					}
				}
				
				tempdata = Array();
			}

			// roundtrip
			else if((roundTrip && roundTrip.className.indexOf("radiobnOn") != -1) || ($("form[name='booking'] input[name='flighttype']").val() == "roundtrip")) {
				var tempdata = oFormdata;
				oFormdata = Array();
				
				for (i=0; i < tempdata.length; i++) {
					if (tempdata[i].fo && tempdata[i].gl == 1) {
						if(tempdata[i].parent.indexOf(srcAirportCode)!=-1){
						    oFormdata.push(tempdata[i]);
						}
					}
				}
				
				tempdata = Array();
			// oneway
			} else if (oneWay && oneWay.className.indexOf("radiobnOn") != -1) {
				oFormdata = makeOnewayDest(oFormdata, oForm);
				
			} else {

				var tempdata = oFormdata;
				oFormdata = Array();
				oFormdata.push(tempdata[0])
				for (i=0; i < tempdata.length; i++) {
					if (tempdata[i].value == 0) {
						    oFormdata.push(tempdata[i]);
					} else if (tempdata[i].parent) {
						if(tempdata[i].parent.indexOf(srcAirportCode)!=-1){
						    oFormdata.push(tempdata[i]);
						}
					}
				}
				
				tempdata = Array();
				
				}
			
			break;
		case "departure":
			if (d.getElementById(frm+"_flighttype_oneway") && oForm["flighttype"].value == "oneway") {
				oFormdata = formdata["oneway"];
				var tmparray = makeOnewayDest(oFormdata, oForm);
			}
			if (frm == "splash") {
				oFormdata = formdata["departure"];
			}
			break;
			
		case "destination":
		case "epidestination":
			makeDestinations(oForm);
			// new destination content has been created based on country type
			oFormdata = formdata["destination"];
			break;
	}

	// list of specified items in list
	if (oForm["destinationfilter"] && oForm["destinationfilter"].value.indexOf(",") != -1) {
		oFormdata = getFilteredDestinations(oFormdata, oForm);
	}

	// only activate if any content
	if (oFormdata && oFormdata.length > 0) {
		oDrop = d.createElement("div");
		var nLength = oFormdata.length;

		// limit the height of dropdown and create scroll
		if (oFormdata.length > 12) {
			oDrop.id = "activeDropdownLimit";
		} else {
			oDrop.id = "activeDropdown";
		}
		oDrop.className = "activedd";
		
		oDrop.style.zIndex = 99999;
		oBody.appendChild(oDrop);

		$(oDrop).css("left",$(obj).offset().left);
		
		if (spec.indexOf("foldup") != -1) { foldDir = $(oDrop).height();}
		$(oDrop).css("top", $(obj).offset().top + $(obj).height() - foldDir);
		
		$(oDrop).css("width",$(obj).width()+1);

		if (spec.indexOf("splash") != -1) {
			$(oDrop).css({"position":"fixed", "top":$(obj).offset().top-$(this).scrollTop()-foldDir});

		}
		
		var blankCounter = 0;

		for (var i=0; i<oFormdata.length; i++) {

			if (oFormdata[i].value != "") {

				oItem = d.createElement("a");
				oItem.className	= "item";
				oItem.myid		= id;
				oItem.txt		= oFormdata[i].text;
				oItem.title		= oFormdata[i].text;
				oItem.nr		= i;
				oItem.val		= oFormdata[i].value;
				oItem.ref		= oForm[dd];
				oItem.form		= oForm;
				oItem.obj		= obj;
				oItem.href		= "javascript:;";

				//} else {
				if (fn != "undefined") {
					oItem.fn = fn;
					oItem.onclick	= function() { eval(this.fn); }
				} else {
					oItem.onclick	= function() { setForm(this); }
				}
				//}

				oItem.innerHTML = oFormdata[i].text;
				oItem.act		= "";
				if (i >= nLength+blankCounter) {
					oItem.style.display = "none";
				} else {
					oItem.style.display = "block";
				}
				if (spec != "undefined" && spec != "") {
					oItem.act	= spec;
				}
				oDrop.appendChild(oItem);
				
			} else {
				blankCounter++;
			}
		}
		dd_active = true;
	}

}

function makeOnewayDest(oFormdata, oForm) {
	var tempdata = Array();
	var sel = oForm["departure"].value;
	var selIdx = -1;
	for (i=0; i<formdata["oneway"].length; i++) {
		if (sel == formdata["oneway"][i].value) {
			selIdx = i;
		}
	}
	var filterlist = formdata["oneway"][selIdx].dest.split("|");
	for (i=0; i<formdata["oneway"].length; i++) {
		var findPos = jQuery.inArray(formdata["oneway"][i].value, filterlist);
		if (findPos != -1) {
			tempdata[findPos] = formdata["oneway"][i];
		}

	}
	return tempdata;
}



function getFilteredDestinations(oFormdata, oForm) {
	var tempdata = Array();
	var filterlist = oForm["destinationfilter"].value.split(",");
	for (i=0; i < oFormdata.length; i++) {
		var findPos = jQuery.inArray(oFormdata[i].value, filterlist);
		if (findPos != -1) {
			tempdata[findPos] = oFormdata[i];
		}
	}
	oFormdata = Array();
	for (t=0; t<tempdata.length; t++) {
		if(tempdata[t]) {
			oFormdata.push(tempdata[t]);
		}
	}
	return oFormdata;
}

function showAutDropdown(id) {
	document.getElementById(id).style.display='block';
	curAutDD = id;
}
function hideAutDropdown(id) {
	document.getElementById(id).style.display='none';
	curAutDD = "";
}

function setAutDropdownValue(obj, val, targt) {
	var oParent = obj.parentNode.parentNode;
	oParent.getElementsByTagName("div")[0].getElementsByTagName("a")[0].innerHTML = obj.innerHTML;
	if (val) { targt.value = val };
}

/*
function showLMDropdown() {
	document.getElementById('LmDropdown').style.display='block';
}

function closeLMDropdown() {
	d.getElementById("LmDropdown").style.display = "none";
}
*/

function doLmDD(obj, str) {
	var val = obj.id.split("_")[1];
	var objList = obj.parentNode.getElementsByTagName("a");

	for ( var i=0; i<objList.length; i++) {
		var thisVal = objList[i].id.split("_")[1];
		if (thisVal == val) {
			d.getElementById("lastminuttab_"+thisVal).style.display = "block";
			setAutDropdownValue(obj);
		} else {
			d.getElementById("lastminuttab_"+thisVal).style.display = "none";
		}
	}
}

function showTravelsDropdown() {
	$("#travelsDropdown").show();
}


function showTravelsDepDropdown() {
	$("#travelsDepDropdown").show();
}

function closeTravelsDropdown() {
	$("#travelsDropdown").hide();
}

function closeTravelsDepDropdown() {
	$("#travelsDepDropdown").hide();
}

function showElement(ref) {
	$(ref).show();
}

function hideElement(ref) {
	$(ref).hide();
}


function doScrolldown(limit) {
		var oLength = oDrop.getElementsByTagName("a").length;
		var viewstart = -1;
		// find first entry to show
		for (t=1; t<oLength-1; t++) {
			if (oDrop.getElementsByTagName("a")[t].style.display == "block" && viewstart == -1) {
				viewstart = t;
			}
		}
	if (ddscroll && oLength > limit+viewstart+1) {
		for (t=1; t<oLength-1; t++) {
			if (t > viewstart && t <= limit+viewstart) {
				oDrop.getElementsByTagName("a")[t].style.display = "block";
			} else {
				oDrop.getElementsByTagName("a")[t].style.display = "none";
			}
		}
	setTimeout("doScrolldown("+limit+")",100);
	}
}

function doScrollup(limit) {
		var oLength = oDrop.getElementsByTagName("a").length;
		var viewstart = -1;
		// find first entry to show
		for (t=1; t<oLength-1; t++) {
			if (oDrop.getElementsByTagName("a")[t].style.display == "block" && viewstart == -1) {
				viewstart = t-2;
			}
		}
		if (viewstart < 0) { viwestart = 0; }
	if (ddscroll && oLength > limit+viewstart+1) {
		for (t=1; t<oLength-1; t++) {
			if (t > viewstart && t <= limit+viewstart) {
				oDrop.getElementsByTagName("a")[t].style.display = "block";
			} else {
				oDrop.getElementsByTagName("a")[t].style.display = "none";
			}
		}
	setTimeout("doScrollup("+limit+")",100);
	}
}


function checkMaxPersons(obj) {
	var withinLimit = true;
	switch(obj.myid.split("_")[1]) {

	case "adults":
		if(parseInt(obj.val) + parseInt(obj.form.children.value) > 8 ) {
			withinLimit = false;
		}
		break;

	case "children":
		if(parseInt(obj.val) + parseInt(obj.form.adults.value) > 8 ) {
			withinLimit = false;
		}
		break;

	}
	if (!withinLimit) {
		showInfoLayer("toomany", 150, 170, -1);
	}
	return withinLimit;
}
							 
function checkmouse() {

	closeDropdown()

	if (dd_active) {
//		dd_active = false;
//		setTimeout("closeDropdown()",25);
	}

	// stop gallery slideshow
	if (galSlide) {
		galSlide = false;
		setTimeout("stopGallerySlideshow()",200);
	}
/*
	if (d.getElementById("LmDropdown") && d.getElementById("LmDropdown").style.display == "block") {
		setTimeout("closeLMDropdown()",20);
	}

	if (d.getElementById("travelsDropdown") && d.getElementById("travelsDropdown").style.display == "block") {
		setTimeout("hideElement('#travelsDropdown')",20);
	}
	if (d.getElementById("travelsDepDropdown") && d.getElementById("travelsDepDropdown").style.display == "block") {
		setTimeout("hideElement('#travelsDepDropdown')",20);
	}
	if (d.getElementById("travelsDestDropdown") && d.getElementById("travelsDestDropdown").style.display == "block") {
		setTimeout("hideElement('#travelsDestDropdown')",20);
	}
*/
	if (curAutDD != "" && d.getElementById(curAutDD).style.display == "block") {
		setTimeout("hideAutDropdown('"+curAutDD+"')",20);
		
	}

	clicked = true;
	setTimeout("resetClick()",300);
}

function resetClick() {
	clicked = false;
}

function stopGallerySlideshow() {
	clearInterval(galIval);
}

function closeDropdown() {
	$("#dd-lastminute, #travelsDepDropdown, #travelsDropdown, #travelsDestDropdown, #dd-pricecalChild, #dd-pricecalAdult, #dd-pricecalDate, #dd-pricecalDep").hide();
	try {
		// oBody.removeChild(oDrop);
		$(".activedd").remove();
		
		dd_active = false;
	}catch(err)
	{}
}


function switchRadio( radio ) {

	var radioParent = radio.parentNode;
    var id = radioParent.id;

	var idSplit = id.split("_");
    
	var frm = idSplit[0];
	var group = idSplit[1];
	var val = idSplit[2];

	var hiddenForm = d.forms[frm];

	var FDG = formdata[group]; // FDG = Form Data Group
	var FDGlen = FDG.length;

	hiddenForm[group].value = val;

	for (var i=0; i < FDGlen; i++) {
	    var currFDGval = FDG[i].value;
		var sel = d.getElementById(frm +"_"+ group +"_"+ currFDGval);

		if (currFDGval == val) {
			try{sel.className = replaceStr("radiobnOff","radiobnOn", sel.className);}catch(err){}
		} else {
			try{sel.className = replaceStr("radiobnOn","radiobnOff", sel.className);}catch(err){}
		}
	}
	
    // flightonly radio selected?
    if (group == "flighttype") {
        var depart = d.getElementById(frm +"_departure");
        var dest = d.getElementById(frm +"_destination");
        var country = d.getElementById(frm +"_country");
        var dur = d.getElementById(frm +"_duration");
        
       
        switch( val ) {
            case "flightonly":
                hiddenForm["destination"].value = 0;
                hiddenForm["country"].value = "";
                
				$(dest).css("visibility", "hidden");
				$(country).css("visibility", "visible");
				$(dur).css("visibility", "visible");

                country.getElementsByTagName("a")[0].innerHTML = sFlightOnlyDefault;
//				document.forms[frm]["departure"].value = "";
                break;

			case "roundtrip":
				$(dest).css("visibility", "visible");
				$(country).css("visibility", "visible");
				$(dur).css("visibility", "hidden");
				break;

			case "oneway":
			    document.forms[frm]["departure"].value = formdata["oneway"][0].value;
                depart.getElementsByTagName("a")[0].innerHTML = formdata["oneway"][0].text; 
				$(dest).css("visibility", "hidden");
				$(country).css("visibility", "visible");
				$(dur).css("visibility", "hidden");
				var tmparray = makeOnewayDest(formdata["oneway"], document.forms[frm])				
				country.getElementsByTagName("a")[0].innerHTML = tmparray[0].text;
				document.forms[frm]["country"].value = tmparray[0].value;
				break;

			default:
			    document.forms[frm]["departure"].value = formdata["departure"][0].value;
                depart.getElementsByTagName("a")[0].innerHTML = formdata["departure"][0].text; 
                country.getElementsByTagName("a")[0].innerHTML = formdata["country"][0].text; 
				document.forms[frm]["country"].value = formdata["country"][0].value;
				$(dest).css("visibility", "visible");
				$(country).css("visibility", "visible");
				$(dur).css("visibility", "visible");
				break;
        }
    }
}

function switchCheckbox(obj, callback, vars) {
	 switchCheckboxOverload(obj, callback, vars, false);
}


function switchCheckboxOverload(obj, callback, vars, deductOnValue, totalID) {
	var id = obj.parentNode.id;
	var obj = d.getElementById(id);
	var frm = id.split("_")[0];
	var val = id.split("_")[1];
	var oForm = d.forms[frm];
	var sel = d.getElementById(frm+"_"+val);
	var status;
	
	if (oForm[val].value == 1) {
		sel.className = replaceStr("checkbnOn","checkbnOff", sel.className);
		oForm[val].value = 0;
		if(deductOnValue) {
			status = 1;
		} else {
			status = 0;
		}
	} else {
		sel.className = replaceStr("checkbnOff","checkbnOn", sel.className);
		oForm[val].value = 1;
		if(deductOnValue) {
			status = 0;
		} else {
			status = 1;
		}
	}
	if(deductOnValue) {
		if (status == 1) { 
			//vars[0] = vars[0]*-1;
			d.getElementById(totalID).innerHTML = doCurrency(vars);
		} else {
			d.getElementById(totalID).innerHTML = doCurrency(0);
		}
	} else if (status == 1) {
		d.getElementById(totalID).innerHTML = doCurrency(0);
	} else {
		d.getElementById(totalID).innerHTML = doCurrency(vars);
	}
	
	if (callback) {
		callback(vars, status );
	}
}


function initAutRadio(id) {
	formdata[id] = [];
	var obj = d.getElementById(id+"Wrap");
	var oList = obj.getElementsByTagName("div");
	for (t=0; t<oList.length; t++) {
		var txt = oList[t].getElementsByTagName("a")[0].innerHTML;
		var val = oList[t].id.split("_")[2];
		formdata[id].push({"text":txt, "value":val});
	}
}

function doAutCheckbox(obj) {
	var oParent = obj.parentNode;
	var frm = oParent.id.split("_")[0];
	var val = oParent.id.split("_")[1];
	var oForm = d.forms[frm];
	var sel = d.getElementById(frm+"_"+val);
	if (oForm[val].value == 1) {
		sel.className = replaceStr("checkbnOn","checkbnOff", sel.className);
		oForm[val].value = 0;
		$("#iefix").css("zoom","1").css("zoom","0");
	} else {
		sel.className = replaceStr("checkbnOff","checkbnOn", sel.className);
		oForm[val].value = 1;
		$("#iefix").css("zoom","1").css("zoom","0");

	}

}



function calcExtra(vars, status) {
	if (status == 1) {
//		addonTotal = parseInt(addonTotal) - parseInt(vars);
	} else {
//		addonTotal = parseInt(addonTotal) + parseInt(vars);
	}
	updateAllTotal();
}

// set extra price when selection is made in dropdown
function dropdownextra(obj) {
	var dataref = obj.myid.split("_")[1].split("-")[0];
	var formref = obj.myid.split("_")[1];
	var oldvalue = d.forms["booking"][formref].value;
	var oldprice = 0;
	
	// find old price based on selected value
	for (t=0; t<formdata[dataref].length; t++) {
		if (formdata[dataref][t].value == oldvalue) {
			oldprice = formdata[dataref][t].price;
			
		}
	}

	addonTotal = parseInt(addonTotal) + parseInt(formdata[dataref][obj.nr].price) - oldprice;
	updateAllTotal();
}


/* element position */

function getAbsLeft(o) {  
	var iY = 0; 
	while(o.offsetParent){ 
		iY += parseInt(o.offsetLeft);
		o = o.offsetParent;  
	} 
	return iY; 
} 
function getAbsTop(o) {  
	var iX = 0; 
	while(o.offsetParent){ 
		iX += parseInt(o.offsetTop);  
		o = o.offsetParent;  
	} 
	return iX
}

function showHide(obj) {
	obj.style.visibility = (obj.style.visibility == "hidden") ? "visible" : "hidden";
}


/* onload event */

function addLoadEvent(func) {
  /*var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }*/
  
  $(window).load(func);
}

/* flash include */
function flashObject(file, w, h, vars, label) {
	if (!label) {
		var date = new Date;
		var label = "flash"+date.getTime();
	}
	if (AC_FL_RunContent == 0) {
		alert("This page requires AC_RunActiveContent.js.");
	} else {
		AC_FL_RunContent('codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0','width', w,'height', h,'src', file,'quality', 'high','pluginspage', 'http://www.macromedia.com/go/getflashplayer','align', 'middle','play', 'true','loop', 'true','scale', 'showall','wmode', 'transparent','devicefont', 'false','id', 'box_rotate','bgcolor', '#ffffff','name', label,'menu', 'true','allowFullScreen', 'false','allowScriptAccess','sameDomain','movie', file,'salign', ''); //end AC code
	}
}


/* showing page in page */

function showPageLayer(url, w) {
	$("#pageLayerFrame").get(0).src = url;
	$("#pageLayer").attr("class", "w"+w).css("visibility", "visible").show();
	$("#pageLayerTopbarClose").attr("class", "btn btn-close"+w);
	
	showDim();
	posPageLayer();
	doSifr("#pageLayerTopbar span");
	
	bPagelayer = true;
	
	/*d.getElementById("pageLayerFrame").src = url;
	
	d.getElementById("pageLayer").className = "w"+w;
	d.getElementById("pageLayer").style.visibility = "visible";
	// fix for showing sIFR
	d.getElementById("pageLayerTopbarClose").className = "btn btn-close-"+w;
	//d.getElementById("pageLayer").getElementsByTagName("span")[0].style.display = "block";*/
	
	
}

function hidePageLayer() {
	$("#pageLayer").hide();
	$("#pageLayerFrame").get(0).src = "/Templates/iFrames/blank.aspx";
	
	hideDim();
	
	/*d.getElementById("pageLayer").style.visibility = "hidden";
	// fix for hiding sIFR
	//d.getElementById("pageLayer").getElementsByTagName("span")[0].style.display = "none";
	d.getElementById("pageLayerFrame").src = "/Templates/iFrames/blank.aspx";*/
	
}

/*function getElementsByClassName(obj, tag, cls, nested) {
	var arr = new Array();
	if (nested) {
		var myLen = obj.getElementsByTagName("*");
		for (var i=0; i<myLen.length; i++) {
			if (myLen[i].className == cls && (myLen[i].tagName.toLowerCase() == tag.toLowerCase() || tag == "*")) {
				arr.push(myLen[i]);
			}
		}
	} else {
		for (var i=0; i<obj.childNodes.length; i++) {
			if (obj.childNodes[i].tagName && obj.childNodes[i].tagName.toUpperCase() == tag.toUpperCase() && obj.childNodes[i].className == cls) {
				arr.push(obj.childNodes[i]);
			}
		}
	}
	return arr;
}*/

function posPageLayer() {
	//d.getElementById("pageLayer").style.left = d.documentElement.offsetWidth/2-d.getElementById("pageLayer").offsetWidth/2+"px";
	$("#pageLayer").css("left", ((d.documentElement.offsetWidth -$("#pageLayer").get(0).offsetWidth) /2)+ "px");
}

function showDim() {
	if($("#dim").length <= 0) {
		$("body").append('<div id="dim"></div>');
		$("#dim").css({"position": "fixed", "opacity": 0});
	}
	
	setDimWidth();
	setDimHeight();
	
	$("#dim").fadeTo(300, 0.75);
	
	/*var newObj = d.createElement("div");
	newObj.setAttribute("id", "dim");
	oBody.appendChild(newObj);*/
	
}

function setDimHeight() {
	$("#dim").each(function() {
		$(this).height(document.documentElement.scrollHeight);
	});
}

function setDimWidth() {
	$("#dim").each(function() {
		$(this).width(document.documentElement.scrollWidth);
	});
}

/*function setDimHeight() {
	var pH = getPageHeight();
	var pl = $("pageLayer")[0];
	var plTop = (pl)? pl.offsetTop : 0;
	var plH = (pl)? pl.offsetHeight : 0;
	var plBottom = plTop + plH;
	
	$("#dim").each(function() {
		var h = ( plBottom > pH )? plBottom : pH; 
		$(this).height(h);
		
		alert(document.documentElement.scrollWidth);
	});
	
	
	if (d.getElementById("dim")) {
		var pageH = 
	
		if (bPagelayer && d.getElementById("pageLayer").offsetTop + d.getElementById("pageLayer").offsetHeight > getPageHeight()) {
			pageH = d.getElementById("pageLayer").offsetTop + d.getElementById("pageLayer").offsetHeight+30;
		}
		d.getElementById("dim").style.height = pageH+"px";
	}
}*/

/*function setDimWidth() {
	$("#dim").each(function() {
		var o = $(this).width("100%");
			o.width( Math.max(o[0].offsetWidth, 886) );
	});
	
	d.getElementById("dim").style.width = "100%";
	if (d.getElementById("dim").offsetWidth < 886) {
		d.getElementById("dim").style.width = "886px";
	}
}*/

function hideDim() {
	$("#dim").remove();
}

function getPageHeight() {
	var windowHeight=0;
	if (typeof(window.innerHeight)=='number') {
		windowHeight=window.innerHeight;
	} else {
		if (d.documentElement&&d.documentElement.clientHeight) {
			windowHeight=d.documentElement.clientHeight;
		} else {
			if (d.body&&d.body.clientHeight) {
				windowHeight=d.body.clientHeight;
			}
		}
	}
	if (d.getElementById("pageEnd").offsetTop > windowHeight) {
		return d.getElementById("pageEnd").offsetTop;
	} else {
		return windowHeight;
	}
}


function doIframe() {
	// resize iframe
	var i = parent.document.getElementById("pageLayerFrame");
	if (i) {
		//if(i == null) { return; }
		//	iHeight = d.body.scrollHeight;
		iHeight = d.getElementById("pageEnd").offsetTop;
		i.style.height = iHeight + "px";
		d.getElementsByTagName("body")[0].style.marginLeft = "-12px";
		d.getElementsByTagName("body")[0].style.backgroundImage = "url('img/dot_tr.gif')";
		window.parent.setDimHeight();
		parent.scroll(0,0);
	}
}

window.onresize = doResize;


/* Set tabs */
function setTabs() {
	var nav = $("#tab-nav");
	/*.each(function() {
		if( $(oPageType).hasClass("fulltabs") )
			$(this).addClass("tab-nav-bg-hotel");
	});*/
	
	$("li.tab", nav).each(function(i, node) {
		var tab = $(this);
		var tabNode = tab.get(0);
		var a = $("a", tab);
		var tabW = tabNode.offsetWidth;
		var tabH = tabNode.offsetHeight;
		var tabPos = tab.offset();
		
		/*if( tabW < 70 )
			a.css({"padding-left" : "25px", "padding-right" : "25px" });*/
		
		var isFirstItem = (i <= 0);
		//var tlCorner = $("#tab-corner-left", nav);
		var hoverOver = function() {};
		var hoverOut = 	function() {};
		
		/*if(isFirstItem) {
			if( !a.hasClass("sel") ) {
				hoverOver = function() { tlCorner.removeClass("out").addClass("over"); };
				hoverOut = 	function() { tlCorner.removeClass("over").addClass("out"); };
			} else
				tlCorner.addClass("over");
		}*/
			
		// Create dropdown
		var dropdown = $("#"+ tabNode.id +"-content:eq(0)");
		
		if( dropdown.length > 0 ) {
			var oldOver = hoverOver;
			hoverOver = function(e) {
				var curr = $(this);
				
				var _tab = curr.data("tab");
				if( !_tab && curr.get(0).id == tabNode.id )
					_tab = curr;
					
				if( _tab ) {
					_tab.addClass("dd-over");
					clearTimeout(_tab.data("ddTimer"));	
				}
				
				var _dd = curr.data("dropdown");
				if( !_dd && curr.get(0).id == tabNode.id +"-content" )
					_dd = curr;
				
				if( _dd ) {
					var tabPos = _tab.offset();
					_dd.css({"left" : tabPos.left +"px", "top" : (tabPos.top + _tab.get(0).offsetHeight) +"px"})
					_dd.show();
				}
				
				oldOver.apply(this);
			}
			
			var oldOut = hoverOut;
			hoverOut = function(e) {
				var curr = $(this);
				
				var _tab = curr.data("tab");
				if( !_tab && curr.get(0).id == tabNode.id )
					_tab = curr;
					
				if( _tab ) {
					_tab.data("ddTimer", setTimeout(function() {
						_tab.removeClass("dd-over");
						
						if( _dd )
							_dd.hide();
						
						oldOut.apply(this);
					}, 50));
				}
				
				var _dd = curr.data("dropdown");
				if( !_dd && curr.get(0).id == tabNode.id +"-content" )
					_dd = curr;
			}
			
			dropdown.each(function(i, node) {
				var dd = $(this);
				var ddNode = dd.get(0);
				$("body").append(dd);
				
				dd
				.css({"left" : tabPos.left +"px", "top" : (tabPos.top + tabH) +"px", "position": "absolute", "z-index" : "9999999", "visibility" : "visible"})
				.data("tab", tab);
				
				if( ddNode.offsetWidth < tabW ) {
					dd
					.width(tabW)
					.width(tabW - (ddNode.offsetWidth - tabW));
				}
				
				dd
				.hide()
				.hover(hoverOver, hoverOut);
			});
		}
		
		tab
		.data("dropdown", dropdown)
		.data("tab", tab)
		.hover(hoverOver, hoverOut);
		
	});
}




/*******************
 * SCROLL FUNCTION *
 *******************/
(function($) {
	$.scrollContainer = {
		dataNames : {
			setup : "setup",
			scrollBar : "scrollbar",
			scrollContainer : "scrollcontainer",
			scrollWrap : "scrollwrap",
			slider : "slider",
			sliderMousePos : "slidermouseposition",
			sliderBodyMU : "bodymouseupfunc",
			track : "track",
			trackPos : "trackposition",
			maxCords : "maxcordinates",
			maxScroll : "maxscroll",
			scrollPercent : "scrollpercent",
			interval : "interval",
			currSize : "currentsize",
			currPos : "currentoffset",
			scrollWidth : "scrollwidth",
			unloadedItems : "unloadeditems"
		},
		
		defaultSetup : {
			stepSpeed : 40,
			stepSize : 15
		},
		
		buildScrollbar : function( sc, onBuildComplete ) { // sc = scroll container (eg. scroll-panel)
			/* 	SCROLLBAR STRUCTURE
				-----------------------
				<div class="scrollbar">
					<div class="scroll-up"><b class="png-img"></b></div>
					<div class="track">
						<div class="slider">
							<span class="slider-top"><b class="png-img"></b></span>
							<span class="slider-middle"><b class="png-img"></b></span>
							<span class="slider-bottom"><b class="png-img"></b></span>
						</div>
						<b class="png-img"></b>
					</div>
					<div class="scroll-down"><b class="png-img"></b></div>
				</div>
			*/
			var dn = this.dataNames;
			
			// Get the scroll wrap
			var sw = $(".scroll-wrap", sc);
			
			// Build The Scrollbar
			var sb = $('<div class="scrollbar"><div class="scroll-up"><b class="png-img"></b></div><div class="track"><div class="slider"><span class="slider-top"><b class="png-img"></b></span><span class="slider-middle"><b class="png-img"></b></span><span class="slider-bottom"><b class="png-img"></b></span></div><b class="png-img"></b></div><div class="scroll-down"><b class="png-img"></b></div></div>')
			.data(dn.scrollContainer, sc)
			.data(dn.scrollWrap, sw)
			.css("opacity", "0");
			
			sc
			.append(sb) // Append the scrollbar to the scrollcontainer
			.data(dn.scrollBar, sb); // Save scrollbar reference
			
			sw
			.data(dn.scrollBar, sb)
			.scroll(this.events.onScroll);
			
			// Save reference to the scrollbar on the content
			var content = $(".scroll-content", sw).data(dn.scrollBar, sb);
			
			// Init scroll left/up
			var scu = $(".scroll-up", sb).mousedown(this.actions.scrollUp);
			
			// Init scroll right/down
			var scd = $(".scroll-down", sb).mousedown(this.actions.scrollDown);
				scd.add(scu) // Add data to both buttons
				.data(dn.scrollWrap, sw)
				.data(dn.scrollBar, sb);
			
			/*
			Due to FireFox is executing scripts before updating the screen,
			a timeout is required, so FireFox will redraw the screen and
			the width therefore can be read
			*/
			
			var $this = this;
			
			//setTimeout(function() {
			$(function() {
				// Set track width
				var tw = sb[0].clientWidth - (scu[0].offsetWidth + scd[0].offsetWidth);
				var track = $(".track", sb);//.width(tw);
				
				// Save reference to the track on the scrollbar
				sb.data(dn.track, track);
				
				if( !track.is(":hidden") ) {
					var trackSize = { w: track[0].offsetWidth, h: track[0].offsetheight };
					track.data(dn.currSize, trackSize);
					
					// Init slider
					var slider = $(".slider", sb)
								.mousedown($this.events.onSliderMouseDown)
								.data(dn.scrollWrap, sw)
								.data(dn.scrollBar, sb)
								.data(dn.track, track);
					
					// Save reference to the slider on the scrollbar
					sb.data(dn.slider, slider);
				}
				
				// Calculate width of the centent container and set slider size (+ show/hide scrollbar)
				$this.calcContentSize( content, sc );

				if( typeof(onBuildComplete) == "function" )
					onBuildComplete(sc);
				
				// For testing content resizing
/*				var o = this;
				setTimeout(function() { o.setContentSize($(".scroll-content", sw) ,9000) }, 2000);  */
			});
			//, 1);
		},
		
		setSliderSize : function( sb ) {
			sb = $(sb);
			
			var dn = this.dataNames;
			
			var track = sb.data(dn.track);
			var sw = $(sb.data(dn.scrollWrap));
				sw.data(dn.maxScroll, (sw[0].scrollWidth - sw[0].clientWidth));
			
			if( !track.is(":hidden") ) {
				var slider = sb.data(dn.slider);
				var trackSize = track.data(dn.currSize);
				var w = Math.round(track[0].clientWidth * (sw[0].clientWidth / sw[0].scrollWidth));
				
				// Make sure it gets the exact width
				slider.width(w).width( (w - (slider[0].offsetWidth - w)) );
				
				var sliderSize = { w: slider[0].offsetWidth, h: slider[0].offsetheight };
				var maxCords = { x: (trackSize.w - sliderSize.w), y: (trackSize.h - sliderSize.h) };
				
				slider
				.data(dn.currSize, sliderSize)
				.data(dn.maxCords, maxCords);
			}
			
			if( sw[0].clientWidth <= 0 || sw[0].clientWidth >= sw[0].scrollWidth ) {
				sb.hide();
			} else {
				sb.show();
			}
			
			sb.css("opacity", "");
		},
		
		positionSlider : function(slider, x, y) {
			var dn = $.scrollContainer.dataNames;
				
			var slider = $(slider);
			var track = slider.data(dn.track);
			
			slider.css({"left" : Math.round(x) +"px", "top" : Math.round(y) +"px"});
		},
		
		calcContentSize : function( content, panel ) {
			var w = 0;
			var $this = this;
			var items = [];
			
			$(content).children().each(function(i){
				var child = $(this)[0];
				var ow = child.offsetWidth;
				var img = $("img", child);
				
				// HACKING!! The image may not be fully loaded at this point,
				// so the images that has not finished loading needs to saved and monitored,
				// so that the size can be set again, when they are loaded.
				if( !img[0].complete ) {
					items.push(img);
				}
				
				var ml = parseInt($.curCSS(child, "margin-left", false));
					if( isNaN(ml) ) ml = 0;
				var mr = parseInt($.curCSS(child, "margin-right", false));
					if( isNaN(mr) ) mr = 0;
				
				w += (ow + ml + mr);
			});
			
			// Recall this function when all images have completed loading
			if( items.length ) {
			
				setTimeout(function() {
					var thisFunc = arguments.callee;
					var itemCount = items.length;
					var allLoaded = true;
					
					for( var i=0; i < itemCount && allLoaded; i++ ) {
						var img = $(items[i])[0];
						allLoaded = img.complete;
					}
					
					if( !allLoaded )
						setTimeout(thisFunc, 100);
					else
						$this.calcContentSize(content, panel);
				}, 100);
			}
			
			this.setContentSize(panel, content, w);
		},
		
		setContentSize : function( panel, content, w ) {
			$(content).width(w);
			this.setSliderSize( $(panel).data(this.dataNames.scrollBar) );
		},
		
		actions : {
			scrollUp : function(e) {
				$.scrollContainer.events.onBtnMouseDown(e, this, -1);
			},
			
			scrollDown : function(e) {
				$.scrollContainer.events.onBtnMouseDown(e, this, 1);
			},
			
			_scroll : function( btn, dir ) {
				var dn = $.scrollContainer.dataNames;
				var sb = $(btn.data(dn.scrollBar));
				var sc = $(sb.data(dn.scrollContainer));
				var setup = sc.data(dn.setup);
				
				var btn = $([]).add(btn);
				if( btn.length <= 0 )
					return;
				
				var sw = $([]).add(btn.data(dn.scrollWrap));
				if( sw.length <= 0 )
					return;
				
				dir = Math.max(-1, Math.min(1, dir));
				var step = setup.stepSize * dir;
				var nextStep = sw.scrollLeft() + step;
					nextStep = Math.max(0, Math.min(sw.data(dn.maxScroll), nextStep));
				
				sw.scrollLeft( nextStep );
				this._scrolled(sw);
			},
			
			_scrolled : function( sw ) { // sw = div.scroll-wrap
				var dn = $.scrollContainer.dataNames;
				
				var sb = sw.data(dn.scrollBar);
				var slider = $([]).add(sb.data(dn.slider));
				
				if( slider.length > 0 ) {
					var maxScroll = sw.data(dn.maxScroll);
					var currScroll = sw.scrollLeft();
					var pct = currScroll / maxScroll;
					var maxCords = slider.data(dn.maxCords);
					
					var x = maxCords.x * pct;
					$.scrollContainer.positionSlider(slider, x, 0);
				}
			}
		},
		
		events : {
			onBtnMouseDown : function(e, elm, dir) {
				var dn = $.scrollContainer.dataNames;
				
				var btn = $(elm);
				var sb = $(btn.data(dn.scrollBar));
				var sc = $(sb.data(dn.scrollContainer));
				var setup = sc.data(dn.setup);
				/*if( btn.hasClass("png-img") )
					btn = btn.parent();*/
				
				$.scrollContainer.actions._scroll(btn, dir);
				
				btn
				.data( dn.interval, setInterval(function() {$.scrollContainer.actions._scroll(btn, dir); }, setup.stepSpeed) )
				.one("mouseup", this.onBtnMouseUp)
				.one("mouseleave", function(e) { $(this).mouseup(); });
				
				disableSelection( $("body")[0] );
				e.preventDefault();
			},
			
			onBtnMouseUp : function(e) {
				clearInterval( $(this).data($.scrollContainer.dataNames.interval) );
				enableSelection( $("body")[0] );
			},
			
			onScroll : function(e) {
				$.scrollContainer.actions._scrolled($(this));
			},
			
			onDrag : function(e) {
				var dn = $.scrollContainer.dataNames;
				
				var b = $(this);
				var slider = b.data(dn.slider);
				var tp = slider.data(dn.trackPos);
				var smp = slider.data(dn.sliderMousePos);
				var mc = slider.data(dn.maxCords);
				var sw = slider.data(dn.scrollWrap);
				var ms = sw.data(dn.maxScroll);
				
				var y = 0;
				var x = e.pageX - parseInt(tp.left) - parseInt(smp.x);
					x = Math.max(0, Math.min(mc.x, x));
				
				sw.scrollLeft( Math.round(ms * (x / mc.x)) );
				$.scrollContainer.positionSlider(slider, x, y);
			},
			
			onSliderMouseDown : function(e) {
				var dn = $.scrollContainer.dataNames;
				
				var slider = $(this);
				var sliderPos = slider.position();
				var sliderSize = slider.data(dn.currSize);
				
				var track = slider.parent(".track");
				var trackPos = track.offset();
				
				var slideMousePos = { x: (e.pageX - (trackPos.left + sliderPos.left)), y: (e.pageY - (trackPos.top + sliderPos.top)) };
				
				slider
				.data(dn.trackPos, trackPos)
				.data(dn.sliderMousePos, slideMousePos);
				
				var b = $("body")
				.data(dn.slider, slider)
				.mousemove($.scrollContainer.events.onDrag)
				.mouseup($.scrollContainer.events.onMouseUp);
				
				disableSelection( b[0] );
				e.preventDefault();
			},
			
			onMouseUp : function(e) {
				var dn = $.scrollContainer.dataNames;
				
				var b = $(this)
				.unbind("mousemove", this.onDrag)
				.data(dn.slider, null);
				
				enableSelection( b[0] );
			}
		}
	}
	
	$.fn.scrollContainer = function( setup, onBuildComplete ) {
		
		// Data Names
		var dn = $.scrollContainer.dataNames;
		var setup = $.extend($.scrollContainer.defaultSetup, setup);
		
		function init( i ) {
			$.scrollContainer.buildScrollbar( $(this).data(dn.setup, $.extend({}, setup)), onBuildComplete );
		}
		
		// Start
		return this.each( init );
	}
})(jQuery);


/*(function($) {
	$.fn.scrollContainer = function( setup ) {
		// Start
		var o = $("<div></div>").css({"border": "1px solid #f00", "height": "200px", "background": "#0f0", "clear": "both"});
		this.after( o );
		this.add($("#mainwrap, #maintopwrap")).mouseenter(function() { o.html(o.html() + "enter&nbsp;&nbsp;&nbsp;&nbsp;"); });
	}
})(jQuery);*/

function initScroll(obj) {
	var srlC = obj;
	var totalWidth = 0;
	var refName = srlC.className.split("ref-")[1].split(" ")[0];

	srlC.ref = d.getElementById(refName);
	for (var i=0; i<srlC.ref.childNodes.length; i++) {
		if(srlC.ref.childNodes[i].tagName == "DIV") {
			var oDiv = srlC.ref.childNodes[i];
			oDiv.style.position = "absolute";
			oDiv.style.top = "0px";
			oDiv.style.left = totalWidth + "px";
			totalWidth += oDiv.offsetWidth;
			galItems.push(oDiv);
			oDiv.nr = galItems.length-1;
			oDiv.cnt = "galleryCounter" + refName.split("scrollContent")[1];

			if (oDiv.childNodes[0] && oDiv.childNodes[0].title != undefined) {
				oDiv.txt = oDiv.childNodes[0].title;
				oDiv.childNodes[0].title = "";
			}

			// only do the alt layer stuff if relevant
			if (oDiv.childNodes[0].childNodes[0] && oDiv.childNodes[0].childNodes[0].alt != undefined && oDiv.childNodes[0].childNodes[0] && oDiv.childNodes[0].childNodes[0].alt != "") {
				oDiv.alt = oDiv.childNodes[0].childNodes[0].alt;
				oDiv.childNodes[0].childNodes[0].alt = "";
				oDiv.childNodes[0].onmouseover = function() { galleryShowAlt(this); }
				oDiv.childNodes[0].onmouseout = function() { galleryHideAlt(); }
			}

			if (oDiv.className == "sel") {
				galCur = oDiv.nr;
			}
		}
	}

	if (totalWidth > 0) {
		srlC.srlLeft = $("div.scrollLeft", srlC).get(0); //getElementsByClassName(srlC, "div", "scrollLeft")[0];
		srlC.srlRight = $("div.scrollRight", srlC).get(0); //getElementsByClassName(srlC, "div", "scrollRight")[0];
		srlC.srlDrag = $("div.scrollDrag", srlC).get(0); //getElementsByClassName(srlC, "div", "scrollDrag")[0];
		
		srlC.totalWidth = srlC.srlRight.offsetLeft - srlC.srlLeft.offsetLeft - srlC.srlLeft.offsetWidth - 4;
		srlC.zeroPos = srlC.srlLeft.offsetLeft + srlC.srlLeft.offsetWidth + 2;
		srlC.contentWidth = d.getElementById(refName).scrollWidth;
		srlC.visibleWidth = srlC.ref.parentNode.offsetWidth;

		srlC.ref.parentNode.style.width = totalWidth + "px";
		srlC.ref.parentNode.style.clip = "rect(0px,"+srlC.visibleWidth+"px,"+srlC.parentNode.offsetHeight+"px,0px)";
	
		if (totalWidth > srlC.visibleWidth) {

			srlC.srlDrag.onmousedown = function() {
				disableSelection(oBody);
				var srlC = this.parentNode;
				iVal = setInterval( function() { doDrag(srlC) },10);
			}
			
			srlC.srlLeft.onmousedown = function() {
				disableSelection(oBody);
				var srlC = this.parentNode;
				iVal = setInterval( function() { doScroll(srlC, -10) },10);
			}

			srlC.srlRight.onmousedown = function() {
				disableSelection(oBody);
				var srlC = this.parentNode;
				iVal = setInterval( function() { doScroll(srlC, 10) },10);
			}

		} else {
			$(srlC).addClass("noscroll"); // srlC.className += " noscroll";
		}
	} else {
		$(srlC).addClass("nogallery"); // srlC.className += " nogallery";
	}
}


/*****************
 * HOTEL GALLERY *
 *****************/

function hotelGallery(obj) {
	d.getElementById("hotelGalleryImg").src = obj.parentNode.txt;
	galItems[galCur].className = "";
	galCur = obj.parentNode.nr;
	galItems[galCur].className = "sel";
	d.getElementById(obj.parentNode.cnt).innerHTML = "("+(obj.parentNode.nr+1)+"/"+galItems.length+")";
}

function hotelGalleryNav(dir, id) {
	galItems[galCur].className = "";
	galCur+=dir;
	if (galCur < 0) {
		galCur = galItems.length-1;
	}
	if (galCur >= galItems.length) {
		galCur = 0;
	}
	hotelGallery(galItems[galCur].childNodes[0]);
	galItems[galCur].className = "sel";
	d.getElementById(id).innerHTML = "("+(galCur+1)+"/"+galItems.length+")";
}

function hotelSlideshow(obj, start, end, id) {

	if (!galSlide) {
		galIval = setInterval(function() {hotelGalleryNav(1,id)},3000);
		setTimeout("galSlide=true",100);
		obj.innerHTML = end;
	} else {
		obj.innerHTML = start;
	}

}

function galleryShowAlt(obj) {
	var oAlt	= d.getElementById("galleryAltText");
	var newObj	= d.createElement("div");
	newObj.className = "rightBg";

	oAlt.innerHTML = obj.parentNode.alt;
	oAlt.appendChild(newObj);
	oAlt.style.zIndex = 100;	

	oAlt.style.visibility = "visible";

	updateAltText();
		
}

function updateAltText() {

	var oAlt = d.getElementById("galleryAltText");
	var leftPos = xMouse - oAlt.offsetWidth / 2;
	if (leftPos + oAlt.offsetWidth+26  > d.getElementById("contentwrap").offsetWidth + d.getElementById("contentwrap").offsetLeft) {
		leftPos =  d.getElementById("contentwrap").offsetWidth + d.getElementById("contentwrap").offsetLeft - oAlt.offsetWidth-26;
	}
	
	if (leftPos < d.getElementById("contentwrap").offsetLeft+16) {
		leftPos = d.getElementById("contentwrap").offsetLeft+16;
	}
	oAlt.style.left = leftPos + "px";
	oAlt.style.top = yMouse + 15 + "px";


	if (oAlt.style.visibility == "visible") {
		setTimeout("updateAltText()",20);
	}
	
}


function galleryHideAlt() {
	d.getElementById("galleryAltText").style.visibility = "hidden";
	d.getElementById("galleryAltText").style.left = "0px";
}


function doDrag(srlC) {
	var newPos = xMouse-getAbsLeft(srlC)-(srlC.srlDrag.offsetWidth/2);

	scrollAction(srlC, newPos);
}

function doScroll(srlC, dir) {
	var newPos = srlC.srlDrag.offsetLeft+dir;
	scrollAction(srlC, newPos);
}

function scrollAction(srlC, newPos) {

	if (newPos < srlC.srlLeft.offsetLeft + srlC.srlLeft.offsetWidth + 2) {
		newPos = srlC.srlLeft.offsetLeft + srlC.srlLeft.offsetWidth + 2;
	}

	if (newPos > srlC.srlRight.offsetLeft - srlC.srlDrag.offsetWidth - 2) {
		newPos = srlC.srlRight.offsetLeft - srlC.srlDrag.offsetWidth - 2;
	}

	var pct = 100/(srlC.totalWidth-srlC.srlDrag.offsetWidth)*(srlC.srlDrag.offsetLeft-srlC.zeroPos)/100;
	srlC.ref.style.left = Math.round((srlC.visibleWidth-srlC.ref.offsetWidth)*pct)+"px";
	srlC.srlDrag.style.left = newPos+"px";
}

	/* global life gallery */
function glGalleryNav(dir, id) {
	galCur+=dir;
	if (galCur < 0) {
		galCur = galItems.length-1;
	}
	if (galCur >= galItems.length) {
		galCur = 0;
	}
	d.getElementById(id).innerHTML = "("+(galCur+1)+"/"+galItems.length+")";
	d.getElementById("glGalleryImg").src = galItems[galCur];
}

function glSlideshow(obj, start, end, id) {

	if (!galSlide) {
		galIval = setInterval(function() {glGalleryNav(1,id)},3000);
		setTimeout("galSlide=true",100);
		obj.innerHTML = end;
	} else {
		obj.innerHTML = start;
	}

}


/* get mouse position */

function getmouse(e) {
	if (!e) var e = window.event;
	if (e.pageX || e.pageY) {
		xMouse = e.pageX;
		yMouse = e.pageY;
	}
	else if (e.clientX || e.clientY) {
		xMouse = e.clientX + d.body.scrollLeft + d.documentElement.scrollLeft;
		yMouse = e.clientY + d.body.scrollTop + d.documentElement.scrollTop;
	}
}

/* disable text selection */
function disableSelection(target) {

	// IE
	if (typeof target.onselectstart!="undefined") { 
		target.onselectstart=function(){return false}
	//Firefox 
	} else if (typeof target.style.MozUserSelect!="undefined") {
		target.style.MozUserSelect="none";
	// Other (ie: Opera)
	} else {
		target.onmousedown=function(){return false}
	}
	target.style.cursor = "default";

}

/* enable text selection */
function enableSelection(target) {

	// IE
	if (typeof target.onselectstart!="undefined") { 
		target.onselectstart=function(){return true}
	//Firefox 
	} else if (typeof target.style.MozUserSelect!="undefined") {
		target.style.MozUserSelect="text";
		// fix focus/drag issue
		d.getElementById("contentwrap").focus();
	// Other (ie: Opera)
	} else {
		target.onmousedown=function(){return true}
	}
	target.style.cursor = "default";

}



/************
 * CALENDAR *
 ************/
function showCalendar(obj, frm, year, month){
	if (obj != "") {
		d.getElementById("calendarwrap").style.left = (getAbsLeft(obj) - 180) + "px";
		d.getElementById("calendarwrap").style.top = (getAbsTop(obj) + 15) + "px";
	}
	d.getElementById("calendarwrap").style.visibility = "visible";
	// d.getElementById("calClose").style.display = "block";
	doSifr('#calendarwrap .bn span');

	if (month == undefined) { month = aToday["month"]};
	if (year == undefined) {year = aToday["year"]};
	var output = "";
	var zero = "00";
	var today = new Date();
	var curYear = aToday["year"];
	var curMonth = aToday["month"];
	var thisDay;  
	var monthname;
	var weekNum;
	var nextMonth;
	var nextYear;
	var prevMonth;
	var prevYear;
	var monthDays = new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);

	thisDay=today.getDate();

	today.setMonth(month-1, 1);
	today.setFullYear(year);

	if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
		monthDays[2]=29; 

	nDays=monthDays[month]; 
	firstDay=today;
	firstDay.setDate(0);
	startDay=firstDay.getDay(); 
	output += "<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" class=\"cal\"><tr class=\"info firstRow\"><td class=\"navPrev\">";
	monthname = formdata["monthnames"][month-1].text;

	nextMonth = (month == 12) ? 1 : month+1;
	nextYear = (nextMonth < month) ? year+1 : year;
	
	prevMonth = (month == 1) ? 12 : month-1;
	prevYear = (prevMonth > month) ? year-1 : year;

	// check if parent-bn should be available
	if (year > curYear || (year == curYear && month > curMonth)) {
	   output += "<a href=\"javascript:showCalendar('','"+frm+"',"+prevYear+","+prevMonth+")\"></a>";
	} else {
		output += "&nbsp;";
	}
	
	output += "</td><td colspan=\"6\" class=\"period\">" +monthname+" "+year+"</td><td class=\"\lastCol navNext\">";

	// check if next-bn should be available
	if (year-curYear < formdata["year"].length-1 || (year-curYear == formdata["year"].length-1 && month < 12)) {
		output += "<a href=\"javascript:showCalendar('','"+frm+"',"+nextYear+","+nextMonth+")\"></a>";
	} else {
		output += "&nbsp;";
	}
	output += "</td></tr><tr class=\"weekdays\"><td>&nbsp;</td><td>"+formdata["weekdays"][0].text.substring(0,1)+"</td><td>"+formdata["weekdays"][1].text.substring(0,1)+"</td><td>"+formdata["weekdays"][2].text.substring(0,1)+"</td><td>"+formdata["weekdays"][3].text.substring(0,1)+"</td><td>"+formdata["weekdays"][4].text.substring(0,1)+"</td><td>"+formdata["weekdays"][5].text.substring(0,1)+"</td><td class=\"lastCol\">"+formdata["weekdays"][6].text.substring(0,1)+"</td></tr>";

	weekNum = getWeek(year, month, 1);

	output += "<tr><td class=\"weeknr\">"+weekNum+"</td>"; 
	column = 0;   

	for (i=0; i<startDay; i++){ 

		sClass = "noday";
		if (column == 5 || column == 6) sClass = "nodayweekend";
			output += "<td class=\""+sClass+"\">&nbsp;</td>";
			column++;
	}   
	for (i=1; i<=nDays; i++){
		func = "no note";
		sClass = "defday";
		lnk = true;
	
		if (column == 5) sClass = "weekend";
		if (column == 6) sClass = "weekend lastCol";

		if (i == thisDay && year == curYear && month == curMonth) {
			sClass += " curday";
		}
		if (i < thisDay && year == curYear && month == curMonth) {
			sClass += " prevday";
			lnk = false;
		}
	
		if (lnk) {
			output += "<td class=\""+sClass+"\"><a href=\"javascript:calendarSetDate('"+frm+"',"+i+","+month+","+year+");hideCalendar();\">"+i+"</a></td>";
		} else {
			output += "<td class=\""+sClass+"\">"+i+"</td>";
		}
		column++;

		if (column == 7 && i<nDays){ 
			weekNum = getWeek(year, month, i+startDay+1);
			output += "</tr><tr><td class=\"weeknr\">"+weekNum+"</td>"; 
			column = 0;
		}   
	}

	if (column != 0) {
		while (column < 7) {
		sClass = "noday";
		if (column == 5) sClass = "nodayweekend";
		if (column == 6) sClass = "nodayweekend lastCol";
		output += "<td class=\""+sClass+"\">&nbsp;</td>";
		column++;
		}  
		output += "</tr>"; 
	}

	output += "<tr class=\"calbn\"><td colspan=\"8\"><a href=\"javascript:;\" onClick=\"showCalendar('','"+frm+"',"+aToday["year"]+","+aToday["month"]+");\">"+calendarTxt+"</a></td></tr>";
	output += "</table>";
	d.getElementById("calendar").innerHTML = output;
	
}

function hideCalendar() {

	d.getElementById("calendarwrap").style.visibility = "hidden";
	//d.getElementById("calClose").style.display = "none";

}

function calendarSetDate(frm, day, month, year) {

	var oForm = d.forms[frm];

	oForm.date.value = day;
	oForm.month.value = month;
	oForm.year.value = year;

	var sel = d.getElementById(oForm.name+"_date");
	sel.getElementsByTagName("a")[0].innerHTML = day;

	var sel = d.getElementById(oForm.name+"_month");
	sel.getElementsByTagName("a")[0].innerHTML = getText("month", month);

	var sel = d.getElementById(oForm.name+"_year");
	sel.getElementsByTagName("a")[0].innerHTML =  getText("year", year);

}


function getWeek(year,month,day){

	//lets calc weeknumber the cruel and hard way :D
    //Find JulianDay 
    var a = Math.floor((14-(month))/12);
    var y = year+4800-a;
    var m = (month)+(12*a)-3;
    var jd = day + Math.floor(((153*m)+2)/5) + 
                 (365*y) + Math.floor(y/4) - Math.floor(y/100) + 
                 Math.floor(y/400) - 32045;      // (gregorian calendar)
    //now calc weeknumber according to JD
    var d4 = (jd+31741-(jd%7))%146097%36524%1461;
    var L = Math.floor(d4/1460);
    var d1 = ((d4-L)%365)+L;
    NumberOfWeek = Math.floor(d1/7) + 1;
    return NumberOfWeek;        

}


/***************************
 * VARIOUS FORM VALIDATION *
 ***************************/
function isvalid(arr) {
	var ok = true;
	for (t=0; t<arr.length; t++) {
		switch (arr[t][1]) {

			case "formvalue":
			if (arr[t][0].value == "") {
				ok = false;
				if (arr[t][0].parentNode.className == "form-input") {
					var o = d.getElementById("booking_"+arr[t][0].name);
					replaceClass(o, "iTxt", "iTxtMark");
				}
			} else {
				if (arr[t][0].parentNode.className == "form-input") {
					var o = d.getElementById("booking_"+arr[t][0].name);
					replaceClass(o, "iTxtMark", "iTxt");
				}
			}
			break;

			case "hash":
			var aData = arr[t][0].value.split("#");
			for (i=0; i<aData.length; i++) {
				if (aData[i] == "") {
					ok = false;
				}
			}
			break;

			case "email":
			ok = checkEmail(arr[t][0].value);
			break;
		}

	}
	return ok;
}

function checkEmail(inputvalue){	
    var pattern=/^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\.([a-zA-Z])+([a-zA-Z])+/;
    if(pattern.test(inputvalue)){         
		return true;  
    }else{   
		return false;
    }
}


/*****************************************
 * LAYER FOR SHOWING VARIOUS INFORMATION *
 *****************************************/
function initInfoLayer() {
	$("#infoLayer .content > div[id^='info-']").hide();
	/*for (var i=0; i < arr.length; i++) {
		// only hide elements with "info-" in id
		if (arr[i].id.indexOf("info-") != -1) {
			arr[i].style.display = "none";
		}
	}*/
}

function showWaitLayer(str) {
	// If any wait layer is shown - remove it
	$("#wait-layer").remove();

	// Show the dark background
	showDim();
	
	if (str) {
		var waitText = str;
	} else {
		waitText = sPleaseWait;
	}
	
	
	var wait = $('<div id="wait-layer"></div>')
	.append('<div class="btn btn-neutral"><b class="png-img"></b></div>')
	.append('<div class="content">'+ waitText +'</div>')
	.css({"position" : "fixed", "opacity" : 0});
	
	$("body").append(wait);
	
	var xy = calcLayerViewportCenter(wait);
	
	wait
	.css({ "top" : xy.y +"px", "left" : xy.x +"px" })
	.fadeTo(300, 1);
	
	
	
	/*var pWait = d.createElement("div");
	pWait.setAttribute("id", "pleaseWait");
	oBody.appendChild(pWait);
	
	var cnt = d.createElement("div");
	cnt.className = "content";
	pWait.appendChild(cnt);
	cnt.innerHTML = sPleaseWait;	// text from general data

	// set x-position and make sure it stays in visible area
	pWait.style.left = xMouse-362 + "px";
	if (pWait.offsetLeft < 0) {
		pWait.style.left = xMouse+20 + "px";
	}
	// set y-position and make sure it stays in visible area
	if(yMouse-80+pWait.offsetHeight > d.getElementById("pageEnd").offsetTop) {
		pWait.style.top = d.getElementById("pageEnd").offsetTop - pWait.offsetHeight - 80 + "px";
	} else {
		pWait.style.top = yMouse - 90 + "px";
	}
	*/
	
	
	//wait.style.visibility = "visible";
}

function calcILxy( x, y, btn, il) {
	il.css("position", "absolute"); // this is used to negate any position fixed on the info layer
	
	if( btn && (x == -1 || y == -1) && il ) {
		btn = $(btn);
		il = $(il);
		
		var ilH = il.get(0).offsetHeight;
		var ilW = il.get(0).offsetWidth;
		
		var cw = $("#contentwrap");
		var cwOff = cw.offset();
		var cwW = cw.innerWidth();
		var cwH = cw.innerHeight();
		
		var btnNode = btn.get(0)
		var btnW = btnNode.offsetWidth;
		var btnH = btnNode.offsetHeight;
		var btnPos = btn.offset();
			btnPos.left -= cwOff.left;
			btnPos.top -= cwOff.top;
		
		var shaddowW = 11;
		var shaddowH = 20;
		var spacing = 3;
		
		var shaddowWCalc = (shaddowW - spacing);
		
		/* Calc X */
		if( x == -1 ) {
			/* Position on the right side of the button */
			x = btnPos.left + btnW - shaddowWCalc;
			
			/* If it Doesn't fit inside the boudaries of the contentwrap on that side... */
			if( (x + (ilW - shaddowW)) > cwW ) {
				/* ...then attempt to move it to the left side of the button... */
				tempX = btnPos.left - (ilW - shaddowWCalc);
				
				/* ...but if it doesn't fit there, try to position it so
				   that the right side of the layer is in line with the right
				   side of the button */
				if( tempX < 0 ) tempX = (btnPos.left + btnW) - (ilW - shaddowW);
				
				/* If the layer now fits this side, the set x to that position... */
				if( tempX >= 0 ) {
					x = tempX;
				} else {
					/* ...otherwise position it at the right side again,
					   but this time align the left side of the layer and the
					   left side of the button */
					x = btnPos.left - shaddowW;
					
					/* If it still doesn't fit, then move the layer so that the
					   right side of the layer is at the same position as the
					   contentwrap's right side*/
					if( (x + ilW) > cwW )
						x = cwW - (ilW + shaddowW);
				}
			}
		}
		
		/* Calc Y */
		if( y == -1 ) {
			/* Position layer so the top of the layer is in line with top of the button */
			y = btnPos.top;
			
			/* Determine wether the layer is covering the buttons area or not */
			var overLeftSide = ((x + ilW) > (btnPos.left + shaddowWCalc));
			var overRightSide = (x < (btnPos.left + btnW - shaddowWCalc));
			var isCovering = (overLeftSide && overRightSide);
			
			//alert( overLeftSide +" && "+ overRightSide +" == "+ isCovering);
			//alert(x +" <= "+ (btnPos.left + btnW - shaddowW) +" ("+ btnPos.left +" + "+ btnW +" - "+ shaddowW +"+)");
			
			/* If layer is covering the button, then position it beneath the button */
			if( isCovering )
				y += btnH + spacing;
			
			/* If the layer doesn't fit inside the boundaries of the contentwrap, move it up
			   so the bottom of the layer is aligned with the bottom of the button... */
			if( (y + ilH) > cwH ) {
				y = btnPos.top - (ilH - (shaddowH - spacing));
				
				/* ...but only if it is not covering, as it then should be above the button */
				if(!isCovering) y += btnH + spacing;
			}
		}
		
	} else if(il) {
		var center = calcLayerViewportCenter(il);
		if( x == -1 || y == -1 )
			il.css("position", "fixed");
		
		x = (x == -1)? center.x : x;
		y = (y == -1)? center.y : y;
	}
	
	return { x: x, y: y };
}

function calcLayerViewportCenter( layer ) {
	var xy = { x:0, y:0 };
	var l = $([]).add(layer);
	
	if( l.length <= 0 )
		return xy;
	
	l = l[0];
	
	var vps = getViewportSize();
	var ls	= { w: l.offsetWidth, h: l.offsetHeight };
	
	return { x: ((vps.w - ls.w) /2), y: ((vps.h - ls.h) /2) };
	
	/*var ls = { w: l.offsetWidth, h: l.offsetHeight };
	
	var vps = getViewportSize();
	var $scroll = getScrolledTo();
	
	var x = ((vps.w - ls.w) / 2) + $scroll.l;
	var y = ((vps.h - ls.h) / 2) + $scroll.t;
	
	return { x: x, y: y };*/
}

function getViewportSize() {
	var vpSize = {w:0 ,h:0};
	
	if( window.innerWidth ) {
		vpSize.w = window.innerWidth;
		vpSize.h = window.innerHeight;
	} else if( document.documentElement ) {
		vpSize.w = document.documentElement.clientWidth;
		vpSize.h = document.documentElement.clientHeight;
	}
	
	return vpSize;
}

function getScrolledTo( elm ) {
	var o = $([]).add(elm); //(o.length <= 0)? $("body")[0] : o[0];
	var s = { l:0, t:0 };
	
	if( o.length <= 0 ) {
		var b = $("body")[0];
		var de = document.documentElement;
		s.t = (typeof(window.pageYOffset) != "undefined")? window.pageYOffset : Math.max(b.scrollTop, de.scrollTop);
		s.l = (typeof(window.pageXOffset) != "undefined")? window.pageXOffset : Math.max(b.scrollLeft, de.scrollLeft);
	} else {
		s.t = o[0].scrollTop;
		s.l = o[0].scrollLeft;
	}
	
	return s;
}

function showInfoLayer(contentID, x, y, w, btn) {
	if( !pageLoaded || contentID == "externallink")
		return;
	
	contentID = contentID.replace(/^('|")+|('|")+$/g, "");
	w = parseInt(w);
	
	if(jQuery.inArray(w, [220, 362, 450, 655]) < 0) { w = 362; }

	var il = $("#infoLayer").attr("class", "w"+w);
	var isShowing = (il.data("contentID") == contentID);
	
	$("#info-"+ contentID +":gt(0)", il).remove();
	
	if( !isShowing )
		il.data("contentID", contentID);
	
	$(".content-wrap .bn .btn", il).not(".content-wrap .content .btn").attr("class", "btn btn-close"+ w);
	
	il.show();
	
	if( !isShowing ) {
		$("#infoLayer .content > [id^='info-']")
		.hide()
		.filter("#info-"+ contentID)
		.show();
		
		il.css("visibility", "hidden");
	}
	
	xy = calcILxy(x, y, btn, il);
	
	il.css({"top" : xy.y +"px", "left" : xy.x +"px", "visibility" : "visible"});
	
	
	/*if (iLayer.style.visibility != "visible") {
		var arr = d.getElementById("infoLayerContent").getElementsByTagName("div");
		for (var i=0; i < arr.length; i++) {

			if (arr[i].id == "info-"+cls) {
				arr[i].style.display = "block";
			} else {
				// only hide elements with "info-" in id
				if (arr[i].id.indexOf("info-") != -1) {
					arr[i].style.display = "none";
				}
			}
		}

		// if position is defined use it
		if (x != -1 && y != -1) {
			iLayer.style.left = x+"px";
			iLayer.style.top = y+"px";
		} else {
			// set x-position and make sure it stays in visible area
			iLayer.style.left = xMouse-d.getElementById("contentwrap").offsetLeft-w-22-10 + "px";
			if (iLayer.offsetLeft < 0) {
				var rightPos = xMouse-d.getElementById("contentwrap").offsetLeft + 20;
				if (rightPos+iLayer.offsetWidth > d.getElementById("contentwrap").offsetWidth) {
					iLayer.style.left = d.getElementById("contentwrap").offsetWidth-iLayer.offsetWidth + "px";
				} else {
					iLayer.style.left = rightPos + "px";
				}
			}
			// set y-position and make sure it stays in visible area
			if(yMouse+iLayer.offsetHeight > d.getElementById("pageEnd").offsetTop-20) {
				iLayer.style.top = d.getElementById("pageEnd").offsetTop - iLayer.offsetHeight - 100 + "px";
			} else {
				iLayer.style.top = yMouse - 90 + "px";
			}
		}

		//doSifr("#infoLayerTopbar span");
		iLayer.style.visibility = "visible";
		//iLayer.getElementsByTagName("span")[0].style.display = "block";
	}*/

}

function hideInfoLayer() {
	/*var arr = d.getElementById("infoLayerContent").getElementsByTagName("div");
	for (var i=0; i < arr.length; i++) {
		if (arr[i].id.indexOf("info-") != -1) {
			arr[i].style.display = "none";
		}
	}*/
	
	//iLayer.getElementsByTagName("span")[0].style.display = "none";
	
	initInfoLayer()
	$("#infoLayer").hide().data("contentID", null);
	//iLayer.style.visibility = "hidden";
}


/********************
 * READ MORE / LESS *
 ********************/
/*
 function doReadmore(on, off) {
	$("#"+ off).hide();
	$("#"+ on).show();
	checkPageHeight();
}
*/

function initReadmore() {
	// show nav if more content than visible
	$(".dynReader").each(function() {
		if ($(".mainText", this).height() < $(".mainText .inner", this).height()) {
			$(this).find(".nav").show();
		}
	});
}

function doReadmore(o, stat) {
	var h = $(o).closest(".dynReader").find('.mainText .inner').height();
	$(o).closest(".dynReader").find('.mainText').animate({height:h}, function(){$(o).closest(".dynReader").removeClass('shortText').addClass('fullText');});
}
function doReadless(o, dta) {
	if (!dta) { dta = [];}
	if (!dta["offsetY"]) { dta["offsetY"] = 0; }
	
	var h = $(o).closest(".dynReader").find('.mainText .inner').height();
	$(o).closest(".dynReader").find('.mainText').animate({height:"70px"}, function(){$(o).closest(".dynReader").removeClass('fullText').addClass('shortText');});
}



/*********************
 * CHECK DESTINATION *
 *********************/

function checkDest(btn, frm, x, y) {

	var oForm = d.forms[frm];
	var emptyfields = false;

	for (var i=0; i<oForm.elements.length; i++) {
		if (oForm.elements[i].value == "" || oForm.elements[i].value == 0) {
			emptyfields = true;
		}
	}
	
	if (emptyfields) {
		showInfoLayer('selectfirst', -1, -1, 220, btn);
	} else {
		oForm.submit();
	}

}

/***************************************
 * SHOW DETAILED INFORMATION IN STEP 2 *
 ***************************************/

function showDetails(btn, str) {
	$("#infoLayer #info-traveldetails").get(0).innerHTML = '<div class="traveldetails">'+ str +'</div>';
	showInfoLayer('traveldetails', -1, -1, 220, btn);
}

/***********************************
 * SHOW BOOKING INFO ON MY TRAVELS *
 ***********************************/

function showBookingDetails(str, dest) {
	$("#"+dest).get(0).innerHTML = str;
	checkPageHeight();
}

function getBookingDetails(dest, bookingno, password, obj) {
	showAccordian(obj);

	if (!obj.dataLoaded) {
		showMyBooking(dest, bookingno, password);
		obj.dataLoaded = true;
	}
}


/********************
 * VALIDATE BOOKING *
 ********************/
function validateBooking(frm) {

	var ok = false;
	$( d.forms[frm] ).each(function() {
		var error = null;
		var $form = $(this)[0];
		var $countryVal = $($form["country"]).val();
		var countryEmpty = ($countryVal== "" || $countryVal == "0");
		
		if( ( $($form["flighttype"]).val() == "flightonly" || $($form["flighttype"]).val() == "flightonly") && countryEmpty )
			error = "choosecountry";
		
		if( !error ) {
			var $childAges = $($form["childrenage"]).trigger("validate");
			var ages = $($.trim($childAges.val()).split(","));
			var ageCount = ages.length;
			if ($($form["childrenage"]).val() == "") { ageCount = 0; }
			
			if(parseInt($($form["children"]).val()) == ageCount) {
				ages.each(function() {
					var age = parseInt($(this)[0]);
					if( age < 0 || age > 18 ) {
						error = "childrenage";
						return false;
					}
				});
			} else {
				error = "childrenage";
			}
		}
		
		if( error ) {
			ok = false;
			showInfoLayer(error, 150, 190, -1);
		} else {
			ok = true;
		}
	})

	return ok;
}

function newChildages(obj) {
	var oForm = $(d.forms["name='booking'"]);
	var childs = $("form[name='booking'] input[name='children']").val();
	var ageStr = "";
	for (var t=1; t<= childs; t++) {
		ageStr += $("input[name='booking_childage"+t+"_txt']").val() + ",";
	}
	$("form[name='booking'] input[name='childrenage']").val(ageStr.slice(0, -1));
}

/*
function newChildages(obj) {
	var oForm = $(d.forms["name='booking'"]);
	var childs = $("input[name='children']", oForm).val();
	var childs = $("form[name='booking'] input[name='children']").val();
	var ageStr = "";
	for (var t=1; t<= childs; t++) {
		ageStr += $("input[name='booking_childage"+t+"_txt']").val() + ",";
	}
	$("input[name='childrenage']", oForm).val(ageStr.slice(0, -1));
}
*/


/*********
 * POPUP *
 *********/

function popUp(url,nam,w,h,extra){		
	var str='height='+h+',width='+w+','+extra;
	if(parseInt(navigator.appVersion)>3) {
		str+=',left='+(screen.width -w)/2+',top='+parseInt((screen.height -h)/3);
	}
	if(nam.indexOf(" ") != -1) {
		nam = replaceStr(" ", "_", nam);
	}
		
	popup=window.open(url,nam,str);
}

function checkPopUp(url) {
	if (popup.closed || popup.closed == undefined) {
		hideDim();
		document.location.href = url;
	} else {
		setTimeout("checkPopUp('"+url+"')",500);
	}
}


/********************
 * CALL URL         *
 ********************/

function callUrl(url) {
	window.open(unescape(url));
}

/*****************
 * NODE HANDLING *
 *****************/
 
function getPrevSibling(nodelist, obj) {

	var found = -1;
	for (var i=0; i<nodelist.length; i++) {
		if (obj == nodelist[i]) {
			found = nodelist[i-1];
		}
	}
	
	return found;
}



/************
 * WISHLIST *
 ************/
function wishListCompare(id) {
    if (d.forms["aspnetForm"][id].value == 1) {
		replaceClass(d.getElementById(id), "btn178-right-black_checkBox1", "btn178-right-black_checkBox0");
		d.forms["aspnetForm"][id].value = 0;
	} else {
		replaceClass(d.getElementById(id), "btn178-right-black_checkBox0", "btn178-right-black_checkBox1");
		d.forms["aspnetForm"][id].value = 1;
	}
	/*if (d.forms["aspnetForm"][id].value == 1) {
		replaceClass(d.getElementById("bn-"+id), "bn-compareBox-checked-over", "bn-compareBox-over");
		d.forms["aspnetForm"][id].value = 0;
	} else {
		replaceClass(d.getElementById("bn-"+id), "bn-compareBox-over", "bn-compareBox-checked-over");
		d.forms["aspnetForm"][id].value = 1;
	}*/
}

/*
function initTabAreas() {
	var TAs = cssQuery("div.tabArea");
	
	for( var i=0; i < TAs.length; i++ ) {
		var ta = (new tabArea(TAs[i]));
	}
}
*/
function initTravelTables() {
	var trs = cssQuery("table.travels tr");
	
	for( var j=0; j < trs.length; j++ ) {
		var tr = trs[j];
		
		// avoid the header cells
		var tds = cssQuery("td", tr);
		
		if( tds.length > 0 ) {
			var overFunc = function() {
				toggleClass(this, "over", 1);
			}
			
			var outFunc = function() {
				toggleClass(this, "over", 2);
			}
			
			if( tr.onmouseenter !== undefined ) {
				tr.onmouseenter = overFunc;
				tr.onmouseleave = outFunc;
			} else {
				tr.onmouseover = overFunc;
				tr.onmouseout = outFunc;
			}
		}
	}
}

function toggleClass(elm, cn, mode, newCn) {
	/***
	 * modes:
	 * 0: toggle (add/remove - default)
	 * 1: add only
	 * 2: remove only
	 * 3: replace
	 ***/
	 var add = (mode == 1);
	 var rem = (mode == 2);
	 var rep = (mode == 3);
	 
	 if( elm && cn ) {
		var elmCn = elm.className;
		var currCnExp = new RegExp("(?:(?:\s| )|^)"+ cn +"(?:(?:\s| )|$)", "g");
		var found = currCnExp.test(elmCn);
		
		if( found && !add ) {
			var repStr = (rep && newCn)? " "+ newCn +" " : " ";
			elmCn = elmCn.replace(currCnExp, repStr);
		} else if( rep && newCn )
			cn = newCn;
		
		if( add && !found ) {
			elmCn += " "+ cn;
		}
		
		// trim spaces off the edges
		elmCn.replace(/^(\s| )|(\s| )$/g, "");
		
		elm.className = elmCn;
	 }
}

function replaceClass( elm, oldCn, newCn ) {
	toggleClass( elm, oldCn, 3, newCn );
}

function initCheckCompare() {
	var checkBtns = cssQuery(".bn-wishlistAction.bn-compareBox");
	var prevID = "";
	
	for( var i=0; i < checkBtns.length; i++ ) {
		var chkBtn = checkBtns[i];
		var dateStamp = new Date();
		
		if( !chkBtn.id ) {
			chkBtn.id = "checkBox"+ Number(dateStamp);
			
			if( chkBtn.id == prevID )
				chkBtn.id += "_"+ i;
		}
		

		var chkBoxes = cssQuery("input[type='checkbox']", chkBtn);
		
		var a = cssQuery("a", chkBtn);
			a = ( a.length > 0 )? a[0] : null;
		
		if( chkBoxes.length > 0 && a ) {
			var box = chkBoxes[0];

			with(box.style) {
				opacity = 0;
				mozOpacity = 0;
				khtmlOpacity = 0;
				filter = "alpha(opacity=0)";
				position = "absolute";
				top = "-20px";
			}
			
			box.onchange = checkCompare;
			box.container = chkBtn;
			
			chkBtn.checkbox = box;
			a.href = "javascript:checkCheckBox('"+ chkBtn.id +"');";
		}

		prevID = chkBtn.id;
	}
}

function checkCheckBox( btnId ) {
	var btn = d.getElementById(btnId);
	
	if( btn && btn.checkbox ) {
		btn.checkbox.checked = (!btn.checkbox.checked);
		btn.checkbox.value = (btn.checkbox.checked)? 1 : 0;
		btn.checkbox.onchange();
	}
}

function checkCompare() {
	var checked = this.checked;

	if( checked ) {
		replaceClass(this.container, "bn-compareBox-over", "bn-compareBox-checked-over");
		
	} else {
		replaceClass(this.container, "bn-compareBox-checked-over", "bn-compareBox-over");
	}
}


/* accordian controller */
function showAccordian(obj) {

	var oGroup = $(".groupelements", obj.parentNode);
	var oElements = $("div", oGroup[0]);
	if(oElements[0] && oElements[0].title != "") {
		for (t=0; t<oElements.length; t++) {
			$("img", oElements[t]).attr("src",oElements[t].title);
			$(oElements[t]).attr("title","");
		}
	}

	if (accordianEntry != "" && accordianEntry != obj.parentNode) {
		var oOldgroup = $(".groupelements", accordianEntry);
		$(oOldgroup[0]).css("display", "none");
		$("a", accordianEntry).toggleClass("sel");
		$("span", $("a", accordianEntry)).get(0).innerHTML = "+";
	}
	
	$(oGroup[0]).toggle();
	if ($(oGroup[0]).is(":hidden")) {
		$("span", obj).get(0).innerHTML = "+";
		$(obj).toggleClass("sel");
		accordianEntry = "";
	} else {
		$("span", obj).get(0).innerHTML = "-";
		$(obj).addClass("sel");
		accordianEntry = obj.parentNode;
	}

	checkPageHeight();
}

/*************************
 * Form keyboard control *
 *************************/

function initFormKeys() {
//	$(".hide").css({"position":"absolute", "top":"0px", "left":"0px"}).removeClass("hide");

	var obj = d.getElementsByTagName("div");
	var dd_list = Array();
	for (t=0; t<obj.length; t++) {
		if (obj[t].className.indexOf("dropdown") != -1) {
			$(obj[t]).data("selected",-1);
			$(obj[t]).data("lastKey", -1);
			dd_list.push(obj[t]);
		}
	}

	for (t=0; t<dd_list.length; t++) {
		var lnk = dd_list[t].getElementsByTagName("a")[0];
		lnk.onfocus = setFormEvents;
		$(lnk).data("parent", dd_list[t]);
//		$(lnk).keydown(doFormKey);
		$(lnk).bind("keydown", doFormKey);
	}

}

function doFormKey(e) {
	if ($(".activedd")) {
		var links = $(".activedd// :a");
		var entries = links.length;
		var parent = $(this).data("parent");

		var e=window.event || e;

		var keyunicode = e.charCode || e.keyCode;
		var char = String.fromCharCode(keyunicode).toUpperCase();

		// set mark if entry selected
		if ($(parent).data("selected") != -1) {
//			$(links[$(parent).data("selected")]).addClass("sel");
		}
		
		//	key down
		if (e.keyCode == 40 && $(parent).data("selected") < entries-1) {
			if ($(parent).data("selected") != -1) {
				$(links[$(parent).data("selected")]).removeClass("sel");
			}
			$(parent).data("selected", $(parent).data("selected")+1);
			$(links[$(parent).data("selected")]).addClass("sel");

//			this.innerHTML = links[$(parent).data("selected")].innerHTML;
			var entry =links[$(parent).data("selected")];
		}

		// key up
		if (e.keyCode == 38 && $(parent).data("selected") > 0) {
			$(links[$(parent).data("selected")]).removeClass("sel");

			$(parent).data("selected", $(parent).data("selected")-1);
			$(links[$(parent).data("selected")]).addClass("sel");

//			this.innerHTML = links[$(parent).data("selected")].innerHTML;
			var entry =links[$(parent).data("selected")];
		}

		// reset startpoint if new key is pressed
		if (char != $(parent).data("lastKey") && e.keyCode != 40 && e.keyCode != 38 && e.keyCode != 9 && e.keyCode != 13) {
			$(links[$(parent).data("selected")]).removeClass("sel");
			$(parent).data("selected", 0);
			$(parent).data("lastKey", char);
		}

		// enter
		if (e.keyCode == 13) {
//			var entry = $(links[$(parent).data("selected")]);
			var entry = links[$(parent).data("selected")];
			try {
				d.forms[entry.myid.split("_")[0]][entry.myid.split("_")[1]].value = links[$(parent).data("selected")].val;
				this.innerHTML = links[$(parent).data("selected")].innerHTML;
			} catch(ex){}
			dd_active = false;
			closeDropdown();
		}
		
		// esc
		if (e.keyCode == 27) {
			dd_active = false;
			closeDropdown();
		}

		// tab
		if (e.keyCode == 9) {
			var entry = links[$(parent).data("selected")];
			try {
				d.forms[entry.myid.split("_")[0]][entry.myid.split("_")[1]].value = links[$(parent).data("selected")].val;
			} catch(ex){}
			dd_active = false;
			closeDropdown();
			//showDropdown(this);
		}


		for (var t=0; t<links.length; t++) {
			if (links[t].innerHTML.substring(0,1).toUpperCase() == char && t > $(parent).data("selected")) {
				$(links[t]).addClass("sel");
				
				$(links[$(parent).data("selected")]).removeClass("sel");
				$(parent).data("selected", t);
				break;
			}
		}

		
	}
	
	try {
		var itemHeight	= $(links[$(parent).data("selected")]).height();
		var itemPos		= $(links[$(parent).data("selected")]).position();
		var ddHeight	= $(".activedd").height();
		
		if (itemPos.top + itemHeight > ddHeight) {
			$(".activedd").scrollTop(itemPos.top-ddHeight+itemHeight+$(".activedd").scrollTop()+2);
		}
		
		if (itemPos.top < 0) {
			$(".activedd").scrollTop($(".activedd").scrollTop()+itemPos.top);
		}
	} catch(ex) {
	}
	if (e.keyCode == 40 || e.keyCode == 38 || e.keyCode == 13) return false;
} 


function setFormEvents() {
	/*
if (!$(".activedd")) {
		var obj = new Object();
		obj.o = this;
		obj.to = setTimeout(function(){initddSelectionKey(obj.o)},50);
	} else {
		showDropdown(this);
	}
	*/
//this.click();
	//showDropdown(this);

	var obj = new Object();
		obj.o = this;
		obj.to = setTimeout(function(){initddSelectionKey(obj.o)},200);
}

function initddSelectionKey(obj){
	if (!dd_active) {
/* TEMP REMOVED */
			showDropdown(obj);
	}
	/*
	if ($(".activedd")) {
		var links = $(".activedd// :a");
		var parent = $(obj).data("parent");
	
		// set mark if entry selected
		if ($(parent).data("selected") != -1) {
			links[$(parent).data("selected")].className = "sel";
		}
	}
	*/
}


/**********************
 * Data communication *
 **********************/

/* earlier/later flights - booking step 2 */
function comBack(id, data, info) {
	$("#"+ id).html(data);
	$("#infoLayer .content").append(info);
	
	doSifr("flighttable");
}

function flightLoading(id) {
	$("#"+ id +" .moreflights").hide();
	$("#"+ id +" .flightloading").show();
	
	/*oMoreflights = $("#"+ id +" div.moreflights"); // getElementsByClassName(d.getElementById(id), "div", "moreflights", true);
	oFlightloading = $("#"+ id +" div.flightloading");  // getElementsByClassName(d.getElementById(id), "div", "flightloading", true);
	oMoreflights[0].style.display = "none";
	oFlightloading[0].style.display = "block";*/
}

function showFlightButton(str, id) {
	/*oFlightloading = getElementsByClassName(d.getElementById(id), "div", "flightloading", true);
	oMoreflights = getElementsByClassName(d.getElementById(id), "div", "moreflights", true);
	oEarlierflights = getElementsByClassName(d.getElementById(id), "a", "link blueyel-linkback", true);
	oLaterflights = getElementsByClassName(d.getElementById(id), "a", "link blueyel-link", true);

	if (str == "earlier") {
		oEarlierflights[0].style.display = "block";
		oLaterflights[0].style.display = "none";
	}

	if (str == "later") {
		oEarlierflights[0].style.display = "none";
		oLaterflights[0].style.display = "block";
	}*/

	$("#"+ id +" .link .blueyel-linkback").toggle( (str == "earlier") );
	$("#"+ id +" .link .blueyel-link").toggle( (str == "later") );
	$("#"+ id +" .moreflights").show();
	$("#"+ id +" .flightloading").hide();
	
	/*oMoreflights[0].style.display = "block";
	oFlightloading[0].style.display = "none";*/
}


/* last minute page */
function lastminuteBack(data) {
	$("#lastminutelist").html(data); //d.getElementById("lastminutelist").innerHTML = data;
}


/**********************************************************
 *                     TabArea Object                     *
 **********************************************************/
 
function tabArea( elm ) {
	this.tabs = [];
	
	this.init = function( elm ) {
		if( elm )
			this.domElm = elm;
		
		this.addAll();
	}
	
	this.addAll = function() {
		var tabs = this.get(">div.tab");
		
		for( var i=0; i < tabs.length; i++ ) {
			this.addTab(tabs[i]);
		}
		
		if( this.tabs.length > 0 ) {
			// Create the tabbar if any tabs were added
			var tabBar = d.createElement("div");
				tabBar.className = "tabBar";
			
			// Move every tabHeader from the saved tabs into the tab bar and save its index in the array
			for( var i=0; i < this.tabs.length; i++ ) {
				// Save the index in the array
				var currTab = this.tabs[i];
					currTab.tabIndex = i;
				
				// Move the tabHeader into the tab bar
				tabBar.appendChild(currTab.tab);
			}
			
			// Insert the created tab bar as the first element in the tab area
			this.domElm.insertBefore(tabBar, this.domElm.firstChild);
			
			// Save reference to the created tab bar
			this.tabBar = tabBar;
			
			// Activate the first tab
			this.activate(this.tabs[0]);
		}
	}
	
	this.addTab = function( tab ) {
		// Build the tab and add it to the array of tabs
		var t = this.buildTab(tab);
		
		if( t ) {
			this.tabs.push(t);
		}
	}
	
	this.buildTab = function( tab ) {
		var completeTab = null;
		
		if( tab ) {
			completeTab = tab;
			
			// Get the header and the content area
			var h = this.getSingle(">div.tabHeader", tab);
			var c = this.getSingle(">div.tabContent", tab);
			
			if( h && c ) {
				// Save the inner HTML of the header (the text)
				var text = h.innerHTML;
				
				// Save reference to this tabArea object
				var objTa = this;
				
				// Build the a-tag to add the click event to
				var a = d.createElement("a");
					a.href = "#";
					a.innerHTML = text;
					a.tabContent = tab;
					a.onclick = function(e) {
							if( !e )
								e = window.event;
							
							if( e.preventDefault )
								e.preventDefault();
							
							e.returnValue = false;
							
							objTa.activate(this.tabContent);
						}
				
				// Clear any content in the header and apply the a-tag
				h.innerHTML = '';
				h.appendChild(a);
				
				// Save reference to the header and content DOM nodes
				completeTab.tab = h;
				completeTab.content = c;
				
				// Hide the tab
				completeTab.style.display = "none";
			}
		}
		
		return completeTab;
	}
	
	this.activate = function( tabArea ) {
		if(tabArea && !isNaN(tabArea.tabIndex)) {
			for( var i=0; i < this.tabs.length; i++ ) {
				var currTabArea = this.tabs[i];
				var isCurr = ( tabArea == currTabArea );
				
				currTabArea.style.display = (!isCurr)? "none" : "";
				toggleClass(currTabArea.tab, "active", (!isCurr)? 2 : 1);
			}
		}
	}
	
	this.get = function( query, root ) {
		var baseElm = ( root )? root : this.domElm;
		
		if( query && this.domElm ) {
			return cssQuery(query, baseElm);
		}
		
		return [];
	}
	
	this.getSingle = function( query, root ) {
		var elm = this.get(query, root);
		
		if( elm.length > 0 )
			elm = elm[0];
		else
			elm = null;
			
		return elm;
	}
	
	this.init(elm);
}

/* load events
addLoadEvent(init); */












/**********************************************************
 *                   jQuery event adding                  *
 **********************************************************/

function prepareReqInfo() {
    var over = function() {
    	if ($("#infoLayer").is(":hidden")) {
	        var wrapOffset = $("#contentwrap").offset();
	        var currOffset = $(this).offset();
	        var width = 220;
	        var x = (currOffset.left - (width + 20 + wrapOffset.left));
	        var y = (currOffset.top - wrapOffset.top);
	        
	        showInfoLayer("MandatoryFee", -1, -1, width, this );
			clearTimeout($(this).data("delay"));
    	}
    }
    
    var out = function() {
    	if ($("#info-MandatoryFee").is(":visible")) {
    		$(this).data("delay", setTimeout(function() { hideInfoLayer(); }, 200));
    	}
    }
    
	
	$(".general .redBox").css("cursor", "default").hover( over, out );
	
		/* new start */
	var reducedOver = function() {
		/*var reducedIlop = $("#infoLayer").offsetParent().offset();
        var currOffset = $(this).offset();
        var x = (currOffset.left) - (width + 20 + reducedIlop.left);
        var y = (currOffset.top - reducedIlop.top);*/
        var width = 362;
		
        //showInfoLayer("ReducedPrice", x, y, width );
        showInfoLayer("ReducedPrice", -1, -1, width, this );
		clearTimeout($(this).data("delay"));
    }
	
	//$(".reduced img, img.reduced").css("cursor", "default").hover( reducedOver, out );
	$(".reduced-icon").css("cursor", "default").hover( reducedOver, out );
}

function correctChildrenAge( input ) {
    var caVal = String(input.value);
        // Replace all non digits with a ','
        caVal = caVal.replace(/([^\d]+)/g, ",");
        // Remove all non digits in the ends of the sting
        caVal = caVal.replace(/^[^\d]*|[^\d]*$/g, "");
    
    // Insert the corrected values
    input.value = caVal;
}

/* copy data from userinput to form */
function checkChildrenAge(oForm) {
	if ($("#book .child").length > 0) {
		var arr = $("#book .child");
		var childage = "";
		for (t=1; t<= arr.length; t++) {
			if (t<oForm["children"].value) {
				$(arr[t]).parent().show();
				childage += $(arr[t-1]).val()+",";
			} else {
				$(arr[t]).parent().hide();
			}
		
		}
		childage = childage.slice(0, -1);
		oForm["childrenage"].value = childage;

		if (oForm["children"].value == 0) {
		// also animate elements below item
			if($("body").attr("class") && $("body").hasClass("pg-campaign")) {
				if ($(".cChildrenagewrap").is(":visible")) {
					$(".cAcceptwrap").animate({"top":"-=39"});
				//	$("#triplist").animate({"padding-top":"-=39"});
					$("#book .innerform").animate({"height":"-=39"});
					$(".cChildrenagewrap").slideUp();
				}
			} else {
				$(".cChildrenagewrap").css("visibility","hidden");
			}

		} else {
			// also animate elements below item
			if($("body").attr("class") && $("body").hasClass("pg-campaign")) {
				if ($(".cChildrenagewrap").is(":hidden")) {
					$(".cAcceptwrap").animate({"top":"+=39"});
				//	$("#triplist").animate({"padding-top":"+=39"});
					$("#book .innerform").animate({"height":"+=39"});
					$(".cChildrenagewrap").slideDown();
				}
			} else {
				$(".cChildrenagewrap").css("visibility","visible").show();
			}
		}
	}
}

/* copy data from form to userinput */
function showChildrenAge(oForm) {

	if (oForm["children"].value != "0") {

		var ages = oForm["childrenage"].value.split(",");
		var arr = $("#book .child");
		for (t=1; t<=arr.length; t++) {
			if (t<=ages.length) {
				$("form[name='aspnetForm'] input[name='booking_childage"+t+"_txt']:first").val($.trim(ages[t-1])).parent().show();
			} else {
				$("form[name='aspnetForm'] input[name='booking_childage"+t+"_txt']:first").parent().hide();
			}
		}
		$(".cChildrenagewrap").css("visibility","visible");
	}
}


function initInfoLayerHref() {
	$("a[href^='javascript:showInfoLayer']").click(function(e) {
		var $exp = /javascript:showInfoLayer[(]([^,]+),([^,]+),([^,]+),([^,]+)[)]/i;
		var m = this.href.match($exp);
		
		if( m != null ) {
			showInfoLayer(m[1], m[2], m[3], m[4], this);
			e.preventDefault();
		}
	});
}

function initPriceSpecHref() {
	$("a[href*='showPriceSpecification']").click(function(e) {
		var $exp = /(showPriceSpecification[(][^)]+)[)]/i;
		var m = this.href.match($exp);
		
		if( m != null ) {
			eval(m[1] +", this)");
			e.preventDefault();
		}
	});
}

function initSlidehow() {
	$(".slidehow-container").slideshow()
}

jQuery.fn.slideshow = function( setup ) {
	var dataNames = {
		wrap : "slideshowWrap",
		items : "slideshowItems",
		currIndex : "currItemIndex",
		timer : "slideTimer",
		btnSlide : "slideshowSlideStarter",
		btnSlideStartText : "startText",
		btnSlideStopText : "stopText",
		counter : "slideshowCounter"
	};
	
	var setup = jQuery.extend({
		classNav : "slideshow-nav",
		classNavPrev : "nav-prev",
		classNavNext : "nav-next",
		classNavSlide : "nav-start-stop",
		classItems : "slideshow-item",
		classCounter : "galleryCounter",
		classCounterPreText : "left",
		
		startSlideText : "Visa bilder",
		stopSlideText : "Stopp visa bilder",
		counterPreText : "Foto"
	}, setup);
	
	function slide( wrap, dir ) {
		var images = wrap.data(dataNames.items)
		var currIndex = wrap.data(dataNames.currIndex);
		var maxIndex = (images.length -1);
		var minIndex = 0;
		
		nextIndex = currIndex + dir;
		if( nextIndex < minIndex ) nextIndex = maxIndex;
		if( nextIndex > maxIndex ) nextIndex = minIndex;
		
		images.not(":eq("+ nextIndex +")").hide();
		images.eq(nextIndex).show();
		
		wrap.data(dataNames.currIndex, nextIndex);
		
		updateCounter(wrap);
	}
	
	function prev( wrap ) {
		stopSlideshow(wrap);
		slide(wrap, -1);
	}
	
	function next( wrap ) {
		stopSlideshow(wrap);
		slide(wrap, 1);
	}
	
	function startSlideshow( wrap ) {
		var btnSlide = wrap.data(dataNames.btnSlide);
		
		if( !btnSlide.data(dataNames.btnSlideStartText) )
			btnSlide
			.data(dataNames.btnSlideStartText, btnSlide.text())
			.data(dataNames.btnSlideStopText, setup.stopSlideText);
		
		if(btnSlide.data(dataNames.timer)) {
			stopSlideshow(wrap)
		} else {
			btnSlide.text(btnSlide.data(dataNames.btnSlideStopText));
			
			var to = setTimeout(function() {
				slide(wrap, 1);
				btnSlide.data(dataNames.timer, setTimeout(arguments.callee, 3000));
			}, 3000);
			
			btnSlide.data(dataNames.timer, to);
		}
	}
	
	function stopSlideshow( wrap ) {
		var btnSlide = wrap.data(dataNames.btnSlide);
		btnSlide.text(btnSlide.data(dataNames.btnSlideStartText));
		clearTimeout(btnSlide.data(dataNames.timer));
		btnSlide.data(dataNames.timer, null);
	}
	
	function updateCounter( wrap ) {
		var c = wrap.data(dataNames.counter);
		if( c )
			c.html( "("+ (parseInt(wrap.data(dataNames.currIndex)) +1) +"/"+ wrap.data(dataNames.items).length +")" );
	}
	
	function build( ssWrap ) {
		ssWrap = $(ssWrap);
		ssWrapNode = ssWrap.get(0);
		items = $("."+ setup.classItems, ssWrap);
		
		if( items.length > 0 ) {
			items
			.css({"position" : "absolute", "top" : "0px", "left" : "0px"})
			.hide();
			
			var maxW = ssWrapNode.offsetWidth;
			var maxH = ssWrapNode.offsetHeight;

			items.each(function() {
				var $item = $(this);
				var node = $item.get(0);
				var w = Math.max(node.offsetWidth, $item.width());
				var h = Math.max(node.offsetHeight, $item.height());
				
				maxW = Math.max(w, maxW);
				maxH = Math.max(h, maxH);
			});
			
			ssWrap
			.css({"overflow" : "hidden", "position" : "relative", "width" : maxW +"px", "height" : maxH +"px"})
			.data(dataNames.items, items)
			.data(dataNames.currIndex, 0);
			
			if(items.length > 1) {
				var navObj = 	$("<div></div>")
								.addClass(setup.classNav);
							
				var prevObj = 	$('<a href="#"></a>')
								.addClass(setup.classNavPrev)
								.data(dataNames.wrap, ssWrap)
								.click(function(e) { prev($(this).data(dataNames.wrap)); e.preventDefault(); e.stopPropagation(); });
				
				var nextObj = 	$('<a href="#"></a>')
								.addClass(setup.classNavNext)
								.data(dataNames.wrap, ssWrap)
								.click(function(e) { next($(this).data(dataNames.wrap)); e.preventDefault(); e.stopPropagation(); });
							
				var slideObj = 	$('<a href="#">'+ setup.startSlideText +'</a>')
								.addClass(setup.classNavSlide)
								.data(dataNames.wrap, ssWrap)
								.click(function(e) { startSlideshow($(this).data(dataNames.wrap), setup.stopSlideText); e.preventDefault(); e.stopPropagation(); });
				
				var txtObj = 	$('<div class="'+ setup.classCounterPreText +'">'+ setup.counterPreText +'</div>');
				var counterObj = $('<div class="'+ setup.classCounter +'"></div>');
				
				navObj
				.append(prevObj)
				.append(txtObj)
				.append(counterObj)
				.append(nextObj)
				.append(slideObj);
				
				ssWrap
				.append(navObj)
				.data(dataNames.counter, counterObj)
				.data(dataNames.btnSlide, slideObj);
				
				setTimeout(function() { slideObj.click(); }, 3000);
			}
			
			slide( ssWrap, 0 );
		}
	}
	
	return $(this).each(function() { build(this) });
}

/*function initSlideshows() {
	$(".slideshow.thumbnails-activated").slideshow( { showThumbs : true } );
	$(".slideshow.thumbnails-deactivated").slideshow( { showThumbs : false } );
}*/

function domready() {
	pageLoaded = true;

	init(); // Main init
    prepareReqInfo();
	initInfoLayerHref();
	initPriceSpecHref();
	//initSlideshows();
	//correctChildrenAge();
	
	$(".scroll-panel.ad-scroll").scrollContainer();
}

$( domready );

/* share */
function share(obj) {
	d.getElementById("addthis").style.left = getAbsLeft(obj) + obj.offsetWidth - d.getElementById("addthis").offsetWidth + "px";
	d.getElementById("addthis").style.top = getAbsTop(obj) + obj.offsetHeight + "px";

}
/* position of addthis menu */
var addthis_offset_top = -13;
var addthis_offset_left = 6;


(function($) {
	$.fn.extend({
		slideshow : function( setup ) {
			var dn = $.slideshow.dataNames;
			var setup = $.extend($.slideshow.defaultSetup, setup);

			function init( index ) {
				var slideshow = $(this);
				var id = $.trim(slideshow.attr("id"));
				var autoplay = true; //($.trim(slideshow.attr("class")).indexOf("autoplay") != -1) ? true : false;

				if( !id ) id = setup.defaultID + "_"+ (index +1);
				
				var jsonList = $.trim($(".hidden", slideshow).remove().text());
				// Break slideshow building, if no images are defined
				if( !jsonList )
					return;
				
				/* THIS CREATES DOUBBLE CONTENT - ONLY USED FOR TESTING
					jsonList += jsonList;
					jsonList = jsonList.replace("][", ","); */
				
				//var slideshowH = slideshow[0].clientHeight;
				
				var phImg = $("img:eq(0)", slideshow);
					phImg.siblings("img").remove();
					
				slideshow
				.data(dn.setup, $.extend({}, setup))
				.data(dn.itemListRaw, jsonList) // Save the JSON object list in raw text form
				.data(dn.itemList, eval(slideshow.data(dn.itemListRaw))) // the parsed JSON object list
				.data(dn.id, id)
				.data(dn.autoplay, autoplay)
				.data(dn.currThumbIndex, 0)
				.data(dn.placeHolderImage, phImg)
				.append('<div id="'+ id +'" style="height: 100%;"></div>') // Create a div inside the container with the same id as the container
				.attr("id", id+"_wrap") // Rename the containers id, to avoid doubble id's
				.bind(dn.swfReady, $.slideshow.events.swfLoaded)
				.bind(dn.allThumbsLoaded, $.slideshow.events.allThumbsLoaded);
				
				phImg.show();
				$.slideshow.saveSlideshow( slideshow );

				$.slideshow.start( slideshow );
			}

			return this.each(init);
		}
	});

	$.extend({
		slideshow : {
			slideshows : [],
			
			dataNames : {
				id : "id",
				setup : "setup",
				parent : "parent",
				slideshow : "slideshow",
				itemList : "itemlist",
				itemListRaw : "itemlistraw",
				thumbIndex : "thumbindex",
				thumbContainer : "thumbcontainer",
				currThumbIndex : "currentthumbindex",
				orgHeight : "originalheight",
				placeHolderImage : "placeholderimage",
				autoplay : "autoplay",
				// Event names
				placeHolderImageLoaded : "placeholderimageloaded",
				allThumbsLoaded : "allthumbsloaded",
				thumbSelected : "thumbselected",
				thumbDeselected : "thumbdeselected",
				swfReady : "swfready"
			},
			
			defaultSetup : {
				defaultID : "slideshow",
				showThumbs : true,
				thumbFadeInSpeed : 500,
				thumbSelectionSpeed : 300,
				thumbOverClass : "thumb-over",
				thumbContainerClass : "thumb-container",
				thumbSelectedClass : "sel",
				openThumbContainerSpeed : 300,
				placeHolderImageFadeSpeed : 200,
				// Swf settings
				swf : "/flash/mediaplayer/mediaplayer.swf",
				expressInstallSwf : "/flash/mediaplayer/expressInstall.swf",
				flashVersion : "9.0.0",
				autoplay : true,
				// Text settings
				statusText : "Foto",
				startSlideshow : "Visa Bildar",
				stopSlideshow : "Stopp visa bildar"
			},
			
			start : function( slideshow ) {

				ss = this.getSlideshow(slideshow);
				if( ss.length <= 0 ) return;

				var phImgLoadDn = this.dataNames.placeHolderImageLoaded;
				ss.one(phImgLoadDn, this.events.placeHolderImageLoaded);

				var phImg = ss.data(this.dataNames.placeHolderImage);

				var phImgNode = phImg[0];

				var testImg = function() {
					if( phImgNode.complete ) {
						ss.trigger(phImgLoadDn);
					} else {
						setTimeout(arguments.callee, 100);
					}
				};
				
				if (phImgNode.complete) {
					ss.trigger(phImgLoadDn);
				} else {
					phImg
					.load(testImg)
					.error(this.events.placeHolderImageFailed);
				}
			},
			
			select : function( slideshow, index, fromSwf ) {
				var slideshow = this.getSlideshow(slideshow);
				if( slideshow.length <= 0 ) return;
				
				var setup = this.getSetup(slideshow);
				
				var thumb = this.getThumb(slideshow, index).trigger(this.dataNames.thumbSelected)//.addClass(setup.thumbSelectedClass);
					thumb.siblings().trigger(this.dataNames.thumbDeselected);//.removeClass(setup.thumbSelectedClass);
				
				slideshow.data(this.dataNames.currThumbIndex, index);
				
				if(!fromSwf)
					this.selectSwfItem(slideshow, index); // Send request to SWF to select current image
			},
			
			initThumbs : function( slideshow ) {

				slideshow = this.getSlideshow(slideshow);
				var items = $(slideshow.data(this.dataNames.itemList));
				var setup = slideshow.data(this.dataNames.setup);
				
				if( items.length > 1 ) {
					/****
					 THUMBNAIL CONTAINER STRUCTURE:
					 <div class="scroll-panel thumbnail-scroll">
						<div class="scroll-wrap">
							<div class="[thumbcontainerclass]"></div>
						</div>
					 </div>
					 ****/
					slideshow
					.append('<div class="scroll-panel thumbnail-scroll"><div class="scroll-wrap"><div class="'+ setup.thumbContainerClass +'"></div></div></div>')
					.data(this.dataNames.thumbContainer, $("."+ setup.thumbContainerClass, slideshow));
					
					var $this = this;
					// Apply scrolling to the scroll panel
					var sp = $(".scroll-panel", slideshow).scrollContainer(null, function(panel){
						panel.hide();
						
						// Save Scroll panel as the thumb containers parent
						var tc = $(slideshow.data($this.dataNames.thumbContainer));
							tc.data($this.dataNames.parent, panel);

						$this.loadThumb(slideshow, 0);
						
					});
					
				}
			},
			
			loadThumb : function( slideshow, index ) {

				index = parseInt(index);
				if( isNaN(index) ) index = 0;
				
				var slideshow = this.getSlideshow(slideshow);
				var items = $(slideshow.data(this.dataNames.itemList));
				
				if( items.length > index ) {
					var item = items.get(index);
					
					var thumb = $('<a href="javascript:;"><img /><span></span></a>')
					.data(this.dataNames.slideshow, slideshow)
					.data(this.dataNames.thumbIndex, index)
					.css("opacity", 0)
					.focus(function(e) { $(this).blur(); })
					.click(this.events.thumbClicked)
					.bind(this.dataNames.thumbSelected, this.events.thumbSelected)
					.bind(this.dataNames.thumbDeselected, this.events.thumbDeselected);

					$("img", thumb)
					.load(this.events.thumbLoaded)
					.error(this.events.thumbFailed)
					.attr("src", item.thumb);

					if(	(items.length -1) == index ) {
						thumb.addClass("last");
					}
						
				} else if( index >= items.length ) {
					slideshow.trigger(this.dataNames.allThumbsLoaded);
				}
			},
			
			loadNextThumb : function( thumb ) {
				thumb = $(thumb);
				if( thumb.length > 0 ) {
					var i = parseInt(thumb.data(this.dataNames.thumbIndex) +1);
					var ss = $(thumb.data(this.dataNames.slideshow));
					this.loadThumb(ss, i);
				}
			},
			
			saveThumb : function( img ) {
				img = $(img);
				
				var ss = img.data(this.dataNames.slideshow);
				var list = ss.data(this.dataNames.itemList);
				var i = img.data(this.dataNames.thumbIndex);
				
				list[i].thumbItem = img;
			},
			
			getThumb : function( slideshow, index ) {
				var list = this.getSlideshow(slideshow).data(this.dataNames.itemList);
				var item = list[index];
				
				return (item)? item.thumbItem : null;
			},
			
			getThumbImgContainer : function( img ) {
				return $(img).parent();
			},
			
			resizeThumbContainer : function( slideshow ) {

				slideshow = this.getSlideshow(slideshow);
				var tc = $(slideshow.data(this.dataNames.thumbContainer));
				$.scrollContainer.calcContentSize(tc, tc.data(this.dataNames.parent), true);
			},
			
			setCurrThumbIndex : function( slideshow, index ) {
				this.getSlideshow(slideshow).data(this.dataNames.currThumbIndex, index);
			},
			
			itemListString : function( slideshow ) {
				return String(this.getSlideshow(slideshow).data(this.dataNames.itemListRaw)).replace(/["]/g, '\"');
			},
			
			saveSlideshow : function( slideshow ) {
				slideshow = $(slideshow);
				this.slideshows[slideshow.data(this.dataNames.id)] = slideshow;
			},
			
			getSlideshow : function( slideshow ) {
				// If slideshow is an object then it's probably an actual slideshow, so just retun it,
				// Otherwise find the slideshow in the list of saved slideshows and return that
				var ss = ( typeof(slideshow) == "object" )? slideshow : this.slideshows[slideshow]; 
				return $([]).add(ss);
			},
			
			getSetup : function( slideshow ) {
				return this.getSlideshow(slideshow).data(this.dataNames.setup);
			},
			
			swfReady : function( id ) {
				var ss = this.getSlideshow(id).trigger($.slideshow.dataNames.swfReady);
				return $.slideshow.itemListString( ss );
			},
			
			embedSWF : function( id ) {
			
				var slideshow = this.getSlideshow(id);
				var setup = this.getSetup(slideshow);
				var w = slideshow.innerWidth();
				var h = (setup.slideshowHeight > 0) ? setup.slideshowHeight : slideshow.innerHeight();
				var autoplay = slideshow.data(this.dataNames.autoplay);

				var flashvars = {
					flashid : id,
					flashwidth : w,
					flashheight: h,
					statustext : setup.statusText,
					startslideshow : setup.startSlideshow,
					stopslideshow : setup.stopSlideshow,
					autoplay: autoplay
				};

				var params = {
					allowfullscreen : false,
					quality : "high",
					scale : "noscale",
					wmode : "transparent"
				};
				swfobject.embedSWF(setup.swf, id, w, h, setup.flashVersion, setup.expressInstallSwf, flashvars, params);
			},
			
			selectSwfItem : function( slideshow, index ) {
				var id = this.getSlideshow(slideshow).data(this.dataNames.id);
				var flash = $("#"+ id)[0].playlistItemSelected(index);
				//var flash = $("#"+ id)[0].startMediaPlayer();
			},
			
			swfSelectItem : function( id, index ) {
				this.removePlaceHolderImage(id);
				this.select(id, index, true);
			},
			
			removePlaceHolderImage : function( slideshow ) {
				slideshow = this.getSlideshow(slideshow);
				var setup = this.getSetup(slideshow);
				var phImgDn = this.dataNames.placeHolderImage;
				var phImg = slideshow.data(phImgDn);
				
				if( phImg ) {
					$(phImg).fadeOut(setup.placeHolderImageFadeSpeed, function() {
						$(this).remove();
						slideshow.data(phImgDn, null);
					});
				}
			},
			
			events : {
				placeHolderImageLoaded : function(e) {

					var slideshow = $.slideshow.getSlideshow(this);
					var phImg = slideshow.data($.slideshow.dataNames.placeHolderImage);
					var id = slideshow.data($.slideshow.dataNames.id);
					
					var h = Math.max(slideshow[0].clientHeight, phImg[0].offsetHeight);
					
					slideshow.height( h ).css("overflow", "visible");
					phImg.css({"z-index": 10, "position" : "absolute", "top" : "0px", "left" : "0px"});
					
					$.slideshow.embedSWF(id);

				},
				
				placeHolderImageFailed : function(e) {
				},
				
				thumbFailed : function(e) {
					var dummyThumb = "/img/slideshow_img_dummy.jpg";
					var img = $(this);

					if( String(img.attr("src")).indexOf(dummyThumb) < 0 ) {
						img.attr("src", dummyThumb);
					} else {
						var thumb = $.slideshow.getThumbImgContainer(img);
						$.slideshow.loadNextThumb(thumb);
					}
				},
				
				thumbLoaded : function(e) {

				var dn = $.slideshow.dataNames;
					var thumb = $.slideshow.getThumbImgContainer(this);
					var slideshow = $.slideshow.getSlideshow(thumb.data(dn.slideshow));
					var setup = $.slideshow.getSetup(slideshow);
					
					// Append the image to the container
					var tcp = $(slideshow.data(dn.thumbContainer)).append(thumb).data($.slideshow.dataNames.parent);

					var func = function() {

						// Recalculate the width of the thumbnail container
						$.slideshow.resizeThumbContainer(slideshow);
						
						// Add behaviors, fade in the image...
						thumb.fadeTo(setup.thumbFadeInSpeed, 1, function(e) {
							// If it is the currently selected thumb, mark it
							if( parseInt(thumb.data(dn.thumbIndex)) == parseInt(slideshow.data(dn.currThumbIndex)) )
								thumb.trigger(dn.thumbSelected);
						});
						
						// ... load the next thumbnail...
						$.slideshow.loadNextThumb(thumb);
						// ... and save the thumbnail item
						$.slideshow.saveThumb( thumb );
					};
					
					if( tcp.is(":hidden") ) {
						slideshow.css("height", "auto");
						tcp.slideDown(setup.openThumbContainerSpeed, function(e) {
							func();
						});
					} else
						func();
				},
				
				thumbClicked : function(e) {
					var thumb = $(this);
					var dn = $.slideshow.dataNames;
					
					$.slideshow.select( thumb.data(dn.slideshow), thumb.data(dn.thumbIndex), false );
					
					e.preventDefault();
					e.stopPropagation();
				},
				
				thumbSelected : function(e) {
					var thumb = $(this);
					var setup = $.slideshow.getSetup(thumb.data($.slideshow.dataNames.slideshow));
					var selClass = setup.thumbSelectedClass;
					
					if( !thumb.hasClass(selClass) ) {
						$("span", thumb.addClass(selClass))
						.css({"opacity": 0})
						.fadeTo(setup.thumbSelectionSpeed, 1, function(e) { $(this)[0].style.cssText = ""; });
					}
				},
				
				thumbDeselected : function(e) {
					var thumb = $(this);
					var setup = $.slideshow.getSetup(thumb.data($.slideshow.dataNames.slideshow));
					var selClass = setup.thumbSelectedClass;
					
					if( thumb.hasClass(selClass) ) {
						$("span", thumb)
						.css({"opacity": 1})
						.fadeTo(setup.thumbSelectionSpeed, 0, function(e) { $(this)[0].style.cssText = ""; thumb.removeClass(selClass); });
					}
				},
				
				allThumbsLoaded : function(e) {
					/*var slideshow = $(this);
					slideshow.css("overflow", "visible");*/
				},
				
				swfLoaded : function(e) {
					var slideshow = $(this).css("height", "auto");
					var phImg = slideshow.data($.slideshow.dataNames.placeHolderImage);
					var setup = $.slideshow.getSetup(slideshow);
					
					if( setup.showThumbs )
						$.slideshow.initThumbs(this);
				}
			}
		}
	});
})(jQuery);

function playlistItemSelectedFromPlayer( id, index )  {
	if( !index ) index = "N/A";

	$.slideshow.swfSelectItem(id, index);
}

function getPlaylist( id ) {
	if(!id) id = "slideshow_nr1";
	return $.slideshow.swfReady( id );
}


