
function expandFaq(faqdivid, imgid) {
    if ($("#" + imgid).attr("alt") == "expand") {
        $("#" + faqdivid).css("height", ($("#" + faqdivid).html().length * 0.5) + 8 + 'px');
        $("#" + imgid).attr("src", "/SiteEngine/HTC/images/16-square-red-remove.png");
        $("#" + imgid).attr("alt", "collapse");
        $("#" + faqdivid).slideDown("slow");
    }
    else {
        $("#" + imgid).attr("src", "/SiteEngine/HTC/images/16-square-red-add.png");
        $("#" + imgid).attr("alt", "expand");
        $("#" + faqdivid).slideUp("slow");
    }
}

/*****************************************
SEARCH RESULTS MAP (Only for SR)
******************************************/
var minZoomLevel = 16;

var IsMapJSAvilable = false;
var IsMapJSRequestProcessing = false;

function initMapJSLoader(callBackMethod) {
    if (IsMapJSRequestProcessing == false) {
        IsMapJSRequestProcessing = true;
        var script = document.createElement("script");
        script.src = varMapsUrl + callBackMethod;
        script.type = "text/javascript";
        document.getElementsByTagName("head")[0].appendChild(script);
    }
}

function SRmapsLoaded() {
    IsMapJSAvilable = true;
    IsMapJSRequestProcessing = false;
    ShowGGMaps(_varlat, _varlon, _objvar, _varHotelName, _varLocation, _varAddress, _varRating, _varHotelImageURL, _varX, _varY)

}



var _varlat, _varlon, _objvar, _varHotelName, _varLocation, _varAddress, _varRating, _varHotelImageURL, _varX, _varY

function ShowGGMaps(varlat, varlon, objvar, varHotelName, varLocation, varAddress, varRating, varHotelImageURL, varX, varY) {

    if (IsMapJSAvilable == false) {
        _varlat = varlat;
        _varlon = varlon;
        _objvar = objvar;
        _varHotelName = varHotelName;
        _varLocation = varLocation;
        _varAddress = varAddress;
        _varRating = varRating;
        _varHotelImageURL = varHotelImageURL;
        _varX = varX;
        _varY = varY;
        loadMapTemplateAndData(varlat, varlon, objvar, varHotelName, varLocation, varAddress, varRating, varHotelImageURL, varX, varY);
        if (IsMapJSRequestProcessing == false) {
            initMapJSLoader("SRmapsLoaded");
        }
        return false;
    }

    loadMapTemplateAndData(varlat, varlon, objvar, varHotelName, varLocation, varAddress, varRating, varHotelImageURL, varX, varY);

    return false;
}

function loadMapTemplateAndData(varlat, varlon, objvar, varHotelName, varLocation, varAddress, varRating, varHotelImageURL, varX, varY) {
    MoveGGTemplate(objvar, varX, varY);
    document.getElementById("HotelImageURL").src = varHotelImageURL;
    document.getElementById("HotelName").innerHTML = varHotelName;
    document.getElementById("HotelMapStarRating").src = "/SiteEngine/HTC/Img/pixel.gif";
    document.getElementById("HotelMapStarRating").className = varRating; 
    document.getElementById("HotelMapLocation").innerHTML = "<strong>" + varLocationStringLang + ": </strong>" + varLocation;
    document.getElementById("HotelMapAddress").innerHTML = "<strong>" + varAddressStringLang + " </strong>" + varAddress;
    document.getElementById("HotelImageURL").src = "/HCRefreshAshx/ThumbNail.ashx?square=true&s=70&hid=" + varHotelImageURL;
}

function MoveGGTemplate(objvar, varX, varY) {
    var posX;
    if (parseInt(findPosX(objvar)) + parseInt(varX) < 5)
        posX = 5;
    else
        posX = parseInt(findPosX(objvar)) + parseInt(varX);
    var posY = parseInt(findPosY(objvar)) + parseInt(varY);

    document.getElementById("tplGoogleMap").style.left = posX + "px";
    document.getElementById("tplGoogleMap").style.top = posY + "px";
    document.getElementById("tplGoogleMap").style.display = "block";
}

function CloseMapWindow() {
    document.getElementById("tplGoogleMap").style.display = "none";
}

function findPosX(obj) {
    var curleft = 0;
    if (obj.offsetParent)
        while (1) {
        curleft += obj.offsetLeft;
        if (!obj.offsetParent)
            break;
        obj = obj.offsetParent;
    }
    else if (obj.x)
        curleft += obj.x;
    return curleft;
}

function findPosY(obj) {
    var curtop = 0;
    if (obj.offsetParent)
        while (1) {
        curtop += obj.offsetTop;
        if (!obj.offsetParent)
            break;
        obj = obj.offsetParent;
    }
    else if (obj.y)
        curtop += obj.y;
    return curtop;
}


function DHJsLoaded() {
    IsMapJSAvilable = true;
    IsMapJSRequestProcessing = false;
}

function mapsLoaded() {
}// Common.js starts here
function DescPop(url) {
    openWnd(url, "Description", 300, 600, 0, 0, 0, 1, 1, 0, 0)
} 
//open new window
function openWnd(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()
}


//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 = 0; i < arrNameVal.length ; i++) {
    
    curName = URLDecode(arrNameVal[i].split("=")[0])
    if (curName.toLowerCase() != name.toLowerCase()) qStringNew += "&" + arrNameVal[i]

}}

return qStringNew.substr(1)
}

function GetSelText(ctl) {
var selIdx = ctl.selectedIndex
return selIdx == -1 ? "" : ctl[selIdx].text
}

function URLDecode(urlStr) {
return unescape(urlStr.replace(/\+/g, " "))
}

//get select box value
function GetSelVal(ctl) {
var selIdx = ctl.selectedIndex
return selIdx == -1 ? "" : ctl[selIdx].value
}

function notNumber(number) {
number = number.toString()
for (var i=0; i<number.length; i++) {
if (number.charAt(i) > "9" || number.charAt(i) < "0") return true
}
return false
}

//check whether text-box is empty
function isEmpty(field, fieldName, msg){
if (Trim(field.value) == ""){
if (msg == null)
    msg = "Please enter " + fieldName + "."
    alert(msg);
	field.focus()
	return true

}
return false
}

//validate ASCII Character Set
function charCheck(field, message, toASCIIfield) {
if (toASCIIfield == null)
var txt = field.value
else
var txt = ToASCII(field)

for (var i=0; i<txt.length; i++) {
if (txt.charCodeAt(i) >= 128) {
alert(message)
field.focus()
return true
}}

return false
}

//check whether text-box is empty
function isEmptyContact(field, fieldName, msg) 
{ //alert(field)
	if (Trim(field.value) == "") 
	{
		if (msg == null)
			msg = "Please enter " + fieldName + "."
			field.focus()
			return true
		
	}

		return false
}


//validate ASCII Character Set
function charCheckContact(field, message, toASCIIfield) 
	{
		if (toASCIIfield == null)
			var txt = field.value
		else
			var txt = ToASCII(field)
			for (var i=0; i<txt.length; i++) 
			{
				if (txt.charCodeAt(i) >= 128) 
				{
				field.focus()
				return true
				}
			}
		return false
	}
function notSelected(field, fieldName, msg) 
{
	if (field.selectedIndex == 0) 
	{
		if (msg == null)
			msg = "Please select " + fieldName + "."
			field.focus()
			return true
	}
		return false
}

var AllowDocLangClick;
var AllowDocCurrClick;

AllowDocLangClick = false;
AllowDocCurrClick = false;

var LangjustClicked;
LangjustClicked = false;

var CurrjustClicked;
CurrjustClicked = false;
//_______________________________________________________________________________________
//for handling lang and curr dropdown style.
//_______________________________________________________________________________________
var IsCollapsable = false;
var UPPER_LIMIT = LOWER_LIMIT = 0;
var IsMovingDownClicked,IsMovingUpClicked = false;
var ItemsTable ;
var ParentDiv ;
var ParentDiv_ID ;
var PixTop = 0;
var PixHeight = 0;
 
 //Image Click event handler
function ImageClick (ParentDivID, ItemsTableID)
{
    ItemsTable = document.getElementById(ItemsTableID);
    ParentDiv = document.getElementById(ParentDivID);
    ParentDiv_ID =  ParentDivID;
    if(ItemsTable.style.top == null || ItemsTable.style.top == '')
    {
        ItemsTable.style.top = (0 - ItemsTable.getElementsByTagName("TR").length * 22) + "px";
    }
    
    UPPER_LIMIT = ItemsTable.getElementsByTagName("TR").length * 22;
    LOWER_LIMIT = 0 - UPPER_LIMIT;
     
    if(ParentDiv.style.display == "none")
    {
       IsCollapsable = false;
       ParentDiv.style.height = "0px";
       ItemsTable.style.top = (0 - ItemsTable.getElementsByTagName("TR").length * 22) + "px";
    }
    PixTop = 0;
    PixHeight = 0;
    if(IsCollapsable)
    {
        IsCollapsable = false;
        IsMovingUpClicked = true;
        IsMovingDownClicked = false;
        MoveUp();
    }
    else
    {
        IsCollapsable = true;
        IsMovingDownClicked = true;
        IsMovingUpClicked = false;
        toggleDisplay(ParentDivID, "block");
        MoveDown();
    }
}
var MoveUp = function()
{
    if(LOWER_LIMIT >= PixTop)
    {
        toggleDisplay(ParentDiv_ID, "none");
       
        return;
    }
    if(IsMovingDownClicked)
    {
        return;
    }
     
    PixTop = parseInt(ItemsTable.style.top.replace("px",""));
    PixHeight = parseInt(ParentDiv.style.height.replace("px",""));
	PixTop = PixTop - 10; 
	PixHeight = PixHeight - 10;
    ItemsTable.style.top = PixTop.toString() + "px";
    ParentDiv.style.height = PixHeight.toString() + "px";
	setTimeout(MoveUp,0);      
}
var MoveDown = function()
{
    if(UPPER_LIMIT <= PixHeight || IsMovingUpClicked )
    {
         
        return;
    }
 
	PixTop = parseInt(ItemsTable.style.top.replace("px",""));
    PixHeight = parseInt(ParentDiv.style.height.replace("px",""));
    PixTop = PixTop + 10; 
	PixHeight = PixHeight + 10;
    ItemsTable.style.top = PixTop.toString() + "px";
    ParentDiv.style.height = PixHeight.toString() + "px";
    setTimeout(MoveDown,0);      
}

function langcurrMouseOver(currentObject, langTitle){
if(langTitle != ''){
var images = currentObject.getElementsByTagName("img");
currentObject.style.backgroundColor = "#eae7a8";       
var index = images.length == 2? 1: 0;
if(images.length >0)
{
images[index].style.visibility = "visible";
}}}

function langcurrMouseOut(currentObject, langTitle){
if(langTitle != ''){
var images = currentObject.getElementsByTagName("img");
currentObject.style.backgroundColor = "#f8f8f8";
var index = images.length == 2? 1: 0;
if(images.length >0){
    images[index].style.visibility = "hidden";
}}}

function toggleDisplay(divId, ops) {

    var div = document.getElementById(divId);
    if (document.getElementById(divId).style.display == "block") ops = "none";
    div.style.display = ops;
 
      if (divId == 'dropmenulang') {
        AllowDocLangClick = true;
        LangjustClicked = true;
        CurrjustClicked = false;
      }
      else {
        AllowDocCurrClick = true;
        CurrjustClicked = true;
        LangjustClicked = false;
      }
  
}

function toggleDisplay2(obj, msgShow, msgHide, msgTemplate) {
    var objTemplate = document.getElementById(obj)
    var objMsgTemplate = document.getElementById(msgTemplate)
    if (objTemplate.style.display == 'block') {
        objTemplate.style.display = 'none';
        objMsgTemplate.innerHTML = msgHide;
    } else {
    objTemplate.style.display = 'block';
        objMsgTemplate.innerHTML = msgShow;
    }
}

function showLangFalse() {
if (LangjustClicked == true){
    LangjustClicked = false;
	return;
}
if (AllowDocLangClick == true) {
document.getElementById('dropmenulang').style.display="none";
AllowDocLangClick = false;
}}

function showCurrFalse() {
if (CurrjustClicked == true) {
    CurrjustClicked = false;
	return;
}

if (AllowDocCurrClick == true) {
document.getElementById('dropmenucurr').style.display="none";
AllowDocCurrClick = false;
}}

function showDivsFalse() {
    showCurrFalse();
    showLangFalse();
}

document.onclick = showDivsFalse;

function ChangeValue(urlVar, varValue) {
if (varValue != "") {
var frm = document.MainLangSwitch
var URL = switch_URL(urlVar, varValue)

if (frm) {
	frm.action = URL
	frm.submit()
} else {
	location = URL
}}}

function switch_URL(urlVar, varValue) {
var qString = location.search.substr(1)
var arrQString = qString.split("&")
var varAdded = false

for (var i in arrQString) {
if (arrQString[i].split("=")[0].toLowerCase() == urlVar) {
	arrQString[i] = urlVar + "=" + varValue
	varAdded = true
}}
qString = arrQString.join("&")
if (!varAdded) {
if (qString != "") qString += "&"
qString += urlVar + "=" + varValue
}
return location.pathname + "?" + qString
}

function LTrim(str){
var whitespace = new String(" \t\n\r");
var s = new String(str);
if (whitespace.indexOf(s.charAt(0)) != -1) {
var j=0, i = s.length;
while (j < i && whitespace.indexOf(s.charAt(j)) != -1)
j++;
s = s.substring(j, i);
}
return s;
}

function RTrim(str){
var whitespace = new String(" \t\n\r");
var s = new String(str);
if (whitespace.indexOf(s.charAt(s.length-1)) != -1) {
var i = s.length - 1;
while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)
i--;
s = s.substring(0, i+1);
}
return s;
}

function Trim(str){
return RTrim(LTrim(str));
}

function Len(str)
{  return String(str).length;  }

function Left(str, n){
        if (n <= 0)     // Invalid bound, return blank string
                return "";
        else if (n > String(str).length)   // Invalid bound, return
                return str;                // entire string
        else // Valid bound, return appropriate substring
                return String(str).substring(0,n);
}
function Right(str, n){
        if (n <= 0)     // Invalid bound, return blank string
           return "";
        else if (n > String(str).length)   // Invalid bound, return
           return str;                     // entire string
        else { // Valid bound, return appropriate substring
           var iLen = String(str).length;
           return String(str).substring(iLen, iLen - n);
        }
}

function Mid(str, start, len){
        // Make sure start and len are within proper bounds
        if (start < 0 || len < 0) return "";

        var iEnd, iLen = String(str).length;
        if (start + len > iLen)
                iEnd = iLen;
        else
                iEnd = start + len;

        return String(str).substring(start,iEnd);
}
function InStr(strSearch, charSearchFor){
for (i=0; i < Len(strSearch); i++)
{
    if (charSearchFor == Mid(strSearch, i, Len(charSearchFor) ))
    {
		return i;
    }
}
return -1;
}

//trim string
function trim(stringToTrim) {
	var i, j

	//left trim
	for(i=0; i<stringToTrim.length; i++) {
		if (stringToTrim.charAt(i) != " ") break
	}

	//right trim
	for(j=stringToTrim.length-1; j>=i; j--) {
		if (stringToTrim.charAt(j) != " ") break
	}

	return stringToTrim.substring(i, j + 1)
}
//End of Utils.js


