﻿var minYear = 1900; var maxYear = 2100; var dtFrmt = "mm/dd/yyyy";
var frmDt, toDt, hfd, htd;
var onNewWin = false; //For TravelSpot

var clickCount = 0;

//Contains pattern to match for formatting AutoSuggest List
var textToFormat = new Array();
function InitDates() {
    document.onclick = HCal;
    //set default Dates
    frmDt = new Date();
    toDt = new Date();
    //Hotel only 2 days and for others 7 days
    frmDt.setDate(frmDt.getDate() + 14);
    toDt.setDate(toDt.getDate() + 16);
    hfd = frmDt;
    htd = toDt;
    toDt.setDate(toDt.getDate() + 5);
}

function InitPage() {

    InitDates(); //Initialize Dates    

}


function StDteOb(objNm, dtObj) {
    $("#" + objNm).val((dtObj.getMonth() + 1) + "/" + dtObj.getDate() + "/" + dtObj.getFullYear());
}


$(document).ready(function() {

    InitPage();
});

function GetTag(tagId) {
    return document.getElementById(tagId);
}

function isDate(txtDate_, ctrlName, vldMsgReq)// expected format is mm/dd/yyyy
{
    var txtDt = $("#" + txtDate_).val();
    var oDt;  // date object initialized from the txtDate string
    var mSec; // milliseconds from txtDate	  

    if (txtDt.length > 10 || txtDt.length < 8) {
        if (vldMsgReq == true) erMsgs += "<div> Please select a valid " + ctrlName + " date. Required Format -  " + dtFrmt + " </div>"; // The date format should be : "+ dtFrmt +" for " + ctrlName + " date </div>";
        return false;
    }

    try {
        var date = txtDt.split("/");

        if (date.length == 3) {// subtraction will cast variables to integer implicitly
            var day = date[1] - 0;
            var month = date[0] - 1; // because months in JS start with 0
            var year = date[2] - 0;
        }
        else {
            if (vldMsgReq == true) erMsgs += "<div> Please select a valid " + ctrlName + " date. Required Format -  " + dtFrmt + " </div>";
            return false;

        }
    }
    catch (err) {
        if (vldMsgReq == true) erMsgs += "<div> Please select a valid " + ctrlName + " date. Required Format -  " + dtFrmt + " </div>";
        return false;
    }

    if (year < minYear || year > maxYear) {
        if (vldMsgReq == true) erMsgs += "<div> Please enter a valid 4 digit year between " + minYear + " and " + maxYear + " for " + ctrlName + " date </div>";
        return false; // test year range
    }

    mSec = (new Date(year, month, day)).getTime(); // convert txtDate to the milliseconds
    oDt = new Date(); // set the date object from milliseconds
    oDt.setTime(mSec);

    // if there exists difference then date isn't valid
    if (oDt.getFullYear() != year || oDt.getMonth() != month || oDt.getDate() != day) {
        if (vldMsgReq == true) erMsgs += "<div> Please enter valid " + ctrlName + " date </div>";
        return false;
    }

    if (oDt < (new Date(new Date().toDateString())))//Can not less then current Date
    {
        if (vldMsgReq == true) erMsgs += "<div> " + ctrlName + " date can't be before today's date. </div>";
        return false;
    }
    return true;
}


//--------calx.js

var CalS = '';
var CalE = '';

var cF = null; var cW = null; var g_tid = 0; var g_cP, g_eD, g_eDP, g_dmin, g_dmax, g_dtsToBeSlct;
var g_dispCalOnRightOfCtrl;
var g_isDtRng;
var nextFocus; var g_fNoCal = false;

function SCal(cP, eD, eDP, dmin, dmax, dtsToBeSlct) {
    clearTimeout(g_tid);

    if (g_fNoCal) {
        g_fNoCal = false;
        return;
    }
    if (g_calShown && eD == g_eD) {
        //    return;
    }
    g_calShown = true;
    g_calCB = null;
    g_cP = cP;
    g_eD = eD;
    g_eDP = eDP;
    g_dmin = dmin;
    g_dmax = dmax;
    g_dtsToBeSlct = dtsToBeSlct;

    WaitCal();
}

