function ShowChinese()
{
	var cn = document.getElementById('Chinese');

	if (cn.style.display == "none")
	{
		cn.style.display = "block"
	}
	else
	{
		cn.style.display = "none";
	}
}

function ChangeProvider(provider) {
    if (currentProvider == provider)
        return false;

    document.getElementById('link' + currentProvider).className = "m";
    document.getElementById('link' + provider).className = "current";
    document.getElementById('data' + currentProvider).style.display = "none";
    document.getElementById('data' + provider).style.display = "block";
       
    currentProvider = provider;
}

function ChangeLanguage(url)
{
	window.location = ReverseString(url);
}

function ReverseString(value)
{
	if (value == null)
		return null;
	
	var output = "";	
	for (i = 0; i < value.length; i++)
	{
		output = value.charAt(i) + output;
	}
	return output;
}

function InitialiseProviders(hiddenProviders)
{
	if (hiddenProviders == null || hiddenProviders.length == 0)
	{
		return;
	}
	
	for (i = 0; i < hiddenProviders.length; i++)
	{
		document.getElementById('data' + hiddenProviders[i]).style.display = "none";
	}
}

function ChangeGallery(provider) {
    currentGallery = provider;

    for (i = 0; i < galleries.length; i++)
    {
        if (i == GetGalleryIndex(currentGallery))
        {
            document.getElementById('linkPhotos' + provider).className = "current";
            document.getElementById('dataPhotos' + provider).style.display = "block";
            document.getElementById('dataPhotos' + provider).innerHTML = galleries[i];
            document.getElementById('photoPanelSpacer').height = (GetGalleryIndex(currentGallery) + 1) * 40;
        }
        else
        {
            document.getElementById('linkPhotos' + galleryIndex[i]).className = "m";
            document.getElementById('dataPhotos' + galleryIndex[i]).style.display = "none";
        }
    }
    return false;
}

function GetGalleryIndex(provider) {
    for (j = 0; j < galleryIndex.length; j++) {
        if (provider == galleryIndex[j]) {
            return j;
        }    
    }
}

function SwapImage(provider, imageId, index) {
    document.getElementById('BigImage' + provider).src = "/HotelImages/" + imageId.toString().substr(0, 3) + "/" + imageId.toString() + ".jpg";
    document.getElementById('Viewing' + provider).innerHTML = index;
}

var currentTabId = 0;
function TabTabs(tabId) {
    currentTabId = tabId;

    for (i = 0; i < tabCount; i++)
    {
        if (i == currentTabId)
        {
            document.getElementById("tabCell1-" + i).className = "dark";
            document.getElementById("tabCell2-" + i).className = "dark";
            document.getElementById("tabCell3-" + i).className = "dark";
            
            var temp1 = document.getElementById("tabImageLeft-" + i); // null for whitelabel
            if (temp1 != null)
            {
                temp1.src = "/Images/c_b_tl.gif";
            }
            var temp2 = document.getElementById("tabImageRight-" + i);
            if (temp2 != null)
            {
                temp2.src = "/Images/c_b_tr.gif";
            }
            document.getElementById("tabData" + i).style.display = "";
            document.getElementById("tabLink" + i).className = "tabSelected";
        }
        else
        {
            document.getElementById("tabCell1-" + i).className = "light";
            document.getElementById("tabCell2-" + i).className = "light";
            document.getElementById("tabCell3-" + i).className = "light";
            
            var temp3 = document.getElementById("tabImageLeft-" + i);
            if (temp3 != null)
            {
                temp3.src = "/Images/c_p_tl.gif";
            }
            var temp4 = document.getElementById("tabImageRight-" + i)
            if (temp4 != null)
            {
                temp4.src = "/Images/c_p_tr.gif";
            }
            document.getElementById("tabData" + i).style.display = "none";
            document.getElementById("tabLink" + i).className = "tabUnSelected";
        }
    }
    
    if (tabId == 4 && mapSource.length > 0) // && !mapAlreadyShown
    {
		setTimeout("HideMapLoading()", 3000);
		document.getElementById("mapFrame").src = mapSource;
		mapAlreadyShown = true;
    }
    
}

function TabTabsNew(tabId) {
    currentTabId = tabId;

    for (i = 0; i < tabCount; i++)
    {
        if (i == currentTabId)
        {
			document.getElementById("tab" + i).className = "active";
			document.getElementById("tab" + i).blur();
			document.getElementById("tabData" + i).style.display = "";
        }
        else
        {
			document.getElementById("tab" + i).className = "";
			document.getElementById("tabData" + i).style.display = "none";
        }
    }
    
    if (tabId == 4 && mapSource.length > 0) // && !mapAlreadyShown
    {
		setTimeout("HideMapLoading()", 3000);
		document.getElementById("mapFrame").src = mapSource;
		mapAlreadyShown = true;
    }
    
}

function HideMapLoading()
{
	document.getElementById("LoadingMaps").style.display = "none";
}
			
