﻿// JScript File
IE4 = document.all ? 1 : 0;
NS4 = document.layers ? 1 : 0;

ver = (IE4 || NS4) ? 1 : 0;



function setFocus(objId)
{
    obj = document.getElementById(objId);
    obj.focus();
}

function enableSearchCondition()
{
    if (form1.CanSearch.value == "False")
        return;
    
    var checkedBoxes = 0;
    idOfCheckboxes = new Array(9);
    idOfSearchConditions = new Array(9);
    
    initControls(idOfCheckboxes,idOfSearchConditions);
    
    //canDoSearch = 0;
    CanDoPickDate = 0;
    for (i=0; i<idOfCheckboxes.length; i++)
    {
        if (document.getElementById(idOfCheckboxes[i]).checked == true){ 
            if (document.getElementById(idOfCheckboxes[i]).id == "cbdatetoexpire")
                CanDoPickDate += 1;
            //canDoSearch += 1;
            document.getElementById(idOfSearchConditions[i]).disabled = false;
        }
        else 
            document.getElementById(idOfSearchConditions[i]).disabled = true;
    }
    
    //enableSearchAndPickButton(canDoSearch,CanDoPickDate);
    enableSearchAndPickButton(CanDoPickDate);
}

function initControls(enableSearchButton,idOfSearchConditions)
{
//    idOfCheckboxes = new Array(8);
    idOfCheckboxes[0] = "cbcardno";
    idOfCheckboxes[1] = "cbprintno";
    idOfCheckboxes[2] = "cblastname";
    idOfCheckboxes[3] = "cbfirstname";
    idOfCheckboxes[4] = "cbcardstatus";
    idOfCheckboxes[5] = "cbdepartment";
    idOfCheckboxes[6] = "cbcardtype";
    idOfCheckboxes[7] = "cbdatetoexpire";
    idOfCheckboxes[8] = "cbUserType";    
    
//    idOfSearchConditions = new Array(8);
    idOfSearchConditions[0] = "tbCardNo";
    idOfSearchConditions[1] = "tbPrintNo";
    idOfSearchConditions[2] = "tbLastName";
    idOfSearchConditions[3] = "tbFirstName";
    idOfSearchConditions[4] = "ddlCardStatus";
    idOfSearchConditions[5] = "ddlDepartment";
    idOfSearchConditions[6] = "ddlCardType";
    idOfSearchConditions[7] = "tbDateToExpire";
    idOfSearchConditions[8] = "ddlUserType";    
}

//function enableSearchAndPickButton(canDoSearch,CanDoPickDate)
function enableSearchAndPickButton(CanDoPickDate)
{
    if (CanDoPickDate >0)
    {
        form1.btnPicker.className = "btnActive";
        form1.btnPicker.src = "../Images/calendar.gif";
        form1.btnPicker.disabled = false;
    }
    else
    {
        form1.btnPicker.className = "btnInactive";        
        form1.btnPicker.src = "../Images/calendar_inactive.gif";
        form1.btnPicker.disabled = true;
    }
}

function setRadioButtons(RadioButton)
{
    var inputTags = document.getElementsByTagName("input");
    names = null;
    clickedRB = -1;
    checkedRB = -1;
    j = 0;
    for (i = 0; i < inputTags.length; i++)
    {
        if (inputTags[i].name.indexOf("CardIdGroup") != -1)
        {
            if (inputTags[i].name == RadioButton.name) clickedRB = i; //get the position in 'input' tag collection
            else if (inputTags[i].checked) checkedRB = i;  //get the positionr in 'input' tag collection
        }
    }
    if (clickedRB != -1) 
    {
        if (checkedRB != -1) inputTags[checkedRB].checked=false;
        RadioButton.checked=true;
    }
}

function isItemSelected(obj)
{
    var count = 0;
    var radios = document.all.tags("input");
    for (i = 0; i < radios.length; i ++)
    {
        if (radios[i].type == "radio" && radios[i].checked == true)
            count ++;
    }
    if (count <= 0) {
        event.cancelBubble = true;
        event.returnValue = false;
    }
}

function dbClick()
{
    var elem = event.srcElement;
    
    if (elem.tagName == "LABEL" && elem.htmlFor != "undefined")
    {
        viewCard(elem);
    }
}

function viewCard(elem)
{
    var rbId = elem.htmlFor;
    var rbCtrl = document.getElementById(rbId);
    if (rbCtrl == null)
        return;
        
    setRadioButtons(rbCtrl);
    
    form1.btnView.click();
}

// validate search conditions--textboxs in rightframe.aspx