//replace or add name/value pairs in url-encoded querystring
function setQStringName(qString, name, arrVal) {
    var qStringNew = remQStringName(qString, name)
    var i
  
   
    var start = qStringNew == "" ? 1 : 0
    for (i = 0; i < arrVal.length; i++) {
        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)
    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 Reload(name, val, totPageNo) {
    if (val < totPageNo + 1 && val > 0) {
        var qString = location.search.substr(1)
        //always resert page to 1
        if (name != "page") {
            var page = GetQSVal("page")
            if (page != "1" && page != "") qString = setQStringName(qString, "page", new Array("1"))
        }
        qString = setQStringName(qString, name, new Array(val.toString()))
        location = location.pathname + "?" + qString
    }
}


function setCriteria(val) {
    document.getElementById('SearchBy').value = val;
}

function invalidChars(validatedControl, validatedName, charString, msg) {
    var validatedString = trim(validatedControl.value).toLowerCase()
    charString = charString.toLowerCase()

    for (var i = 0; i < validatedString.length; i++) {
        for (var j = 0; j < charString.length; j++) {
            if (validatedString.charAt(i) == charString.charAt(j)) {

                if (typeof (Common_Scripts_FuncLib_Space) == "undefined")
                    Common_Scripts_FuncLib_Space = "space"

                var alertString = charString.split("").join("  ")
                alertString = alertString.split("     ").join("  " + Common_Scripts_FuncLib_Space + "  ")

                if (msg == null)
                    msg = validatedName + " cannot contain any of the following illegal characters:\n\n " + alertString

                msg = msg.replace(/\[IllegalCharacters\]/, alertString)
                alert(msg)
                validatedControl.focus()
                return true
            }
        }
    }

    return false
}

function submitForm() {

    //check that at least one star rating is selected

    if (document.getElementById('rating3').checked == false && document.getElementById('rating4').checked == false && document.getElementById('rating5').checked == false)  {
    if (typeof (Common_Scripts_SearchEngine_SelectStar) == "undefined")
    Common_Scripts_SearchEngine_SelectStar = "Please select at least one Star Rating."

    alert(Common_Scripts_SearchEngine_SelectStar)
    document.getElementById('rating5').focus()
    return false;
    }

    if ($("#SearchBy").val() == "LocationKey" & ($("#destination").val().length < 3 | $("#destination").val() == HINT_DRE)) {
        alert(Common_Scripts_ValidDestinationSearch);
        return false;
    }

    if (document.getElementById("SearchBy").value == "Name") {
        document.getElementById('hotelname').value = trim(document.getElementById('hotelname').value)
        if (typeof (Common_Scripts_SearchEngine_HotelName) == "undefined")
            Common_Scripts_SearchEngine_HotelName = "Hotel Name cannot contain any of the following illegal characters:\n\n%"

        if (typeof (Common_Scripts_SearchEngine_HotelNameLength) == "undefined")
            Common_Scripts_SearchEngine_HotelNameLength = "Hotel Name should be at least 3 characters long."

        if (invalidChars(document.getElementById('hotelname'), "", "%", Common_Scripts_SearchEngine_HotelName)) return false;
   

        if (typeof (document.getElementById('hotelname')) != 'undefined') {
            if (trim(document.getElementById('hotelname').value).length < 3) {
                alert(Common_Scripts_SearchEngine_HotelNameLength);
                return false;

            }
        }
    }
    else {
        if (document.getElementById("SearchBy").value == "LocationKey") {
            if(document.getElementById('LocationKey'))
                document.getElementById('LocationKey').value = trim(document.getElementById('LocationKey').value)
                
            if (document.getElementById('hdnLocationKey'))
                document.getElementById('hdnLocationKey').value = trim(document.getElementById('hdnLocationKey').value)
                
            if (typeof (Common_Scripts_SearchEngine_LocationName) == "undefined")
                Common_Scripts_SearchEngine_LocationName = "Hotel Name cannot contain any of the following illegal characters:\n\n%"

            if (typeof (Common_Scripts_SearchEngine_LocationLength) == "undefined")
                Common_Scripts_SearchEngine_LocationLength = "Location Name should be at least 3 characters long."
            if (document.getElementById('LocationKey')) {
                if (invalidChars(document.getElementById('LocationKey'), "", "%", Common_Scripts_SearchEngine_LocationName)) return false;

            }
                
            
/*            if (document.getElementById('destination')) {
                if (document.getElementById('destination').value.split("'").length > 2) 
                {
                    alert(Common_Scripts_SearchEngine_LocationName + "\\~`!@#$%^&*()-+{}|\"':;?/><");
                    return false;
                }
                if (CheckForSpecialChars(document.getElementById('destination').value, "\\,~,`,!,@,#,$,%,^,&,*,(,),-,+,{,},|,\",:,;,?,/,>,<" )) {
                    alert(Common_Scripts_SearchEngine_LocationName + "\\~`!@#$%^&*()-+{}|\"':;?/><");
                    return false;
                }
            }
*/            
            if (document.getElementById('hdnLocationKey')) {
                if (invalidChars(document.getElementById('hdnLocationKey'), "", "%", Common_Scripts_SearchEngine_LocationName)) return false;
            }

            if (document.getElementById('LocationKey')) {
                if (trim(document.getElementById('LocationKey').value).length < 3) {
                    alert(Common_Scripts_SearchEngine_LocationLength);
                    return false;

                }
            }
            
            
        }
    }

}

function CheckForSpecialChars(str, splchars) {
    var charArr = splchars.split(",");
    for (i = 0; i < charArr.length; i++) {
        if (str.indexOf(charArr[i]) >= 0) {
            return true;
        }
    }
return false;
}


//update all name/value pairs with the passed name from url-encoded querystring
function updateQStringName(qString, name, value) {
    var i
    var qStringNew="" 
    //var start = qStringNew == "" ? 1 : 0
    
    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]
        }
    }
    
    qStringNew += "&" + escape(name) + "=" + value

    return qStringNew.substr(1)
}

function UpdateFilter() {

    var qString = location.search.substr(1)

    var qStringRating
    qStringRating = remQStringName(qString, "star3")
    qStringRating = remQStringName(qStringRating, "star4")
    qStringRating = remQStringName(qStringRating, "star5")

    if (document.getElementById('star5').checked == false &&
        document.getElementById('star4').checked == false &&
        document.getElementById('star3').checked == false) {
        qStringRating += "&star3=ON&star4=ON&star5=ON&starAll=ON"
        qString = qStringRating
    }
    else if( document.getElementById('chkRatingAll').checked == true)
    {
        qStringRating += "&star3=ON&star4=ON&star5=ON&starAll=ON"
        qString = qStringRating
    }
    else {
        if (document.getElementById('star3').checked == true) {
            qStringRating += "&star3=" + document.getElementById('star3').value
            qString = qStringRating
        }

        if (document.getElementById('star4').checked == true) {
            qStringRating += "&star4=" + document.getElementById('star4').value
            qString = qStringRating
        }

        if (document.getElementById('star5').checked == true) {
            qStringRating += "&star5=" + document.getElementById('star5').value
            qString = qStringRating
        }
    }
    
    //-------------------------getting accommodation filters.
    var accChk = "";
    
    if(document.getElementById("ACCOMMODATIONTYPEAll").checked == false)
    {
        var arraccommodationTypeId = accommodationTypeIds.split(",");
        for (index = 0; index < arraccommodationTypeId.length - 1; index++) {
            if(arraccommodationTypeId[index] != ""){
                var chkbox = document.getElementById("ACCOMMODATIONTYPE" + arraccommodationTypeId[index])
                if (chkbox != null && chkbox.checked == true) {
                  accChk += chkbox.value + ',';
                }
            }
        }
        
        if (accChk.length > 0) {   
          accChk = accChk.substring(0, accChk.length - 1);
        }
    }
    
    var qStringAcc = remQStringName(qString, "accChk");
    qStringAcc += "&accChk=" + accChk;
    qString = qStringAcc;           
    //-------------------------getting accommodation filters - Ends.
       
    // FacilitiesCount is calculated in searchfilter.inc
    var count = FacilitiesCount
    var facChk =""
    if (document.getElementById("FACILITIESAll").checked == false) 
    {
        var arrFacilitiesId = FacilitiesId.split(",")
        for (i = 0; i < count+1; i++) {
             var chkbox = document.getElementById("FACILITIES" + arrFacilitiesId[i]);
             if (chkbox != null && chkbox.checked == true) {
              facChk += chkbox.value + ','
            }
        }
    }
    var chkLen = facChk.substring(0, facChk.length - 1)
    /////////

    var qStringNew = remQStringName(qString, "facChk")
    
    var chkLen = facChk.substring(0, facChk.length - 1)
    
    if (chkLen.length > 0) {       
        var arrVal = new Array(chkLen)       
        var i
       qStringNew += "&facChk=" + arrVal[0]       
    }

    qString = qStringNew
    qString = remQStringName(qString, "page")
    location = location.pathname + "?" + qString
}

function replaceQueryString(initialQuery, keyString, newValue) {
var re = new RegExp("([?|&])" + keyString + "=.*?(&|$)", "i");

var matches = initialQuery.match(re);

if (matches && matches.length)
    return initialQuery.replace(re, '$1' + keyString + "=" + newValue + '$2');
else {
    if (initialQuery.indexOf('?') < 0)
        return initialQuery + '?' + keyString + "=" + newValue;
    else
        return initialQuery + '&' + keyString + "=" + newValue;
}}


function Querystring(qs) {
this.params = {};

if (qs == null) qs = location.search.substring(1, location.search.length);
if (qs.length == 0) return;

qs = qs.toLowerCase();
qs = qs.replace(/\+/g, ' ');
var args = qs.split('&'); // parse out name/value pairs separated via &

// split out each name=value pair
for (var i = 0; i < args.length; i++) {
var pair = args[i].split('=');
var name = decodeURIComponent(unescape(pair[0]));

var value = (pair.length == 2)
	? decodeURI(encodeURI(pair[1]))
	: name;

this.params[name] = value;
}}

Querystring.prototype.get = function(key, default_) {
    key = key.toLowerCase();
    var value = this.params[key];
    return (value != null) ? value : default_;
}

function showpopup(cid,parentobj, x, y) {
    var topoffset = 18;
    if( x == 'undefined' ) x = 0 ; 
    if( y == 'undefined' ) y = 0 ;
	obj = document.getElementById(cid);
	mainobj = document.getElementById(parentobj);
	var curleft = curtop = 0;
	if (mainobj.offsetParent) {
	curleft = mainobj.offsetLeft;
	curtop = mainobj.offsetTop;
	while (mainobj = mainobj.offsetParent) {
	curleft += mainobj.offsetLeft;
	curtop += mainobj.offsetTop;
		}
	}
	obj.style.position = "absolute";
	obj.style.display = "";
	obj.style.left = (curleft + x) + 'px'; //Fix for bug#1737
	obj.style.top =  (curtop + topoffset + y) + 'px';
}


function hidepopup(divid) {
	objid = divid;
	document.getElementById(objid).style.display = "none";
}


function navigateToDirectHotelPage(hotelid,checkin,checkout, locKey, locID, isDRE, isByHotelName, hotelName, refinfo) {
  var directHotelString;
    if (isDRE == 'True')
    {
     
      directHotelString = "directhotel.asp?id=" + hotelid + "&ncl=&checkin=2009-03-10&checkout=2009-03-12&locKey=&locID=&locDispName=" + locDispName;
      directHotelString = replaceQueryString(directHotelString, "locKey", locKey);
      directHotelString = replaceQueryString(directHotelString, "locID", locID);
    }
    else if (isByHotelName == 'True')
    {
        directHotelString = "directhotel.asp?id=" + hotelid + "&ncl=&checkin=2009-03-10&checkout=2009-03-12&hotelName=";
        directHotelString = replaceQueryString(directHotelString, "hotelName", hotelName);        
    }
    else
    {
        directHotelString = "directhotel.asp?id=" + hotelid + "&ncl=&checkin=2009-03-10&checkout=2009-03-12";
    }    
    directHotelString = replaceQueryString(directHotelString, "id", hotelid);
    directHotelString = replaceQueryString(directHotelString, "checkin", checkin);
    directHotelString = replaceQueryString(directHotelString, "checkout", checkout);

    var varDMName = ""
    if (document.domain.length > 0) {
        varDMName = document.domain
    }

    directHotelString = directHotelString + "&rpage=" + varDMName + "/" + refinfo;

    window.location.href = directHotelString;
    }
    
    function navigateToDirectHotelPageRatingTab(hotelid,checkin,checkout, locKey, locID, isDRE) {
  var directHotelString;
    if (isDRE == 'True')
    {
      directHotelString = "directhotel.asp?id=" + hotelid + "&ncl=&checkin=2009-03-10&checkout=2009-03-12&locKey=&locID=&tab=2";
      directHotelString = replaceQueryString(directHotelString, "locKey", locKey);
      directHotelString = replaceQueryString(directHotelString, "locID", locID);
    }
    else
    {
    directHotelString = "directhotel.asp?id=" + hotelid + "&ncl=&checkin=2009-03-10&checkout=2009-03-12&tab=2";
    }    
    directHotelString = replaceQueryString(directHotelString, "id", hotelid);
    directHotelString = replaceQueryString(directHotelString, "checkin", checkin);
    directHotelString = replaceQueryString(directHotelString, "checkout", checkout);

    window.location.replace(directHotelString);
    }

function refreshattabclick(refreshval) {
    var pagecode = GetQSVal("vw");
    if (pagecode != refreshval)
    {
        var qString = location.search.substr(1)
        qString = location.pathname + "?" + qString
        qString = replaceQueryString(qString, "vw", refreshval)
        qString = replaceQueryString(qString, "page", "1")
        location =  qString;
    }
}

function logoutclick(){   
var qString = location.search.substr(1)
qString = location.pathname + "?" + qString
qString = replaceQueryString(qString, "lgt", "1")
//location = qString;
location = "/logout.asp";
}

function ChangeCurrencies(currencycode, currencyname, refinfo) {
    document.getElementById('txtCurrency').innerHTML = document.getElementById(currencycode).innerHTML;
    toggleDisplay('dropmenucurr', 'none');

    var squery = "";
    var sFquery = "";
    var varDMName = "";
    if (document.domain.length > 0) {
        varDMName = document.domain
    }

    sFquery = window.location.toString();
    squery = replaceQueryString(sFquery, "curr", currencycode);
    squery = replaceQueryString(squery, "rpage", varDMName + "/" + refinfo);

    window.location.replace(squery);
    //window.location.replace( replaceQueryString(window.location.toString(),"curr",currencycode ));
}

function ChangeLang(languagecode, languagename, refinfo) {
    document.getElementsByName("imgLang")[0].id = languagecode + "Smallgif";
    document.getElementsByName("imgLang")[0].src = "SiteEngine/HTC/Images/lang/" + languagecode + "Small.gif";
    toggleDisplay('dropmenulang', 'none');

    var squery = "";
    var sFquery = "";
    var varDMName = "";
    if (document.domain.length > 0) {
        varDMName = document.domain
    }

    sFquery = window.location.toString();
    squery = replaceQueryString(sFquery, "lc", languagecode);
    squery = replaceQueryString(squery, "rpage", varDMName + "/" + refinfo);

    window.location.replace(squery);
}

function unCheckOptions(currentObject, parentObjectId){
if (currentObject.checked){
var parentObejct = document.getElementById(parentObjectId);
var childOptions = parentObejct.getElementsByTagName("input");
for(index=0; index<childOptions.length; index++){
if (childOptions[index].type == "checkbox" ){
    childOptions[index].checked = false;
}}
currentObject.checked = true;
}}

function unCheckAll(AllOption){
    document.getElementById(AllOption).checked = false;
}

function DisplayMemberDollar(mainobj, currencysign, roomtotal, memberdollars, earnpercentage,optionalparam) {
obj = document.getElementById("areyoumember");

var curleft = curtop = 0;
if (mainobj.offsetParent) {
 curleft = mainobj.offsetLeft;
 curtop = mainobj.offsetTop;
 while (mainobj = mainobj.offsetParent) {
     curleft += mainobj.offsetLeft ;
     curtop += mainobj.offsetTop - 70;
}}

obj.style.position = "absolute";
obj.style.display = "block";
if(curleft - 640 < 5)
    obj.style.left = '5px';
else
    obj.style.left = curleft - 640 + 'px';
    var IE = /*@cc_on!@*/false;
    if (IE) {
        obj.style.top = document.documentElement.scrollTop + 50 + 'px';
    }
    else {
        obj.style.top = window.pageYOffset + 50 + 'px';
    }

var _memberdollar = document.getElementById("memberdollar")

if (_memberdollar != null)
 _memberdollar.innerHTML = currencysign + " " + memberdollars;

var _currencysign = document.getElementById("currencysign")
if (_currencysign != null)
 _currencysign.innerHTML = currencysign;

var _roomtotal = document.getElementById("roomtotal")
if (_roomtotal != null)
 _roomtotal.innerHTML = roomtotal;

var _earnpercentage = document.getElementById("earnpercentage")

if (_earnpercentage != null)
 _earnpercentage.innerHTML = earnpercentage; 
}

function HideMemberDollarPopup() {
 document.getElementById("areyoumember").style.display = "none";
}

function JEscape(str) {
str = str.replace(/<jstab>/g, "\t");
str = str.replace(/<jsbr>/g, "\n");
return str;
}


//check whether passed parameter is a valid number
function notNumber(number) {
number = number.toString()
for (var i = 0; i < number.length; i++) {
    if (number.charAt(i) > "9" || number.charAt(i) < "0") return true
}
return false
}

//validate email address
function notEmail(field, fieldName, msg) {
var email = trim(field.value)

if (email == "") return false

var at = false
var dot = false

for (var i = 0; i < email.length; i++) {
    if (email.charAt(i) == "@") at = true
    if (email.charAt(i) == "." && at) dot = true
}

if (!(at && dot && email.length > 5)) {
    if (msg == null)
        msg = "The " + fieldName + " you entered is not a valid e-mail address."

    alert(msg)
    field.focus()
    field.select()
    return true
}

//check for invalid characters
if (invalidChars(field, "E-mail", '%,;|" <>\\/')) return true

return false
}


function makeHttpRequest(url) {
    http_request = false
    if (window.XMLHttpRequest) {
        http_request = new XMLHttpRequest()
        if (http_request.overrideMimeType) {
            http_request.overrideMimeType('text/xml')
        }
    }
    else if (window.ActiveXObject) {
        try {
            if (IeVersion()['Version'] > 6) {
                http_request = new ActiveXObject("MSXML2.DOMDocument")
            } else {
                http_request = new ActiveXObject("MSXML2.XMLHTTP.3.0")
            }
        }
    catch (e) {
        onError(e)
        try {
            if (IeVersion()['Version'] > 6) {
                http_request = new ActiveXObject("Microsoft.XMLHTTP")
            } else {
                http_request = new ActiveXObject("MSXML2.XMLHTTP.3.0")
            }
        }
        catch (e) {
            onError(e) 
        }
    }
}
    if (!http_request) {
        onError()
        return false
    }
    http_request.onreadystatechange = refreshPage
    http_request.open('GET', url , true)
    http_request.send(null)
}


function refreshPage() {
    if (http_request.readyState == 4) {
        window.location.reload(false);
    }
}
//initialise tooltip variables
var ttMaxWidth = 200	//maximum width 
var ttFont = "tahoma"	//font 
var ttFontSize = 8		//font size
var ttBgColor = "#ffffe7"	//background colour
var mouseOffset = 20	//distance from mouse pointer
var edgeOffset = 5		//distance from window edge


//create tooltip container
if (document.layers) {
    document.write('<layer id=tt style="padding:2; position:absolute; visibility:hidden; " visibility=hide bgcolor=' + ttBgColor + ' width=' + ttMaxWidth + '></layer>')
} else if (document.all || document.getElementById) {
    document.write('<div id=tt style="padding:2; position:absolute; visibility:hidden; background-color:' + ttBgColor + '; border:1px solid; font-size:' + ttFontSize + 'pt; font-family:' + ttFont + '"></div>')
}