function OpenWindow(url) {
    window.open(
        url,
        null,
        'alwaysRaised=1,height=545,width=525,directories=0,locaton=0,menubar=0,resizable=1,scrollbars=1,status=0,toolbar=0'
    ).focus();
}


//reload page with the new querystring name-value pair
function Reload(name, val) {
	var qString = location.search.substr(1)
	
	if (qString == null || qString.length == 0 || qString.indexOf("gclid=") >= 0)
	    qString = query;

	//always reset page to 1
	if (name != "pageIndex") {
		var page = GetQSVal("pageIndex")
		if (page != "0" && page != "") qString = setQStringName(qString, "pageIndex", new Array("0"))
	}

	qString = setQStringName(qString, name, new Array(val.toString()))
	qString = setQStringName(qString, "tabId", new Array(currentTabId.toString()))
	
	if (typeof path != 'undefined'&& path != null && path.length > 0)
	    location = path + "?" + qString
	else	
	    location = location.pathname + "?" + qString
	
	return false;
}

function ChangeDates() {

    if (!ValidateDates())
        return false
    
	var qString = location.search.substr(1)
	
	if (qString == null || qString.length == 0 || qString.indexOf("gclid=") >= 0)
	    qString = query;

	qString = setQStringName(qString, 'checkin', new Array(document.getElementById("checkinValue").value))
	qString = setQStringName(qString, 'checkout', new Array(document.getElementById("checkoutValue").value))
	qString = setQStringName(qString, 'tabId', new Array("0"))
    var page = GetQSVal("pageIndex")
	if (page != "0" && page != "") qString = setQStringName(qString, "pageIndex", new Array("0"))	
	
	if (path != null && path.length > 0)
	    location = path + "?" + qString
	else	
	    location = location.pathname + "?" + qString
	
	return false;
}

function getDate(dateString) {
    var year = dateString.substr(0,4)
    var month = dateString.substr(5,2) - 1 // 0 - 11
    var day = dateString.substr(8,2)
    return new Date(year,month,day)
}


// validate dates
function ValidateDates() {

    var inDate = getDate(document.getElementById("checkinValue").value)
    var outDate = getDate(document.getElementById("checkoutValue").value)

	//validate checkin - checkout difference (date range too big)
	if (outDate - inDate > 2160000000) {  //25 days in milliseconds
		alert(typeof(JavaScriptPeriodOfStay) == 'undefined' ? 'Your period of stay should be no longer than 30 nights.' : JavaScriptPeriodOfStay)
		return false
	}

    // validate checkout <= checkin
	if (outDate - inDate <= 0) {
		alert(typeof(JavaScriptEnsureCheckoutAfterCheckin) == 'undefined' ? 'Please ensure that the check-out date is after the check-in date.' : JavaScriptEnsureCheckoutAfterCheckin)
		return false
	}

	return true
}

//unencode url-encoded string
function URLDecode(urlStr) {
	return unescape(urlStr.replace(/\+/g, " "))
}


//remove all name/value pairs with the passed name from url-encoded querystring
function remQStringName(qString, name) {
	var i
	var qStringNew = ""

	if (qString != "") {
		var curName
		var arrNameVal = qString.split("&")

		for (i in arrNameVal) {
			curName = URLDecode(arrNameVal[i].split("=")[0])
			if (curName.toLowerCase() != name.toLowerCase()) qStringNew += "&" + arrNameVal[i]
		}
	}

	return qStringNew.substr(1)
}


//replace or add name/value pairs in url-encoded querystring
function setQStringName(qString, name, arrVal) {
	var qStringNew = remQStringName(qString, name)
	var start = qStringNew == "" ? 1 : 0
	for (var i in arrVal) qStringNew += "&" + escape(name) + "=" + escape(arrVal[i])
	return qStringNew.substr(start)
}


//extract (first!) value from querystring for the passed name
function GetQSVal(qsName) {
	var qsPair
	var qString = location.search.substr(1)
	
    if (qString == null || qString.length == 0)
	    qString = query;
	    
	var arrNameVal = qString.split("&")

	for (var i in arrNameVal) {
		qsPair = arrNameVal[i].split("=")
		if (URLDecode(qsPair[0]).toLowerCase() == qsName.toLowerCase()) return URLDecode(qsPair[1])
	}

	return ""
}

function GetUrlFromKey(key)
{
	var url = "/";
	url += "ProviderRedirect";
	url += ".aspx?";
	url += key;
	return url;
}