function CheckNumberRange( valStr, minVal, maxVal)
{
    var numberRegExpr = /^\d+$/;
    if( !numberRegExpr.test(valStr)) return false;

    var valInt = parseInt(valStr);
    if( isNaN(valInt) ) return false;
    
    if( valInt < minVal || valInt > maxVal) return false;
    
    return true;
}

function valSearchCond()
{
    var ret = true;
    var msg = "";
    var cardNo = document.getElementById("tbCardNo");
    var printNo = document.getElementById("tbPrintNo");
    var lastName = document.getElementById("tbLastName");
    var firstName = document.getElementById("tbFirstName");
    var expireDate = document.getElementById("tbDateToExpire");
    
    if (cardNo.disabled == false)
    {
        //var regExp4CardNo = /^([1-9]{1}|[1-9][0-9]{1,8}|[1-3][0-9]{9}|[4][0-2][0-9][0-4][0-9][0-6][0-7][0-2][0-9][0-4])$|^(([1-9]{1}|[0-9]{2,9}|[1-3][0-9]{9}|[4][0-2][0-9][0-4][0-9][0-6][0-7][0-2][0-9][0-4])?,([0-9]{1,2}|1[0-9]{2}|2[0-5][0-4])?,([0-9]{1,4}|[1-5][0-9]{4}|[6][0-5][0-5][0-3][0-4])?)$|^(([1-9]{1}|[0-9]{2,9}|[1-3][0-9]{9}|[4][0-2][0-9][0-4][0-9][0-6][0-7][0-2][0-9][0-4])?[/]([0-9]{1,2}|1[0-9]{2}|2[0-5][0-4])?[/]([0-9]{1,4}|[1-5][0-9]{4}|[6][0-5][0-5][0-3][0-4])?)$/;
        // XX/XX/XX or XX,XX,XX or XX
        var regExpr1 = /^\d{1,10}[/]\d{0,3}[/]\d{1,5}$/ // XX/[XX]/XX
        var regExpr2 = /^\d{1,10}[,]\d{0,3}[,]\d{1,5}$/ // XX,[XX],XX
        var regExpr3 = /^\d{1,10}$/ // XX
        var a = cardNo.value.split('/');
        if (   
            (isNaN(a[0]) || a[0] > 4294967295 || a[0] < 0)
                ||
            (a.length == 2)
                ||
            (a.length == 3 && a[1] != '' && (isNaN(a[1]) || a[1] > 254 || a[1] < 0))
                ||
            (a.length == 3 && a[2] != '' && (isNaN(a[2]) || a[2] > 65534 || a[2] < 0)))
          {
            msg += "Card Number must be in the format 'cardcode/issue/facility' OR just 'cardcode'!\n cardcode: 1-4294967295\n issue: 0-254\n facility: 0-65534";
            ret = false;
            }
              
       /* if( !regExpr1.test(cardNo.value) && !regExpr2.test(cardNo.value) && !regExpr3.test(cardNo.value))
        {
            msg += "Card Number must be in the format 'cardcode/issue/facility' OR just 'cardcode'!\n cardcode: 1-4294967295\n issue: 0-254\n facility: 0-65534";
            ret = false;
        }*/
    }
    
    if (printNo.disabled == false)
    {
        //var regExp4PrintNo = /^[1-9]{1}$|^[1-9][0-9]{1,8}$|^[1-3][0-9]{9}$|^[4][0-2][0-9][0-4][0-9][0-6][0-7][0-2][0-9][0-4]$/;
        if (!CheckNumberRange(printNo.value, 1, 0xFFFFFFFF))
        {
            msg += "Print No must be from 1 to 4294967295!\n";
            ret = false;
        }
    }
    if (lastName.disabled == false)
    {
        var regExp4LastName = /^.{1,40}$/;
        
        if (!regExp4LastName.test(lastName.value))
        {
            msg += "Invalid LastName!\n(Must be from 1 to 40 chars)";
            ret = false;
        }
    }
    if (firstName.disabled == false)
    {
        var regExp4FirstName = /^.{1,40}$/;
        
        if (!regExp4FirstName.test(firstName.value))
        {
            msg += "Invalid FirstName!\n(Must be from 1 to 40 chars)";
            ret = false;
        }
    }
    if (expireDate.disabled == false)
    {
        //var regExp4ExpireDate = /^.{1,40}$/;
        //var regExp4ExpireDate = /^$|^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$/;
        var regExp4ExpireDate = /^$|^.{1,40}$/;
        if (!regExp4ExpireDate.test(expireDate.value))
        {
            msg += "Expire date must be a valid date or empty!";
            ret = false;
        }
    }
    
    if (ret == false)
    {
        event.cancelBubble = true;
        event.returnValue = false;
        alert(msg);
        
        return false;
    }

    formatChars();
    return true;
}