function WaitCal() {
    if (!cW) cW = frames['calendar'];

    if (null == cW || null == cW.g_fCL || false == cW.g_fCL) g_tid = setTimeout("WaitCal()", 200);
    else {
        if (!cF) cF = getObj('calendar'); cF.style.visibility = "hidden";
        setTimeout("DoCal()", 1);
    }
}

function DoCal() {
    PosCal(g_cP);
    if (!cW) cW = frames['calendar']; cW.DoCal(g_eD, g_eDP, g_dmin, g_dmax, g_dtsToBeSlct, 2, curTab, g_isDtRng);
}

function getScrollTop() {
    if (document.documentElement.scrollTop) return document.documentElement.scrollTop;
    if (document.body.scrollTop) return document.body.scrollTop;
    if (window.pageYOffset) return window.pageYOffset;
    return 0;
}

function getWinHeight() {
    if (window.innerHeight) return window.innerHeight;
    if (document.documentElement.clientHeight) return document.documentElement.clientHeight;
    if (document.body.clientHeight) return document.body.clientHeight;
    return 0;
}

function PosCal(cP) {
    var dB = document.body; var eL = 0; var eT = 0;
    if (!cF) cF = getObj('calendar');
    for (var p = cP; p && p.tagName != 'BODY'; p = p.offsetParent) { eL += p.offsetLeft; eT += p.offsetTop; }
    var eH = cP.offsetHeight; var dH = parseInt(cF.style.height); var sT = getScrollTop();

    if (g_dispCalOnRightOfCtrl) {
        //show cal with the top of text box if open at bottom 
        //and show cal with the bottom of text box if open at top
        if (eT - dH >= sT && eT + dH > getWinHeight() + sT) eT -= (dH - eH);
        //Show cal on right of text box after image
        cF.style.left = eL + 30 + cP.offsetWidth + 'px'; cF.style.top = eT + 'px';
    }
    else {
        if (eT - dH >= sT && eT + eH + dH > getWinHeight() + sT) eT -= dH; else eT += eH;
        cF.style.left = eL + 'px'; cF.style.top = eT + 'px';
    }
}

function CalSetFocus(e) { if (e) { g_fNoCal = true; e.focus(); setTimeout("EndCalFocus()", 200); } }
function EndCalFocus() { g_fNoCal = false; }

function CalDateSet(eInp, d, m, y, giveFocus) {
    var ds = GetDtSep();
    var fmt = GetDtFmt();

    if (fmt == "mmddyy") eInp.value = m + ds + d + ds + y;
    else if (fmt == "ddmmyy") eInp.value = d + ds + m + ds + y;
    else eInp.value = y + ds + m + ds + d;
    if (!giveFocus)
        CalSetFocus(eInp);
}

var g_calShown = false;
function SetCalShown(fcshown) { g_calShown = fcshown; }

var g_calCB;
function CalCallback() { if (g_calCB) g_calCB(); }
function SetCalendarCallback(cb) { g_calCB = cb; }