function Redirect(key, saleCost, providerCode) {

	var url = GetUrlFromKey(key);
	
    // Adwords AU
    if (getCookie("account") == "Adwords AU")
    {
        LoadAnalytics("google", "Adwords AU", "cpc", url, "http://www.googleadservices.com/pagead/conversion/" + getCookie("accountId") + "/?value=" + saleCost + "&label=LEAD&script=0");
        return false;
    }
    
    // Adwords WW
    if (getCookie("account") == "Adwords WW")
    {
        LoadAnalytics("google", "Adwords WW", "cpc", url, "http://www.googleadservices.com/pagead/conversion/" + getCookie("accountId") + "/?value=" + saleCost + "&label=LEAD&script=0");
        return false;
    }    
    
    // Adwords US
    if (getCookie("account") == "Adwords US")
    {
        LoadAnalytics("google", "Adwords US", "cpc", url, "http://www.googleadservices.com/pagead/conversion/1062240598/?value=" + saleCost + "&label=purchase&script=0");
        var us2 = new Image();
        us2.src = "http://www.googleadservices.com/pagead/conversion/1059930423/?value=" + saleCost + "&label=purchase&script=0";
        return false;
    }

    // Yahoo AU
    if (getCookie("account") == "Yahoo AU")
    {
        LoadAnalytics("yahoo", "Yahoo AU", "cpc", url, "")
        return false;
    }

    
    // Yahoo UK
    if (getCookie("account") == "Yahoo UK") {
        var cc_tagVersion = "1.0";
        var cc_accountID = "1146476399";
        var cc_marketID =  "1";
        var cc_protocol="http";
        var cc_subdomain = "convctr";
        if(location.protocol == "https:")
        {
            cc_protocol="https";
            cc_subdomain="convctrs";
        }
        var cc_queryStr = "?" + "ver=" + cc_tagVersion + "&aID=" + cc_accountID + "&mkt=" + cc_marketID +"&ref=" + escape(document.referrer);
        var cc_imageUrl = cc_protocol + "://" + cc_subdomain + ".overture.com/images/cc/cc.gif" + cc_queryStr;
        
        LoadAnalytics("yahoo", "Yahoo UK", "cpc", url, cc_imageUrl);
        return false;
    }
         
    // Affiliates
    if (getCookie("a_aid").length > 0)
    {        
        var referrer = getCookie("referrer");
        if (referrer == null || referrer.length == 0)
        {
            referrer = "unknown";
        }
        LoadAnalytics(referrer, getCookie("a_aid"), "affiliate", url, "http://affiliate.hotelscombined.com/affiliate/scripts/sale.php?TotalCost=" + saleCost + "&data1=" + providerCode);
        return false;
    }
    
    return false;
}

function Link(site)
{
}

function Go(){}

function LoadAnalytics(source, campaign, medium, pageName, trackingImage)
{
    if (!document.createElement) {return true};
    
    var analyticsFrame;
    //var analyticsUrl = '/Analytics.aspx?utm_source=' + escape(source) + '&utm_campaign=' + escape(campaign) + '&utm_medium=' + escape(medium) + '&pageName=' + escape(pageName) + '&trackingImage=' + escape(trackingImage);
    var analyticsUrl = '/Analytics.aspx?trackingImage=' + escape(trackingImage);
  
    try
    {
      var tempIFrame=document.createElement('iframe');
      tempIFrame.setAttribute('id','analyticsFrame');
      tempIFrame.setAttribute('src',analyticsUrl);
      tempIFrame.style.display = 'none';
      analyticsFrame = document.body.appendChild(tempIFrame);
    }
    catch(exception)
    {
    // nothing for now
    }
}

function getCookie(cookieName)
{
    if (document.cookie != null && document.cookie.length > 0)
    {
        var start = document.cookie.indexOf(cookieName + "=");
        if (start != -1)
        {
            start = start + cookieName.length + 1;
            var end = document.cookie.indexOf(";", start);
            if (end == -1)
            {
                end = document.cookie.length;
            }
            return unescape(document.cookie.substring(start, end));
        }
    }
    return ""
}

// hotelclub/ratestogo member dollars popup
function openMemberDollarsWindow(url, name, height, width, directories, location, menubar, resizable, scrollbars, status, toolbar) {
	wnd = window.open(url, name, "alwaysRaised=1,height=" + height + ",width=" + width + ",directories=" + directories + ",locaton=" + location + ",menubar=" + menubar + ",resizable=" + resizable + ",scrollbars=" + scrollbars + ",status=" + status + ",toolbar=" + toolbar)
	wnd.focus()
}

function SearchKeyPress(eventObject, languageCode, target, affiliateId, city, domain, brandId) {
    if (eventObject.keyCode == 13) {
       eventObject.returnValue=false;
       eventObject.cancel = true;
       return DoSearch(languageCode, target, affiliateId, city, domain, brandId);
    }
}

function CitySelect(cityFileName) {

    document.getElementById(cityFileName).checked = "checked";
    document.getElementById("citySearch").value = ""
    document.getElementById("selectedFileName").value = cityFileName
}