/*********The block below is used in changeWindowSize.aspx*********/
//the code below is not currently used.
function getDataFromModalDialog()
{
    var form = document.forms[0];
    var returnedData = new Array();
    for (i = 0; i < form.elements.length; i++)
    {
        if (form.elements[i].type == "text")
//            alert(form.elements[i].id);
            returnedData[form.elements[i].id] = form.elements[i].value;
    }
    return returnedData;
}
//function handleOk()
//{
//    doRegExp();
//    window.returnValue = getDataFromModalDialog();
//    self.close();
//}
function handleCancel()
{
    window.returnValue = "";
    self.close();
}
//function doRegExp()
//{
//    var regexp = new RegExp("\\d*");
//    var form = document.forms[0];
////    alert("test");
//    for (i = 0; i < form.elements.length; i++)
//    {
//        if (form.elements[i].type == "text")
//        {
////            alert(form.elements[i].id);
//alert(form.elements[i].value.search(regexp));
//            if (form.elements[i].value.search(regexp) == -1)
//                alert("Wrong data.");
//        }
//    }
//}
/*************End of block used in changeWindowSize.aspx************/

function setCursorType(obj)
{
    if (obj.disabled == "disabled" || obj.disabled == true)
        obj.className = "btnInactive";
    else
        obj.className = "btnActive";
}

// we have a convention that a Date input field is initially read-only, so it can only be initialised by the Calendar control. 
// To clear the field, a user must click right button. Once clicked, the field becomes editable.
function setBlankDateField()
{
    event.cancelBubble = true;
    event.returnValue = false;

    if (event.srcElement.disabled == false)
    {
        var controlId = event.srcElement.id;
        
        if (controlId == "tbDateToExpire" || 
            controlId == "tbDob" || 
            controlId == "tbValidFrom" || 
            controlId == "tbValidTo" || 
            controlId == "tbFALDateFrom" || 
            controlId == "tbFALDateEnd")
        {
            //var control = document.getElementById(controlId);
            //control.value = "";
            event.srcElement.value = "";
        }
    }
}
//setWindowAttrib:  attempt to open a new window with customized attributes when a hyperlink in the page (search page) click
function setWindowAttrib(e)
{
	var oSourceElement = (document.all?window.event.srcElement:e.target);
	var strQuery = "";
	var newwin;
	var windowSetting = "location=no, menubar=no, resizable=yes, status=yes, scrollbars=yes,left=0,top=0,width=" + screen.availWidth + ",height=" + screen.availHeight;
	
    // Check element type, if not a hyperlink do nothing
    if (oSourceElement.href && oSourceElement.href.indexOf("CardDetails.aspx?")!= -1)
    {
        strQuery = "../" + oSourceElement.href.substring(oSourceElement.href.indexOf("CardDetails.aspx?"));
        newwin = window.open(strQuery,'_blank',windowSetting);
        event.returnValue = false;                
    }
}

function getReportTemplateDesc()
{
    //clear current value
        var desc;
        desc = document.getElementById("dlReportTemplates").value;

        switch (desc)
        {
            case "Card Access Info":
                document.getElementById("tbTemplateDesc").value = "Detaled list of readers, floors and timezones in the card's access level confguration";
                //this.tbTemplateDesc.Text = "Detaled list of readers, floors and timezones in the card's access level confguration";
                break;
            case "Card Access List":
                document.getElementById("tbTemplateDesc").value = "Card status, Readers Access Template name and Floors Access Template name";
                //this.tbTemplateDesc.Text = "Card status, Readers Access Template name and Floors Access Template name";
                break;
            case "Card Contact":
                document.getElementById("tbTemplateDesc").value = "Cardholder contact information";
                //this.tbTemplateDesc.Text = "Cardholder contact information";
                break;
            case "Card Modified":
                document.getElementById("tbTemplateDesc").value = "Card status and last modification details";
                //this.tbTemplateDesc.Text = "Card status and last modification details";
                break;
            default:
                document.getElementById("tbTemplateDesc").value = "Cardholder details";
                //this.tbTemplateDesc.Text = "Cardholder details";
                break;
        }
        return;
}

function getPageName()
{
    if (top.frames.length == 1) return null;
    
    var doc = top.frames(2).document;
    if (doc == null) return null;
    
    var page;
    var indexOfQMark = doc.URL.indexOf("?"); //The positon of question mark in uri.
    
    if (indexOfQMark == -1)
        return (page = doc.URL.substr(doc.URL.lastIndexOf("/") + 1));
    
    var webPath;
    webPath = doc.URL.substr(0, indexOfQMark);
    return (page = webPath.substr(webPath.lastIndexOf("/") + 1));
}