//initialise tooltip
function initTT() {
    if (document.getElementById) {
        tooltip = document.getElementById("tt")
    } else if (document.layers) {
        tooltip = document.tt
    } else if (document.all) {
        tooltip = document.all.tt
    }
}


//full tooltip size (including offsets) object constructor
function objSize(ttWidth, ttHeight, mouseOffset, edgeOffset) {
    this.width = ttWidth + mouseOffset + edgeOffset
    this.height = ttHeight + mouseOffset + edgeOffset
}


//"space available for tooltip" object constructor
function objMargin(x, y, scrollX, scrollY, windowWidth, windowHeight) {
    this.scrollX = scrollX
    this.scrollY = scrollY
    this.left = x - scrollX
    this.top = y - scrollY
    this.right = windowWidth - this.left
    this.bottom = windowHeight - this.top
}

//show tooltip
function showTT(obj, include) {
    //alert("X : " + evt.x + " ,Y : " + evt.y + ", offX : " + evt.offsetX + ", offY : " + evt.offsetY + ", pageX : " + evt.pageX + ", pageY : " + evt.pageY + ", clientX : " + evt.clientX + ", clientY : " + evt.clientY);
    if (typeof (tooltip) == "undefined") return
    
    var x = parseInt(findPosX(obj), 10);
    var y = parseInt(findPosY(obj), 10);

    var ttText = typeof (include) == "string" ? include : incArray[include]

    if (document.layers) {
        tooltip.document.write('<span style="color:#000000; border:3px solid; font-size:' + ttFontSize + 'pt; font-family:' + ttFont + '">' + ttText + '</span>')
        tooltip.document.close()
        positionTT(tooltip, x, y, tooltip.clip.width, tooltip.clip.height)
        tooltip.visibility = "show"
    } else if (document.all || document.getElementById) {
        tooltip.style.left = ""
        tooltip.style.top = ""
        tooltip.noWrap = true
        tooltip.innerHTML = "&nbsp;" + ttText + "&nbsp;"
        tooltip.style.color = "#000000"

        if (tooltip.offsetWidth > ttMaxWidth) {
            tooltip.noWrap = false
            tooltip.style.width = ttMaxWidth + "px"
        } else {
            tooltip.style.width = tooltip.offsetWidth
        }

        positionTT(tooltip.style, x, y, tooltip.offsetWidth, tooltip.offsetHeight)
        tooltip.style.display = "none"  //this removes blinking in NN6
        tooltip.style.visibility = "visible"
        tooltip.style.display = "block"
        tooltip.style.zIndex = 100
    }
}
function findPosX(obj) {
    var curleft = 0;
    if (obj.offsetParent)
        while (1) {
        curleft += obj.offsetLeft;
        if (!obj.offsetParent)
            break;
        obj = obj.offsetParent;
    }
    else if (obj.x)
        curleft += obj.x;
    return curleft;
}

function findPosY(obj) {
    var curtop = 0;
    if (obj.offsetParent)
        while (1) {
        curtop += obj.offsetTop;
        if (!obj.offsetParent)
            break;
        obj = obj.offsetParent;
    }
    else if (obj.y)
        curtop += obj.y;
    return curtop;
}

//hide tooltip
function hideTT() {
    if (typeof (tooltip) == "undefined") return

    if (document.layers) {
        tooltip.visibility = "hide"
    } else if (document.all || document.getElementById) {
        tooltip.style.visibility = "hidden"
        tooltip.style.width = ""
    }
}


//position tooltip
function positionTT(posObj, x, y, ttWidth, ttHeight) {
    //fix width problem in ie4
    if (ttWidth > ttMaxWidth) ttWidth = ttMaxWidth

    var ttMargin, posLeft, posTop
    var ttSize = new objSize(ttWidth, ttHeight, mouseOffset, edgeOffset)

    if (document.layers || document.getElementById) {
        ttMargin = new objMargin(x, y, window.pageXOffset, window.pageYOffset, window.innerWidth, window.innerHeight)
    } else if (document.all) {
        //fix event coordinates for explorer 5 and later
        if (newMSIE()) {
            x += document.body.scrollLeft
            y += document.body.scrollTop
        }

        ttMargin = new objMargin(x, y, document.body.scrollLeft, document.body.scrollTop, document.body.clientWidth, document.body.clientHeight)
    }

    if (ttMargin.right >= ttSize.width) {
        posLeft = x + mouseOffset
    } else {
        posLeft = ttMargin.left + ttMargin.right >= ttSize.width ? x + ttMargin.right - ttSize.width : ttMargin.scrollX + edgeOffset
    }

    if (ttMargin.bottom >= ttSize.height) {
        posTop = y + mouseOffset
    } else {
        posTop = ttMargin.top + ttMargin.bottom >= ttSize.height ? y + ttMargin.bottom - ttSize.height : ttMargin.scrollY + edgeOffset
    }

    //make sure tooltip does not appear over the mouse pointer
    if (x >= posLeft && x <= posLeft + ttSize.width && y >= posTop && y <= posTop + ttSize.height) {
        if (ttMargin.top >= ttSize.height) {
            posTop = y - ttSize.height
        } else if (ttMargin.left >= ttSize.width) {
            posLeft = x - ttSize.width
        } else {
            posLeft = x + mouseOffset
            posTop = y + mouseOffset
        }
    }

    if (document.all || document.getElementById) {
        posLeft += "px"
        posTop += "px"
    }
    posLeft = x + 20
    posTop = y + 20

    posObj.left = posLeft + "px";
    posObj.top = posTop + "px";    
}


//returnes true if user agent is explorer 5 or later
function newMSIE() {
    var ua = navigator.userAgent
    var msie = ua.indexOf("MSIE")

    if (msie > 0) {
        if (parseInt(ua.substring(msie + 5, ua.indexOf(".", msie))) >= 5) return true
    }

    return false
}
var pageSize = 5;
var pagerControl = new PagerControl(pageSize); //Creating an object of the pager controll by specifying the size of the page
pagerControl.HostControlID = "Paging"; //The id of the controll inside of which the pager will be displayed
pagerControl.HostControlIDBottom = "paging_bottom";
//The constructor of the pager control
function PagerControl(pageSize) {
    this.PageSize = pageSize;
    this.PageCount = 0;
    this.CurrentPage = 1;
    this.HostControlID = null;
    this.HostControlIDBottom = null;
    this.previousImageURL = "/SiteEngine/HTC/Images/pointer-prev.gif";
    this.nextImageURL = "/SiteEngine/HTC/Images/pointer-next.gif";
    //Template for moving the pager backward
    this.HeaderTemplate = "<a href=\"javascript:{#reloadfunction}({#firstpage})\"><img alt=\"\" src=" + this.previousImageURL + " /></a>&nbsp;&nbsp;";
    //Template for selecting each page from the pager
    this.ItemTemplate = "<a onmousedown=\"javascript:{#reloadfunction}({#page})\" class=\"paging_link_show\">{#title}</a> &nbsp; ";
    //Template for selected page
    this.SelectedItemTemplate = "<span class=\"pagingnumbers\"><b>{#title}</b></span> &nbsp; ";
    //Template for moving the pager forward
    this.FooterTemplate = "<a href=\"javascript:{#reloadfunction}({#lastpage})\"><img alt=\"\" src=" + this.nextImageURL + "  /></a>";
}

//Execute this function to refresh the data in the pager control
PagerControl.prototype.RenderPager = function() {
    var result = "";
    var reloadFunction = 'changeSearchResultsPage'; //Name of the function to be called during pager click event
    var startPoint = 0; //setting the starting page to zero
    if (this.PageCount > 1) {
        
        if (pagerControl.CurrentPage > this.PageCount) pagerControl.CurrentPage = this.PageCount;

        if (typeof (Common_Scripts_Pages) == "undefined") Common_Scripts_Pages = "Pages";
        result += Common_Scripts_Pages + "&nbsp;";
        //Setting the backward moving template of the pager
        if (this.CurrentPage != 1) {
            result += this.HeaderTemplate.replace("{#firstpage}", this.CurrentPage - 1).replace("{#reloadfunction}", reloadFunction);
        }
        //Selecting the numbers to be displayed on the pager by setting the value for startPoint.
        var Limit = Math.ceil((this.PageSize / 2));
        if (this.CurrentPage > Limit) {
            startPoint = this.CurrentPage - Limit;
            if (this.PageCount > this.PageSize) {
                result += this.ItemTemplate.replace("{#page}", startPoint - 1).replace("{#title}", "..").replace("{#reloadfunction}", reloadFunction);
            }
            if ((this.CurrentPage > this.PageCount - Limit) || startPoint > (this.PageCount - this.PageSize)) {
                startPoint = this.PageCount - this.PageSize;
            }
        }
        if (startPoint < 0) startPoint = 0;
        for (var i = startPoint + 1; i <= this.PageCount && i <= (startPoint + this.PageSize); i++) {
            if (i != this.CurrentPage) {
                result += this.ItemTemplate.replace("{#page}", i).replace("{#title}", i).replace("{#reloadfunction}", reloadFunction);
            } else {
                result += this.SelectedItemTemplate.replace("{#title}", i);
            }
        }
        if (startPoint < (this.PageCount - this.PageSize)) {
            result += this.ItemTemplate.replace("{#page}", (startPoint + this.PageSize + 2)).replace("{#title}", "..").replace("{#reloadfunction}", reloadFunction);
        }
        //Setting the forward moving template of the pager
        if (this.PageCount != this.CurrentPage) {
            result += this.FooterTemplate.replace("{#lastpage}", this.CurrentPage + 1).replace("{#reloadfunction}", reloadFunction);
        }
    }
    
    if (document.getElementById(this.HostControlID) != null) {
        document.getElementById(this.HostControlID).innerHTML = result;
        document.getElementById("paging_bottom").innerHTML = result;
    }
    
}

//This function will be called during page loading
function loadData(page, noofrecords, pageSize) {
    pagerControl.PageSize = pageSize;
    pagerControl.CurrentPage = page;
    pagerControl.PageCount = Math.ceil((noofrecords / pagerControl.PageSize)); ;
    pagerControl.RenderPager();
}

//This function will be called when clicking on the pager control
function changeSearchResultsPage(pageno) {
    pagerControl.CurrentPage = pageno;
    pagerControl.RenderPager();
    if (pagerControl.CurrentPage < pagerControl.PageCount + 1 && pagerControl.CurrentPage > 0) {
        var qString = location.search.substr(1)
        qString = setQStringName(qString, "page", new Array(pagerControl.CurrentPage.toString()))
        location = location.pathname + "?" + qString
    }

}var sx = 0;
var speed = 800;
var cellw = 71;
var slidecell = 5;
var visiblecell = 5;
var vc = 0;

jQuery(document).ready(function() {
    if($("div.scrolldiv").length > 0 ) showhidenav();
    if($("div.scrolldiv").length > 0) showhidenavsummary();

    $(".prev").click(function() {
        if (vc > totalcell - 5) {
            slidecell = lastmove;
        } else { slidecell = 5; }
        vc -= 5;

        sx -= cellw * slidecell;
        if (sx < 0) { sx = 0; ; return; }
        $('div.pane').scrollTo(sx, speed, { queue: true, axis: 'x', onAfter: function() {
            showhidenav()
        }
        });
    });


    $(".next").click(function() {
        vc += 5;
        if (vc > totalcell - 5)
            slidecell = lastmove;
        sx += cellw * slidecell;
        if (sx > (cellw * (totalcell - visiblecell))) { sx = (cellw * (totalcell - visiblecell)); return; }
        $('div.pane').scrollTo(sx, speed, { queue: true, axis: 'x', onAfter: function() {
            showhidenav()
        }
        });
    });

    $(".prevset").click(function() {
        if (vc > totalcell - 5) {
            slidecell = lastmove;
        } else { slidecell = 5; }
        vc -= 5;

        sx -= cellw * slidecell;
        if (sx < 0) { sx = 0; ; return; }
        $('div.summarypane').scrollTo(sx, speed, { queue: true, axis: 'x', onAfter: function() {
            showhidenavsummary();
        }
        });
    });


    $(".nextset").click(function() {
        vc += 5;
        if (vc > totalcell - 5)
            slidecell = lastmove;
        sx += cellw * slidecell;
        if (sx > (cellw * (totalcell - visiblecell))) { sx = (cellw * (totalcell - visiblecell)); return; }
        $('div.summarypane').scrollTo(sx, speed, { queue: true, axis: 'x', onAfter: function() {
            showhidenavsummary();
        }
        });
    });

    jQuery.browser.msie6 = jQuery.browser.msie && parseInt(jQuery.browser.version) == 6

    $(".list_location").mouseover(function() {
        if (jQuery.browser.msie6) {
            this.className = "list_location_hover";
        }
    });

    $(".list_location").mouseout(function() {
        if (jQuery.browser.msie6) {
            this.className = "list_location";
        }
    });

});

function showhidenav() {
    if (sx == (cellw * (totalcell - visiblecell))) $(".next").hide(); else $(".next").show();
    if (sx == 0) $(".prev").hide(); else $(".prev").show();
}

function showhidenavsummary() {
    if (sx == (cellw * (totalcell - visiblecell))) $(".nextset").hide(); else $(".nextset").show();
    if (sx == 0) $(".prevset").hide(); else $(".prevset").show();
}


function changebg(row) {
    var lis = row.getElementsByTagName("li");
    lis[0].className = "list_city_hover";
    lis[1].className = "list_state_hover";
}

function restorebg(row) {
    var lis = row.getElementsByTagName("li");
    lis[0].className = "list_city";
    lis[1].className = "list_state";
}


function PostBackWithNewData(LocationKey, LocationId) {
    var newUrl = replaceQueryString(window.location.toString(), "hdnLocationKey", LocationKey);
    newUrl = replaceQueryString(newUrl, "hdnLocationID", LocationId);
    window.location.replace(newUrl);
}