function DoSearch(languageCode, target, affiliateId, city, domain, brandId) {
    var redirection;
    var affiliateParam;
    var brandParam;
    var host;
    
    if (typeof(brandId) == 'undefined' || brandId == "0")
    {
		brandParam = '';
    }
    else
    {
		brandParam = '&brandId=' + brandId
    }
      
    if (affiliateId == null || affiliateId == '')
    {
        affiliateParam = '';
        host = '';
    }
    else
    {
        affiliateParam = '&a_aid=' + affiliateId;   
		// backwards compatability for existing affiliate scripts
		if (typeof(domain) == 'undefined' || domain == '')
		{
			host = 'http://www.hotelscombined.com'	
		}
		else
		{
			host = 'http://' + domain;
		}
    }

    if (document.getElementById("citySearchRadio") != null && document.getElementById("citySearchRadio").checked) {
     
        if (city == null || city.length < 3) {
            alert(typeof(JavaScriptEnterCityName) == 'undefined' ? 'Please enter a city name that is at least 3 characters in length' : JavaScriptEnterCityName);
            return false;
        }
        
        redirection = "/Search.aspx?search=" + city + "&checkin=" + document.getElementById("checkinValue").value + "&checkout=" + document.getElementById("checkoutValue").value + "&languageCode=" + languageCode + affiliateParam + brandParam;
    } else {
        redirection = "/SearchResults.aspx?fileName=" + document.getElementById("selectedFileName").value + "&checkin=" + document.getElementById("checkinValue").value + "&checkout=" + document.getElementById("checkoutValue").value + "&languageCode=" + languageCode + affiliateParam + brandParam;
    }
    
    redirection = host + redirection;
    
    switch (target)
    {
        case "_blank":
            window.open(redirection).focus();
            break;
        case "_parent":
            window.parent.location = redirection;
            break;
        case "_top":
            window.top.location = redirection;
            break;
        default:
            window.location = redirection; // _self
    }
    
    return false;
}

function DoCitySearchBoxSearch(languageCode, target, affiliateId, fileName, domain, brandId) {
    var redirection;
    var affiliateParam;
    var brandParam;
    var host;
    
    if (typeof(brandId) == 'undefined' || brandId == "0")
    {
		brandParam = '';
    }
    else
    {
		brandParam = '&brandId=' + brandId
    }
      
    if (affiliateId == null || affiliateId == '')
    {
        affiliateParam = '';
        host = '';
    }
    else
    {
        affiliateParam = '&a_aid=' + affiliateId;   
		// backwards compatability for existing affiliate scripts
		if (typeof(domain) == 'undefined' || domain == '')
		{
			host = 'http://www.hotelfast.net'	
		}
		else
		{
			host = 'http://' + domain;
		}
    }

	redirection = "/SearchResults.aspx?fileName=" + fileName + "&checkin=" + document.getElementById("checkinValue").value + "&checkout=" + document.getElementById("checkoutValue").value + "&languageCode=" + languageCode + affiliateParam + brandParam;
    
	redirection = SetStarValue(redirection, document.getElementById("Star5"), 'star5');
	redirection = SetStarValue(redirection, document.getElementById("Star4"), 'star4');
	redirection = SetStarValue(redirection, document.getElementById("Star3"), 'star3');
	redirection = SetStarValue(redirection, document.getElementById("Star2"), 'star2');
	redirection = SetStarValue(redirection, document.getElementById("Star1"), 'star1');
	redirection = SetStarValue(redirection, document.getElementById("Star0"), 'star0');
	redirection = setQStringName(redirection, "sort", new Array(document.getElementById("sortBy").options[document.getElementById("sortBy").selectedIndex].value));
	    
	var currency = document.getElementById("currencies");    
	redirection = setQStringName(redirection, 'currencyCode', new Array(currency.options[currency.selectedIndex].text))    
	
	if (document.getElementById("AvailableOnly").checked)
	{
	    redirection = remQStringName(redirection, "availableOnly");
	}
	else
	{
	    redirection = setQStringName(redirection, "availableOnly", new Array("false"));
	}
    
    redirection = host + redirection;
        
    switch (target)
    {
        case "_blank":
            window.open(redirection).focus();
            break;
        case "_parent":
            window.parent.location = redirection;
            break;
        case "_top":
            window.top.location = redirection;
            break;
        default:
            window.location = redirection; // _self
    }
    
    return false;
}

function DoHotelSearch(languageCode, hotelFileName, target, affiliateId, domain, brandId) {
    var affiliateParam;
    var host;
    var brandParam;
    
    if (typeof(brandId) == 'undefined' || brandId == "0")
    {
		brandParam = '';
    }
    else
    {
		brandParam = '&brandId=' + brandId
    }
    
    if (affiliateId == null || affiliateId == '')
    {
        affiliateParam = '';
        host = '';
    }
    else
    {
        affiliateParam = '&a_aid=' + affiliateId;   
		// backwards compatability for existing affiliate scripts
		if (typeof(domain) == 'undefined' || domain == '')
		{
			host = 'http://www.hotelscombined.com'	
		}
		else
		{
			host = 'http://' + domain;
		}
    }

    var redirection = host + "/Hotel.aspx?fileName=" + hotelFileName + "&checkin=" + document.getElementById("checkinValue").value + "&checkout=" + document.getElementById("checkoutValue").value + "&languageCode=" + languageCode + affiliateParam + brandParam;
    
    switch (target)
    {
        case "_blank":
            window.open(redirection).focus();
            break;
        case "_parent":
            window.parent.location = redirection;
            break;
        case "_top":
            window.top.location = redirection;
            break;
        default:
            window.location = redirection; // _self
    }
    
    return false;
}

