﻿//global variables:
var pagecache = {};
pagecache.calendar = "";
pagecache.stayselector = "";
var _ctrlCache = "";
var _calendarCache;
var seldate;
var uniqueid;

//core functions:
function RefreshControl(slot, id, xid, attributes, uniqueid) {
	var browsestring = UnsecureURL + 'ajax/refresh.aspx?ctrl=' + id + '&xid=' + xid + attributes;
	var xmlhttp = new XMLHttpRequest();
	xmlhttp.open("GET", browsestring, true);
	var newcontent = "";

	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState == 4) {
			if (xmlhttp.status == 200) {
				newcontent = xmlhttp.responseText;
				LoadItem(slot, newcontent);
				UpdateCache(newcontent, id, uniqueid);
				DoPostActions(slot, id, xid, attributes, uniqueid);
			}
			else {
				newcontent = "";
			}
		}
	}

	xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	xmlhttp.send(null);
}

function DoPostActions(slot, id, xid, attributes, uniqueid)
{
    var test = document.getElementById(slot);
    
    if (id == "StayCalendar")
    {
    	if (seldate == null)
	    {
            
	    }
	    else
	    {
        	var D = new Date(seldate);
            var cell = document.getElementById(uniqueid + "-" + seldate);
            
            if (cell != null)
            {
                UnhighlightCalendar(uniqueid);
                GetStaysForDate(seldate, xid, uniqueid);
            }
            else
            {
                UnhighlightStaySelector(uniqueid);
                HighLightCalendar(uniqueid);
            }
            

	    }
    }
    
//    if (slot == "PropertyMap")
//    {
//        LoadMapLarge();
//    }
}

//unit gallery code:
function LoadUnitGallery(galleryid)
{
    if ($.browser.msie && $.browser.version == '6.0') 
        $('select').css({display:'none'});
    
    $('div.fader').css({display:'block'});
    
    $('div.' + galleryid).fadeIn(400);
    //poupUp_height('div.gallery-popup');
}

function UnloadUnitGallery(galleryid)
{
	$('div.' + galleryid).fadeOut(400, function(){
	    $('div.fader').css({display:'none'});
	     if ($.browser.msie && $.browser.version == '6.0') $('select').css({display:'block'});
	});
}


function LoadItem(slot, newcontent) {
	var ctrl = document.getElementById(slot);

	if (ctrl != null && slot != "PropertyMap" && slot != "AreaMap") {
		ctrl.innerHTML = newcontent;
	}
	
	if (slot == "PropertyMap" || slot == "AreaMap")
	{
	    var newScript = document.createElement("script");
	    newScript.type = "text/javascript";
	    newScript.text = newcontent;
	    document.getElementsByTagName("head")[0].appendChild(newScript);
	}
}

function runScripts(e) {
	if (e.nodeType != 1) return; //if it's not an element node, return
 
	if (e.tagName.toLowerCase() == 'script') {
		eval(e.text); //run the script
	}
	else {
		var n = e.firstChild;
		while ( n ) {
			if ( n.nodeType == 1 ) runScripts( n ); //if it's an element node, recurse
			n = n.nextSibling;
		}
	}
}

function UpdateCache(newcontent, id, uniqueid) {
	if (id == "StayCalendar") {
		pagecache.calendar = newcontent;
	}

	if (id == "StaySelector") {
		pagecache.stayselector = newcontent;
		initScrollPane(uniqueid);
	}
}


function Search(destination) {

	var re = "/(0?[1-9]|1[012])[- /.](0 ? [1 - 9] | [12][0 - 9] | 3[01])[ - /.](20)?\d\d/";

    var searchterm = "";
    
    
    if (destination == null || destination == "")
    {
        searchterm = document.getElementById("destination").value;
    }
    else
    {
        searchterm = destination;
    }
    
    var destinationcheck = searchterm.replaceAll(" ", "");
    
    if (destinationcheck == "" || destinationcheck.length < 2)
    {
        searchterm = "";
    }


	var flex1 = document.getElementById("flexableDate").checked;
    var flex2 = document.getElementById("flexableDate2").checked;
    var flexmonth = document.getElementById("flexMonth").checked;
    var sday = document.getElementById("StartDays").value;
    var Chin = document.getElementById("CheckInDate").value;
    var Chout = document.getElementById("CheckOutDate").value;
    var weeks  = document.getElementById("staySelection").value;
    var days1  = document.getElementById("InDays").value;
    var days2  = document.getElementById("OutDays").value;

    var cin = "";
    var cout = "";
    var tin = "";
    var tout = "";
    var flex = "off";
    
    //top section -- is radio button selected?
    if (flexmonth == true)
    {
        cin = sday;  
        flex = "on";      
        
	    var coutdate = new Date(cin);
	    //add  staySelection weeks
	    var newcoutdate = new Date(coutdate.getTime() + 7*weeks *24*60*60*1000);
	    
	    cout = formatDate2(newcoutdate, "MM/DD/YYYY");
	    
    }
    else
    {
        cin = Chin;
        cout = Chout;
        
    }

    if (flex1 == false)
    {
        days1 = 0;
    }
    
    if (flex2 == false)
    {
        days2 = 0;
    }
    
    //alert(UnsecureURL + "searchresults.aspx?destination=" + searchterm + "&cin=" + cin + "&cout=" + cout + "&flex=" + flex + "&tin=" + tin + "&tout=" + tout + "&page=1&sort=&cid=&flex=" + flex);	
	if (searchterm == null || searchterm == "" || searchterm == "Search ABetterStay: Enter Destination"|| searchterm == "Enter Destination" || !ValidateForm.isGoodStringData("Search", searchterm, "Destination") || !ValidateForm.isStringLengthOk(searchterm, 2)) {
		//var e = "<font size=2pt> <strong>Please enter a destination</strong></font>.<br /><font size=1pt>ex: Hawaii; Aspen, CO; Amalfi coast, Italy</font>";
		//ErrorControl.renderErrorWindow(e);
		window.alert("Please enter a valid destination.");
        
	}
	else 
	{
	        searchterm = encodeURIComponent(searchterm);
	        window.location.href = UnsecureURL + "searchresults.aspx?destination=" + searchterm + "&cin=" + cin + "&cout=" + cout +  "&tin=" + days1 + "&tout=" + days2 + "&page=1&sort=&cid=&flex=" + flex + "&sstart=" + sday + "&wk=" + weeks + "&chin=" + Chin + "&chout=" + Chout + "&fx1=" + flex1 + "&fx2=" + flex2 + "&d1=" + days1 + "&d2=" + days2;
	}
		
}

function SearchBlog()
{
   var searchterm = document.getElementById("blogsrch").value;
   window.location.href = UnsecureURL + "blog/search.aspx?q=" + searchterm;
}


function ClearSearch(obj)
{
    obj.value = "";
}

function AdjustAdvanceSearchStrip()
{

    if(document.getElementById("srchCriteria") != null)
    {
        if (document.getElementById("srchCriteria").innerHTML.length < 4)
        {
                 ClearAdvanceSearch();
        }
        else{

            //document.getElementById("adv-clear").style.visibility = "visible";
            document.getElementById("adv-clear").className = "clear-img2";
            document.getElementById("adv-text").className = "search-more-text2";
            document.getElementById("adv-days").className = "input-data2";
            document.getElementById("lblAdvanceSearch").innerHTML = "<a href=\"javascript:OpenSearchOptions();\"><b>Change</b></a>";
            
        }
         
    }


}
function ClearAdvanceSearch()
{
    document.getElementById("lblAdvanceSearch").innerHTML = "<a href=\"javascript:OpenSearchOptions();\"><b>Advanced search options</b></a>";
    //document.getElementById("adv-clear").style.visibility = "hidden";
    document.getElementById("adv-clear").className = "clear-img";
    document.getElementById("adv-text").className = "search-more-text";
    document.getElementById("adv-days").className = "input-data";
        
    var srchCriteria = document.getElementById("srchCriteria");
    srchCriteria.innerHTML ="";
    
    SetDefaultSearchParameters();
}		    
                
function SetSearchParametersFromHeader()
{
    //don't set these unless destination is defined:
    var dest = decodeURIComponent(querySt("destination"));
    var st = decodeURIComponent(querySt("sstart"));
    
    if (dest == null) return;
    if (dest == "undefined") return;
    if (st == null) return;
    if (st == "undefined") return;
    
    if(st.length > 0)
    {
        var d1 = 0;
        var d2 = 0;
        
        var flexin = eval(querySt("tin"));
        var flexout = eval(querySt("tout"));
        
        var flexon = querySt("flex");
        
        if (flexon == "off")
        {
            if (flexin > 0)
            {
                d1 = 1;
            }
            
            if (flexout > 0)
            {
                d2 = 1;
            }
        }
        
        var sstring = decodeURIComponent(querySt("destination")).replaceAll("+", " ");
        
        if (sstring == "undefined")
        {
            
        }
        else
        {
            document.getElementById("destination").value = sstring;
        }
        
        document.getElementById("CheckInDate").value = decodeURIComponent(querySt("cin"));
        document.getElementById("CheckOutDate").value = decodeURIComponent(querySt("cout"));
        document.getElementById("StartDays").value = st;
        document.getElementById("InDays").value = querySt("tin");
        document.getElementById("OutDays").value = querySt("tout");
        document.getElementById("flexableDate").checked = d1;
        document.getElementById("flexableDate2").checked = d2;
        document.getElementById("staySelection").value = querySt("wk");
        
        if( querySt("flex") == "off")
        {
            document.getElementById("exactDate").checked = true;
            exactlyDays();
        }
        if( querySt("flex") == "on")
        {
            document.getElementById("flexMonth").checked = true;
            flexableDays();
        }
        if(document.getElementById("flexableDate").checked == true)
        {
            clickCheckbox1();
        }
        if(document.getElementById("flexableDate2").checked == true)
        {
            clickCheckbox2();
        }
//        if(document.getElementById("flexableDate").checked ==true)
//        {
//            flexableDays();
//        }
        storeSearchCriteria();
        AdjustAdvanceSearchStrip();
    }
}