//escape all UTF characters (mainly for angle brackets) to uri format
function formatChars()
{
    window.onerror = handleError4FormatChars;
    
    var doc = null;
    if (top.frames.length != 1)
    {
        if (top.frames(2) == null) return;
        doc = top.frames(2).document;
        if (doc == null) return;
        if (doc.form1 == null) return;
    }
    
    switch (page = getPageName())
    {
        case "RightFrame.aspx" :
            doc.form1.tbLastName.value = escape(doc.form1.tbLastName.value);
            doc.form1.tbFirstName.value = escape(doc.form1.tbFirstName.value);
            break;
        case "CardDetails_MiddleFrame.aspx" :
        //For personal tag
            doc.form1.tbLastName.value = escape(doc.form1.tbLastName.value);
            doc.form1.tbFirstName.value = escape(doc.form1.tbFirstName.value);
            doc.form1.tbPersonalId.value = escape(doc.form1.tbPersonalId.value);
            doc.form1.tbHomePhone.value = escape(doc.form1.tbHomePhone.value);
            doc.form1.tbWorkPhone.value = escape(doc.form1.tbWorkPhone.value);
            doc.form1.tbExtension.value = escape(doc.form1.tbExtension.value);
            doc.form1.tbStreet.value = escape(doc.form1.tbStreet.value);
            doc.form1.tbCity.value = escape(doc.form1.tbCity.value);
            doc.form1.tbState.value = escape(doc.form1.tbState.value);
            doc.form1.tbZip.value = escape(doc.form1.tbZip.value);
            
        //All input in card deatails tah are number type, and there are validations defined already.
            
        //For user defined tag
            doc.form1.tbUserDef2.value = escape(doc.form1.tbUserDef2.value);
            doc.form1.tbUserDef3.value = escape(doc.form1.tbUserDef3.value);
            doc.form1.tbUserDef4.value = escape(doc.form1.tbUserDef4.value);
            doc.form1.tbUserDef5.value = escape(doc.form1.tbUserDef5.value);
            doc.form1.tbUserDef6.value = escape(doc.form1.tbUserDef6.value);
            doc.form1.tbUserDef7.value = escape(doc.form1.tbUserDef7.value);
            doc.form1.tbUserDef8.value = escape(doc.form1.tbUserDef8.value);
            doc.form1.tbUserDef9.value = escape(doc.form1.tbUserDef9.value);
            doc.form1.tbUserDef10.value = escape(doc.form1.tbUserDef10.value);
            doc.form1.tbUserDef11.value = escape(doc.form1.tbUserDef11.value);
            doc.form1.tbUserDef12.value = escape(doc.form1.tbUserDef12.value);
            doc.form1.tbUserDef13.value = escape(doc.form1.tbUserDef13.value);
            doc.form1.tbUserDef14.value = escape(doc.form1.tbUserDef14.value);
            doc.form1.tbUserDef15.value = escape(doc.form1.tbUserDef15.value);
            doc.form1.tbUserDef16.value = escape(doc.form1.tbUserDef16.value);
            break;
        case "Report.aspx" :
            doc.form1.tbLastName.value = escape(doc.form1.tbLastName.value);
            doc.form1.tbFirstName.value = escape(doc.form1.tbFirstName.value);
            doc.form1.tbReaderName.value = escape(doc.form1.tbReaderName.value);
            doc.form1.tbSelectedCards.value = "";
            break;
        default : //loginpage
            var name, pwd = null;
            
            if ((name = document.getElementById("tbUserName")) == null) return;
            if ((pwd = document.getElementById("tbPwd")) == null) return;
            
            name.value = escape(name.value);
            pwd.value = escape(pwd.value);
            break;
    }
    window.error = null;
}