var providers = new Array('RTG','HTC','GTA','PLN','IHG','BKS','LRM','VNR','LMT','GTS','EXP','HOT','ATV','ALR','OPD','ORB','CTS','TCY','LMN','SKH','HDE','AMZ');
var currentImageIndex = -1;
var preload = new Array();

function ShowProviderLogo() {
    currentImageIndex++;
    if (currentImageIndex == providers.length)
    {
        currentImageIndex = 0;
    }
    document.getElementById('siteswecompare').src = preload[currentImageIndex].src;
    setTimeout("ShowProviderLogo()",1200);
}

function InitProviderLogos() {
    for (var i = 0; i < providers.length; i++)
    {
        preload[i] = new Image();
        preload[i].src = "/Images/" + providers[i] + "-big.gif";
    }
    setTimeout("ShowProviderLogo()",1200);
}

var searchInterval;
function StartSearch() {
    var searchNumber = document.getElementById("searchNumber");
    var i = parseInt(searchNumber.innerHTML) + 263;
    if (i > 600000)
    {
        searchNumber.innerHTML = 600000;
    }
    else
    {
        searchNumber.innerHTML = i;
    }
}

var currentMarketingTextIndex = 0;
function ShowMarketingText() {
    var newItem = document.createElement('li');
    newItem.innerHTML = marketingText[currentMarketingTextIndex];
    document.getElementById("waitingMarketingText").appendChild(newItem);
    if (currentMarketingTextIndex < marketingText.length - 1)
    {
        currentMarketingTextIndex += 1;
        setTimeout(ShowMarketingText, 3000);
    }
}

var currentProviderStatusIndex = 0;
var searchProgressInterval = 5000;
var statusArray;
var progress1Complete = false;
var progress2Complete = false;
var progress3Complete = false;
var progress4Complete = false;
var progress5Complete = false;
var progress6Complete = false;
var progress7Complete = false;
var autoFire = true;
var fireCount = 0;

function GetInterval()
{
	return searchProgressInterval;
}

function FireEvent()
{
	fireCount++;
	
	if (!progress1Complete)
	{
		ShowProviderStatus();
		if (autoFire)
		{
			setTimeout(FireEvent, GetInterval() * Math.random());
		}
		return;
	}
	
	if (!progress2Complete)
	{
		document.getElementById('progressLine1Image').style.display = "none";
		document.getElementById('progressLine2Number').style.display = "";
		document.getElementById('progressLine2Image').style.display = "";
		document.getElementById('M_C_ProgressLine2').style.display = "";
		progress2Complete = true;
		if (autoFire)
		{
			setTimeout(FireEvent, GetInterval() * 10);
		}
		return;
	}
	
	if (!progress3Complete)
	{
		document.getElementById('progressLine2Image').style.display = "none";
		document.getElementById('progressLine3Number').style.display = "";
		document.getElementById('progressLine3Image').style.display = "";	
		document.getElementById('M_C_ProgressLine3').style.display = "";
		progress3Complete = true;
		if (autoFire)
		{
			setTimeout(FireEvent, GetInterval() * 5);
		}
		return;
	}
	
	if (!progress4Complete)
	{
		document.getElementById('progressLine3Image').style.display = "none";
		document.getElementById('progressLine4Number').style.display = "";
		document.getElementById('progressLine4Image').style.display = "";	
		document.getElementById('M_C_ProgressLine4').style.display = "";
		progress4Complete = true;
		if (autoFire)
		{
			setTimeout(FireEvent, GetInterval());
		}
		return;
	}
	
	if (!progress5Complete)
	{
		document.getElementById('progressLine4Image').style.display = "none";
		document.getElementById('progressLine5Number').style.display = "";
		document.getElementById('progressLine5Image').style.display = "";	
		document.getElementById('M_C_ProgressLine5').style.display = "";
		progress5Complete = true;
		return;
	}

	if (typeof(finishInterval) != 'undefined')
	{
		clearInterval(finishInterval);
	}
	document.getElementById("waiting").style.display = "none";
}

function ShowProviderStatus()
{
	document.getElementById('progressLine1Data').innerHTML = statusArray[currentProviderStatusIndex];
	
	if (currentProviderStatusIndex < statusArray.length - 2)
	{
		currentProviderStatusIndex++;
	}
	else
	{
		document.getElementById('progressLine1Image').style.display = "none";
		document.getElementById('progressLine1Data').innerHTML = "&nbsp;";
		progress1Complete = true;
	}
}