function SetDefaultSearchParameters()
{
    
    if( document.getElementById("CheckInDate") == null) return;
    var today = new Date();
    var tommor = new Date(today.getTime() + 24*60*60*1000);
    var fourdays = new Date(today.getTime() + 96*60*60*1000);
    if(document.getElementById("flexMonth") == null) return;
    document.getElementById("flexMonth").checked = true;
    flexableDays();
    document.getElementById("CheckInDate").value = formatDate2(today,"MM/DD/YYYY");
    document.getElementById("CheckOutDate").value = formatDate2(fourdays,"MM/DD/YYYY");
    
    if(document.getElementById("StartDays") == null) return;
    document.getElementById("StartDays").value = formatDate2(today,"MM/DD/YYYY");
    
    document.getElementById("staySelection").value = 8;
    //document.getElementById("destination").value = "";
}

function querySt(ji) {
    hu = window.location.search.substring(1);
    gy = hu.split("&");
    for (i=0;i<gy.length;i++) {
        ft = gy[i].split("=");
        if (ft[0] == ji) {
               return ft[1];
         }
    }
}

var getElementsByClassName = function(className, tag, elm) {
	if (document.getElementsByClassName) {
		getElementsByClassName = function(className, tag, elm) {
			elm = elm || document;
			var elements = elm.getElementsByClassName(className),
			nodeName = (tag) ? new RegExp("\\b" + tag + "\\b", "i") : null,
			returnElements = [],
			current;
			for (var i = 0,
			il = elements.length; i < il; i += 1) {
				current = elements[i];
				if (!nodeName || nodeName.test(current.nodeName)) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	else if (document.evaluate) {
		getElementsByClassName = function(className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
			classesToCheck = "",
			xhtmlNamespace = "http://www.w3.org/1999/xhtml",
			namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace) ? xhtmlNamespace: null,
			returnElements = [],
			elements,
			node;
			for (var j = 0,
			jl = classes.length; j < jl; j += 1) {
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			}
			try {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch(e) {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext())) {
				returnElements.push(node);
			}
			return returnElements;
		};
	}
	else {
		getElementsByClassName = function(className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
			classesToCheck = [],
			elements = (tag === "*" && elm.all) ? elm.all: elm.getElementsByTagName(tag),
			current,
			returnElements = [],
			match;
			for (var k = 0,
			kl = classes.length; k < kl; k += 1) {
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			}
			for (var l = 0,
			ll = elements.length; l < ll; l += 1) {
				current = elements[l];
				match = false;
				for (var m = 0,
				ml = classesToCheck.length; m < ml; m += 1) {
					match = classesToCheck[m].test(current.className);
					if (!match) {
						break;
					}
				}
				if (match) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	return getElementsByClassName(className, tag, elm);
};

//Weather control support code:

function LoadAreaWeather(xid)
{
    RefreshControl('AreaWeather', 'Weather', xid, '&ctx=AreaPage', '');
}


function LoadPropWeather(xid, cid)
{
    RefreshControl('PropertyWeather', 'Weather', xid, '&ctx=PropertyPage&c=' + cid, '');
}


function LoadPropMap(xid, cid)
{
    RefreshControl('PropertyMap', 'Map', xid, '&ctx=PropertyPage&c=' + cid, '');
}


function LoadAreaMap(xid)
{
    RefreshControl('AreaMap', 'Map', xid, '&ctx=AreaPage', '');
}

//UnitBrowser.aspx support code:

function RandMonth(dt, xid, c, u, direction) {

    var sdt = "";
    var test = new Array()
    test = window.location.search.split('&');
    
    if (test.length > 0)
    {
        for (j = 0; j < test.length; j++)
        {
            if (test[j].indexOf("start=") > 0)
            {
                sdt = test[j].substr(7, 10);
            }
        }
    }
    
	updating(u + "-calholder");
	clearitem(u + "-selectorholder");
	cleartotals(u);

	RefreshControl(u + '-calholder', 'StayCalendar', xid, '&c=' + c + '&u=' + u + '&cin=' + dt + direction + '&sstart=' + sdt, u);
    HighLightCalendar(u);
}

function PreviousMonth(dt, xid, c, u) {
	updating(u + "-calholder");
	clearitem(u + "-selectorholder");
	cleartotals(u);
	
	var sdt = "";
    var test = new Array()
    test = window.location.search.split('&');
    
    if (test.length > 0)
    {
        for (j = 0; j < test.length; j++)
        {
            if (test[j].indexOf("start=") > 0)
            {
                sdt = test[j].substr(7, 10);
            }
        }
    }

	var newdate = getPrevMonth(dt);
	var D = new Date(newdate);
	datestring = formatDate(D, "MM/DD/YYYY");
	RefreshControl(u + '-calholder', 'StayCalendar', xid, '&prevdate=' + datestring + '&c=' + c + '&u=' + u + '&cin=' + datestring + '&sstart=' + sdt, u);
    HighLightCalendar(u);
}


function NextMonth(dt, xid, c, u) {
	updating(u + "-calholder");
	clearitem(u + "-selectorholder");
	cleartotals(u);
	
	var sdt = "";
    var test = new Array()
    test = window.location.search.split('&');
    
    if (test.length > 0)
    {
        for (j = 0; j < test.length; j++)
        {
            if (test[j].indexOf("start=") > 0)
            {
                sdt = test[j].substr(7, 10);
            }
        }
    }

	var newdate = getNextMonth(dt);
	var D = new Date(newdate);
	datestring = formatDate(D, "MM/DD/YYYY");
	RefreshControl(u + '-calholder', 'StayCalendar', xid, '&nextdate=' + datestring + '&c=' + c + '&u=' + u + '&cin=' + datestring + '&sstart=' + sdt, u);
    HighLightCalendar(u);
}

function ThisMonth(dt, xid, c, u, sdt) {
	clearitem(u + "-selectorholder");
	clearitem(u + "-calholder");
	
	var dtone = new Date(dt);
	var dttwo = new Date(seldate);
	
	var refreshstring = '&c=' + c + '&u=' + u + '&cin=' + dt + '&sstart=' + sdt;
	
	if (dttwo > dtone)
	{
	    dt = seldate;
	    refreshstring = '&c=' + c + '&u=' + u + '&cin=' + dt + '&nextdate=' + dt + '&sstart=' + sdt;
	}
	
	if (dttwo < dtone)
	{
	    dt = seldate;
	    refreshstring = '&c=' + c + '&u=' + u + '&cin=' + dt + '&prevdate=' + dt + '&sstart=' + sdt;
	}

	//updating(u + "-selectorholder");
	updating(u + "-calholder");

	RefreshControl(u + '-calholder', 'StayCalendar', xid, refreshstring, u);
	HighLightCalendar(u);
	
	if (seldate == null)
	{

	}
	else
	{
	    //GetStaysForDate(seldate, xid, u);
	}
	//RefreshControl(u + '-selectorholder', 'StaySelector', xid, '&c=' + c + '&u=' + u + '&cin=' + dt, u);
}

function GetStaysForDate(dt, xid, u) {

    seldate = dt;

	cleartotals(u);
	updating(u + "-selectorholder");
	ClearCalendar(u);
    UnhighlightCalendar(u);
    
    var sCal = document.getElementById("sLOS-" + u);
    
    if (sCal != null)
    {
        sCal.className = "options frame-highlighted";
    }

	var D = new Date(dt);
	var cell = document.getElementById(u + "-" + dt);
	if (cell)
	{
		selectedstring = '<a class="selected" href="#">' + D.getDate() + '</a>'
	    cell.innerHTML = selectedstring;
	}
	
	var D = new Date(dt);
	datestring = formatDate(D, "MM/DD/YYYY");
	RefreshControl(u + '-selectorholder', 'StaySelector', xid, '&cin=' + datestring + '&u=' + u, u);
	
	var stayholder = document.getElementById('part-' + u);
	
	if (stayholder != null)
	{
	    stayholder.className = "part highlighted";
	}
	
	var sty = document.getElementById(u + "-selectorholder");
	
    if (sty.className.indexOf(" stay-dim") >= 0)
    {
        var midx = sty.className.indexOf(" stay-dim");
        if (midx >=0)
        {
            sty.className = sty.className.substr(0, midx);
        }
    }
	
}

function HighlightStay(dt, length, promotext, price, u, qid, e) {

	var srcEl = e.srcElement? e.srcElement : e.target; 
	
	if (srcEl.id.indexOf("staybtn") == 0)
	{
	    //do nothing
	}
	else
	{
	
        ClearCalendar(u);
        UnhighlightCalendar(u);
        //ClearStays(u)
        
        var sPrice = document.getElementById("sPrice-" + u);
        
        if (sPrice != null)
        {
            sPrice.className = "options frame-highlighted";
        }
        
        var priceholder = document.getElementById(u + '-priceholder');
    	
	    if (priceholder != null)
	    {
	        priceholder.className = "price highlighted";
	    }
        
	    for (var i = 0; i < length; i++) 
	    {
		    var D = new Date(dt);
		    var selectedstring = "";

		    try {
			    if (i == 0) {
				    var dlink = document.getElementById(u + "-" + dt).getElementsByTagName("a");
				    dlink[0].setAttribute("class", "selected mouse-out");
				    dlink[0].setAttribute("className", "selected mouse-out");
			    }
			    else {
				    D.setDate(D.getDate() + i);
				    var dlink = document.getElementById(u + "-" + formatDate(D, "MM/DD/YYYY")).getElementsByTagName("a");
				    dlink[0].setAttribute("class", "selected mouse-out");
				    dlink[0].setAttribute("className", "selected mouse-out");
			    }
		    }
		    catch(exception) 
		    {

            }
	    }
    	
    	var prevStay = getElementsByClassName("stay stay-selected");
    	if (prevStay[0] == null)
    	{
    	    prevStay = getElementsByClassName("stay-open stay-selected");
    	    
    	    if (prevStay[0] == null)
    	    {
    	        prevStay = getElementsByClassName("special-stay stay-selected");
    	        
    	        if (prevStay[0] == null)
    	        {
    	            prevStay = getElementsByClassName("special-stay-open stay-selected");
    	        }
    	    }
    	    
    	}
    	
	    var selectedStay = document.getElementById('staypicker-' + length + '-' + u);
	    selectedStay.className = selectedStay.className + " stay-selected";
	    
	    if (prevStay[0] != null && prevStay[0].id != 'staypicker-' + length + '-' + u)
	    {
	        var midx = prevStay[0].className.indexOf(" stay-selected");
            if (midx >=0)
            {
                prevStay[0].className = prevStay[0].className.substr(0, midx);
            }
	    }
	    
	    //var stayimgbtn = document.getElementById('staybtn-' + qid);
    	
	    //stayimgbtn.setAttribute("src", UnsecureURL + "/images/hidepric.gif");

        var firstdate = new Date(dt);

        var finalcheckin = document.getElementById("form"+u)["FinalCheckinDate"];
        var finalcheckout = document.getElementById("form"+u)["FinalCheckoutDate"];
        var totalstay = document.getElementById("form"+u)["TotalStayLength"];
        //var finalpromotion = document.getElementById("FinalPromotion");
        var finalprice = document.getElementById("form"+u)["FinalPrice"];
        var quotereferencenumber = document.getElementById("form"+u)["quote"];
        var unitid = document.getElementById("form"+u)["u"];
        var bookbutton = document.getElementById("form"+u)["bookbutton"];
        //if (promotext != "") {
        //	finalpromotion.value = promotext;
        //}

        finalcheckin.value = formatDate(firstdate, "MM/DD/YYYY");
        firstdate.setDate(firstdate.getDate() + length);

        finalcheckout.value = formatDate(firstdate, "MM/DD/YYYY");
        
        if (length != 1)
        {
            totalstay.value = length + " Nights";
        }
        else
        {
            totalstay.value = length + " Night";
        }


        finalprice.value = price;

        quotereferencenumber.value = qid;
        unitid.value = u;
        
        HighLightTotal(u);
        
        bookbutton.className = "button-active";
        bookbutton.disabled = false;    	
    	
	}
	
//    try 
//    {
//	    cell.innerHTML = '<a class="selected" href="#">' + D.getDate() + '</a>';
//    }
//    catch(exception) 
//    {

//    }

}

function ClearCalendar(u) {
	if (pagecache.calendar == "") {
		SetCalendarCache(u);
	}

	var cal = document.getElementById(u + "-calholder");
	cal.innerHTML = pagecache.calendar;
	
    var calheader = document.getElementById("sCal-" + u);
    
    if (calheader != null)
    {
        if (calheader.className == "options frame-highlighted" && cal.className.indexOf("dimed") == -1)
        {
            cal.className = cal.className + " dimed";
        }
    }

}

function ClearStays(u) {
	if (pagecache.stayselector == "") {
		SetStayCache(u);
	}
	
	var stays = document.getElementById(u + "-selectorholder");
	stays.innerHTML = pagecache.stayselector;

}

function SetCalendarCache(u) {
	var cal = document.getElementById(u + "-calholder");
	pagecache.calendar = cal.innerHTML;
}

function SetStayCache(u){
    var sty = document.getElementById(u + "-selectorholder");
    pagecache.stayselector = sty.innerHTML;
}

function AfterLoadStays()
{

}

function getNextMonth(date) {
	var D = new Date(date);
	var testday = D.getDate();
	
	if (testday != "1")
	{
	    testday = "1";
	}
	var testmon = D.getMonth() + 2;
	var testyr = D.getFullYear();
	var testdate = testmon + "/" + testday + "/" + testyr;
	D = new Date(testdate);

	var month = D.getMonth() + 1;
	var year = D.getFullYear();
	var nextDate = month + "/01/" + year;
	var outdate = new Date(nextDate);
	return nextDate;
}

function getPrevMonth(date) {
	var D = new Date(date);
	var testday = D.getDate();
	
	if (testday != "1")
	{
	    testday = "1";
	}
	
	var testmon = D.getMonth();
	var testyr = D.getFullYear();
	var testdate = testmon + "/" + testday + "/" + testyr;
	D = new Date(testdate);

	var day = D.getDate();
	var month = D.getMonth() + 1;
	var year = D.getFullYear();
	var prevDate = month + "/01/" + year;
	return prevDate;
}

function updating(ctlname) {
	var ctrlUpdating = document.getElementById(ctlname);

	if (ctrlUpdating != null) {
		ctrlUpdating.innerHTML = "<strong><span><b>Finding best rates...</b><div> &nbsp; </div></span></strong>";
	}
}

function clearitem(ctlname) {
	var ctrlclear = document.getElementById(ctlname);
	if (ctrlclear != null) {
		ctrlclear.innerHTML = "";
	}
}

function cleartotals(u) {

    if (document.getElementById("form" + u) != null)
    {
        var finalcheckin = document.getElementById("form"+u)["FinalCheckinDate"];
	    var finalcheckout = document.getElementById("form"+u)["FinalCheckoutDate"];
	    var totalstay = document.getElementById("form"+u)["TotalStayLength"];
	    //var finalpromotion = document.getElementById("form"+u)["FinalPromotion"];
	    var finalprice = document.getElementById("form"+u)["FinalPrice"];
    	
	    var ElemCheckIn = document.getElementById("ElemCheckIn" + u);
	    var ElemCheckOut = document.getElementById("ElemCheckOut" + u);
	    var ElemStay = document.getElementById("ElemStay" + u);
	    var ElemPrice = document.getElementById("ElemPrice" + u);
	    var bookbutton = document.getElementById("form"+u)["bookbutton"];

	    finalcheckin.value = "";
	    finalcheckout.value = "";
	    totalstay.value = "";
	    //finalpromotion.innerText = "";
	    finalprice.value = "";
    	
	    ElemCheckIn.attributes["class"].value = "";
	    ElemCheckOut.attributes["class"].value = "";
	    ElemStay.attributes["class"].value = "";
	    ElemPrice.attributes["class"].value = "";
    	
	    bookbutton.attributes["class"].value = "button";
	    bookbutton.disabled = true;
    	
	    var sPrice = document.getElementById("sPrice-" + u);
    	
	    if (sPrice != null)
        {
            sPrice.className = "options frame-next";
        }
        
        
        var priceholder = document.getElementById(u + '-priceholder');
    	
	    if (priceholder != null)
	    {
	        priceholder.className = "price";
	    }
    }

}

function HighLightTotal(u) {

	var ElemCheckIn = document.getElementById("ElemCheckIn"+u);
	var ElemCheckOut = document.getElementById("ElemCheckOut"+u);
	var ElemStay = document.getElementById("ElemStay"+u);
	var ElemPrice = document.getElementById("ElemPrice"+u);
	
	ElemCheckIn.attributes["class"].value = "active";
	ElemCheckOut.attributes["class"].value = "active";
	ElemStay.attributes["class"].value = "active";
	ElemPrice.attributes["class"].value = "active";

    UnhighlightStaySelector(u);
}

function UnhighlightStaySelector(u)
{
	var stayholder = document.getElementById('part-' + u);
	
	if (stayholder != null)
	{
	    stayholder.className = "part";
	}
	
	var sLOS = document.getElementById("sLOS-" + u);
	
    if (sLOS != null)
    {
        sLOS.className = "options frame-next";
    }
}

function HighLightCalendar(u)
{
    var cal = document.getElementById(u + "-calholder");
    if (cal != null)
    {
        cal.className = "calendar highlighted";
    }
    
    var sCal = document.getElementById("sCal-" + u);
    
    if (sCal != null)
    {
        sCal.className = "options frame-highlighted";
    }

}

function UnhighlightCalendar(u)
{
    var cal = document.getElementById(u + "-calholder");
    if (cal != null)
    {
        cal.className = "calendar dimed";
    }
    
    var sCal = document.getElementById("sCal-" + u);
    if (sCal != null)
    {
        sCal.className = "options frame-next";
    }
}

function initScrollPane(u) {
	// vslide -- #part-test is the important thing to name properly...
	$('#part-' + u).galleryScrollV({
		btUp: 'a.up',
		btDown: 'a.down',
		holderList: 'div.list-hold',
		scrollElParent: 'ul.list-1',
		scrollEl: 'li',
		liHeight: 49
	});

}


//Register and Login support code:
function OpenSignIn()
{
    //close other toolbar items:
    CloseRegister();
    CloseHelp();
    
    var signindiv = document.getElementById("logindialog");
    signindiv.style.visibility = "visible";   
    signindiv.style.position = "absolute";
    signindiv.style.top = 61 + "px";
    signindiv.style.left = 287 + "px";
    signindiv.style.zIndex = 4;
    signindiv.style.background = "White";
    signindiv.style.border = "1px solid #000";
}


//function CloseSignIn()
//{
//    var signindiv = document.getElementById("logindialog");
//    signindiv.style.visibility = "hidden";   
//    signindiv.style.position = "relative";
//    signindiv.style.zIndex = 0;
//    signindiv.style.background = "";
//    signindiv.style.border = "";
//}


function OpenRegister()
{
    //close other toolbar items:
    CloseSignIn();
    CloseHelp();
    
    var registerdiv = document.getElementById("register");
    registerdiv.style.visibility = "visible";
    registerdiv.style.position = "absolute";
    registerdiv.style.top = 61 + "px";
    registerdiv.style.left = 401 + "px";
    registerdiv.style.zIndex = 4;
    registerdiv.style.background = "White";
    registerdiv.style.border = "1px solid #000";
}


function CloseRegister()
{
    var registerdiv = document.getElementById("register");
    registerdiv.style.visibility = "hidden";
    registerdiv.style.position = "relative";
    registerdiv.style.zIndex = 0;
    registerdiv.style.background = "";
    registerdiv.style.border = "";
}

function OpenHelp()
{    
    var helpdiv = document.getElementById("helpme");
    helpdiv.style.visibility = "visible";
    helpdiv.style.position = "absolute";
    helpdiv.style.top = 67 + "px";
    helpdiv.style.left = 700 + "px";
    helpdiv.style.zIndex = 40;

}

function CloseHelp()
{
    var helpdiv = document.getElementById("helpme");
    helpdiv.style.visibility = "hidden";
    helpdiv.style.position = "relative";
    helpdiv.style.zIndex = 0;

}


function OpenFeeInfo(loc)
{
    var tp;
    var rt;
    
    if (loc == "right")
    {
        tp = 435;
        rt = 1;
    }
    
    if (loc == "left")
    {
        tp = 330;
        rt = 613;
    }
    var feeinfodiv = document.getElementById("FeeDiv");
    feeinfodiv.style.visibility = "visible";
    feeinfodiv.style.position = "absolute";
    feeinfodiv.style.top = tp + "px";
    feeinfodiv.style.right = rt + "px";
    feeinfodiv.style.zIndex = 4;
    feeinfodiv.style.background = "White";
    feeinfodiv.style.border = "1px solid #000";
}

function CloseFeeInfo()
{
    var feeinfodiv = document.getElementById("FeeDiv");
    feeinfodiv.style.visibility = "hidden";
    feeinfodiv.style.zIndex = 0;
    feeinfodiv.style.background = "";
    feeinfodiv.style.border = "";
}

function ProcessSignIn()
{
    
    var uname=document.getElementById('username').value;
    var pwd=document.getElementById('password1').value; 
    var postData = "u="+uname+"&p="+pwd;
    var url = SwitchURL + "Ajax/Login_Process.aspx"
    
//	var browsestring = 'ajax/refresh.aspx?ctrl=' + id + '&xid=' + xid + attributes;
	var xmlhttp = new XMLHttpRequest();
	xmlhttp.open("POST", url, true);
	var newcontent = "";

	xmlhttp.onreadystatechange = function() 
	{
		if (xmlhttp.readyState == 4) 
		{
			if (xmlhttp.status == 200) 
			{
				var loginResult=eval( "(" + xmlhttp.responseText + ")" );
				LoadUser(loginResult);
				CloseSignIn();
//				UpdateCache(newcontent, id, uniqueid);
			}
			else {
				newcontent = "";
				CloseSignIn();
			}
		}
	}

	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.setRequestHeader("Content-length", postData.length);
    xmlhttp.setRequestHeader("Connection", "close");
	xmlhttp.send(postData);
}


function ProcessSignOut()
{
    
    var postData = "l=logout";
    var url = SwitchURL + "Ajax/Login_Process.aspx"
    
//	var browsestring = 'ajax/refresh.aspx?ctrl=' + id + '&xid=' + xid + attributes;
	var xmlhttp = new XMLHttpRequest();
	xmlhttp.open("POST", url, true);
	var newcontent = "";

	xmlhttp.onreadystatechange = function() 
	{
		if (xmlhttp.readyState == 4) 
		{
			if (xmlhttp.status == 200) 
			{
				//var loginResult=eval( "(" + xmlhttp.responseText + ")" );
				UnloadUser();
				CloseSignIn();
//				UpdateCache(newcontent, id, uniqueid);
			}
			else {
				newcontent = "";
				CloseSignIn();
			}
		}
	}

	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.setRequestHeader("Content-length", postData.length);
    xmlhttp.setRequestHeader("Connection", "close");
	xmlhttp.send(postData);

}


function ProcessRegister()
{
    var uname=document.getElementById('fnr').value;
    var lname=document.getElementById('lnr').value;
    var email=document.getElementById('emr').value;
    var pwd=document.getElementById('rpassword').value; 
    var postData = "fn="+uname+"&ln="+lname+"&em="+email+"&pwd="+pwd+"&t=c";
    var url = SwitchURL + "Ajax/Account_Process.aspx"
    
//	var browsestring = 'ajax/refresh.aspx?ctrl=' + id + '&xid=' + xid + attributes;
	var xmlhttp = new XMLHttpRequest();
	xmlhttp.open("POST", url, true);
	var newcontent = "";

	xmlhttp.onreadystatechange = function() 
	{
		if (xmlhttp.readyState == 4) 
		{
			if (xmlhttp.status == 200) 
			{
				var loginResult=eval( "(" + xmlhttp.responseText + ")" );
				LoadUser(loginResult);
				CloseRegister();
//				UpdateCache(newcontent, id, uniqueid);
			}
			else {
				newcontent = "";
				CloseRegister();
			}
		}
	}

	xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlhttp.setRequestHeader("Content-length", postData.length);
    xmlhttp.setRequestHeader("Connection", "close");
	xmlhttp.send(postData);
}


function LoadUser(userobj)
{
    //load user details to use on book.aspx page and elsewhere:
    var signinout = document.getElementById("loginGradient");
    
    signinout.innerHTML = "<strong class=\"headerfonts\">Welcome, " + userobj.customer.firstName + " " + userobj.customer.lastName + "</strong>";
    signinout.innerHTML = signinout.innerHTML + "<div><input type=\"submit\" onclick=\"javascript:ProcessSignOut()\" value=\"Log Out\" class=\"headerfonts\"/></div>";
    signinout.innerHTML = signinout.innerHTML + "<div style=\"float:right;font-size:11px\"><a href=\"javascript:CloseSignIn()\" class=\"headerfonts\">Close</a></div>";
    
    var register = document.getElementById("registerGradient");
    

    //<div>Email Address:</div>
    //<div><input type="text" name="emr"  id="emr" maxlength="80"/></div>
    register.innerHTML = "<div style=\"padding:10px 10px 10px 10px;\">";
    register.innerHTML = register.innerHTML + "<div class=\"headerfonts\">First Name:</div>";
    register.innerHTML = register.innerHTML + "<div><input type=\"text\" name=\"fnr\" id=\"fnr\" maxlength=\"25\" value='" + userobj.customer.firstName + "' class=\"headerfonts\"/></div>";
    register.innerHTML = register.innerHTML + "<div class=\"headerfonts\">Last Name:</div>";
    register.innerHTML = register.innerHTML + "<div><input type=\"text\" name=\"lnr\"  id=\"lnr\" maxlength=\"40\" value='" + userobj.customer.lastName + "' class=\"headerfonts\"/></div>";
    register.innerHTML = register.innerHTML + "<div class=\"headerfonts\">Email Address:</div>";
    register.innerHTML = register.innerHTML + "<div><input type=\"text\" name=\"emr\"  id=\"emr\" maxlength=\"80\" value='" + userobj.customer.email + "' class=\"headerfonts\"/></div>";
    register.innerHTML = register.innerHTML + "<div style=\"float:right;font-size:11px\"><a href=\"javascript:CloseRegister()\" class=\"headerfonts\">Close</a></div>";
    register.innerHTML = register.innerHTML + "</div>";
}

function UnloadUser()
{
    var signinout = document.getElementById("loginGradient");
    var register = document.getElementById("registerGradient");
    
    signinout.innerHTML = "<span style='text-align:left;'> <strong  class=\"headerfonts\">Sign in to personalize your experience:</strong></span>";
    signinout.innerHTML = signinout.innerHTML + "<div style=\"padding:10px 10px 10px 10px;\" id=\"SignInOut\">";
    signinout.innerHTML = signinout.innerHTML + "<div class=\"headerfonts\">Email Address:</div>";
    signinout.innerHTML = signinout.innerHTML + "<div><input type=\"text\"  name=\"username\" id=\"username\" maxlength=\"80\" class=\"headerfonts\"/></div>"; 
    signinout.innerHTML = signinout.innerHTML + "<div class=\"headerfonts\">Password:</div>";
    signinout.innerHTML = signinout.innerHTML + "<div><input type=\"password\" id=\"password1\" name=\"password\" maxlength=\"64\" class=\"headerfonts\"/></div>";
    signinout.innerHTML = signinout.innerHTML + "<div><input type=\"checkbox\" name=\"rememberme\" id=\"rememberme\" value=\"ON\" class=\"headerfonts\"/>Remember Me.</div>";
    signinout.innerHTML = signinout.innerHTML + "<div><input type=\"submit\" onclick=\"javascript:ProcessSignIn()\" value=\"Log In\" class=\"headerfonts\"/></div>";
    signinout.innerHTML = signinout.innerHTML + "<div style=\"float:right;font-size:11px\"><a href=\"javascript:CloseSignIn()\" class=\"headerfonts\">Close</a></div>";
    signinout.innerHTML = signinout.innerHTML + "</div>";
    
    
    register.innerHTML = "<span style=\"text-align:left;\">";
    register.innerHTML = register.innerHTML + "<strong  class=\"headerfonts\">Register to personalize your experience:</strong></span>";
    register.innerHTML = register.innerHTML + "<div style=\"padding:10px 10px 10px 10px;\">";
    register.innerHTML = register.innerHTML + "<div class=\"headerfonts\">First Name:</div>";
    register.innerHTML = register.innerHTML + "<div><input type=\"text\" name=\"fnr\" id=\"fnr\" maxlength=\"25\" class=\"headerfonts\"/></div>"; 
    register.innerHTML = register.innerHTML + "<div class=\"headerfonts\">Last Name:</div>";
    register.innerHTML = register.innerHTML + "<div><input type=\"text\" name=\"lnr\" id=\"lnr\" maxlength=\"40\" class=\"headerfonts\"/></div>";
    register.innerHTML = register.innerHTML + "<div class=\"headerfonts\">Email Address:</div>";
    register.innerHTML = register.innerHTML + "<div><input type=\"text\" name=\"emr\" id=\"emr\" maxlength=\"80\" class=\"headerfonts\"/></div>";
    register.innerHTML = register.innerHTML + "<div class=\"headerfonts\">Confirm Email:</div>";
    register.innerHTML = register.innerHTML + "<div><input type=\"text\" name=\"cemr\" id=\"cemr\" maxlength=\"80\" class=\"headerfonts\"/></div>";
    register.innerHTML = register.innerHTML + "<div class=\"headerfonts\">Password:</div>";
    register.innerHTML = register.innerHTML + "<div><input type=\"password\" name=\"password\"  id=\"rpassword\" maxlength=\"64\" class=\"headerfonts\"/></div>";
    register.innerHTML = register.innerHTML + "<div class=\"headerfonts\">Confirm Password:</div>";
    register.innerHTML = register.innerHTML + "<div><input type=\"password\" name=\"cpassword\"  id=\"cpassword\" maxlength=\"64\" class=\"headerfonts\"/></div>";
    register.innerHTML = register.innerHTML + "<div><input type=\"submit\" onclick=\"javascript:ProcessRegister()\" value=\"Register\" class=\"headerfonts\"/></div>";
    register.innerHTML = register.innerHTML + "<div style=\"float:right;font-size:11px\"><a href=\"javascript:CloseRegister()\" class=\"headerfonts\">Close</a></div>";
    register.innerHTML = register.innerHTML + "</div>";
}


//Client-side Validation:
var ValidateForm = {
	validate: function(id) {
		var formFlag = false;
		formFlag = ValidateForm.isEmpty(id);
		return formFlag;
	},

	isEmpty: function(id) {
		var tempElement = document.getElementById(id).value;
		if (tempElement.length == 0) {
			switch (id) {
			case "destination":
				var msg = "<font size=2pt> <strong>Please enter a destination.</strong></font><br /><font size=1pt>ex: Hawaii; Aspen CO; Amalfi coast, Italy</font>";
				ErrorControl.renderErrorWindow(msg);
				return false;
				break;

			case "fn":
				var msg = "<font size=2pt> <strong>You did not enter your first name.</strong></font>";
				ErrorControl.renderErrorWindow(msg);
				return true;
				break;
			case "pfn":
				var msg = "<font size=2pt> <strong>You did not enter your first name.</strong></font>";
				ErrorControl.renderErrorWindow(msg);
				return true;
				break;
			case "ln":
				var msg = "<font size=2pt> <strong>You did not enter your last name.</strong></font>";
				ErrorControl.renderErrorWindow(msg);
				return true;
				break;
			case "pln":
				var msg = "<font size=2pt> <strong>You did not enter your last name.</strong></font>";
				ErrorControl.renderErrorWindow(msg);
				return true;
				break;
			case "em":
				var msg = "<font size=2pt> <strong>You did not enter your email.</strong></font>";
				ErrorControl.renderErrorWindow(msg);
				return true;
				break;
			case "cem":
				var msg = "<font size=2pt> <strong>You did not confirm your email.</strong></font>";
				ErrorControl.renderErrorWindow(msg);
				return true;
				break;

			case "password":
				var msg = "<font size=2pt> <strong>You did not enter your password.</strong></font>";
				ErrorControl.renderErrorWindow(msg);
				return true;
				break;
			case "password1":
				var msg = "<font size=2pt> <strong>You did not enter your password.</strong></font>";
				ErrorControl.renderErrorWindow(msg);
				return true;
				break;
			case "username":
				var msg = "<font size=2pt> <strong>You did not enter your username.</strong></font>";
				ErrorControl.renderErrorWindow(msg);
				return true;
				break;

			case "cpassword":
				var msg = "<font size=2pt> <strong>You did not confirm your password.</strong></font>";
				ErrorControl.renderErrorWindow(msg);
				return true;
				break;
			case "add1":
				var msg = "<font size=2pt> <strong>Address is required.</strong></font>";
				ErrorControl.renderErrorWindow(msg);
				return true;
				break;
			case "city":
				var msg = "<font size=2pt> <strong>City is required.</strong></font>";
				ErrorControl.renderErrorWindow(msg);
				return true;
				break;
			case "state":
				var msg = "<font size=2pt> <strong>State is required.</strong></font>";
				ErrorControl.renderErrorWindow(msg);
				return true;
				break;
			case "zip":
				var msg = "<font size=2pt> <strong>Zipcode is required.</strong></font>";
				ErrorControl.renderErrorWindow(msg);
				return true;
				break;
			case "country":
				var msg = "<font size=2pt> <strong>Country is required.</strong></font>";
				ErrorControl.renderErrorWindow(msg);
				return true;
				break;
			} //END Switch
		}

	},
	isChecked: function(chk) {
		if (document.getElementById(chk).checked) return true;
		else {
			var msg = "Please agree to the terms and conditions.";
			window.alert(msg);
			return false;
		}
	},
	isStateCorrect: function(statefield, countryfield) {
	    if (document.getElementById(countryfield).value == "1" || document.getElementById(countryfield).value == "255")
	    {
	        if (document.getElementById(statefield).value != "none")
	        {
	            return true;
	        }
	        else
	        {
	            var msg = "State required for customers within the United States";
	            window.alert(msg);
	            return false;
	        }

	    }
	    else
	    {
	        return true;
	    }
	
	},
	isDateOk: function(month, year) {

		if (document.getElementById(month).value == "" || typeof(document.getElementById(month)) == "undefined" || document.getElementById(year).value == "" || typeof(document.getElementById(year)) == "undefined") {
			var msg = "Expiration date is required.";
			window.alert(msg);
			return false;

		}
		else {
			if (document.getElementById(month).value.length < 2 || document.getElementById(year).value.length < 4) {
				var msg = "Date should be in the mm/yyyy format, e.g.: 02/2011";
				window.alert(msg);
				return false;
			}
			else 
			{
			    var today = new Date();
			    var ldate = new Date();
			    var cdate = new Date();
			    
			    var lmonth = today.getMonth();
			    var lyear = today.getFullYear();
			    
			    var ldate = Date.parse("01/" + (lmonth + 1) + "/" + lyear);
			    var cdate = Date.parse("01/" + document.getElementById(month).value + "/" + document.getElementById(year).value)
                
                if (cdate < ldate)
                {
                    var msg = "Credit card expiration date has passed. Please reenter the date or try a different card.";
                    window.alert(msg);
                    return false
                }
			    else
			    {
			        return true;
			    }

			}
			return true;
		}

	},

	isGoodData: function(id, type, location) {
		var ret = false;
		var subject = document.getElementById(id).value;

		var expSearch = "^[0-9a-zA-Z'.,\\s\&]{1,75}$";
		var expName = "^[a-zA-Z'\\-\\s]{1,100}$";
		var expStreet = "^[0-9a-zA-Z'.,#\\-\\s]{1,100}$";
		var expEmail = "^([0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\\w]*[0-9a-zA-Z]\\.)+[a-zA-Z]{2,9})$";
		var expCC = "^[0-9a-zA-Z]{1,16}$";
		var expPhone = "^[01]?[- .]?(\\([2-9]\\d{2}\\)|[2-9]\\d{2})[- .]?\\d{3}[- .]?\\d{4}$";
		var expZip = "^[0-9a-zA-Z.,#\\-\\s]{1,20}$";
		var expMonth = "^[0-9]{1,2}$";
		var expYear = "^[0-9]{1,4}$";
		var expFreeText = "^[0-9a-zA-Z'.,#\\-\\s]{1,1000}$";

		if (type == "Search") {
			var re = RegExp(expSearch);
			ret = re.test(subject);
		}
		else if (type == "Name") {
			var re = RegExp(expName);
			ret = re.test(subject);
		}
		else if (type == "Street") {
			var re = RegExp(expStreet);
			ret = re.test(subject);
		}
		else if (type == "Email") {
			var re = RegExp(expEmail);
			ret = re.test(subject);
		}
		else if (type == "CC") {
			var re = RegExp(expCC);
			ret = re.test(subject);
		}
		else if (type == "Phone") {
			var re = RegExp(expPhone);
			ret = re.test(subject);
		}
		else if (type == "Zip") {
			var re = RegExp(expZip);
			ret = re.test(subject);
		}
		else if (type == "Month") {
			var re = RegExp(expMonth);
			ret = re.test(subject);
		}
		else if (type == "Year") {
			var re = RegExp(expYear);
			ret = re.test(subject);
		}
		else if (type == "FreeText") {
			var re = RegExp(expFreeText);
			ret = re.test(subject);
		}
		else {
			ret = false;
		}

		if (ret == false) {
			var eStr = "You entered invalid data in the " + location + " field.";
			window.alert(eStr);
		}

		return ret;

	},
	
		isGoodStringData: function(type, subject, location) {
		var ret = false;

		var expSearch = "^[0-9a-zA-Z'.,\\s\&]{1,75}$";
		var expName = "^[a-zA-Z'\\-\\s]{1,100}$";
		var expStreet = "^[0-9a-zA-Z'.,#\\-\\s]{1,100}$";
		var expEmail = "^([0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\\w]*[0-9a-zA-Z]\\.)+[a-zA-Z]{2,9})$";
		var expCC = "^[0-9a-zA-Z]{1,16}$";
		var expPhone = "^[01]?[- .]?(\\([2-9]\\d{2}\\)|[2-9]\\d{2})[- .]?\\d{3}[- .]?\\d{4}$";
		var expZip = "^[0-9a-zA-Z.,#\\-\\s]{1,20}$";
		var expMonth = "^[0-9]{1,2}$";
		var expYear = "^[0-9]{1,4}$";
		var expFreeText = "^[0-9a-zA-Z'.,#\\-\\s]{1,1000}$";

		if (type == "Search") {
			var re = RegExp(expSearch);
			ret = re.test(subject);
		}
		else if (type == "Name") {
			var re = RegExp(expName);
			ret = re.test(subject);
		}
		else if (type == "Street") {
			var re = RegExp(expStreet);
			ret = re.test(subject);
		}
		else if (type == "Email") {
			var re = RegExp(expEmail);
			ret = re.test(subject);
		}
		else if (type == "CC") {
			var re = RegExp(expCC);
			ret = re.test(subject);
		}
		else if (type == "Phone") {
			var re = RegExp(expPhone);
			ret = re.test(subject);
		}
		else if (type == "Zip") {
			var re = RegExp(expZip);
			ret = re.test(subject);
		}
		else if (type == "Month") {
			var re = RegExp(expMonth);
			ret = re.test(subject);
		}
		else if (type == "Year") {
			var re = RegExp(expYear);
			ret = re.test(subject);
		}
		else if (type == "FreeText") {
			var re = RegExp(expFreeText);
			ret = re.test(subject);
		}
		else {
			ret = false;
		}

		if (ret == false) {
			var eStr = "You entered invalid data in the " + location + " field.";
			window.alert(eStr);
		}

		return ret;

	},

	isLengthOk: function(id, l) {
		if (document.getElementById(id).value.length < l) {
			var msg = "A minimum of " + l + " characters are required.";

			window.alert(msg);
			return false;
		}
		else return true;
	},
	
	isStringLengthOk: function(str, l) {
		if (str.length < l) {
			var msg = "A minimum of " + l + " characters are required.";

			window.alert(msg);
			return false;
		}
		else return true;
	},
	
	showError: function(msg) {
        window.alert(msg);
	},

	trim: function(s) {
		return s.replace(/^\s+|\s+$/, '');
	},

	isEmailEqual: function(em, cem) {
		var compareFlag = false;
		if (document.getElementById(em).value != document.getElementById(cem).value) {
			var msg = "Your Email do not match. Please retype your Email.";
			window.alert(msg);
			compareFlag = false;
		}
		else compareFlag = true;
		return compareFlag;
	},

	isPasswordEqual: function(pwd, cpwd) {
		var compareFlag = false;
		if (document.getElementById(pwd).value != document.getElementById(cpwd).value) {
			var msg = "Your passwords do not match. Please retype your passwords.";
			window.alert(msg);
			compareFlag = false;
		}
		else compareFlag = true;
		return compareFlag;
	}

} //END VALIDATE FORM 

var ErrorControl = {
	renderErrorWindow: function(errMsg) {
		var err = document.getElementById("ErrorSlot");
		err.innerHTML = errMsg;
	}
}

function mouseX(evt) {
if (evt.pageX) return evt.pageX;
else if (evt.clientX)
   return evt.clientX + (document.documentElement.scrollLeft ?
   document.documentElement.scrollLeft :
   document.body.scrollLeft);
else return null;
}

function mouseY(evt) {
if (evt.pageY) return evt.pageY;
else if (evt.clientY)
   return evt.clientY + (document.documentElement.scrollTop ?
   document.documentElement.scrollTop :
   document.body.scrollTop);
else return null;
}


function OpenSearchOptions()
{
    //close other toolbar items:
	//CloseSignIn()
    //CloseRegister();
    //CloseHelp();
    
    var OpenSearchdiv = document.getElementById("moreOptions");
    OpenSearchdiv.style.visibility = "visible";  
	OpenSearchdiv.style.zIndex = 100;
	
	var hiddenmenu1 = document.getElementById("ModifyBedrooms");
	var hiddenmenu2 = document.getElementById("ModifyPrice");	
	//var hiddenmenu3 = document.getElementById("ModifyRating");
	
	
	
	if (hiddenmenu1 != null)
	{
        hiddenmenu1.style.visibility = "hidden";	
	}
	
	
	if (hiddenmenu2 != null)
	{
	    hiddenmenu2.style.visibility = "hidden";
	}

	//if (hiddenmenu3 != null)
	//{
    //    hiddenmenu3.style.visibility = "hidden";	
	//}
}


//Open and close Options

function flexableDays()
{
	document.flexForm.flex60.checked == true;

	if(document.flexForm.flex60.checked == true)
	{
    
	document.exatForm.exact.checked = false;
	
	document.chooseDay.startDay.disabled = false;
	document.chooseDay.daySelect.disabled = false;

    if (document.CheckInForm != null)
    {
	    document.CheckInForm.Checkin.disabled = true;
	    document.CheckInForm.flexable1.disabled = true;
    }

    if (document.CheckOutForm != null)
    {
        if (document.CheckOutForm.Checkout != null)
        {
	        document.CheckOutForm.Checkout.disabled = true;
        }

        if (document.CheckOutForm.flexable2 != null)
        {
	        document.CheckOutForm.flexable2.disabled = true;
        }
    }


		var form3 = document.getElementById("StartDays");
		var form1 = document.getElementById("CheckOutDate");
		var form2 = document.getElementById("CheckInDate");
	
		var showdiv1 = document.getElementById("ExaIn");
		var showdiv2= document.getElementById("ExaOut");
		var showdiv3 = document.getElementById("Flex60Days");
		
		var list1 = document.getElementById("staySelection");
		var list2 = document.getElementById("InDays");
		var list3 = document.getElementById("OutDays");
		
		var cal0 = document.getElementById("tcalico_0");
		var cal1 = document.getElementById("tcalico_1");
		var cal2 = document.getElementById("tcalico_2");
		
		cal0.onclick = function() {A_TCALS['0'].f_toggle();};
		cal1.onclick = function() {};
		cal2.onclick = function() {};
		
		form3.style.border = "1px solid #3399cc";
		form3.style.color = "#717171";
		form3.style.background = "#fff";
		form1.style.border = "1px solid #cacaca";
		form1.style.color = "#cacaca";
		form1.style.background = "#fff";
		form2.style.border = "1px solid #cacaca";
		form2.style.color = "#cacaca";
		form2.style.background = "#fff";
		
		showdiv1.style.color = "#cacaca";
		showdiv2.style.color = "#cacaca";
		showdiv3.style.color = "#575757";
		
		list1.style.border = "1px solid #3399cc";
		list1.style.color = "#717171";
		list1.style.background = "#fff";
		list2.style.border = "1px solid #cacaca";
		list2.style.color = "#cacaca";
		list2.style.background = "#fff";
		list3.style.border = "1px solid #cacaca";
		list3.style.color = "#cacaca";
		list3.style.background = "#fff";

	}
}


function exactlyDays()
{
	document.exatForm.exact.checked == true;

	if(document.exatForm.exact.checked == true)
	{
	    document.flexForm.flex60.checked = false;
    	
	    document.chooseDay.startDay.disabled = true;
	    document.chooseDay.daySelect.disabled = true;
    	
	    document.CheckInForm.Checkin.disabled = false;
	    document.CheckOutForm.Checkout.disabled = false;
	    document.CheckInForm.flexable1.disabled = false;
	    document.CheckOutForm.flexable2.disabled = false;
	
	
	//CloseCalendarStart();
	
	
		var form3 = document.getElementById("StartDays");
		var form1 = document.getElementById("CheckOutDate");
		var form2 = document.getElementById("CheckInDate");
		
		var showdiv1 = document.getElementById("ExaIn");
		var showdiv2= document.getElementById("ExaOut");
		var showdiv3 = document.getElementById("Flex60Days");
		
		var list1 = document.getElementById("staySelection");
		var list2 = document.getElementById("InDays");
		var list3 = document.getElementById("OutDays");
		
		var cal0 = document.getElementById("tcalico_0");
		var cal1 = document.getElementById("tcalico_1");
		var cal2 = document.getElementById("tcalico_2");
		
		cal0.onclick = function () {};
		cal1.onclick = function() {A_TCALS['1'].f_toggle();};
		cal2.onclick = function() {A_TCALS['2'].f_toggle();};
		
		form3.style.border = "1px solid #cacaca";
		form3.style.color = "#cacaca";
		form3.style.background = "#fff";
		form1.style.border = "1px solid #3399cc";
		form1.style.color = "#717171";
		form1.style.background = "#fff";
		form2.style.border = "1px solid #3399cc";
		form2.style.color = "#717171";
		form2.style.background = "#fff";
		
		showdiv1.style.color = "#575757";
		showdiv2.style.color = "#575757";
		showdiv3.style.color = "#cacaca";
		
		list1.style.border = "1px solid #cacaca";
		list1.style.color = "#cacaca";
		list1.style.background = "#fff";
		list2.style.border = "1px solid #3399cc";
		list2.style.color = "#717171";
		list2.style.background = "#fff";
		list3.style.border = "1px solid #3399cc";
		list3.style.color = "#717171";
		list3.style.background = "#fff";
		
	
		
		
	}
}

//document.CheckInForm.checkin.disabled = true;
//document.CheckOutForm.checkout.disabled = true;
//document.CheckInForm.flexable1.checked == false;
//document.CheckOutForm.flexable2.checked == false;

if (document.getElementById('ExaIn') != null)
{
    document.getElementById('ExaIn').style.width = 247 + "px";
}

if (document.getElementById('ExaOut') != null)
{
    document.getElementById('ExaOut').style.width = 247 + "px"
}


function clickCheckbox1(){
	if(document.CheckInForm.flexable1.checked == false){

	    document.getElementById('ExaIn').style.width = 247 + "px";
	    
	    var list1 = document.getElementById("InDays");
		list1.style.border = "1px solid #fff";
		list1.style.color = "#fff";
		list1.style.background = "#fff";

		document.CheckInForm.flexable1.checked == true;
	}

	if(document.CheckInForm.flexable1.checked == true){

		document.getElementById('ExaIn').style.width = 370 + "px";
		var list1 = document.getElementById("InDays");
		list1.style.border = "1px solid #3399cc";
		list1.style.color = "#717171";
		list1.style.background = "#fff";

		document.CheckInForm.flexable1.checked == false;
	}
}


function clickCheckbox2(){
	if(document.CheckOutForm.flexable2.checked == false){

		document.getElementById('ExaOut').style.width = 247 + "px";
		
		var list2 = document.getElementById("OutDays");
		list2.style.border = "1px solid #fff";
		list2.style.color = "#fff";
		list2.style.background = "#fff";
		
		document.CheckOutForm.flexable2.checked == true;
	}

	if(document.CheckOutForm.flexable2.checked == true){

		document.getElementById('ExaOut').style.width = 370 + "px";
		var list2 = document.getElementById("OutDays");
		list2.style.border = "1px solid #3399cc";
		list2.style.color = "#717171";
		list2.style.background = "#fff";
		
		document.CheckOutForm.flexable2.checked == false;
	}
}

function displayPopUp()
{

//    if (!document.activeElement)
//    {
//        window.open("http://travel.ian.com/hotels/index.jsp?cid=270236", "LeavePop", "width=800,height=600", "");
//        window.focus();
//    }

}

function displayHome(u)
{
    window.open("http://www.leisurelink.com/hpt/home_project/html/" + u + ".html", "HomePop", "width=1100,height=760", "");
}


//Open and close Calendars
//Open and close Calendars
//Open and close Calendars

function OpenCalendarStart()
{
    //close other toolbar items:
	//CloseSignIn()
    //CloseRegister();
    //CloseHelp();
	////CloseCalendarOut()
	////CloseCalendarIn()
    
    var OpenCalendardiv = document.getElementById("calendarStart");
    OpenCalendardiv.style.visibility = "visible";  
	OpenCalendardiv.style.zIndex = 20;	
}

function OpenCalendarIn()
{
    //close other toolbar items:
	//CloseSignIn()
    //CloseRegister();
    //CloseHelp();
	CloseCalendarOut();
    
    var OpenCalendardiv = document.getElementById("calendarIn");
    OpenCalendardiv.style.visibility = "visible";  
	OpenCalendardiv.style.zIndex = 20;	
}

function OpenCalendarOut()
{
    //close other toolbar items:
	//CloseSignIn()
    //CloseRegister();
    //CloseHelp();
	////CloseCalendarIn();
    
    var OpenCalendardiv = document.getElementById("calendarOut");
    OpenCalendardiv.style.visibility = "visible";  
	OpenCalendardiv.style.zIndex = 20;	
}




function CloseCalendarStart()
{
    var Calendardiv = document.getElementById("calendarStart");
    Calendardiv.style.visibility = "hidden";   
    Calendardiv.style.zIndex = 0;

}

function CloseCalendarIn()
{
    var Calendardiv = document.getElementById("calendarIn");
    Calendardiv.style.visibility = "hidden";   
    Calendardiv.style.zIndex = 0;

}

function CloseCalendarOut()
{
    var Calendardiv = document.getElementById("calendarOut");
    Calendardiv.style.visibility = "hidden";   
    Calendardiv.style.zIndex = 0;

}

//close Calendar by choosing date
function InDate()
{
	////CloseCalendarIn();
}

function OutDate()
{
	////CloseCalendarOut();
}

function StartDate()
{
	CloseCalendarStart();
}


//close search options

function CloseSearchOptions()
{
    var CloseSearchdiv = document.getElementById("moreOptions");
    CloseSearchdiv.style.visibility = "hidden";   
    CloseSearchdiv.style.zIndex = 0;
	
	var hiddenmenu1 = document.getElementById("ModifyBedrooms");
	var hiddenmenu2 = document.getElementById("ModifyPrice");	
	//var hiddenmenu3 = document.getElementById("ModifyRating");
	
	if (hiddenmenu1 != null)
	{
	    hiddenmenu1.style.visibility = "visible";
	}
	
	if (hiddenmenu2 != null)
	{
	    hiddenmenu2.style.visibility = "visible";
	}
	
	//if (hiddenmenu3 != null)
	//{
    //    hiddenmenu3.style.visibility = "visible";	
	//}
	
	f_tcalHideAll();
	storeSearchCriteria();
    AdjustAdvanceSearchStrip(); 
}

function storeSearchCriteria()
{
     var srchCriteria = document.getElementById("srchCriteria");
     var flexmonth = document.getElementById("flexMonth").checked;
     if (flexmonth == true)
     {
         var sday = document.getElementById("StartDays").value;
         var weeks  = document.getElementById("staySelection").value;
         if(weeks == 0){
            srchCriteria.innerHTML ="Search From <strong>" + sday + "</strong>";
         }
         else if (weeks == 1)
         {
            srchCriteria.innerHTML ="Search From <strong>" + sday + "</strong> over the next <strong>" + weeks + " week</strong>";
         }
         else
         {
            srchCriteria.innerHTML ="Search From <strong>" + sday + "</strong> over the next <strong>" + weeks + " weeks</strong>";
         }
     }
     else
     {
         var Chin = document.getElementById("CheckInDate").value;
         var Chout = document.getElementById("CheckOutDate").value;
         var days1  = document.getElementById("InDays").value;
         var days2  = document.getElementById("OutDays").value;

         var flex1 = document.getElementById("flexableDate").checked;
         var flex2 = document.getElementById("flexableDate2").checked;

         if (flex1)
         {
                Chin = Chin + "[&plusmn;" + days1 + "]";
         }
         if (flex2)
         {
                Chout = Chout + "[&plusmn;" + days2 + "]";
         }
         srchCriteria.innerHTML ="Search From <strong>" + Chin + "</strong> To <strong>" + Chout + "</strong>"; 
        
     }
     
}

function validateStartDayDate()
{
    var chooseDayForm = document.getElementById("chooseDayform");
    var DateToday = new Date();  
    var re_date = /^\s*(\d{1,2})\/(\d{1,2})\/(\d{2,4})\s*$/;
	if (!re_date.exec(chooseDayForm.StartDays.value)){
	    alert ("Invalid Start Day date: '" + chooseDayForm.StartDays.value + "'.\nAccepted format is mm/dd/yyyy.");
	    chooseDayForm.StartDays.value = formatDate2(DateToday,"MM/DD/YYYY");
		return ;
	}

}

function validateCheckInDate()
{
    var CheckInForm = document.getElementById("CheckInForm");
    var CheckOutForm = document.getElementById("CheckOutForm");
    var DateToday = new Date();  
    var re_date = /^\s*(\d{1,2})\/(\d{1,2})\/(\d{2,4})\s*$/;
	if (!re_date.exec(CheckInForm.CheckInDate.value)){
	    alert ("Invalid Check-In date: '" + CheckInForm.CheckInDate.value + "'.\nAccepted format is mm/dd/yyyy.");
	    CheckInForm.CheckInDate.value = formatDate2(DateToday,"MM/DD/YYYY");
		return ;
	}
	
	var DateCin = new Date(CheckInForm.CheckInDate.value);

    if( DateCin.valueOf() < DateToday.valueOf())
	{
	    alert("Check-In date cannot be before today.");
	    CheckInForm.CheckInDate.value = formatDate2(DateToday,"MM/DD/YYYY");
	}
	
	var NextYear = DateToday.getFullYear()+ 1  
	var MaxCDate = new Date( DateToday.getMonth()+1 + "/" +DateToday.getDate() + "/" + NextYear);

    if( DateCin.valueOf() > MaxCDate.valueOf())
	{
	    alert("Check-In date cannot be more than one year from today.");
	    CheckInForm.CheckInDate.value = formatDate2(DateToday,"MM/DD/YYYY");
	}
    
}


function validateCheckOutDate()
{
    var CheckInForm = document.getElementById("CheckInForm");
    var CheckOutForm = document.getElementById("CheckOutForm");
    
    var DateCout = new Date(CheckOutForm.CheckOutDate.value);
    var DateCin = new Date(CheckInForm.CheckInDate.value);
    
    var DateToday = new Date(); 
    var defaultCoutDate = new Date(DateCin.getTime() + 96*60*60*1000);
    var re_date = /^\s*(\d{1,2})\/(\d{1,2})\/(\d{2,4})\s*$/;
	if (!re_date.exec(CheckOutForm.CheckOutDate.value)){
	    alert ("Invalid Check-Out date: '" + CheckInForm.CheckInDate.value + "'.\nAccepted format is mm/dd/yyyy.");
	    CheckOutForm.CheckOutDate.value = formatDate2(defaultCoutDate,"MM/DD/YYYY");
		return ;
	}
    
	if( DateCout <= DateCin)
	{
	    alert("Check-Out date cannot be before Check-In date.");
	    CheckOutForm.CheckOutDate.value = formatDate2(defaultCoutDate,"MM/DD/YYYY");
	}
	
	var NextYear = DateToday.getFullYear()+ 1  
	var MaxCDate = new Date( DateToday.getMonth()+1 + "/" +DateToday.getDate() + "/" + NextYear);

    if( DateCout.valueOf() > MaxCDate.valueOf())
	{
	    alert("Check-Out date cannot be more than one year from today.");
	    CheckOutForm.CheckOutDate.value = formatDate2(defaultCoutDate,"MM/DD/YYYY");
	}
	
}

function formatDate2(dateValue, format)
{
    var fmt = format.toUpperCase();
    var re = /^(M|MM|D|DD|YYYY)([\-\/]{1})(M|MM|D|DD|YYYY)(\2)(M|MM|D|DD|YYYY)$/;
    if (!re.test(fmt)) { fmt = "MM/DD/YYYY"; }
    if (fmt.indexOf("M") == -1) { fmt = "MM/DD/YYYY"; }
    if (fmt.indexOf("D") == -1) { fmt = "MM/DD/YYYY"; }
    if (fmt.indexOf("YYYY") == -1) { fmt = "MM/DD/YYYY"; } 
    var M = "" + (dateValue.getMonth()+1);
    var MM = "0" + M;
    MM = MM.substring(MM.length-2, MM.length);
    var D = "" + (dateValue.getDate());
    var DD = "0" + D;
    DD = DD.substring(DD.length-2, DD.length);
    var YYYY = "" + (dateValue.getFullYear()); 
    var sep = "/";
    if (fmt.indexOf("-") != -1) { sep = "-"; }
    var pieces = fmt.split(sep);
    var result = ""; 

    switch (pieces[0]) 
    {
        case "M" : result += M + sep; break;
        case "MM" : result += MM + sep; break;
        case "D" : result += D + sep; break;
        case "DD" : result += DD + sep; break;
        case "YYYY" : result += YYYY + sep; break;
    }

    switch (pieces[1]) 
    {
        case "M" : result += M + sep; break;
        case "MM" : result += MM + sep; break;
        case "D" : result += D + sep; break;
        case "DD" : result += DD + sep; break;
        case "YYYY" : result += YYYY + sep; break;
    }  

    switch (pieces[2]) 
    {
        case "M" : result += M; break;
        case "MM" : result += MM; break;
        case "D" : result += D; break;
        case "DD" : result += DD; break;
        case "YYYY" : result += YYYY; break;
    }

    return result; 
}

function StayMouseOver(e, id)
{
    var selholder = document.getElementById(id + "-selectorholder");
    
    if (selholder == null) return;

    if (selholder.className.indexOf(" stay-dim") >= 0)
    {
        var midx = selholder.className.indexOf(" stay-dim");
        if (midx >=0)
        {
            selholder.className = selholder.className.substr(0, midx);
        }
    }
}

function StayMouseOut(e, id)
{
	if (!e) var e = window.event;
	//var tg = (window.event) ? e.srcElement : e.target;
	var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement;
	
	if (reltg == null) return;
	
	while (reltg.id.indexOf("part") == -1 && reltg.nodeName != 'BODY')
		reltg= reltg.parentNode;
	if (reltg.id.indexOf("part") >= 0) return;
    
    var selholder = document.getElementById(id + "-selectorholder");
    var priceholder = document.getElementById("sPrice-" + id);
    
    if (priceholder.className != "options frame-next")
    {
        if (selholder.className.indexOf(" stay-dim") == -1)
        {
            selholder.className = selholder.className + " stay-dim";
        }
    }

}

function CalendarMouseOver(e, cid)
{

    var calheader = document.getElementById("sCal-" + cid);
    
    if (calheader == null) return;

    if (calheader.className == "options frame-next")
    {
        var calholder = document.getElementById(cid + "-calholder");
        
        var midx = calholder.className.indexOf(" dimed");
        if (midx >=0)
        {
            calholder.className = calholder.className.substr(0, midx);
        }

    }
}


function CalendarMouseOut(e, id)
{
	if (!e) var e = window.event;
	
	var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement;
	
	if (reltg == null) return;
	while (reltg.id.indexOf("calholder") == -1 && reltg.nodeName != 'BODY')
		reltg= reltg.parentNode;
	if (reltg.id.indexOf("calholder") >= 0) return;

    var calholder = document.getElementById(id + "-calholder");
    var calheader = document.getElementById("sCal-" + id);
    
    if (calheader == null) return;
    
    if (calheader.className == "options frame-next")
    {
       calholder.className = calholder.className + " dimed";
    }

}


function ShowHideStayDetails(sid)
{
    var stay = document.getElementById(sid);
    
    if (stay.className.indexOf("open") >= 0)
    {
        if (stay.className.indexOf("special") >=0)
        {
            stay.className = stay.className.replace("special-stay-open", "special-stay");
        }
        else
        {
            stay.className = stay.className.replace("stay-open", "stay");
        }
    }
    else
    {
        if (stay.className.indexOf("special-stay") >= 0)
        {
		    stay.className = stay.className.replace("special-stay", "special-stay-open");
        }
        else
        {
            stay.className = stay.className.replace("stay", "stay-open");
        }

    }

}

String.prototype.replaceAll = function( 
    strTarget, // The substring you want to replace
    strSubString // The string you want to replace in.
    ){
    var strText = this;
    var intIndexOfMatch = strText.indexOf( strTarget );
     

    // Keep looping while an instance of the target string
    // still exists in the string.
    while (intIndexOfMatch != -1){
    // Relace out the current instance.
    strText = strText.replace( strTarget, strSubString )
     

    // Get the index of any next matching substring.
    intIndexOfMatch = strText.indexOf( strTarget );
    }
     

    // Return the updated string with ALL the target strings
    // replaced out with the new substring.
    return( strText );
}