//unescape all characters back to UTF format
function restoreChars()
{
    window.onerror = handleError4RestoreChars;
    
    var doc = top.frames(2).document;
    if (doc == null) return;
    if (doc.form1 == null) return;
    
    switch (page = getPageName())
    {
        case "RightFrame.aspx" :
            doc.form1.tbLastName.value = unescape(doc.form1.tbLastName.value);
            doc.form1.tbFirstName.value = unescape(doc.form1.tbFirstName.value);
            break;
        case "CardDetails_MiddleFrame.aspx" :
        //For personal tag
            doc.form1.tbLastName.value = unescape(doc.form1.tbLastName.value);
            doc.form1.tbFirstName.value = unescape(doc.form1.tbFirstName.value);
            doc.form1.tbPersonalId.value = unescape(doc.form1.tbPersonalId.value);
            doc.form1.tbHomePhone.value = unescape(doc.form1.tbHomePhone.value);
            doc.form1.tbWorkPhone.value = unescape(doc.form1.tbWorkPhone.value);
            doc.form1.tbExtension.value = unescape(doc.form1.tbExtension.value);
            doc.form1.tbStreet.value = unescape(doc.form1.tbStreet.value);
            doc.form1.tbCity.value = unescape(doc.form1.tbCity.value);
            doc.form1.tbState.value = unescape(doc.form1.tbState.value);
            doc.form1.tbZip.value = unescape(doc.form1.tbZip.value);
            
        //All input in card deatails tah are number type, and there are validations defined already.
            
        //For user defined tag
            doc.form1.tbUserDef2.value = unescape(doc.form1.tbUserDef2.value);
            doc.form1.tbUserDef3.value = unescape(doc.form1.tbUserDef3.value);
            doc.form1.tbUserDef4.value = unescape(doc.form1.tbUserDef4.value);
            doc.form1.tbUserDef5.value = unescape(doc.form1.tbUserDef5.value);
            doc.form1.tbUserDef6.value = unescape(doc.form1.tbUserDef6.value);
            doc.form1.tbUserDef7.value = unescape(doc.form1.tbUserDef7.value);
            doc.form1.tbUserDef8.value = unescape(doc.form1.tbUserDef8.value);
            doc.form1.tbUserDef9.value = unescape(doc.form1.tbUserDef9.value);
            doc.form1.tbUserDef10.value = unescape(doc.form1.tbUserDef10.value);
            doc.form1.tbUserDef11.value = unescape(doc.form1.tbUserDef11.value);
            doc.form1.tbUserDef12.value = unescape(doc.form1.tbUserDef12.value);
            doc.form1.tbUserDef13.value = unescape(doc.form1.tbUserDef13.value);
            doc.form1.tbUserDef14.value = unescape(doc.form1.tbUserDef14.value);
            doc.form1.tbUserDef15.value = unescape(doc.form1.tbUserDef15.value);
            doc.form1.tbUserDef16.value = unescape(doc.form1.tbUserDef16.value);
            break;
        case "Report.aspx" :
            doc.form1.tbLastName.value = unescape(doc.form1.tbLastName.value);
            doc.form1.tbFirstName.value = unescape(doc.form1.tbFirstName.value);
            doc.form1.tbReaderName.value = unescape(doc.form1.tbReaderName.value);
            doc.form1.tbSelectedCards.value = unescape(doc.form1.tbSelectedCards.value);
            break;
    }
    
    window.onerror = null;
}
function displayTooltip(obj)
{
    showTooltip(obj.id,'block');
}
function hideTooltip(obj)
{
    showTooltip(obj.id,'none');
}
function showTooltip(controlId,mode)
{
    var frame = window.top.frames(2).document.getElementById(controlId + "Tooltip");
    var doc;
    var msg;
    
    if (frame.contentWindow)
        doc = frame.contentWindow.document;
    else
        doc = frame.document;
        
    var top = window.top.frames(2).document.body.clientHeight - window.top.frames(0).document.body.clientHeight + frame.style.pixelHeight;
    var left = window.top.frames(2).document.body.clientWidth - frame.style.pixelWidth;
    
    if (top < 0)
        top = 0;
    if (left < 0)
        left = 0;
    
    frame.style.pixelLeft = left;
    frame.style.pixelTop = top;

    if (controlId == "transType")
    {
        msg = "Click on desired Transaction Type to select.  For multiple selections, use 'Ctrl' or 'Shift' keys."
    }
    else
    {
        msg = "Click on desired Transaction Status to select.  For multiple selections, use 'Ctrl' or 'Shift' keys."
    }
    var htmlText = "<html><body style='Margin: 0px;background-color:#FFFFE1;border-width: 1px;";
    htmlText += "border-color:black'><form><table width=100% height=100% style='font-size: 8pt; font-family: Verdana'><tr><td>" + msg + "</td>";
    htmlText += "</tr></table></form></body></html>";
    
    doc.write(htmlText);
    frame.style.display = mode;
}

function handleError4RestoreChars(msg,uri,ln)
{
//    alert("IE script engine error for unescaping charactes, please try again !");
    event.cancelBubble = true;
    event.returnValue = false;
}
function handleError4FormatChars(msg,uri,ln)
{
//    alert("IE script engine error for escaping characters, please try again !");
    event.cancelBubble = true;
    event.returnValue = false;
}