function SetupCalendars() {
    var currentYear = new Date().getFullYear();
    var nextYear = currentYear +  1;

    // checkin calendar
    Calendar.setup({
        inputField     : "checkinValue",
        ifFormat       : "%Y-%m-%d",
        button         : "checkinTrigger",
        weekNumbers    : false,
        onUpdate       : checkinCalendarUpdated,
        //dateStatusFunc : disabledStatus,
        range          : [currentYear, nextYear]
    });
    
    // checkout calendar
    Calendar.setup({
        inputField     : "checkoutValue",
        ifFormat       : "%Y-%m-%d",
        button         : "checkoutTrigger",
        weekNumbers    : false,
        onUpdate       : checkoutCalendarUpdated,
        //dateStatusFunc : disabledStatus,
        range          : [currentYear, nextYear]
    });
}



function disabledStatus (calDate) {
    if (calDate - new Date()  < 0)
        return true;    
    return false;
}

function checkinCalendarUpdated(cal) {
    if (cal.dateClicked) {
		theYear = getYear(cal.date.getMonth());
		var numDays = getDaysInMonth(cal.date.getMonth(), theYear );
		var sel=document.getElementById("checkinDay");
				sel.innerHTML='';
				for (var j=1; j<=numDays; j++){
					theOption=document.createElement("OPTION");
					theText=document.createTextNode(j);
					theOption.appendChild(theText);
					if (j==(cal.date.getDate() - 1)) theOption.setAttribute('selected','selected');
					sel.appendChild(theOption);
				}

        document.getElementById("checkinMonth").selectedIndex = cal.date.getMonth();
        document.getElementById("checkinDay").selectedIndex = (cal.date.getDate() - 1);
        cal.hide();
        checkinUpdated();
    }
}

function checkoutCalendarUpdated(cal) {
    if (cal.dateClicked) {
		theYear = getYear(cal.date.getMonth());
		var numDays = getDaysInMonth(cal.date.getMonth(), theYear );
		var sel=document.getElementById("checkoutDay");
				sel.innerHTML='';
				for (var j=1; j<=numDays; j++){
					theOption=document.createElement("OPTION");
					theText=document.createTextNode(j);
					theOption.appendChild(theText);
					if (j==(cal.date.getDate() - 1)) theOption.setAttribute('selected','selected');
					sel.appendChild(theOption);
				}
        document.getElementById("checkoutMonth").selectedIndex = cal.date.getMonth();
        document.getElementById("checkoutDay").selectedIndex = (cal.date.getDate() - 1);
        cal.hide();
        checkoutUpdated();
    }
}

//changes departure month when arrival month is changed
function checkinUpdated() {

	inM = document.getElementById("checkinMonth");
    inD = document.getElementById("checkinDay");
    outM = document.getElementById("checkoutMonth");
    outD = document.getElementById("checkoutDay");

    var res = adjustDate( inM.options.selectedIndex, inD );
    if( res != 0 ) {
           outD.options.selectedIndex = 0;
           if ( inM.options.selectedIndex == 11 ) {
                outM.options.selectedIndex = 0
           } else if( res == 4 ) {
                outM.options.selectedIndex=inM.options.selectedIndex + 1;
                outD.options.selectedIndex = 0;
           } else {
                outM.options.selectedIndex=inM.options.selectedIndex + 1;
                outD.options.selectedIndex = 1;
           }
    } else {
        outM.options.selectedIndex = inM.options.selectedIndex;
        //if (outD.options.selectedIndex <= inD.options.selectedIndex) {
            outD.options.selectedIndex = inD.options.selectedIndex + 2;
        //}
    }
				selectid=outD.options.selectedIndex;

				var theYear = getYear(inM.options.selectedIndex);
				var numDays = getDaysInMonth(outM.options.selectedIndex, theYear );
				outD.innerHTML='';
				for (var j=1; j<=numDays; j++){
					theOption=document.createElement("OPTION");
					theText=document.createTextNode(j);
					theOption.appendChild(theText);
					if (j==selectid+1) theOption.setAttribute('selected','selected');
					outD.appendChild(theOption);
				}

    var checkinMonth = inM.options.selectedIndex+1;
    var checkinDay = inD.options.selectedIndex+1;
	
	var checkoutMonth = outM.options.selectedIndex+1;
    var checkoutDay = outD.options.selectedIndex+1;
	
	document.getElementById("checkinValue").value = getYear(inM.selectedIndex) + "-" + checkinMonth + "-" + checkinDay;
    document.getElementById("checkoutValue").value = getYear(outM.selectedIndex) + "-" + checkoutMonth + "-" + checkoutDay;
    return;
}

function checkoutUpdated() {
    outM = document.getElementById("checkoutMonth");
    outD = document.getElementById("checkoutDay");
    adjustDate( outM.options.selectedIndex, outD );

    var checkoutMonth = outM.options.selectedIndex + 1;
    var checkoutDay = outD.options.selectedIndex + 1;
    document.getElementById("checkoutValue").value = getYear(outM.selectedIndex) + "-" + checkoutMonth + "-" + checkoutDay;
    return;
}