function bookmark_us(url, title) {
    if (window.sidebar) // firefox
        window.sidebar.addPanel(title, url, "");
    else if (window.opera && window.print) { // opera
        var elem = document.createElement('a');
        elem.setAttribute('href', url);
        elem.setAttribute('title', title);
        elem.setAttribute('rel', 'sidebar');
        elem.click();
    }
    else if (document.all)// ie
    {

        window.external.AddFavorite(url, title);
    }
}
(function($) { $.extend($.ui, { datepicker: { version: "1.7.1"} }); var PROP_NAME = 'datepicker'; function Datepicker() { this.debug = false; this._curInst = null; this._keyEvent = false; this._disabledInputs = []; this._datepickerShowing = false; this._inDialog = false; this._mainDivId = 'ui-datepicker-div'; this._inlineClass = 'ui-datepicker-inline'; this._appendClass = 'ui-datepicker-append'; this._triggerClass = 'ui-datepicker-trigger'; this._dialogClass = 'ui-datepicker-dialog'; this._disableClass = 'ui-datepicker-disabled'; this._unselectableClass = 'ui-datepicker-unselectable'; this._currentClass = 'ui-datepicker-current-day'; this._dayOverClass = 'ui-datepicker-days-cell-over'; this.regional = []; this.regional[''] = { closeText: 'Done', prevText: 'Prev', nextText: 'Next', currentText: 'Today', monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], dayNamesMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'], dateFormat: 'mm/dd/yy', firstDay: 0, isRTL: false }; this._defaults = { showOn: 'focus', showAnim: 'show', showOptions: {}, defaultDate: null, appendText: '', buttonText: '...', buttonImage: '', buttonImageOnly: false, hideIfNoPrevNext: false, navigationAsDateFormat: false, gotoCurrent: false, changeMonth: false, changeYear: false, showMonthAfterYear: false, yearRange: '-10:+10', showOtherMonths: false, calculateWeek: this.iso8601Week, shortYearCutoff: '+10', minDate: null, maxDate: null, duration: 'normal', beforeShowDay: null, beforeShow: null, onSelect: null, onChangeMonthYear: null, onClose: null, numberOfMonths: 1, showCurrentAtPos: 0, stepMonths: 1, stepBigMonths: 12, altField: '', altFormat: '', constrainInput: true, showButtonPanel: false, customTriggerElementID: null }; $.extend(this._defaults, this.regional['']); this.dpDiv = $('<div id="' + this._mainDivId + '" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible"></div>') } $.extend(Datepicker.prototype, { markerClassName: 'hasDatepicker', log: function() { if (this.debug) console.log.apply('', arguments) }, setDefaults: function(settings) { extendRemove(this._defaults, settings || {}); return this }, _attachDatepicker: function(target, settings) { var inlineSettings = null; for (var attrName in this._defaults) { var attrValue = target.getAttribute('date:' + attrName); if (attrValue) { inlineSettings = inlineSettings || {}; try { inlineSettings[attrName] = eval(attrValue) } catch (err) { inlineSettings[attrName] = attrValue } } } var nodeName = target.nodeName.toLowerCase(); var inline = (nodeName == 'div' || nodeName == 'span'); if (!target.id) target.id = 'dp' + (++this.uuid); var inst = this._newInst($(target), inline); inst.settings = $.extend({}, settings || {}, inlineSettings || {}); if (nodeName == 'input') { this._connectDatepicker(target, inst) } else if (inline) { this._inlineDatepicker(target, inst) } }, _newInst: function(target, inline) { var id = target[0].id.replace(/([:\[\]\.])/g, '\\\\$1'); return { id: id, input: target, selectedDay: 0, selectedMonth: 0, selectedYear: 0, drawMonth: 0, drawYear: 0, inline: inline, dpDiv: (!inline ? this.dpDiv : $('<div class="' + this._inlineClass + ' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))} }, _connectDatepicker: function(target, inst) { var input = $(target); inst.trigger = $([]); if (input.hasClass(this.markerClassName)) return; var appendText = this._get(inst, 'appendText'); var isRTL = this._get(inst, 'isRTL'); if (appendText) input[isRTL ? 'before' : 'after']('<span class="' + this._appendClass + '">' + appendText + '</span>'); var showOn = this._get(inst, 'showOn'); if (showOn == 'focus' || showOn == 'both') input.focus(this._showDatepicker); if (showOn == 'customclick') { input.focus(this._showDatepicker); var customTriggerElementID = this._get(inst, 'customTriggerElementID'); if (customTriggerElementID) { inst.trigger = $('#' + customTriggerElementID).addClass(this._triggerClass); inst.trigger.click(function() { if ($.datepicker._datepickerShowing && $.datepicker._lastInput == target) $.datepicker._hideDatepicker(); else $.datepicker._showDatepicker(target); return false }) } } if (showOn == 'button' || showOn == 'both') { var buttonText = this._get(inst, 'buttonText'); var buttonImage = this._get(inst, 'buttonImage'); inst.trigger = $(this._get(inst, 'buttonImageOnly') ? $('<img/>').addClass(this._triggerClass).attr({ src: buttonImage, alt: buttonText, title: buttonText }) : $('<button type="button"></button>').addClass(this._triggerClass).html(buttonImage == '' ? buttonText : $('<img/>').attr({ src: buttonImage, alt: buttonText, title: buttonText }))); input[isRTL ? 'before' : 'after'](inst.trigger); inst.trigger.click(function() { if ($.datepicker._datepickerShowing && $.datepicker._lastInput == target) $.datepicker._hideDatepicker(); else $.datepicker._showDatepicker(target); return false }) } input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).bind("setData.datepicker", function(event, key, value) { inst.settings[key] = value }).bind("getData.datepicker", function(event, key) { return this._get(inst, key) }); $.data(target, PROP_NAME, inst) }, _inlineDatepicker: function(target, inst) { var divSpan = $(target); if (divSpan.hasClass(this.markerClassName)) return; divSpan.addClass(this.markerClassName).append(inst.dpDiv).bind("setData.datepicker", function(event, key, value) { inst.settings[key] = value }).bind("getData.datepicker", function(event, key) { return this._get(inst, key) }); $.data(target, PROP_NAME, inst); this._setDate(inst, this._getDefaultDate(inst)); this._updateDatepicker(inst); this._updateAlternate(inst) }, _dialogDatepicker: function(input, dateText, onSelect, settings, pos) { var inst = this._dialogInst; if (!inst) { var id = 'dp' + (++this.uuid); this._dialogInput = $('<input type="text" id="' + id + '" size="1" style="position: absolute; top: -100px;"/>'); this._dialogInput.keydown(this._doKeyDown); $('body').append(this._dialogInput); inst = this._dialogInst = this._newInst(this._dialogInput, false); inst.settings = {}; $.data(this._dialogInput[0], PROP_NAME, inst) } extendRemove(inst.settings, settings || {}); this._dialogInput.val(dateText); this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null); if (!this._pos) { var browserWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; var browserHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; var scrollY = document.documentElement.scrollTop || document.body.scrollTop; this._pos = [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY] } this._dialogInput.css('left', this._pos[0] + 'px').css('top', this._pos[1] + 'px'); inst.settings.onSelect = onSelect; this._inDialog = true; this.dpDiv.addClass(this._dialogClass); this._showDatepicker(this._dialogInput[0]); if ($.blockUI) $.blockUI(this.dpDiv); $.data(this._dialogInput[0], PROP_NAME, inst); return this }, _destroyDatepicker: function(target) { var $target = $(target); var inst = $.data(target, PROP_NAME); if (!$target.hasClass(this.markerClassName)) { return } var nodeName = target.nodeName.toLowerCase(); $.removeData(target, PROP_NAME); if (nodeName == 'input') { inst.trigger.remove(); $target.siblings('.' + this._appendClass).remove().end().removeClass(this.markerClassName).unbind('focus', this._showDatepicker).unbind('keydown', this._doKeyDown).unbind('keypress', this._doKeyPress) } else if (nodeName == 'div' || nodeName == 'span') $target.removeClass(this.markerClassName).empty() }, _enableDatepicker: function(target) { var $target = $(target); var inst = $.data(target, PROP_NAME); if (!$target.hasClass(this.markerClassName)) { return } var nodeName = target.nodeName.toLowerCase(); if (nodeName == 'input') { target.disabled = false; inst.trigger.filter("button").each(function() { this.disabled = false }).end().filter("img").css({ opacity: '1.0', cursor: '' }) } else if (nodeName == 'div' || nodeName == 'span') { var inline = $target.children('.' + this._inlineClass); inline.children().removeClass('ui-state-disabled') } this._disabledInputs = $.map(this._disabledInputs, function(value) { return (value == target ? null : value) }) }, _disableDatepicker: function(target) { var $target = $(target); var inst = $.data(target, PROP_NAME); if (!$target.hasClass(this.markerClassName)) { return } var nodeName = target.nodeName.toLowerCase(); if (nodeName == 'input') { target.disabled = true; inst.trigger.filter("button").each(function() { this.disabled = true }).end().filter("img").css({ opacity: '0.5', cursor: 'default' }) } else if (nodeName == 'div' || nodeName == 'span') { var inline = $target.children('.' + this._inlineClass); inline.children().addClass('ui-state-disabled') } this._disabledInputs = $.map(this._disabledInputs, function(value) { return (value == target ? null : value) }); this._disabledInputs[this._disabledInputs.length] = target }, _isDisabledDatepicker: function(target) { if (!target) { return false } for (var i = 0; i < this._disabledInputs.length; i++) { if (this._disabledInputs[i] == target) return true } return false }, _getInst: function(target) { try { return $.data(target, PROP_NAME) } catch (err) { throw 'Missing instance data for this datepicker'; } }, _optionDatepicker: function(target, name, value) { var settings = name || {}; if (typeof name == 'string') { settings = {}; settings[name] = value } var inst = this._getInst(target); if (inst) { if (this._curInst == inst) { this._hideDatepicker(null) } extendRemove(inst.settings, settings); var date = new Date(); extendRemove(inst, { rangeStart: null, endDay: null, endMonth: null, endYear: null, selectedDay: date.getDate(), selectedMonth: date.getMonth(), selectedYear: date.getFullYear(), currentDay: date.getDate(), currentMonth: date.getMonth(), currentYear: date.getFullYear(), drawMonth: date.getMonth(), drawYear: date.getFullYear() }); this._updateDatepicker(inst) } }, _changeDatepicker: function(target, name, value) { this._optionDatepicker(target, name, value) }, _refreshDatepicker: function(target) { var inst = this._getInst(target); if (inst) { this._updateDatepicker(inst) } }, _setDateDatepicker: function(target, date, endDate) { var inst = this._getInst(target); if (inst) { this._setDate(inst, date, endDate); this._updateDatepicker(inst); this._updateAlternate(inst) } }, _getDateDatepicker: function(target) { var inst = this._getInst(target); if (inst && !inst.inline) this._setDateFromField(inst); return (inst ? this._getDate(inst) : null) }, _doKeyDown: function(event) { var inst = $.datepicker._getInst(event.target); var handled = true; var isRTL = inst.dpDiv.is('.ui-datepicker-rtl'); inst._keyEvent = true; if ($.datepicker._datepickerShowing) switch (event.keyCode) { case 9: $.datepicker._hideDatepicker(null, ''); break; case 13: var sel = $('td.' + $.datepicker._dayOverClass + ', td.' + $.datepicker._currentClass, inst.dpDiv); if (sel[0]) $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]); else $.datepicker._hideDatepicker(null, $.datepicker._get(inst, 'duration')); return false; break; case 27: $.datepicker._hideDatepicker(null, $.datepicker._get(inst, 'duration')); break; case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ? -$.datepicker._get(inst, 'stepBigMonths') : -$.datepicker._get(inst, 'stepMonths')), 'M'); break; case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ? +$.datepicker._get(inst, 'stepBigMonths') : +$.datepicker._get(inst, 'stepMonths')), 'M'); break; case 35: if (event.ctrlKey || event.metaKey) $.datepicker._clearDate(event.target); handled = event.ctrlKey || event.metaKey; break; case 36: if (event.ctrlKey || event.metaKey) $.datepicker._gotoToday(event.target); handled = event.ctrlKey || event.metaKey; break; case 37: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), 'D'); handled = event.ctrlKey || event.metaKey; if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ? -$.datepicker._get(inst, 'stepBigMonths') : -$.datepicker._get(inst, 'stepMonths')), 'M'); break; case 38: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, -7, 'D'); handled = event.ctrlKey || event.metaKey; break; case 39: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), 'D'); handled = event.ctrlKey || event.metaKey; if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ? +$.datepicker._get(inst, 'stepBigMonths') : +$.datepicker._get(inst, 'stepMonths')), 'M'); break; case 40: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, +7, 'D'); handled = event.ctrlKey || event.metaKey; break; default: handled = false } else if (event.keyCode == 36 && event.ctrlKey) $.datepicker._showDatepicker(this); else { handled = false } if (handled) { event.preventDefault(); event.stopPropagation() } }, _doKeyPress: function(event) { var inst = $.datepicker._getInst(event.target); if ($.datepicker._get(inst, 'constrainInput')) { var chars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat')); var chr = String.fromCharCode(event.charCode == undefined ? event.keyCode : event.charCode); return event.ctrlKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1) } }, _showDatepicker: function(input) { input = input.target || input; if (input.nodeName.toLowerCase() != 'input') input = $('input', input.parentNode)[0]; if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input) return; var inst = $.datepicker._getInst(input); var beforeShow = $.datepicker._get(inst, 'beforeShow'); extendRemove(inst.settings, (beforeShow ? beforeShow.apply(input, [input, inst]) : {})); $.datepicker._hideDatepicker(null, ''); $.datepicker._lastInput = input; $.datepicker._setDateFromField(inst); if ($.datepicker._inDialog) input.value = ''; if (!$.datepicker._pos) { $.datepicker._pos = $.datepicker._findPos(input); $.datepicker._pos[1] += input.offsetHeight } var isFixed = false; $(input).parents().each(function() { isFixed |= $(this).css('position') == 'fixed'; return !isFixed }); if (isFixed && $.browser.opera) { $.datepicker._pos[0] -= document.documentElement.scrollLeft; $.datepicker._pos[1] -= document.documentElement.scrollTop } var offset = { left: $.datepicker._pos[0], top: $.datepicker._pos[1] }; $.datepicker._pos = null; inst.rangeStart = null; inst.dpDiv.css({ position: 'absolute', display: 'block', top: '-1000px' }); $.datepicker._updateDatepicker(inst); offset = $.datepicker._checkOffset(inst, offset, isFixed); inst.dpDiv.css({ position: ($.datepicker._inDialog && $.blockUI ? 'static' : (isFixed ? 'fixed' : 'absolute')), display: 'none', left: offset.left + 'px', top: offset.top + 'px' }); if (!inst.inline) { var showAnim = $.datepicker._get(inst, 'showAnim') || 'show'; var duration = $.datepicker._get(inst, 'duration'); var postProcess = function() { $.datepicker._datepickerShowing = true; if ($.browser.msie && parseInt($.browser.version, 10) < 7) $('iframe.ui-datepicker-cover').css({ width: inst.dpDiv.width() + 4, height: inst.dpDiv.height() + 4 }) }; if ($.effects && $.effects[showAnim]) inst.dpDiv.show(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess); else inst.dpDiv[showAnim](duration, postProcess); if (duration == '') postProcess(); if (inst.input[0].type != 'hidden') inst.input[0].focus(); $.datepicker._curInst = inst } }, _updateDatepicker: function(inst) { var dims = { width: inst.dpDiv.width() + 4, height: inst.dpDiv.height() + 4 }; var self = this; inst.dpDiv.empty().append(this._generateHTML(inst)).find('iframe.ui-datepicker-cover').css({ width: dims.width, height: dims.height }).end().find('button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a').bind('mouseout', function() { $(this).removeClass('ui-state-hover'); if (this.className.indexOf('ui-datepicker-prev') != -1) $(this).removeClass('ui-datepicker-prev-hover'); if (this.className.indexOf('ui-datepicker-next') != -1) $(this).removeClass('ui-datepicker-next-hover') }).bind('mouseover', function() { if (!self._isDisabledDatepicker(inst.inline ? inst.dpDiv.parent()[0] : inst.input[0])) { $(this).parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover'); $(this).addClass('ui-state-hover'); if (this.className.indexOf('ui-datepicker-prev') != -1) $(this).addClass('ui-datepicker-prev-hover'); if (this.className.indexOf('ui-datepicker-next') != -1) $(this).addClass('ui-datepicker-next-hover') } }).end().find('.' + this._dayOverClass + ' a').trigger('mouseover').end(); var numMonths = this._getNumberOfMonths(inst); var cols = numMonths[1]; var width = 17; if (cols > 1) { if (window.navigator.userAgent.indexOf("MSIE") > -1 && window.navigator.userAgent.indexOf("8.0") == -1) { inst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', '360px') } else { inst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', 'auto') } } else { inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width('') } inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' : 'remove') + 'Class']('ui-datepicker-multi'); inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') + 'Class']('ui-datepicker-rtl'); if (inst.input && inst.input[0].type != 'hidden' && inst == $.datepicker._curInst) $(inst.input[0]).focus() }, _checkOffset: function(inst, offset, isFixed) { var dpWidth = inst.dpDiv.outerWidth(); var dpHeight = inst.dpDiv.outerHeight(); var inputWidth = inst.input ? inst.input.outerWidth() : 0; var inputHeight = inst.input ? inst.input.outerHeight() : 0; var viewWidth = (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth) + $(document).scrollLeft(); var viewHeight = (window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight) + $(document).scrollTop(); offset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : 0); offset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0; offset.top -= (isFixed && offset.top == (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0; offset.left -= (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ? Math.abs(offset.left + dpWidth - viewWidth) : 0; offset.top -= (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ? Math.abs(offset.top + dpHeight + inputHeight * 2 - viewHeight) : 0; return offset }, _findPos: function(obj) { while (obj && (obj.type == 'hidden' || obj.nodeType != 1)) { obj = obj.nextSibling } var position = $(obj).offset(); return [position.left, position.top] }, _hideDatepicker: function(input, duration) { var inst = this._curInst; if (!inst || (input && inst != $.data(input, PROP_NAME))) return; if (inst.stayOpen) this._selectDate('#' + inst.id, this._formatDate(inst, inst.currentDay, inst.currentMonth, inst.currentYear)); inst.stayOpen = false; if (this._datepickerShowing) { duration = (duration != null ? duration : this._get(inst, 'duration')); var showAnim = this._get(inst, 'showAnim'); var postProcess = function() { $.datepicker._tidyDialog(inst) }; if (duration != '' && $.effects && $.effects[showAnim]) inst.dpDiv.hide(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess); else inst.dpDiv[(duration == '' ? 'hide' : (showAnim == 'slideDown' ? 'slideUp' : (showAnim == 'fadeIn' ? 'fadeOut' : 'hide')))](duration, postProcess); if (duration == '') this._tidyDialog(inst); var onClose = this._get(inst, 'onClose'); if (onClose) onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ''), inst]); this._datepickerShowing = false; this._lastInput = null; if (this._inDialog) { this._dialogInput.css({ position: 'absolute', left: '0', top: '-100px' }); if ($.blockUI) { $.unblockUI(); $('body').append(this.dpDiv) } } this._inDialog = false } this._curInst = null }, _tidyDialog: function(inst) { inst.dpDiv.removeClass(this._dialogClass).unbind('.ui-datepicker-calendar') }, _checkExternalClick: function(event) { if (!$.datepicker._curInst) return; var $target = $(event.target); if (($target.parents('#' + $.datepicker._mainDivId).length == 0) && !$target.hasClass($.datepicker.markerClassName) && !$target.hasClass($.datepicker._triggerClass) && $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI)) $.datepicker._hideDatepicker(null, '') }, _adjustDate: function(id, offset, period) { var target = $(id); var inst = this._getInst(target[0]); if (this._isDisabledDatepicker(target[0])) { return } this._adjustInstDate(inst, offset + (period == 'M' ? this._get(inst, 'showCurrentAtPos') : 0), period); this._updateDatepicker(inst) }, _gotoToday: function(id) { var target = $(id); var inst = this._getInst(target[0]); if (this._get(inst, 'gotoCurrent') && inst.currentDay) { inst.selectedDay = inst.currentDay; inst.drawMonth = inst.selectedMonth = inst.currentMonth; inst.drawYear = inst.selectedYear = inst.currentYear } else { var date = new Date(); inst.selectedDay = date.getDate(); inst.drawMonth = inst.selectedMonth = date.getMonth(); inst.drawYear = inst.selectedYear = date.getFullYear() } this._notifyChange(inst); this._adjustDate(target) }, _selectMonthYear: function(id, select, period) { var target = $(id); var inst = this._getInst(target[0]); inst._selectingMonthYear = false; inst['selected' + (period == 'M' ? 'Month' : 'Year')] = inst['draw' + (period == 'M' ? 'Month' : 'Year')] = parseInt(select.options[select.selectedIndex].value, 10); this._notifyChange(inst); this._adjustDate(target) }, _clickMonthYear: function(id) { var target = $(id); var inst = this._getInst(target[0]); if (inst.input && inst._selectingMonthYear && !$.browser.msie) inst.input[0].focus(); inst._selectingMonthYear = !inst._selectingMonthYear }, _selectDay: function(id, month, year, td) { var target = $(id); if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) { return } var inst = this._getInst(target[0]); inst.selectedDay = inst.currentDay = $('a', td).html(); inst.selectedMonth = inst.currentMonth = month; inst.selectedYear = inst.currentYear = year; if (inst.stayOpen) { inst.endDay = inst.endMonth = inst.endYear = null } this._selectDate(id, this._formatDate(inst, inst.currentDay, inst.currentMonth, inst.currentYear)); if (inst.stayOpen) { inst.rangeStart = this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)); this._updateDatepicker(inst) } }, _clearDate: function(id) { var target = $(id); var inst = this._getInst(target[0]); inst.stayOpen = false; inst.endDay = inst.endMonth = inst.endYear = inst.rangeStart = null; this._selectDate(target, '') }, _selectDate: function(id, dateStr) { var target = $(id); var inst = this._getInst(target[0]); dateStr = (dateStr != null ? dateStr : this._formatDate(inst)); if (inst.input) inst.input.val(dateStr); this._updateAlternate(inst); var onSelect = this._get(inst, 'onSelect'); if (onSelect) onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); else if (inst.input) inst.input.trigger('change'); if (inst.inline) this._updateDatepicker(inst); else if (!inst.stayOpen) { this._hideDatepicker(null, this._get(inst, 'duration')); this._lastInput = inst.input[0]; if (typeof (inst.input[0]) != 'object') inst.input[0].focus(); this._lastInput = null } }, _updateAlternate: function(inst) { var altField = this._get(inst, 'altField'); if (altField) { var altFormat = this._get(inst, 'altFormat') || this._get(inst, 'dateFormat'); var date = this._getDate(inst); dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst)); $(altField).each(function() { $(this).val(dateStr) }) } }, noWeekends: function(date) { var day = date.getDay(); return [(day > 0 && day < 6), ''] }, iso8601Week: function(date) { var checkDate = new Date(date.getFullYear(), date.getMonth(), date.getDate()); var firstMon = new Date(checkDate.getFullYear(), 1 - 1, 4); var firstDay = firstMon.getDay() || 7; firstMon.setDate(firstMon.getDate() + 1 - firstDay); if (firstDay < 4 && checkDate < firstMon) { checkDate.setDate(checkDate.getDate() - 3); return $.datepicker.iso8601Week(checkDate) } else if (checkDate > new Date(checkDate.getFullYear(), 12 - 1, 28)) { firstDay = new Date(checkDate.getFullYear() + 1, 1 - 1, 4).getDay() || 7; if (firstDay > 4 && (checkDate.getDay() || 7) < firstDay - 3) { return 1 } } return Math.floor(((checkDate - firstMon) / 86400000) / 7) + 1 }, parseDate: function(format, value, settings) { if (format == null || value == null) throw 'Invalid arguments'; value = (typeof value == 'object' ? value.toString() : value + ''); if (value == '') return null; var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff; var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; var year = -1; var month = -1; var day = -1; var doy = -1; var literal = false; var lookAhead = function(match) { var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); if (matches) iFormat++; return matches }; var getNumber = function(match) { lookAhead(match); var origSize = (match == '@' ? 14 : (match == 'y' ? 4 : (match == 'o' ? 3 : 2))); var size = origSize; var num = 0; while (size > 0 && iValue < value.length && value.charAt(iValue) >= '0' && value.charAt(iValue) <= '9') { num = num * 10 + parseInt(value.charAt(iValue++), 10); size-- } if (size == origSize) throw 'Missing number at position ' + iValue; return num }; var getName = function(match, shortNames, longNames) { var names = (lookAhead(match) ? longNames : shortNames); var size = 0; for (var j = 0; j < names.length; j++) size = Math.max(size, names[j].length); var name = ''; var iInit = iValue; while (size > 0 && iValue < value.length) { name += value.charAt(iValue++); for (var i = 0; i < names.length; i++) if (name == names[i]) return i + 1; size-- } throw 'Unknown name at position ' + iInit; }; var checkLiteral = function() { if (value.charAt(iValue) != format.charAt(iFormat)) throw 'Unexpected literal at position ' + iValue; iValue++ }; var iValue = 0; for (var iFormat = 0; iFormat < format.length; iFormat++) { if (literal) if (format.charAt(iFormat) == "'" && !lookAhead("'")) literal = false; else checkLiteral(); else switch (format.charAt(iFormat)) { case 'd': day = getNumber('d'); break; case 'D': getName('D', dayNamesShort, dayNames); break; case 'o': doy = getNumber('o'); break; case 'm': month = getNumber('m'); break; case 'M': month = getName('M', monthNamesShort, monthNames); break; case 'y': year = getNumber('y'); break; case '@': var date = new Date(getNumber('@')); year = date.getFullYear(); month = date.getMonth() + 1; day = date.getDate(); break; case "'": if (lookAhead("'")) checkLiteral(); else literal = true; break; default: checkLiteral() } } if (year == -1) year = new Date().getFullYear(); else if (year < 100) year += new Date().getFullYear() - new Date().getFullYear() % 100 + (year <= shortYearCutoff ? 0 : -100); if (doy > -1) { month = 1; day = doy; do { var dim = this._getDaysInMonth(year, month - 1); if (day <= dim) break; month++; day -= dim } while (true) } var date = this._daylightSavingAdjust(new Date(year, month - 1, day)); if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day) throw 'Invalid date'; return date }, ATOM: 'yy-mm-dd', COOKIE: 'D, dd M yy', ISO_8601: 'yy-mm-dd', RFC_822: 'D, d M y', RFC_850: 'DD, dd-M-y', RFC_1036: 'D, d M y', RFC_1123: 'D, d M yy', RFC_2822: 'D, d M yy', RSS: 'D, d M y', TIMESTAMP: '@', W3C: 'yy-mm-dd', formatDate: function(format, date, settings) { if (!date) return ''; var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; var lookAhead = function(match) { var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); if (matches) iFormat++; return matches }; var formatNumber = function(match, value, len) { var num = '' + value; if (lookAhead(match)) while (num.length < len) num = '0' + num; return num }; var formatName = function(match, value, shortNames, longNames) { return (lookAhead(match) ? longNames[value] : shortNames[value]) }; var output = ''; var literal = false; if (date) for (var iFormat = 0; iFormat < format.length; iFormat++) { if (literal) if (format.charAt(iFormat) == "'" && !lookAhead("'")) literal = false; else output += format.charAt(iFormat); else switch (format.charAt(iFormat)) { case 'd': output += formatNumber('d', date.getDate(), 2); break; case 'D': output += formatName('D', date.getDay(), dayNamesShort, dayNames); break; case 'o': var doy = date.getDate(); for (var m = date.getMonth() - 1; m >= 0; m--) doy += this._getDaysInMonth(date.getFullYear(), m); output += formatNumber('o', doy, 3); break; case 'm': output += formatNumber('m', date.getMonth() + 1, 2); break; case 'M': output += formatName('M', date.getMonth(), monthNamesShort, monthNames); break; case 'y': output += (lookAhead('y') ? date.getFullYear() : (date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100); break; case '@': output += date.getTime(); break; case "'": if (lookAhead("'")) output += "'"; else literal = true; break; default: output += format.charAt(iFormat) } } return output }, _possibleChars: function(format) { var chars = ''; var literal = false; for (var iFormat = 0; iFormat < format.length; iFormat++) if (literal) if (format.charAt(iFormat) == "'" && !lookAhead("'")) literal = false; else chars += format.charAt(iFormat); else switch (format.charAt(iFormat)) { case 'd': case 'm': case 'y': case '@': chars += '0123456789'; break; case 'D': case 'M': return null; case "'": if (lookAhead("'")) chars += "'"; else literal = true; break; default: chars += format.charAt(iFormat) } return chars }, _get: function(inst, name) { return inst.settings[name] !== undefined ? inst.settings[name] : this._defaults[name] }, _setDateFromField: function(inst) { var dateFormat = this._get(inst, 'dateFormat'); var dates = inst.input ? inst.input.val() : null; inst.endDay = inst.endMonth = inst.endYear = null; var date = defaultDate = this._getDefaultDate(inst); var settings = this._getFormatConfig(inst); try { date = this.parseDate(dateFormat, dates, settings) || defaultDate } catch (event) { this.log(event); date = defaultDate } var maxDate = this._get(inst, 'maxDate'); if (date > maxDate) date = defaultDate; inst.selectedDay = date.getDate(); inst.drawMonth = inst.selectedMonth = date.getMonth(); inst.drawYear = inst.selectedYear = date.getFullYear(); inst.currentDay = (dates ? date.getDate() : 0); inst.currentMonth = (dates ? date.getMonth() : 0); inst.currentYear = (dates ? date.getFullYear() : 0); this._adjustInstDate(inst) }, _getDefaultDate: function(inst) { var date = this._determineDate(this._get(inst, 'defaultDate'), new Date()); var minDate = this._getMinMaxDate(inst, 'min', true); var maxDate = this._getMinMaxDate(inst, 'max'); date = (minDate && date < minDate ? minDate : date); date = (maxDate && date > maxDate ? maxDate : date); return date }, _determineDate: function(date, defaultDate) { var offsetNumeric = function(offset) { var date = new Date(); date.setDate(date.getDate() + offset); return date }; var offsetString = function(offset, getDaysInMonth) { var date = new Date(); var year = date.getFullYear(); var month = date.getMonth(); var day = date.getDate(); var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g; var matches = pattern.exec(offset); while (matches) { switch (matches[2] || 'd') { case 'd': case 'D': day += parseInt(matches[1], 10); break; case 'w': case 'W': day += parseInt(matches[1], 10) * 7; break; case 'm': case 'M': month += parseInt(matches[1], 10); day = Math.min(day, getDaysInMonth(year, month)); break; case 'y': case 'Y': year += parseInt(matches[1], 10); day = Math.min(day, getDaysInMonth(year, month)); break } matches = pattern.exec(offset) } return new Date(year, month, day) }; date = (date == null ? defaultDate : (typeof date == 'string' ? offsetString(date, this._getDaysInMonth) : (typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : date))); date = (date && date.toString() == 'Invalid Date' ? defaultDate : date); if (date) { date.setHours(0); date.setMinutes(0); date.setSeconds(0); date.setMilliseconds(0) } return this._daylightSavingAdjust(date) }, _daylightSavingAdjust: function(date) { if (!date) return null; date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0); return date }, _setDate: function(inst, date, endDate) { var clear = !(date); var origMonth = inst.selectedMonth; var origYear = inst.selectedYear; date = this._determineDate(date, new Date()); inst.selectedDay = inst.currentDay = date.getDate(); inst.drawMonth = inst.selectedMonth = inst.currentMonth = date.getMonth(); inst.drawYear = inst.selectedYear = inst.currentYear = date.getFullYear(); if (origMonth != inst.selectedMonth || origYear != inst.selectedYear) this._notifyChange(inst); this._adjustInstDate(inst); if (inst.input) { inst.input.val(clear ? '' : this._formatDate(inst)) } }, _getDate: function(inst) { var startDate = (!inst.currentYear || (inst.input && inst.input.val() == '') ? null : this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); return startDate }, _generateHTML: function(inst) { var today = new Date(); today = this._daylightSavingAdjust(new Date(today.getFullYear(), today.getMonth(), today.getDate())); var isRTL = this._get(inst, 'isRTL'); var showButtonPanel = this._get(inst, 'showButtonPanel'); var hideIfNoPrevNext = this._get(inst, 'hideIfNoPrevNext'); var navigationAsDateFormat = this._get(inst, 'navigationAsDateFormat'); var numMonths = this._getNumberOfMonths(inst); var showCurrentAtPos = this._get(inst, 'showCurrentAtPos'); var stepMonths = this._get(inst, 'stepMonths'); var stepBigMonths = this._get(inst, 'stepBigMonths'); var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1); var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) : new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); var minDate = this._getMinMaxDate(inst, 'min', true); var maxDate = this._getMinMaxDate(inst, 'max'); var drawMonth = inst.drawMonth - showCurrentAtPos; var drawYear = inst.drawYear; if (drawMonth < 0) { drawMonth += 12; drawYear-- } if (maxDate) { var maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(), maxDate.getMonth() - numMonths[1] + 1, maxDate.getDate())); maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw); while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) { drawMonth--; if (drawMonth < 0) { drawMonth = 11; drawYear-- } } } inst.drawMonth = drawMonth; inst.drawYear = drawYear; var prevText = this._get(inst, 'prevText'); prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText, this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)), this._getFormatConfig(inst))); var prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ? '<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery.datepicker._adjustDate(\'#' + inst.id + '\', -' + stepMonths + ', \'M\');"' + ' title="' + prevText + '"><span class="ui-icon ui-icon-circle-triangle-' + (isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>' : (hideIfNoPrevNext ? '' : '<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="' + prevText + '"><span class="ui-icon ui-icon-circle-triangle-' + (isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>')); var nextText = this._get(inst, 'nextText'); nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText, this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)), this._getFormatConfig(inst))); var next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ? '<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery.datepicker._adjustDate(\'#' + inst.id + '\', +' + stepMonths + ', \'M\');"' + ' title="' + nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + (isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>' : (hideIfNoPrevNext ? '' : '<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="' + nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + (isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>')); var currentText = this._get(inst, 'currentText'); var gotoDate = (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today); currentText = (!navigationAsDateFormat ? currentText : this.formatDate(currentText, gotoDate, this._getFormatConfig(inst))); var controls = (!inst.inline ? '<div class="hc_close_hold"><a  class="hc_close" onclick="DP_jQuery.datepicker._hideDatepicker();">' + this._get(inst, 'closeText') + '</a></div>' : ''); var buttonPanel = (showButtonPanel) ? '<div class="ui-datepicker-buttonpane ui-widget-content">' + (isRTL ? controls : '') + (this._isInRange(inst, gotoDate) ? '' : '') + (isRTL ? '' : controls) + '</div>' : ''; var firstDay = parseInt(this._get(inst, 'firstDay'), 10); firstDay = (isNaN(firstDay) ? 0 : firstDay); var dayNames = this._get(inst, 'dayNames'); var dayNamesShort = this._get(inst, 'dayNamesShort'); var dayNamesMin = this._get(inst, 'dayNamesMin'); var monthNames = this._get(inst, 'monthNames'); var monthNamesShort = this._get(inst, 'monthNamesShort'); var beforeShowDay = this._get(inst, 'beforeShowDay'); var showOtherMonths = this._get(inst, 'showOtherMonths'); var calculateWeek = this._get(inst, 'calculateWeek') || this.iso8601Week; var endDate = inst.endDay ? this._daylightSavingAdjust(new Date(inst.endYear, inst.endMonth, inst.endDay)) : currentDate; var defaultDate = this._getDefaultDate(inst); var html = ''; for (var row = 0; row < numMonths[0]; row++) { var group = ''; for (var col = 0; col < numMonths[1]; col++) { var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay)); var cornerClass = ' ui-corner-all'; var calender = ''; if (isMultiMonth) { calender += '<div class="ui-datepicker-group ui-datepicker-group-'; switch (col) { case 0: calender += 'first'; cornerClass = ' ui-corner-' + (isRTL ? 'right' : 'left'); break; case numMonths[1] - 1: calender += 'last'; cornerClass = ' ui-corner-' + (isRTL ? 'left' : 'right'); break; default: calender += 'middle'; cornerClass = ''; break } calender += '">' } calender += '<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix' + cornerClass + '">' + (/all|left/.test(cornerClass) && row == 0 ? (isRTL ? next : prev) : '') + (/all|right/.test(cornerClass) && row == 0 ? (isRTL ? prev : next) : '') + this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate, selectedDate, row > 0 || col > 0, monthNames, monthNamesShort) + '</div><table class="ui-datepicker-calendar"><thead>' + '<tr>'; var thead = ''; for (var dow = 0; dow < 7; dow++) { var day = (dow + firstDay) % 7; thead += '<th' + ((dow + firstDay + 6) % 7 >= 5 ? ' class="ui-datepicker-week-end"' : '') + '>' + '<span title="' + dayNames[day] + '">' + dayNamesMin[day] + '</span></th>' } calender += thead + '</tr></thead><tbody>'; var daysInMonth = this._getDaysInMonth(drawYear, drawMonth); if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth) inst.selectedDay = Math.min(inst.selectedDay, daysInMonth); var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7; var numRows = (isMultiMonth ? 6 : Math.ceil((leadDays + daysInMonth) / 7)); var printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays)); for (var dRow = 0; dRow < numRows; dRow++) { calender += '<tr>'; var tbody = ''; for (var dow = 0; dow < 7; dow++) { var daySettings = (beforeShowDay ? beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, '']); var otherMonth = (printDate.getMonth() != drawMonth); var unselectable = otherMonth || !daySettings[0] || (minDate && printDate < minDate) || (maxDate && printDate > maxDate); tbody += '<td class="' + ((dow + firstDay + 6) % 7 >= 5 ? ' ui-datepicker-week-end' : '') + (otherMonth ? ' ui-datepicker-other-month' : '') + ((printDate.getTime() == selectedDate.getTime() && drawMonth == inst.selectedMonth && inst._keyEvent) || (defaultDate.getTime() == printDate.getTime() && defaultDate.getTime() == selectedDate.getTime()) ? ' ' + this._dayOverClass : '') + (unselectable ? ' ' + this._unselectableClass + ' ui-state-disabled' : '') + (otherMonth && !showOtherMonths ? '' : ' ' + daySettings[1] + (printDate.getTime() >= currentDate.getTime() && printDate.getTime() <= endDate.getTime() ? ' ' + this._currentClass : '') + (printDate.getTime() == today.getTime() ? ' ui-datepicker-today' : '')) + '"' + ((!otherMonth || showOtherMonths) && daySettings[2] ? ' title="' + daySettings[2] + '"' : '') + (unselectable ? '' : ' onclick="DP_jQuery.datepicker._selectDay(\'#' + inst.id + '\',' + drawMonth + ',' + drawYear + ', this);return false;"') + '>' + (otherMonth ? (showOtherMonths ? printDate.getDate() : '&#xa0;') : (unselectable ? '<span class="ui-state-default">' + printDate.getDate() + '</span>' : '<a class="ui-state-default' + (printDate.getTime() == today.getTime() ? ' ui-state-highlight' : '') + (printDate.getTime() >= currentDate.getTime() && printDate.getTime() <= endDate.getTime() ? ' ui-state-active' : '') + '" href="#">' + printDate.getDate() + '</a>')) + '</td>'; printDate.setDate(printDate.getDate() + 1); printDate = this._daylightSavingAdjust(printDate) } calender += tbody + '</tr>' } drawMonth++; if (drawMonth > 11) { drawMonth = 0; drawYear++ } calender += '</tbody></table>' + (isMultiMonth ? '</div>' + ((numMonths[0] > 0 && col == numMonths[1] - 1) ? '<div class="ui-datepicker-row-break"></div>' : '') : ''); group += calender } html += group } html += buttonPanel + ($.browser.msie && parseInt($.browser.version, 10) < 7 && !inst.inline ? '<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>' : ''); inst._keyEvent = false; return html }, _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate, selectedDate, secondary, monthNames, monthNamesShort) { minDate = (inst.rangeStart && minDate && selectedDate < minDate ? selectedDate : minDate); var changeMonth = this._get(inst, 'changeMonth'); var changeYear = this._get(inst, 'changeYear'); var showMonthAfterYear = this._get(inst, 'showMonthAfterYear'); var html = '<div class="ui-datepicker-title">'; var monthHtml = ''; if (secondary || !changeMonth) monthHtml += '<span class="ui-datepicker-month">' + monthNames[drawMonth] + '</span> '; else { var inMinYear = (minDate && minDate.getFullYear() == drawYear); var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear); monthHtml += '<select class="ui-datepicker-month" ' + 'onchange="DP_jQuery.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'M\');" ' + 'onclick="DP_jQuery.datepicker._clickMonthYear(\'#' + inst.id + '\');"' + '>'; for (var month = 0; month < 12; month++) { if ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) monthHtml += '<option value="' + month + '"' + (month == drawMonth ? ' selected="selected"' : '') + '>' + monthNamesShort[month] + '</option>' } monthHtml += '</select>' } if (!showMonthAfterYear) html += monthHtml + ((secondary || changeMonth || changeYear) && (!(changeMonth && changeYear)) ? '&#xa0;' : ''); if (secondary || !changeYear) html += '<span class="ui-datepicker-year">' + drawYear + '</span>'; else { var years = this._get(inst, 'yearRange').split(':'); var year = 0; var endYear = 0; if (years.length != 2) { year = drawYear - 10; endYear = drawYear + 10 } else if (years[0].charAt(0) == '+' || years[0].charAt(0) == '-') { year = drawYear + parseInt(years[0], 10); endYear = drawYear + parseInt(years[1], 10) } else { year = parseInt(years[0], 10); endYear = parseInt(years[1], 10) } year = (minDate ? Math.max(year, minDate.getFullYear()) : year); endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear); html += '<select class="ui-datepicker-year" ' + 'onchange="DP_jQuery.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'Y\');" ' + 'onclick="DP_jQuery.datepicker._clickMonthYear(\'#' + inst.id + '\');"' + '>'; for (; year <= endYear; year++) { html += '<option value="' + year + '"' + (year == drawYear ? ' selected="selected"' : '') + '>' + year + '</option>' } html += '</select>' } if (showMonthAfterYear) html += (secondary || changeMonth || changeYear ? '&#xa0;' : '') + monthHtml; html += '</div>'; return html }, _adjustInstDate: function(inst, offset, period) { var year = inst.drawYear + (period == 'Y' ? offset : 0); var month = inst.drawMonth + (period == 'M' ? offset : 0); var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period == 'D' ? offset : 0); var date = this._daylightSavingAdjust(new Date(year, month, day)); var minDate = this._getMinMaxDate(inst, 'min', true); var maxDate = this._getMinMaxDate(inst, 'max'); date = (minDate && date < minDate ? minDate : date); date = (maxDate && date > maxDate ? maxDate : date); inst.selectedDay = date.getDate(); inst.drawMonth = inst.selectedMonth = date.getMonth(); inst.drawYear = inst.selectedYear = date.getFullYear(); if (period == 'M' || period == 'Y') this._notifyChange(inst) }, _notifyChange: function(inst) { var onChange = this._get(inst, 'onChangeMonthYear'); if (onChange) onChange.apply((inst.input ? inst.input[0] : null), [inst.selectedYear, inst.selectedMonth + 1, inst]) }, _getNumberOfMonths: function(inst) { var numMonths = this._get(inst, 'numberOfMonths'); return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths)) }, _getMinMaxDate: function(inst, minMax, checkRange) { var date = this._determineDate(this._get(inst, minMax + 'Date'), null); return (!checkRange || !inst.rangeStart ? date : (!date || inst.rangeStart > date ? inst.rangeStart : date)) }, _getDaysInMonth: function(year, month) { return 32 - new Date(year, month, 32).getDate() }, _getFirstDayOfMonth: function(year, month) { return new Date(year, month, 1).getDay() }, _canAdjustMonth: function(inst, offset, curYear, curMonth) { var numMonths = this._getNumberOfMonths(inst); var date = this._daylightSavingAdjust(new Date(curYear, curMonth + (offset < 0 ? offset : numMonths[1]), 1)); if (offset < 0) date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth())); return this._isInRange(inst, date) }, _isInRange: function(inst, date) { var newMinDate = (!inst.rangeStart ? null : this._daylightSavingAdjust(new Date(inst.selectedYear, inst.selectedMonth, inst.selectedDay))); newMinDate = (newMinDate && inst.rangeStart < newMinDate ? inst.rangeStart : newMinDate); var minDate = newMinDate || this._getMinMaxDate(inst, 'min'); var maxDate = this._getMinMaxDate(inst, 'max'); return ((!minDate || date >= minDate) && (!maxDate || date <= maxDate)) }, _getFormatConfig: function(inst) { var shortYearCutoff = this._get(inst, 'shortYearCutoff'); shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff : new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); return { shortYearCutoff: shortYearCutoff, dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'), monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames')} }, _formatDate: function(inst, day, month, year) { if (!day) { inst.currentDay = inst.selectedDay; inst.currentMonth = inst.selectedMonth; inst.currentYear = inst.selectedYear } var date = (day ? (typeof day == 'object' ? day : this._daylightSavingAdjust(new Date(year, month, day))) : this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst)) } }); function extendRemove(target, props) { $.extend(target, props); for (var name in props) if (props[name] == null || props[name] == undefined) target[name] = props[name]; return target }; function isArray(a) { return (a && (($.browser.safari && typeof a == 'object' && a.length) || (a.constructor && a.constructor.toString().match(/\Array\(\)/)))) }; $.fn.datepicker = function(options) { if (!$.datepicker.initialized) { $(document).mousedown($.datepicker._checkExternalClick).find('body').append($.datepicker.dpDiv); $.datepicker.initialized = true } var otherArgs = Array.prototype.slice.call(arguments, 1); if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate')) return $.datepicker['_' + options + 'Datepicker'].apply($.datepicker, [this[0]].concat(otherArgs)); return this.each(function() { typeof options == 'string' ? $.datepicker['_' + options + 'Datepicker'].apply($.datepicker, [this].concat(otherArgs)) : $.datepicker._attachDatepicker(this, options) }) }; $.datepicker = new Datepicker(); $.datepicker.initialized = false; $.datepicker.uuid = new Date().getTime(); $.datepicker.version = "1.7.1"; window.DP_jQuery = $ })(jQuery);var dtCh = "/";
function RedefineDate(DateValue) {
    if (DateValue == "") return "";
    var RefinedDate = DateValue;
    var dateSplits = DateValue.split(GetDateSeperator());
    var ddmmyyyyReg = /\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}/
    var yyyymmddReg = /\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}/
    var strMonth; 
    var strDay;
    var strYear;
   
    if (ddmmyyyyReg.test(DateValue)) {
        strDay = dateSplits[0];
        strMonth = dateSplits[1];
        strYear = dateSplits[2];
    }
    else if (yyyymmddReg.test(DateValue)) {
        strDay = dateSplits[2];
        strMonth = dateSplits[1];
        strYear = dateSplits[0];
    }
    var dfmt = GetDateFormat();
    if (dfmt == "dd/mm/yyyy") {
        RefinedDate = strDay + GetDateSeperator() + strMonth + GetDateSeperator() + strYear;
    }
    else if (dfmt == "yyyy/mm/dd") {
        RefinedDate = strYear + GetDateSeperator() + strMonth + GetDateSeperator() + strDay;
    }
    return RefinedDate;
}
function isInteger(s) {
    var i;
    for (i = 0; i < s.length; i++) {
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    return true;
}
function GetDateFormat() {
    if (typeof (window['calDateFormat']) != 'undefined') {
        if (calDateFormat == "yyyy/mm/dd")
            return "yyyy/mm/dd";
        else if (calDateFormat == "dd/mm/yyyy")
            return "dd/mm/yyyy";
    }
    else {
        return "dd/mm/yyyy";
    }
}
function GetDateSeperator() { return dtCh; }
function stripCharsInBag(s, bag) {
    var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++) {
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function GetDateDiff(Date1, Date2) {
    var one_day = 1000 * 60 * 60 * 24;
    var startDate = new Date(ConvertToSysFormat(Date1));
    var endDate = new Date(ConvertToSysFormat(Date2));
    _Diff = Math.ceil((endDate.getTime() - startDate.getTime()) / (one_day));
    return _Diff;
}

function ResetDate(InOut, Date1, Date2) {
    var checkinDate = new Date(Date1);
    var checkoutDate = new Date(Date2);
    var checkDate, incremet
    if (InOut == "in") {
        checkDate = checkoutDate
        incremet = -1
    } else {
        checkDate = checkinDate
        incremet = 2
    }
    if (checkinDate >= checkoutDate) {
        var newDate = new Date(checkDate.getFullYear(), checkDate.getMonth(), checkDate.getDate() + incremet)
        SetDateVal(newDate.getFullYear(), newDate.getMonth() + 1, newDate.getDate(), InOut)
    }
}

function SetDateVal(year, month, varday, inOut) {
    var dfmt = GetDateFormat();
    if (month.toString.length < 2) month = "0" + month
    if (varday.toString.length < 2) varday = "0" + varday

    if (inOut == "in") {
        if (dfmt == "dd/mm/yyyy") {
            document.getElementById("Cal1").value = varday + GetDateSeperator() + month + GetDateSeperator() + year;
        }
        else if (dfmt == "yyyy/mm/dd") {
            document.getElementById("Cal1").value = year + GetDateSeperator() + month + GetDateSeperator() + varday;
        }
    } else {
        if (dfmt == "dd/mm/yyyy") {
            document.getElementById("Cal2").value = varday + GetDateSeperator() + month + GetDateSeperator() + year;
        }
        else if (dfmt == "yyyy/mm/dd") {
            document.getElementById("Cal2").value = year + GetDateSeperator() + month + GetDateSeperator() + varday;
        }
    }
    DateDiff();
}


function DateDiff() {
    dtCheckIn = document.getElementById("Cal1").value;
    var StartDate, EndDate;
    if (dtCheckIn != "") {
        var dateSplits = dtCheckIn.split(GetDateSeperator());
        if (dateSplits.length != 3 || isDate(dtCheckIn) != true) {
            $('#Cal1').datepicker('setDate', minDate);
            dtCheckIn = document.getElementById("Cal1").value;
        }
        CheckinDayEle = document.getElementById("day1");
        StartDate = new Date(ConvertToSysFormat(dtCheckIn));
        setDay(StartDate, CheckinDayEle);

    }
    dtCheckOut = document.getElementById("Cal2").value;
    if (dtCheckOut != "") {
        var dateSplits = dtCheckOut.split(GetDateSeperator());
        if (dateSplits.length != 3 || isDate(dtCheckOut) != true) {
            $('#Cal2').datepicker('setDate', minDate2);
            dtCheckOut = document.getElementById("Cal2").value;
        }
        CheckoutDayEle = document.getElementById("day2");
        EndDate = new Date(ConvertToSysFormat(dtCheckOut));
        setDay(EndDate, CheckoutDayEle);
    }
    if (dtCheckIn != "" && dtCheckOut != "") {
        document.getElementById('dateDiff').innerHTML = GetDateDiff(dtCheckIn, dtCheckOut);
        AutoUpdateCheckout(StartDate, EndDate, "up");
    }
}

function DateDiff2() {
    dtCheckIn = document.getElementById("Cal1").value;
    var StartDate, EndDate;
    if (dtCheckIn != "") {
        var dateSplits = dtCheckIn.split(GetDateSeperator());
        if (dateSplits.length != 3 || isDate(dtCheckIn) != true) {
            $('#Cal1').datepicker('setDate', minDate);
            dtCheckIn = document.getElementById("Cal1").value;
        }
        CheckinDayEle = document.getElementById("day1");
        StartDate = new Date(ConvertToSysFormat(dtCheckIn));
        setDay(StartDate, CheckinDayEle);
    }
    dtCheckOut = document.getElementById("Cal2").value;
    if (dtCheckOut != "") {
        var dateSplits = dtCheckOut.split(GetDateSeperator());
        if (dateSplits.length != 3 || isDate(dtCheckOut) != true) {
            $('#Cal2').datepicker('setDate', minDate2);
            dtCheckOut = document.getElementById("Cal2").value;
        }
        CheckoutDayEle = document.getElementById("day2");
        EndDate = new Date(ConvertToSysFormat(dtCheckOut));
        setDay(EndDate, CheckoutDayEle);
    }
    if (dtCheckIn != "" && dtCheckOut != "") {
        document.getElementById('dateDiff').innerHTML = GetDateDiff(dtCheckIn, dtCheckOut);
        AutoUpdateCheckout(StartDate, EndDate, "down");
    }
}

function DateDiff3() {
    dtCheckIn = document.getElementById("Cal3").value;
    var StartDate, EndDate;
    if (dtCheckIn != "") {
        var dateSplits = dtCheckIn.split(GetDateSeperator());
        if (dateSplits.length != 3 || isDate(dtCheckIn) != true) {
            $('#Cal3').datepicker('setDate', minDate);
            dtCheckIn = document.getElementById("Cal3").value;
        }
        CheckinDayEle = document.getElementById("day3");
        StartDate = new Date(ConvertToSysFormat(dtCheckIn));
        setDay(StartDate, CheckinDayEle);

    }
    dtCheckOut = document.getElementById("Cal4").value;
    if (dtCheckOut != "") {
        var dateSplits = dtCheckOut.split(GetDateSeperator());
        if (dateSplits.length != 3 || isDate(dtCheckOut) != true) {
            $('#Cal4').datepicker('setDate', minDate2);
            dtCheckOut = document.getElementById("Cal4").value;
        }
        CheckoutDayEle = document.getElementById("day4");
        EndDate = new Date(ConvertToSysFormat(dtCheckOut));
        setDay(EndDate, CheckoutDayEle);
    }
    if (dtCheckIn != "" && dtCheckOut != "") {
        AutoUpdateCheckout1(StartDate, EndDate, "up");
    }
}

function DateDiff4() {
    dtCheckIn = document.getElementById("Cal3").value;
    var StartDate, EndDate;
    if (dtCheckIn != "") {
        var dateSplits = dtCheckIn.split(GetDateSeperator());
        if (dateSplits.length != 3 || isDate(dtCheckIn) != true) {
            $('#Cal3').datepicker('setDate', minDate);
            dtCheckIn = document.getElementById("Cal3").value;
        }
        CheckinDayEle = document.getElementById("day3");
        StartDate = new Date(ConvertToSysFormat(dtCheckIn));
        setDay(StartDate, CheckinDayEle);
    }
    dtCheckOut = document.getElementById("Cal4").value;
    if (dtCheckOut != "") {
        var dateSplits = dtCheckOut.split(GetDateSeperator());
        if (dateSplits.length != 3 || isDate(dtCheckOut) != true) {
            $('#Cal4').datepicker('setDate', minDate2);
            dtCheckOut = document.getElementById("Cal4").value;
        }
        CheckoutDayEle = document.getElementById("day4");
        EndDate = new Date(ConvertToSysFormat(dtCheckOut));
        setDay(EndDate, CheckoutDayEle);
    }
    if (dtCheckIn != "" && dtCheckOut != "") {
        AutoUpdateCheckout1(StartDate, EndDate, "down");
    }
}

function AutoUpdateCheckout(CheckinDate, CheckoutDate, Dir) {
    var month, day, year, dfmt;
    if (CheckoutDate.getTime() < CheckinDate.getTime() && Dir == "up") {
        CheckoutDate.setTime(CheckinDate.getTime() + oneDay * 2);

        month = CheckoutDate.getMonth() + 1; month = AddPrecedingZero(month);
        day = CheckoutDate.getDate(); day = AddPrecedingZero(day);
        year = CheckoutDate.getFullYear();

        dfmt = GetDateFormat();
        if (dfmt == "dd/mm/yyyy") {
            document.getElementById("Cal2").value = day.toString() + GetDateSeperator() + month.toString() + GetDateSeperator() + year.toString();
        }
        else if (dfmt == "yyyy/mm/dd") {
            document.getElementById("Cal2").value = year.toString() + GetDateSeperator() + month.toString() + GetDateSeperator() + day.toString();
        }
        DateDiff();
    }
    else if (CheckoutDate.getTime() < CheckinDate.getTime() && Dir == "down") {
        CheckinDate.setTime(CheckoutDate.getTime() - oneDay * 2);
        month = CheckinDate.getMonth() + 1; month = AddPrecedingZero(month);
        day = CheckinDate.getDate(); day = AddPrecedingZero(day);
        year = CheckinDate.getFullYear();

        dfmt = GetDateFormat();
        if (dfmt == "dd/mm/yyyy") {
            document.getElementById("Cal1").value = day.toString() + GetDateSeperator() + month.toString() + GetDateSeperator() + year.toString();
        }
        else if (dfmt == "yyyy/mm/dd") {
            document.getElementById("Cal1").value = year.toString() + GetDateSeperator() + month.toString() + GetDateSeperator() + day.toString();
        }
        DateDiff();
    }
}

function AutoUpdateCheckout1(CheckinDate, CheckoutDate, Dir) {
    var month, day, year, dfmt;
    if (CheckoutDate.getTime() < CheckinDate.getTime() && Dir == "up") {
        CheckoutDate.setTime(CheckinDate.getTime() + oneDay * 2);

        month = CheckoutDate.getMonth() + 1; month = AddPrecedingZero(month);
        day = CheckoutDate.getDate(); day = AddPrecedingZero(day);
        year = CheckoutDate.getFullYear();

        dfmt = GetDateFormat();
        if (dfmt == "dd/mm/yyyy") {
            document.getElementById("Cal4").value = day.toString() + GetDateSeperator() + month.toString() + GetDateSeperator() + year.toString();
        }
        else if (dfmt == "yyyy/mm/dd") {
            document.getElementById("Cal4").value = year.toString() + GetDateSeperator() + month.toString() + GetDateSeperator() + day.toString();
        }
        DateDiff3();
    }
    else if (CheckoutDate.getTime() < CheckinDate.getTime() && Dir == "down") {
        CheckinDate.setTime(CheckoutDate.getTime() - oneDay * 2);
        month = CheckinDate.getMonth() + 1; month = AddPrecedingZero(month);
        day = CheckinDate.getDate(); day = AddPrecedingZero(day);
        year = CheckinDate.getFullYear();

        dfmt = GetDateFormat();
        if (dfmt == "dd/mm/yyyy") {
            document.getElementById("Cal3").value = day.toString() + GetDateSeperator() + month.toString() + GetDateSeperator() + year.toString();
        }
        else if (dfmt == "yyyy/mm/dd") {
            document.getElementById("Cal3").value = year.toString() + GetDateSeperator() + month.toString() + GetDateSeperator() + day.toString();
        }
        DateDiff3();
    }
}

function setDay(DateInput, Control) {
    Control.innerHTML = arrDayNames[DateInput.getDay()];
}
function AddPrecedingZero(InputString) {
    if (InputString.toString().charAt(0) != "0" && InputString.toString().length != 2) { InputString = "0" + InputString.toString(); }
    return InputString;
}
function RemovePrecedingZero(InputString) {
    if (InputString.toString().charAt(0) == "0" && InputString.toString().length == 2) { InputString = InputString.charAt(1); }
    return InputString;
}

function SetDefaultDate() {
    if (document.getElementById("Cal1") && document.getElementById("Cal2")) {
        var dtCheckIn = document.getElementById("Cal1").value;
        var dtCheckOut = document.getElementById("Cal2").value;
        var dfmt = GetDateFormat();
        if (dtCheckIn == "" || dtCheckOut == "") {
            var sDate = new Date();
            var one_day = 1000 * 60 * 60 * 24;
            sDate.setTime(sDate.getTime() + one_day * 17);

            var inDay = sDate.getDate(); inDay = AddPrecedingZero(inDay);
            var inMonth = sDate.getMonth() + 1; inMonth = AddPrecedingZero(inMonth);
            var inYear = sDate.getFullYear();

            var eDate = new Date();
            eDate.setTime(eDate.getTime() + one_day * 19);
            var outDay = eDate.getDate(); outDay = AddPrecedingZero(outDay);
            var outMonth = eDate.getMonth() + 1; outMonth = AddPrecedingZero(outMonth);
            var outYear = eDate.getFullYear();
            if (dfmt == "dd/mm/yyyy") {
                document.getElementById('Cal1').value = inDay + GetDateSeperator() + inMonth + GetDateSeperator() + inYear;
                document.getElementById('Cal2').value = outDay + GetDateSeperator() + outMonth + GetDateSeperator() + outYear;
            }
            else if (dfmt == "yyyy/mm/dd") {
                document.getElementById('Cal1').value = inYear + GetDateSeperator() + inMonth + GetDateSeperator() + inDay;
                document.getElementById('Cal2').value = outYear + GetDateSeperator() + outMonth + GetDateSeperator() + outDay
            }
        }
    }
}

function SetSeoDefaultDate() {

    var dtCheckIn = document.getElementById("Cal3").value;
    var dtCheckOut = document.getElementById("Cal4").value;
    var dfmt = GetDateFormat();

    if (dtCheckIn == "" || dtCheckOut == "") {
        var sDate = new Date();
        var one_day = 1000 * 60 * 60 * 24;
        sDate.setTime(sDate.getTime() + one_day * 17);

        var inDay = sDate.getDate(); inDay = AddPrecedingZero(inDay);
        var inMonth = sDate.getMonth() + 1; inMonth = AddPrecedingZero(inMonth);
        var inYear = sDate.getFullYear();

        var eDate = new Date();
        eDate.setTime(eDate.getTime() + one_day * 19);
        var outDay = eDate.getDate(); outDay = AddPrecedingZero(outDay);
        var outMonth = eDate.getMonth() + 1; outMonth = AddPrecedingZero(outMonth);
        var outYear = eDate.getFullYear();
        if (dfmt == "dd/mm/yyyy") {
            document.getElementById('Cal3').value = inDay + GetDateSeperator() + inMonth + GetDateSeperator() + inYear;
            document.getElementById('Cal4').value = outDay + GetDateSeperator() + outMonth + GetDateSeperator() + outYear;
        }
        else if (dfmt == "yyyy/mm/dd") {
            document.getElementById('Cal3').value = inYear + GetDateSeperator() + inMonth + GetDateSeperator() + inDay;
            document.getElementById('Cal4').value = outYear + GetDateSeperator() + outMonth + GetDateSeperator() + outDay
        }
    }
}

function initSEOCalendar() {
    SetSeoDefaultDate();
    if (document.getElementById('Cal3')) {
        document.getElementById('Cal3').value = RedefineDate(document.getElementById('Cal3').value);
        var CheckInDate = document.getElementById('Cal3').value
        var dtCheckInDate = new Date(ConvertToSysFormat(CheckInDate));
        checkInday = dtCheckInDate.getDate();
        checkInMonth = dtCheckInDate.getMonth() + 1;
        checkInyear = dtCheckInDate.getFullYear();
        setDay(dtCheckInDate, document.getElementById('day3'));
    }
    if (document.getElementById('Cal4')) {
        document.getElementById('Cal4').value = RedefineDate(document.getElementById('Cal4').value);
        var CheckOutDate = document.getElementById('Cal4').value
        var dtCheckOutDate = new Date(ConvertToSysFormat(CheckOutDate));
        checkOutday = dtCheckOutDate.getDate();
        checkOutMonth = dtCheckOutDate.getMonth() + 1;
        checkOutyear = dtCheckOutDate.getFullYear();
        setDay(dtCheckOutDate, document.getElementById('day4'));
    }
}

function initCalendar() {
    var dfmt = GetDateFormat();
    var qs = new Querystring(location.search.substr(1))
    var inDay = qs.get("inDay")
    var inMonth = qs.get("inMonth")
    var inYear = qs.get("inYear")

    var outDay = qs.get("outDay")
    var outMonth = qs.get("outMonth")
    var outYear = qs.get("outYear")

    /* added check for directhotel when the 6 variables above are not available */
    var qsCheckInDate = qs.get("checkin");
    var qsCheckOutDate = qs.get("checkout");
    if ((typeof (inDay) == 'undefined' || inDay == null) &&
        (typeof (qsCheckInDate) != 'undefined' || qsCheckInDate != null)) {
        inYear = qsCheckInDate.split("-")[0];
        inMonth = qsCheckInDate.split("-")[1].length > 1 ? qsCheckInDate.split("-")[1] : "0" + qsCheckInDate.split("-")[1];
        inDay = qsCheckInDate.split("-")[2].length > 1 ? qsCheckInDate.split("-")[2] : "0" + qsCheckInDate.split("-")[2];

        outYear = qsCheckOutDate.split("-")[0];
        outMonth = qsCheckOutDate.split("-")[1].length > 1 ? qsCheckOutDate.split("-")[1] : "0" + qsCheckOutDate.split("-")[1];
        outDay = qsCheckOutDate.split("-")[2].length > 1 ? qsCheckOutDate.split("-")[2] : "0" + qsCheckOutDate.split("-")[2];
    }

    SetDefaultDate();

    var checkInday, checkInMonth, checkInyear
    var checkOutday, checkOutMonth, checkOutyear

    if (document.getElementById('Cal1')) {
        document.getElementById('Cal1').value = RedefineDate(document.getElementById('Cal1').value);
        var CheckInDate = document.getElementById('Cal1').value
        var dtCheckInDate = new Date(ConvertToSysFormat(CheckInDate));
        checkInday = dtCheckInDate.getDate();
        checkInMonth = dtCheckInDate.getMonth() + 1;
        checkInyear = dtCheckInDate.getFullYear();
        setDay(dtCheckInDate, document.getElementById('day1'));
    }
    if (document.getElementById('Cal2')) {
        document.getElementById('Cal2').value = RedefineDate(document.getElementById('Cal2').value);
        var CheckOutDate = document.getElementById('Cal2').value
        var dtCheckOutDate = new Date(ConvertToSysFormat(CheckOutDate));
        checkOutday = dtCheckOutDate.getDate();
        checkOutMonth = dtCheckOutDate.getMonth() + 1;
        checkOutyear = dtCheckOutDate.getFullYear();
        setDay(dtCheckOutDate, document.getElementById('day2'));
    }
    /*********set month, day, year in the hidden text *******/
    if (document.getElementById('inDay')) {
        document.getElementById('inDay').value = checkInday;
        document.getElementById('inMonth').value = checkInMonth;
        document.getElementById('inYear').value = checkInyear;

        document.getElementById('outDay').value = checkOutday;
        document.getElementById('outMonth').value = checkOutMonth;
        document.getElementById('outYear').value = checkOutyear;
    }
    /*******************************************************/
    if (typeof (inDay) != 'undefined' && inDay != null && document.getElementById('inDay')) {

        document.getElementById('inDay').value = inDay;
        document.getElementById('inMonth').value = inMonth;
        document.getElementById('inYear').value = inYear;

        document.getElementById('outDay').value = outDay;
        document.getElementById('outMonth').value = outMonth;
        document.getElementById('outYear').value = outYear;

        checkInday = inDay;
        checkInMonth = inMonth;
        checkInyear = inYear;

        checkOutday = outDay;
        checkOutMonth = outMonth;
        checkOutyear = outYear;

        if (dfmt == "dd/mm/yyyy") {
            document.getElementById('Cal1').value = inDay + GetDateSeperator() + inMonth + GetDateSeperator() + inYear;
            document.getElementById('Cal2').value = outDay + GetDateSeperator() + outMonth + GetDateSeperator() + outYear;
        }
        else if (dfmt == "yyyy/mm/dd") {
            document.getElementById('Cal1').value = inYear + GetDateSeperator() + inMonth + GetDateSeperator() + inDay;
            document.getElementById('Cal2').value = outYear + GetDateSeperator() + outMonth + GetDateSeperator() + outDay
        }
        var Cal1 = inMonth + GetDateSeperator() + inDay + GetDateSeperator() + inYear;
        var chkInDate = new Date(eval('"' + Cal1 + '"'))
        setDay(chkInDate, document.getElementById('day1'));


        var Cal2 = outMonth + GetDateSeperator() + outDay + GetDateSeperator() + outYear;
        var chkOutDate = new Date(eval('"' + Cal2 + '"'))
        setDay(chkOutDate, document.getElementById('day2'));

    }
    if (document.getElementById('hdnDateDiff') != null) {
        //********Length of stay *******/////  
        var strDiff = document.getElementById('hdnDateDiff').value
        var actualDiffStr = document.getElementById('hdnDateDiff').value;
        strDiff = strDiff.substring(strDiff.indexOf("]") + 1, strDiff.length);
        document.getElementById('lenStay').innerHTML = "<strong>" + actualDiffStr.substring(0, actualDiffStr.indexOf("[")) + "</strong>";
        document.getElementById('spnnight').innerHTML = strDiff;
        DateDiff();
    }
}

function ChangeDates() {
    if (ValidateDate() == true) {
        var qString = location.search.substr(1)
        qString = remQStringName(qString, "page")
        var strCheckIn = DateFormat(strCheckIn = document.getElementById('Cal1').value)
        var strCheckOut = DateFormat(document.getElementById('Cal2').value)
        qString = remQStringName(qString, "inDay")
        qString = remQStringName(qString, "inMonth")
        qString = remQStringName(qString, "inYear")
        qString = remQStringName(qString, "outDay")
        qString = remQStringName(qString, "outMonth")
        qString = remQStringName(qString, "outYear")
        qString = remQStringName(qString, "vw")
        qString += "&" + "inDay" + "=" + document.getElementById('inDay').value
        qString += "&" + "inMonth" + "=" + document.getElementById('inMonth').value
        qString += "&" + "inYear" + "=" + document.getElementById('inYear').value
        var outDate = document.getElementById('outDay').value
        if (outDate.length < 2)
        { qString += "&" + "outDay" + "=0" + outDate }
        else
        { qString += "&" + "outDay" + "=" + outDate }
        qString += "&" + "outMonth" + "=" + document.getElementById('outMonth').value
        qString += "&" + "outYear" + "=" + document.getElementById('outYear').value
        qString += "&" + "vw=D"
        qString = setQStringName(qString, "Checkin", new Array(strCheckIn))
        qString = setQStringName(qString, "Checkout", new Array(strCheckOut))
        location = location.pathname + "?" + qString
    }
}

function ValidateDate() {

    var strChkin = document.getElementById('Cal1').value;
    var strChkout = document.getElementById('Cal2').value;

    if (isDate(strChkin) == false) {
        document.getElementById('Cal1').focus()
        return false
    }
    if (isDate(strChkout) == false) {
        document.getElementById('Cal2').focus()
        return false
    }

    UpdateDates();
    var one_day = 1000 * 60 * 60 * 24;
    var date1 = new Date(ConvertToSysFormat(strChkin));
    var date2 = new Date(ConvertToSysFormat(strChkout));

    var dateDiff = Math.ceil((date2.getTime() - date1.getTime()) / (one_day));

    if (parseInt(dateDiff) < 1) {

        if (typeof (Common_Scripts_TravelDates_OutAfterIn) == "undefined")
            Common_Scripts_TravelDates_OutAfterIn = "Please ensure that the Check-out Date is after the Check-in Date."

        alert(Common_Scripts_TravelDates_OutAfterIn)
        return false;
    }
    var mnDate = new Date(minDate);
    minDate = new Date(mnDate.toDateString());
  
    if (date1 < minDate || date1 > maxDate) {
        alert("Please enter valid checkin date between " + minDate.toDateString() + " and " + maxDate.toDateString())
        return false
    }
    if (date2 < minDate2 || date2 > maxDate) {
        alert("Please enter valid checkout date between " + minDate2.toDateString() + " and " + maxDate.toDateString())
        return false
    }
    if (parseInt(dateDiff) > 25) {
        if (typeof (Common_Scripts_TravelDates_StayTooLong) == "undefined") {
            Common_Scripts_TravelDates_StayTooLong = 'Your period of stay should be not longer than 25 nights.\n\nIf you wish to book for more than 25 nights, please send us an e-mail with your request.'

        }
        alert(Common_Scripts_TravelDates_StayTooLong);
        return false;
    }
    return true
}

function ConvertToSysFormat(dtStr) {
    var dfmt = GetDateFormat();
    var dateSplits = dtStr.split(GetDateSeperator());
    var strMonth, strDay, strYear;
    if (dfmt == "dd/mm/yyyy") {
        strDay = dateSplits[0];
        strMonth = dateSplits[1];
        strYear = dateSplits[2];
    }
    else if (dfmt == "yyyy/mm/dd") {
        strDay = dateSplits[2];
        strMonth = dateSplits[1];
        strYear = dateSplits[0];
    }
    return strMonth + GetDateSeperator() + strDay + GetDateSeperator() + strYear;
}

function DateFormat(strDate) {
    var dfmt = GetDateFormat();
    var dateSplits = strDate.split(GetDateSeperator());
    var strMonth, strDay, strYear;
    var strMonth, strDay, strYear;
    if (dfmt == "dd/mm/yyyy") {
        strDay = dateSplits[0];
        strMonth = dateSplits[1];
        strYear = dateSplits[2];
    }
    else if (dfmt == "yyyy/mm/dd") {
        strDay = dateSplits[2];
        strMonth = dateSplits[1];
        strYear = dateSplits[0];
    }
    newDate = strYear + '-' + strMonth + '-' + strDay
    return newDate
}

function isDate(dtStr) {
    var dfmt = GetDateFormat();

    var dateSplits = dtStr.split(GetDateSeperator());
    if (dateSplits.length != 3) {
        alert("Enter a valid date");
        return false;
    }
    var strMonth, strDay, strYear;
    if (dfmt == "dd/mm/yyyy") {
        strDay = dateSplits[0];
        strMonth = dateSplits[1];
        strYear = dateSplits[2];
    }
    else if (dfmt == "yyyy/mm/dd") {
        strDay = dateSplits[2];
        strMonth = dateSplits[1];
        strYear = dateSplits[0];
    }
    var daysInMonth = DaysArray(12)
    strDay = AddPrecedingZero(strDay); strMonth = AddPrecedingZero(strMonth);
    if (isInteger(strDay) != true && isInteger(strMonth) != true && isInteger(strYear) != true)
        return false;
    var month = parseInt(strMonth, 10)
    var day = parseInt(strDay, 10)
    var year = parseInt(strYear, 10)

    if (strMonth.length < 1 || month < 1 || month > 12) {
        alert("Please enter valid month")
        return false
    }
    if (strDay.length < 1 || day < 1 || day > 31 || (month == 2 && day > daysInFebruary(year)) || day > daysInMonth[month]) {
        alert("Please enter valid date")
        return false
    }
    if (strYear.length != 4 || year == 0) {
        alert("Please enter valid 4 digit year")
        return false
    }

//    var dt = new Date(ConvertToSysFormat(dtStr));
//    if (dt < minDate || dt > maxDate) {
//        alert("Please enter valid date between " + minDate.toDateString() + " and " + maxDate.toDateString())
//        return false
//    }
    return true
}
function DaysArray(n) {
    for (var i = 1; i <= n; i++) {
        this[i] = 31
        if (i == 4 || i == 6 || i == 9 || i == 11) { this[i] = 30 }
        if (i == 2) { this[i] = 29 }
    }
    return this
}
function daysInFebruary(year) {
    // February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ((!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28);
}
function UpdateDates() {
    var dfmt = GetDateFormat();
    var CheckInDate = document.getElementById('Cal1').value
    var checkInday, checkInMonth, checkInyear
    var CheckInDateSplits = CheckInDate.split(GetDateSeperator());
    if (dfmt == "dd/mm/yyyy") {
        checkInday = CheckInDateSplits[0];
        checkInMonth = CheckInDateSplits[1];
        checkInyear = CheckInDateSplits[2];
    }
    else if (dfmt == "yyyy/mm/dd") {
        checkInday = CheckInDateSplits[2];
        checkInMonth = CheckInDateSplits[1];
        checkInyear = CheckInDateSplits[0];
    }
    checkInday = AddPrecedingZero(checkInday); checkInMonth = AddPrecedingZero(checkInMonth);

    var CheckOutDate = document.getElementById('Cal2').value
    var checkOutday, checkOutMonth, checkOutyear
    var CheckOutDateSplits = CheckOutDate.split(GetDateSeperator());
    if (dfmt == "dd/mm/yyyy") {
        checkOutday = CheckOutDateSplits[0];
        checkOutMonth = CheckOutDateSplits[1];
        checkOutyear = CheckOutDateSplits[2];
    }
    else if (dfmt == "yyyy/mm/dd") {
        checkOutday = CheckOutDateSplits[2];
        checkOutMonth = CheckOutDateSplits[1];
        checkOutyear = CheckOutDateSplits[0];
    }

    checkOutday = AddPrecedingZero(checkOutday); checkOutMonth = AddPrecedingZero(checkOutMonth);

    document.getElementById('inDay').value = checkInday;
    document.getElementById('inMonth').value = checkInMonth;
    document.getElementById('inYear').value = checkInyear;

    document.getElementById('outDay').value = checkOutday;
    document.getElementById('outMonth').value = checkOutMonth;
    document.getElementById('outYear').value = checkOutyear;
}

function CheckIrrelevantDates() {
    var qs = new Querystring(location.search.substr(1))
    var inDay = qs.get("inDay"); var inMonth = qs.get("inMonth"); var inYear = qs.get("inYear"); var outDay = qs.get("outDay")
    var outMonth = qs.get("outMonth"); var outYear = qs.get("outYear"); var qsCheckInDate = qs.get("checkin");
    var qsCheckOutDate = qs.get("checkout");
    /*if ((typeof (inDay) == 'undefined' || inDay == null) && (typeof (qsCheckOutDate) == 'undefined' || qsCheckOutDate == null)) {
    //CheckInDate
    }*/

    if (typeof (qsCheckInDate) == 'undefined' || qsCheckInDate == null) {
        qsCheckInDate = varCheckInDate;
    }


    if (typeof (qsCheckOutDate) == 'undefined' || qsCheckOutDate == null) {
        qsCheckOutDate = varCheckOutDate;
    }


    if (typeof (inDay) == 'undefined' || inDay == null) {
        inYear = qsCheckInDate.substring(0, 4);
        inMonth = qsCheckInDate.substring(5, 7);
        inDay = qsCheckInDate.substring(8, 10);
        outYear = qsCheckOutDate.substring(0, 4);
        outMonth = qsCheckOutDate.substring(5, 7);
        outDay = qsCheckOutDate.substring(8, 10);
    }
    var DtCheckIn = new Date(inMonth + GetDateSeperator() + inDay + GetDateSeperator() + inYear);
    var DtCheckOut = new Date(outMonth + GetDateSeperator() + outDay + GetDateSeperator() + outYear);
    var one_day = 1000 * 60 * 60 * 24;

    var mnDate = new Date() ;
    mnDate.setTime(mnDate.getTime() - one_day);
    var minDate = new Date(mnDate.toDateString());
    var CurrentYear = mnDate.getFullYear();
    var MaxYear = CurrentYear + 2
    var mxDate = new Date("12/31/" + MaxYear);
   
    if (DtCheckIn > mxDate || DtCheckIn < minDate || DtCheckOut > mxDate || DtCheckOut < minDate || DtCheckIn > DtCheckOut) {
        var sDate = new Date();
        sDate.setTime(sDate.getTime() + one_day * 17);
        var eDate = new Date();
        eDate.setTime(eDate.getTime() + one_day * 19);
        var qString = location.search.substr(1)
        qString = remQStringName(qString, "page")
        qString = remQStringName(qString, "inDay")
        qString = remQStringName(qString, "inMonth")
        qString = remQStringName(qString, "inYear")
        qString = remQStringName(qString, "outDay")
        qString = remQStringName(qString, "outMonth")
        qString = remQStringName(qString, "outYear")
        inDay = sDate.getDate(); inDay = AddPrecedingZero(inDay);
        inMonth = sDate.getMonth() + 1; inMonth = AddPrecedingZero(inMonth);
        inYear = sDate.getFullYear();
        outDay = eDate.getDate(); outDay = AddPrecedingZero(outDay);
        outMonth = eDate.getMonth() + 1; outMonth = AddPrecedingZero(outMonth);
        outYear = eDate.getFullYear();
        var strCheckIn = DateFormat(inDay + GetDateSeperator() + inMonth + GetDateSeperator() + inYear);
        var strCheckOut = DateFormat(outDay + GetDateSeperator() + outMonth + GetDateSeperator() + outYear);
        qString += "&" + "inDay" + "=" + inDay;
        qString += "&" + "inMonth" + "=" + inMonth;
        qString += "&" + "inYear" + "=" + inYear;
        qString += "&" + "outDay" + "=" + outDay;
        qString += "&" + "outMonth" + "=" + outMonth;
        qString += "&" + "outYear" + "=" + outYear;
        qString = setQStringName(qString, "Checkin", new Array(strCheckIn))
        qString = setQStringName(qString, "Checkout", new Array(strCheckOut))
        location = location.pathname + "?" + qString
    }
}/*
 * Lazy Load - jQuery plugin for lazy loading images
 *
 * Copyright (c) 2007-2009 Mika Tuupola
 *
 * Licensed under the MIT license:
 *   http://www.opensource.org/licenses/mit-license.php
 *
 * Project home:
 *   http://www.appelsiini.net/projects/lazyload
 *
 * Version:  1.3.2
 *
 */
(function($) {

    $.fn.lazyload = function(options) {
        var settings = {
            threshold: 0,
            failurelimit: 0,
            event: "scroll",
            effect: "show",
            container: window
        };

        if (options) {
            $.extend(settings, options);
        }

        /* Fire one scroll event per scroll. Not one scroll event per image. */
        var elements = this;
        if ("scroll" == settings.event) {
            $(settings.container).bind("scroll", function(event) {
                var counter = 0;
                elements.each(function() {
                    if (!$.belowthefold(this, settings) &&
                        !$.rightoffold(this, settings)) {
                        $(this).trigger("appear");
                    } else {
                        if (counter++ > settings.failurelimit) {
                            return false;
                        }
                    }
                });
                /* Remove image from array so it is not looped next time. */
                var temp = $.grep(elements, function(element) {
                    return !element.loaded;
                });
                elements = $(temp);
            });
        }

        return this.each(function() {
            var self = this;
            if (self.className == "hotelthumbimg") {

                /* TODO: use .data() instead of .attr() */
                //$(self).attr("original", $(self).attr("src"));
                if ($(self).attr("src").indexOf("imglayer.png") != -1) {
                    if ("scroll" != settings.event
                             || $.belowthefold(self, settings)
                             || $.rightoffold(self, settings)
                             || $.abovethetop(self, settings)
                             || $.inviewport(self, settings)) {
                        if (settings.placeholder) {
                            //$(self).attr("src", settings.placeholder);
                        } else {
                            //$(self).removeAttr("src");
                        }
                        self.loaded = false;
                    } else {
                        self.loaded = true;
                    }

                    /* When appear is triggered load original image. */
                    $(self).one("appear", function() {
                        if (!this.loaded) {
                            $("<img />")
                            .bind("load", function() {
                                $(self)
                                    .hide()
                                    .attr("src", "/HCRefreshAshx/ThumbNail.ashx?square=true&s=139&hid=" + $(self).attr("hid"))
                                    [settings.effect](settings.effectspeed);
                                self.loaded = true;
                            })
                            .attr("src", "/HCRefreshAshx/ThumbNail.ashx?square=true&s=139&hid=" + $(self).attr("hid"));
                        };
                    });

                    /* When wanted event is triggered load original image */
                    /* by triggering appear.                              */
                    if ("scroll" != settings.event) {
                        $(self).bind(settings.event, function(event) {
                            if (!self.loaded) {
                                $(self).trigger("appear");
                            }
                        });
                    }
                }
            }
        });

    };

    /* Convenience methods in jQuery namespace.           */
    /* Use as  $.belowthefold(element, {threshold : 100, container : window}) */

    $.belowthefold = function(element, settings) {
        if (settings.container === undefined || settings.container === window) {
            var fold = $(window).height() + $(window).scrollTop();
        }
        else {
            var fold = $(settings.container).offset().top + $(settings.container).height();
        }
        return fold <= $(element).offset().top - settings.threshold;
    };

    $.rightoffold = function(element, settings) {
        if (settings.container === undefined || settings.container === window) {
            var fold = $(window).width() + $(window).scrollLeft();
        }
        else {
            var fold = $(settings.container).offset().left + $(settings.container).width();
        }
        return fold <= $(element).offset().left - settings.threshold;
    };

    /* Custom selectors for your convenience.   */
    /* Use as $("img:below-the-fold").something() */

    $.extend($.expr[':'], {
        "below-the-fold": "$.belowthefold(a, {threshold : 0, container: window})",
        "above-the-fold": "!$.belowthefold(a, {threshold : 0, container: window})",
        "right-of-fold": "$.rightoffold(a, {threshold : 0, container: window})",
        "left-of-fold": "!$.rightoffold(a, {threshold : 0, container: window})"
    });

})(jQuery);
/*
* Viewport - jQuery selectors for finding elements in viewport
*
* Copyright (c) 2008-2009 Mika Tuupola
*
* Licensed under the MIT license:
*   http://www.opensource.org/licenses/mit-license.php
*
* Project home:
*  http://www.appelsiini.net/projects/viewport
*
*/
(function($) {

    $.belowthefold = function(element, settings) {
        var fold = $(window).height() + $(window).scrollTop();
        return fold <= $(element).offset().top - settings.threshold;
    };

    $.abovethetop = function(element, settings) {
        var top = $(window).scrollTop();
        return top >= $(element).offset().top + $(element).height() - settings.threshold;
    };

    $.rightofscreen = function(element, settings) {
        var fold = $(window).width() + $(window).scrollLeft();
        return fold <= $(element).offset().left - settings.threshold;
    };

    $.leftofscreen = function(element, settings) {
        var left = $(window).scrollLeft();
        return left >= $(element).offset().left + $(element).width() - settings.threshold;
    };

    $.inviewport = function(element, settings) {
        return !$.rightofscreen(element, settings) && !$.leftofscreen(element, settings) && !$.belowthefold(element, settings) && !$.abovethetop(element, settings);
    };

    $.extend($.expr[':'], {
        "below-the-fold": function(a, i, m) {
            return $.belowthefold(a, { threshold: 0 });
        },
        "above-the-top": function(a, i, m) {
            return $.abovethetop(a, { threshold: 0 });
        },
        "left-of-screen": function(a, i, m) {
            return $.leftofscreen(a, { threshold: 0 });
        },
        "right-of-screen": function(a, i, m) {
            return $.rightofscreen(a, { threshold: 0 });
        },
        "in-viewport": function(a, i, m) {
            return $.inviewport(a, { threshold: 0 });
        }
    });


})(jQuery);

;(function( $ ){
	
	var $scrollTo = $.scrollTo = function( target, duration, settings ){
		$(window).scrollTo( target, duration, settings );
	};

	$scrollTo.defaults = {
		axis:'y',
		duration:1
	};

	// Returns the element that needs to be animated to scroll the window.
	// Kept for backwards compatibility (specially for localScroll & serialScroll)
	$scrollTo.window = function( scope ){
		return $(window).scrollable();
	};

	// Hack, hack, hack... stay away!
	// Returns the real elements to scroll (supports window/iframes, documents and regular nodes)
	$.fn.scrollable = function(){
		return this.map(function(){
			// Just store it, we might need it
			var win = this.parentWindow || this.defaultView,
				// If it's a document, get its iframe or the window if it's THE document
				elem = this.nodeName == '#document' ? win.frameElement || win : this,
				// Get the corresponding document
				doc = elem.contentDocument || (elem.contentWindow || elem).document,
				isWin = elem.setInterval;

			return elem.nodeName == 'IFRAME' || isWin && $.browser.safari ? doc.body
				: isWin ? doc.documentElement
				: this;
		});
	};

	$.fn.scrollTo = function( target, duration, settings ){
		if( typeof duration == 'object' ){
			settings = duration;
			duration = 0;
		}
		if( typeof settings == 'function' )
			settings = { onAfter:settings };
			
		settings = $.extend( {}, $scrollTo.defaults, settings );
		// Speed is still recognized for backwards compatibility
		duration = duration || settings.speed || settings.duration;
		// Make sure the settings are given right
		settings.queue = settings.queue && settings.axis.length > 1;
		
		if( settings.queue )
			// Let's keep the overall duration
			duration /= 2;
		settings.offset = both( settings.offset );
		settings.over = both( settings.over );

		return this.scrollable().each(function(){
			var elem = this,
				$elem = $(elem),
				targ = target, toff, attr = {},
				win = $elem.is('html,body');

			switch( typeof targ ){
				// A number will pass the regex
				case 'number':
				case 'string':
					if( /^([+-]=)?\d+(px)?$/.test(targ) ){
						targ = both( targ );
						// We are done
						break;
					}
					// Relative selector, no break!
					targ = $(targ,this);
				case 'object':
					// DOMElement / jQuery
					if( targ.is || targ.style )
						// Get the real position of the target 
						toff = (targ = $(targ)).offset();
			}
			$.each( settings.axis.split(''), function( i, axis ){
				var Pos	= axis == 'x' ? 'Left' : 'Top',
					pos = Pos.toLowerCase(),
					key = 'scroll' + Pos,
					old = elem[key],
					Dim = axis == 'x' ? 'Width' : 'Height',
					dim = Dim.toLowerCase();

				if( toff ){// jQuery / DOMElement
					attr[key] = toff[pos] + ( win ? 0 : old - $elem.offset()[pos] );

					// If it's a dom element, reduce the margin
					if( settings.margin ){
						attr[key] -= parseInt(targ.css('margin'+Pos)) || 0;
						attr[key] -= parseInt(targ.css('border'+Pos+'Width')) || 0;
					}
					
					attr[key] += settings.offset[pos] || 0;
					
					if( settings.over[pos] )
						// Scroll to a fraction of its width/height
						attr[key] += targ[dim]() * settings.over[pos];
				}else
					attr[key] = targ[pos];

				// Number or 'number'
				if( /^\d+$/.test(attr[key]) )
					// Check the limits
					attr[key] = attr[key] <= 0 ? 0 : Math.min( attr[key], max(Dim) );

				// Queueing axes
				if( !i && settings.queue ){
					// Don't waste time animating, if there's no need.
					if( old != attr[key] )
						// Intermediate animation
						animate( settings.onAfterFirst );
					// Don't animate this axis again in the next iteration.
					delete attr[key];
				}
			});			
			animate( settings.onAfter );			

			function animate( callback ){
				$elem.animate( attr, duration, settings.easing, callback && function(){
					callback.call(this, target, settings);
				});
			};
			function max( Dim ){
				var attr ='scroll'+Dim,
					doc = elem.ownerDocument;
				
				return win
						? Math.max( doc.documentElement[attr], doc.body[attr]  )
						: elem[attr];
			};
		}).end();
	};

	function both( val ){
		return typeof val == 'object' ? val : { top:val, left:val };
	};

})(jQuery);