function GetInputDate(t) {
    if (IsNullEmpt(t)) return null;
    t = t.replace(/\s+/g, "");
    if (t.match(/[^-|\d|\.|\/]/)) return null;
    var rgt = t.split(/-|\.|\//);
    for (var i = 0; i < rgt.length; i++) rgt[i] = parseInt(rgt[i], 10);
    if (!rgt[1]) return null;
    var m, d, y;
    var fmt = GetDtFmt();
    if (fmt == "yymmdd") {
        if (!rgt[2]) return null;
        m = rgt[1]; d = rgt[2]; y = rgt[0];
    }
    else {
        if (fmt == "mmddyy") { m = rgt[0]; d = rgt[1]; }
        else { m = rgt[1]; d = rgt[0]; } //fmt=="ddmmyy"
        if (rgt[2]) y = rgt[2];
        else y = DefYr(m - 1, d);
    }
    m -= 1; if (y < 100) y += 2000;
    if (y < 1601 || y > 4500 || m < 0 || m > 11 || d < 1 || d > GetMonthCount(m, y)) return null;
    return new Date(y, m, d);

}

var rM = new Array(12); rM[0] = rM[2] = rM[4] = rM[6] = rM[7] = rM[9] = rM[11] = 31; rM[3] = rM[5] = rM[8] = rM[10] = 30; rM[1] = 28;
function GetMonthCount(m, y) { var c = rM[m]; if ((1 == m) && IsLY(y)) c++; return c; }
function IsLY(y) { if (0 == y % 4 && ((y % 100 != 0) || (y % 400 == 0))) return true; else return false; }
function DefYr(m, d) { var dt = new Date(); var yC = (dt.getYear() < 1000) ? 1900 + dt.getYear() : dt.getYear(); if (m < dt.getMonth() || (m == dt.getMonth() && d < dt.getDate())) yC++; return yC; }

function GetDowStart() { return 0; } function GetDtFmt() { return "mmddyy"; } function GetDtSep() { return "/"; }
function GetDowStart() { return 0; }
function GetDtFmt() { return "mmddyy"; }
function GetDtSep() { return "/"; }
function ShowCalendar(eP, eD, eDP, dmin, dmax, dtsToBeSlct) {
    SCal(eP, eD, eDP, dmin, dmax, dtsToBeSlct);
}

var zz, zv, d, fTSR;
d = new Date();
fTSR = 0;
zv = d.getTime();
zz = "&zz=" + zv;

var gBF = false;
function GoTo(u) { window.top.location = u + zz; }
function Go(u) { window.top.location = u; }

function BF() { gBF = true; }

function getObj(objID) {
    if (GetTag) return GetTag(objID);
    else if (document.all) return document.all[objID];
    else if (document.layers) return document.layers[objID];
}

var actvEl;
function HCal() {
    if ($('#calendar'))
        $('#calendar').hide();
}

if (window.navigator.appName.toLowerCase().indexOf("netscape") > -1) {
    window.captureEvents(Event.CLICK);
    window.onmousemove = NS_MouseEventHandler;
    window.event = new Object;
}

function NS_MouseEventHandler(theMouseEvent) {
    window.event.clientX = theMouseEvent.pageX;
    window.event.clientY = theMouseEvent.pageY;

    //back to main event handler for the desired purpose
    if (window.routeEvent)
        window.routeEvent(theMouseEvent);
}

function showCalToSelectDate(obj, dtsToBeSlct, dtMin) {
    var ctrl = GetTag(obj);
    CalS = dtMin; //set Minimum date
    SC(ctrl, dtsToBeSlct);
}

function hideCalendar() {
    $("#calendar").hide();
    $("#" + actvEl).focus();
}

function SC(el, dtsToBeSlct) {
    if ($('#calendar') == null) return;
    var id = el.id;
    var n = el.id;
    el.select();
    var temp = id;
    ShowCalendar(el, el, GetTag(temp), CalS, CalE, dtsToBeSlct);
}

//Form Validation
function AddVldtnMsg() {
    if (erMsgs != undefined)
        if (!IsNullEmpt(erMsgs))
        $('#errMsg').html(erMsgs);
    erMsgs = "";
}

function IsBlank(ctrlName, erMsg, wtrmark) {
    var ctrl = $("#" + ctrlName);
    if (jQuery.trim(ctrl.val()).length == 0 || ctrl.val() == wtrmark) {
        erMsgs += "<div> " + erMsg + "</div>";
        return true;
    }
    return false;
}

function IsVldDtRng(fmCtlNm, toCtlNm, erMsg) {
    var valDt
    if (curTab == "H") valDt = (new Date($("#" + fmCtlNm).val())) < (new Date($("#" + toCtlNm).val()));
    else//Allow same day pickup and drop for car and same day Departure and Return for Air
        valDt = (new Date($("#" + fmCtlNm).val())) <= (new Date($("#" + toCtlNm).val()));
    if (!valDt) {
        erMsgs += "<div> " + erMsg + "</div>";
        return false;
    }
    return true;
}

function IsNumOrCd(ctlNm, erMsg, isCde) {
    var ctrl = $("#" + ctlNm);
    var regExp = null;
    if (isCde == true) regExp = "(?=.*([0-9a-zA-Z]))";
    else regExp = "(?=.+([0-9a-zA-Z]))([0-9a-zA-Z ',&amp;()./\_-]*)";

    var re = new RegExp(regExp);

    if (!ctrl.val().match(re)) {
        erMsgs += "<div> " + erMsg + "</div>";
        return false;
    }
    return true;
}

function ShowHidett(show_) {
    if (show_ == 'show') $('#minorMsg').show();
    else $('#minorMsg').hide();
}
function toggle(id) {
    if ($("#" + id).is(':visible')) $("#" + id).hide();
    else $("#" + id).show();
}


function dispCalendar(elm, dt1, dt2, isDtRng, dispCalOnRightOfCtrl, showPassedDate) {
    g_dispCalOnRightOfCtrl = true;
    g_isDtRng = true;
    blockSrch = false;
    if (dispCalOnRightOfCtrl != null)
        g_dispCalOnRightOfCtrl = dispCalOnRightOfCtrl;

    if (isDtRng != null)
        g_isDtRng = isDtRng;

    if (curTab == "F" && $("#rbAirOW").is(':checked'))
        g_isDtRng = false;

    if (curTab == "H")
        g_dispCalOnRightOfCtrl = false;

    var mindt = '';
    if (showPassedDate == null || showPassedDate == false)
        mindt = (new Date()).toDateString();

    if (dt1 != null && dt2 != null && $("#" + dt1) != null && $("#" + dt2) != null) {
        var setDt = false;
        if (dt1 != null && $("#" + dt1) != null && elm != dt1)//case of from date
        {
            if ($("#" + dt1).val() != dtFrmt && isDate(dt1, "", false) == true)
                mindt = $("#" + dt1).val(); //mindate will be from date 

            setDt = true;
        }
        if (showPassedDate == true && setDt == false)
            mindt = '';
    }

    var fromTo = '';
    if (dt1 != null && $("#" + dt1) != null && $("#" + dt1).val() != dtFrmt)
        fromTo = $("#" + dt1).val();

    if (dt2 != null && $("#" + dt2) != null && $("#" + dt2).val() != dtFrmt && g_isDtRng == true)
        fromTo += "," + $("#" + dt2).val();
    else
        fromTo += ",";

    showCalToSelectDate(elm, fromTo, mindt);
}

// Decide browser version
var ns6 = (document.getElementById) ? true : false;
var ie4 = (document.all) ? true : false;
var ie5 = false;
var mX = 4;
var mY = 4;

// IE Stupidity Check.
if (ie4) {
    if ((navigator.userAgent.indexOf('MSIE 5') > 0) || (navigator.userAgent.indexOf('MSIE 6') > 0) || (navigator.userAgent.indexOf('MSIE 7') > 0))
        ie5 = true;
    if (ns6) ns6 = false;
}


//Handle mouse location
document.onmousemove = mouseMove;
function mouseMove(e) {
    if (ns6) {
        mX = e.pageX;
        mY = e.pageY;
    }
    else if (ie5) {
        mX = window.event.clientX;
        mY = (document.documentElement.scrollTop + window.event.clientY);
    }
    else if (ie4) {
        mX = event.x;
        mY = event.y;
    }
}

//add no of months in date
Date.prototype.addMonths = function(n) {
    this.setMonth(this.getMonth() + n);
    return this;
}

//Check to see value is null or empty
function IsNullEmpt(val) {
    return (val == undefined || val == null || val.length == 0);
}