function isLeapYear( yrStr ) {
    var leapYear = false;
    var year = parseInt( yrStr, 10 );
    // every fourth year is a leap year
    if ( year % 4 == 0 ) {
        leapYear = true;
        // unless it's a multiple of 100
        if( year % 100 == 0 ) {
            leapYear = false;
            // unless it's a multiple of 400
            if( year % 400 == 0 ) {
                leapYear=true;
            }
        }
    }
    return leapYear;
}


function getDaysInMonth( mthIdx, YrStr ) {
    // all the rest have 31
    var maxDays = 31;
    // expect Feb. (of course)
    if( mthIdx == 1 ) {
        if( isLeapYear( YrStr ) ) {
            maxDays=29;
        } else {
            maxDays=28;
        }
    }

    // thirty days hath...
    if( mthIdx == 3 || mthIdx == 5 || mthIdx == 8 || mthIdx == 10 ) {
        maxDays=30;
    }
    return maxDays;
}

function getYear(mthIdx) {
    var today = new Date()
    var theYear = parseInt(today.getFullYear())
    
    if( mthIdx < today.getMonth() ) {
        theYear = ( parseInt(today.getFullYear()) + 1 )
    }

    return theYear    
}

// do not allow selection of days that are not valid
// return non-zero if it is the last day of the month
function adjustDate( mthIdx, Dt ) {
    var value = 0;
    var theYear = getYear(mthIdx);
    var numDays = getDaysInMonth( mthIdx, theYear );
    
    if( mthIdx == 1 ) {
        if( Dt.options.selectedIndex + 2 < numDays ) {
            return 0;
        } else {
            if( Dt.options.selectedIndex + 1 > numDays) {
                Dt.options.selectedIndex=numDays - 1;
            }
            //check for leap year
            if( (Dt.options.selectedIndex + 1) == numDays ) {
                return 1;
            } else {
                return 4;
            }
        }
    }

    if( Dt.options.selectedIndex + 2 < numDays ) {
        value = 0;
    } else {
        if ( Dt.options.selectedIndex + 1 > numDays ) {
            Dt.options.selectedIndex--;
            value = 3;
        } else if ( Dt.options.selectedIndex + 1 == numDays ) {
            //index is 31 or 30
            value = 2;
        } else {
            value = 4;
        }
    }
    return value;
}

function over(o) {
    o.className = "list listMouseover";
}

function out(o) {
    o.className = "list";
}

function ConvertCurrency(displayLowRate, displayHighRate, displayToAUD, desiredToAUD) {
    document.getElementById("M_C_LowRate").value = Math.floor(displayLowRate / displayToAUD * desiredToAUD);
    document.getElementById("M_C_HighRate").value = Math.ceil(displayHighRate / displayToAUD * desiredToAUD);
}

function RefineSearchShowAll() {
    
	var qString = location.search.substr(1)
	
	if (qString == null || qString.length == 0 || qString.indexOf("gclid=") >= 0)
	    qString = query;
	
	qString = SetStarValue(qString, document.getElementById("M_C_Star5"), 'star5');
	qString = SetStarValue(qString, document.getElementById("M_C_Star4"), 'star4');
	qString = SetStarValue(qString, document.getElementById("M_C_Star3"), 'star3');
	qString = SetStarValue(qString, document.getElementById("M_C_Star2"), 'star2');
	qString = SetStarValue(qString, document.getElementById("M_C_Star1"), 'star1');
	
	qString = remQStringName(qString, 'star5');
	qString = remQStringName(qString, 'star4');
	qString = remQStringName(qString, 'star3');
	qString = remQStringName(qString, 'star2');
	qString = remQStringName(qString, 'star1');
	
	qString = remQStringName(qString, 'lowRate');
	qString = remQStringName(qString, 'highRate');
    qString = setQStringName(qString, "pageIndex", new Array("0"))
    
    qString = setQStringName(qString, "availableOnly", new Array("false"));
	
	if (path != null && path.length > 0)
	    location = path + "?" + qString
	else	
	    location = location.pathname + "?" + qString
	
	return false;
}

function ChangeCurrency(element) {
	var qString = location.search.substr(1)
	
	if (qString == null || qString.length == 0 || qString.indexOf("gclid=") >= 0)
	    qString = query;
	    
    qString = qString = remQStringName(qString, "lowRate");
    qString = qString = remQStringName(qString, "highRate");
    qString = setQStringName(qString, 'currencyCode', new Array(element.value))
    
	if (path != null && path.length > 0)
	    location = path + "?" + qString
	else	
	    location = location.pathname + "?" + qString
	
	return false;    
}

function ReloadSearch() {
    if (!ValidateDates())
        return false
    
	var qString = location.search.substr(1)
	
	if (qString == null || qString.length == 0 || qString.indexOf("gclid=") >= 0)
	    qString = query;

	qString = setQStringName(qString, 'checkin', new Array(document.getElementById("checkinValue").value))
	qString = setQStringName(qString, 'checkout', new Array(document.getElementById("checkoutValue").value))
		
	qString = SetStarValue(qString, document.getElementById("M_C_Star5"), 'star5');
	qString = SetStarValue(qString, document.getElementById("M_C_Star4"), 'star4');
	qString = SetStarValue(qString, document.getElementById("M_C_Star3"), 'star3');
	qString = SetStarValue(qString, document.getElementById("M_C_Star2"), 'star2');
	qString = SetStarValue(qString, document.getElementById("M_C_Star1"), 'star1');
	qString = SetStarValue(qString, document.getElementById("M_C_Star0"), 'star0');
	qString = setQStringName(qString, "sort", new Array(document.getElementById("sortBy").options[document.getElementById("sortBy").selectedIndex].value));
	    
	var currency = document.getElementById("M_C_currencies");    
	if (currency != null)
	{
	    qString = setQStringName(qString, 'currencyCode', new Array(currency.options[currency.selectedIndex].text))    
	}
	
	var lowRate = document.getElementById("M_C_LowRate");
	var highRate = document.getElementById("M_C_HighRate");
	
	if (lowRate == null || lowRate.value == null || lowRate.value == 0)
	{
	    qString = remQStringName(qString, "lowRate");
	}
	else
	{
	    qString = setQStringName(qString, "lowRate", new Array(lowRate.value))
	}
	
	if (highRate == null || highRate.value == null || highRate.value == 0)
	{
	    qString = remQStringName(qString, "highRate");
	}
	else
	{
	    qString = setQStringName(qString, "highRate", new Array(highRate.value))
	}
	
	if (document.getElementById("M_C_AvailableOnly").checked)
	{
	    qString = remQStringName(qString, "availableOnly");
	}
	else
	{
	    qString = setQStringName(qString, "availableOnly", new Array("false"));
	}
	
    var page = GetQSVal("pageIndex")
	if (page != "0" && page != "") qString = setQStringName(qString, "pageIndex", new Array("0"))	
	
	if (path != null && path.length > 0)
	    location = path + "?" + qString
	else	
	    location = location.pathname + "?" + qString
	
	return false;
}

function SetStarValue (qString, starElement, starName)
{
	if (starElement == null || starElement.checked)
	{
	    return remQStringName(qString, starName);
	}
	else
	{
        return setQStringName(qString, starName, new Array("false"))
	}
}

function CreateHttpRequest()
{
	var request;

	if (window.XMLHttpRequest)
	{
		request = new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		try
		{
			request = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				request = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)
			{
			}
		}
	}
	return request
}

function GetHtml(url)
{
	var request = CreateHttpRequest();
	request.onreadystatechange = function()
    { 
         if(request.readyState == 4)
         {
              if(request.status == 200)
              {
				document.getElementById("waiting").style.display = 'none';
				document.getElementById("change-your-dates-box").style.display = '';
				var responseText = request.responseText;
				responseText = responseText.substr(responseText.indexOf('<!-- BeginRates -->'));
				responseText = responseText.substr(0, responseText.indexOf('<!-- EndRates -->'));				
				document.getElementById('M_C_PriceMatrixResults').innerHTML = responseText;
				//SetupCalendars();
				
				if (document.getElementById('M_C_PriceMatrixResults').innerHTML.indexOf('NoRatesFound') > 0 && window.location.toString().toLowerCase().indexOf('hotelratesonly') > 0)
				{
					var datesHtml = document.getElementById('change-your-dates-box').innerHTML;
					document.getElementById('change-your-dates-box').innerHTML = "";
					document.getElementById('abovePriceMatrixResults').innerHTML = datesHtml + "<br/>";
					SetupCalendars()
					document.getElementById('M_C_ChangeDates').style.display = 'none'
				}
              }
              else
              {
				document.location = "/InternalServerError.aspx";
              }
         }
    };
	request.open('GET', url, true);
	request.send(null);
}

function SetBookmark()
{
	var url = document.location;
	var title = document.title;
	if (window.sidebar)
	{
		window.sidebar.addPanel(title, url,"");
	}
	else
	{
		window.external.AddFavorite(url, title);
	}
}

function OpenReviews(hotelId, pageIndex, numberOfReviews, languageCode)
{
	window.open('/Reviews.aspx?hotelId=' + hotelId + '&pageIndex=' + pageIndex + '&numberOfReviews=' + numberOfReviews + '&languageCode=' + languageCode, "reviews", "status=0,toolbar=0,location=0,menubar=0,directories=0,resizable=1,scrollbars=1,width=600")
}

function addToFaves() 
{ 
     var urlAddress = "http://www.hotelfast.net"; 
     var pageName = "Hotelfast.net: Worldwide Hotel Price Comparison"; 
     if ( navigator.appName != 'Microsoft Internet Explorer' ) 
      { window.sidebar.addPanel(pageName,urlAddress,""); } 
    else {
		window.external.AddFavorite(urlAddress,pageName);
	} 
} 
