﻿var jsPageIndex = 1;
var jsPageSize = -1;
var jsSortBy = "";
var jsPageSort;
var jsMasterSort = ["RowNumber", "PodCount", "PageCount", "PageIndex", "TrackingRef", "EuropaRef", "DeliveryDate", "IsTemplate"];
var jsSortDirection = "ASC";
var jsASC = "ASC";
var jsDESC = "DESC";
var arrayOfRolloverClasses = new Array();
var activeRow = false;
var arrImages = "";
var jsSearchType = -1;
var jsTrackingRefId = 4;
var jsEuropaRefId = 5;
var jsDeliveryDate = 6;

function FailCallBack(result) {
    alert(result.get_message());
}

function ShowErrorDiv(msg) {
    $get("errDiv").innerHTML = msg;
    $get("errDiv").style.display = "block";
}

function HideErrorDiv() {
    $get("errDiv").innerHTML = "";
    $get("errDiv").style.display = "none";
}

function ToggleAdvanced() {
    if ($get("searchDiv").style.display == "none") { $get("searchDiv").style.display = "block"; }
    else { $get("searchDiv").style.display = "none"; }
}

function GetReminder() {
    alert("Please contact technical support for more details.");
}

function Loading() {
    $get("processing").innerHTML = "<span>Loading...</span>";
}
function Loaded() {
    $get("processing").innerHTML = "<span>&nbsp;</span>";
}

/*Hello World*/
function Hello() {
    Loading();
    try { PageMethods.HelloWorldPM(SuccessCallBack); }
    catch (e) { alert(e.message); }
}
function SuccessCallBack(result) {
    var resultObject = eval(result)
    Loaded();
    $get('results').innerHTML = "The Message is:" + resultObject.Message + " The message was created on " + resultObject.Time;
    $get("results").style.display = "block";
}

function DBConnect() {
    Loading();
    try { PageMethods.DBConnectPM(DBConnectSuccessCallBack); }
    catch (e) { alert(e.message); }
}
function DBConnectSuccessCallBack(result) {
    var pass = JSON.parse(result);
    Loaded();
    $get("processing").innerHTML = pass.Msg;
}

/* Set Paging Size */
function SetPagingSize(sz) {
    try {
        if (jsPageSize == -1) { PageMethods.DefaultPageSizePM(SetPagingSizeSuccessCallback, FailCallBack); }
        else { PageMethods.SetPageSizePM(sz, SetPagingSizeSuccessCallback, FailCallBack); }
    }
    catch (e) { alert("Error: SetPagingSize >> " + e.message); }
}
function SetPagingSizeSuccessCallback(result) {
    var html = JSON.parse(result);
    if (html.Id != "1") { $get("PagingItems").innerHTML = html.Msg; }
    else {
        $get("PagingItems").innerHTML = "<ul>" + html.Body + "</ul>";
        jsPageSize = html.Msg;
        jsPageIndex = 1;
    }
}

/* Sort Direction */
function SortDirection(id) {
    SetSortDirection(jsSortDirection, id);
}
function SetSortDirection(drt, id) {
    try {
        var criteria = new Object();
        if (drt == jsASC) { criteria.Direction = jsDESC; }
        else { criteria.Direction = jsASC; }
        criteria.SortColumn = id;
        PageMethods.SetSortDirectionPM(JSON.stringify(criteria), SetSortDirectionSuccessCallback, FailCallBack);
    }
    catch (e) { alert("Error: SetSortDirection >> " + e.message); }
}
function SetSortDirectionSuccessCallback(result) {
    var pass = JSON.parse(result);
    jsSortDirection = pass.Direction;
    if (pass.SortColumn != "NotSet") {
        SortBy(pass.SortColumn);
    }
}
function SortBy(id) {
    jsPageSort = id;
    if (jsSearchType == 0) { DoSearch(); }
    else { DoAdvSearch(); }
}
function SetDirectionImage() {
    var id = jsSortDirection.toLowerCase();
    var src = $get(jsPageSort).src;
    $get(jsPageSort).title = "Sort Direction " + jsSortDirection;
    if (src.indexOf("desc.gif") > 0) { $get(jsPageSort).src = src.replace("desc", id); }
    else if (src.indexOf("asc.gif") > 0) { $get(jsPageSort).src = src.replace("asc", id); }
    else { $get(jsPageSort).src = src.replace("bg", id); }
}

/* Login */
function DoLogin() {
    var logn = new Object();
    logn.Account = $get("account").value;
    logn.Password = $get("passkey").value;
    var criteria = { criteria: logn };
    try { PageMethods.DoLoginPM(JSON.stringify(logn), DoLoginSuccessCallBack, FailCallBack); }
    catch (e) { alert(e.message); }

}
function DoLoginSuccessCallBack(result) {
    var pass = JSON.parse(result);
    if (pass.Status == "true") { submitForm(); }
    else { ShowErrorDiv(pass.Msg); }
}

/* Unlock */
function doUnlock(id) {
    try { PageMethods.DoUnlockPM(JSON.stringify(id), doUnlockSuccessCallBack, FailCallBack); }
    catch (e) { alert(e.message); }

}
function doUnlockSuccessCallBack(result) {
    var pass = JSON.parse(result);
    if (pass.Status == "true") {
        $(eval("row" + pass.Msg + ";")).hide("slow");
        /*var count = $("lockCount").innerHTML;
        count -= 1;
        if (count < 0) { count = 0; }
        $(eval("lockCount" + ";")).innerHTML = count;*/
    }
    else { ShowErrorDiv(pass.Msg); }
}

/*Search Paging navigation*/
function MoveNext() {
    Loading();
    jsPageIndex++;
    if (jsPageIndex < 1) { jsPageIndex = 1; }
    SearchBank();
}
function MoveLast(lst) {
    Loading();
    jsPageIndex = lst;
    SearchBank();
}
function MovePrev() {
    Loading();
    jsPageIndex--;
    if (jsPageIndex < 1) { jsPageIndex = 1; }
    SearchBank();
}
function MoveFirst() {
    Loading();
    jsPageIndex = 1;
    SearchBank();
}
function MoveToPage() {
    if ($get("navigateto").value != "") {
        Loading();
        jsPageIndex = $get("navigateto").value;
        SearchBank();
    }
}

function PreviewPod(mg, eu) {
    window.open("Preview.aspx?ref=" + mg + "&eur=" + eu, "", "width=850,height=800,status=no,resizable=no,scrollbars=yes,top=200,left=300");
}


/* Search */
function StartSearch() {
    jsSearchType = 0;
    jsPageIndex = 1;
    DoSearch();
}
function StartAdvSearch() {
    jsSearchType = 0;
    jsPageIndex = 1;
    DoAdvSearch();
}

/* Adv Search */
function DoAdvSearch() {
    Loading();
    jsSearchType = 1;
    if (jsPageSort == null || jsPageSort == "") { jsPageSort = jsMasterSort[4]; }
    jsSortBy = jsPageSort;
    $get("trackingRef").value = "";
    $get("europaRef").value = "";
    $get(dtFrom).value = "";
    $get(dtTo).value = "";
    if (jsPageSize == -1) { jsPageSize = 10; }
    var criteria = new Object();
    criteria.SortBy = jsSortBy;
    criteria.PageIndex = jsPageIndex;
    criteria.PageSize = jsPageSize;
    criteria.SortDirection = jsSortDirection;
    try { PageMethods.DoSearchPM(JSON.stringify(criteria), SearchSuccessCallBack, FailCallBack); }
    catch (e) { alert(e.message); }
}
function DoSearch() {
    Loading();
    if ($get("trackingRef").value == "" && $get(dtFrom).value == "" && $get(dtTo).value == "" && $get("europaRef").value == "") {
        $get("results").innerHTML = "<span>Please set criteria to base search on...</span>";
        Loaded();
    }
    else {
        if (jsPageSort == null || jsPageSort == "") { jsPageSort = jsMasterSort[4]; }
        jsSortBy = jsPageSort;
        if (jsPageSize == -1) { jsPageSize = 10; }
        SearchBank();
    }
}
function SearchBank() {
    var criteria = new Object();
    criteria.TrackingRef = $get("trackingRef").value;
    criteria.IntRef = $get("europaRef").value;
    criteria.StartDate = $get(dtFrom).value;
    criteria.EndDate = $get(dtTo).value;
    criteria.SortBy = jsSortBy;
    criteria.SortDirection = jsSortDirection;
    criteria.PageIndex = jsPageIndex;
    criteria.PageSize = jsPageSize;
    try { PageMethods.DoSearchPM(JSON.stringify(criteria), SearchSuccessCallBack, FailCallBack); }
    catch (e) { alert(e.message); }
}
function SearchSuccessCallBack(result) {

    var pass;
    try { pass = JSON.parse(result); }
    catch (e) { pass = eval("(" + result + ");"); }
    if (pass.Id != "1") {
        $get("processing").innerHTML = "<span>No result found...</span>";
        $get("results").innerHTML = pass.Msg;
    }
    else {
        Loaded();
        $get("results").innerHTML = BuildHTML(result);
        SetDirectionImage();
        addGridRowRolloverEffect("tblSearchTable", "GridRowHighLightOn");
    }
}


/*HTML Table Builder*/
function BuildHTML(res) {
    var html = JSON.parse(res);
    var dt = JSON.parse(html.PayLoad);
    var tbl = "";
    if (html.Id != "1") {
        tbl = "<table id=\"tblSearchTable\" class=\"Grid\">";
        tbl += "<tr id=\"noData\"><td>" + html.Msg + "</td></tr>";
        tbl += "</table>";
    }
    else {
        if (dt.RowCount == undefined) {
            tbl = "<table id=\"tblSearchTable\" class=\"Grid\">";
            tbl += "<tr id=\"noData\"><td>Errors occurred: No data found.</td></tr>";
            tbl += "</table>";
        }
        else if (dt.RowCount > 0) {
            $get("processing").innerHTML = html.Caption;
            tbl = "<table id=\"tblSearchTable\" class=\"Grid\">";
            //Navigation
            tbl += "<thead class=\"GridHeader\">";
            tbl += "<td align=\"Center\" colspan=\"" + dt.ColumnCount + "\">";
            if (html.PayLoadCaption != "") { tbl += html.PayLoadCaption + " - (" + html.Caption + ")<br />"; }
            else { tbl += "(" + html.Caption + ")<br />"; }
            tbl += html.Header;
            tbl += "</td>";
            tbl += "</thead>";
            //Column Header
            tbl += "<thead class=\"GridHeader\">";
            for (var y = jsTrackingRefId; y <= dt.ColumnCount - 2; y++) {
                tbl += "<td align=\"Center\"><a href=\"javascript:void(0)\" onclick=\"SortBy('" + dt.Columns[y] + "')\">" + dt.Columns[y] + "</a>&nbsp;<a href=\"javascript:void(0)\" onclick=\"SortDirection('" + dt.Columns[y] + "')\" title=\"Sort Direction\"><img id=\"" + dt.Columns[y] + "\" src=\"App_Themes/Default/Images/bg.gif\" alt=\"Sort Direction\"/></a></td>";
            }
            tbl += "</thead>";
            //Payload
            var rSty, rLnk;
            for (var x = 0; x < dt.RowCount; x++) {
                if (dt.Rows[x].TrackingRef != "null") {
                    rLnk = " onclick=\"PreviewPod('" + eval("dt.Rows[x]." + dt.Columns[jsTrackingRefId] + ";") + "','" + eval("dt.Rows[x]." + dt.Columns[jsEuropaRefId] + ";") + "')\" title=\"Click here to view the POD(s) attached to JobRef " + eval("dt.Rows[x]." + dt.Columns[5] + ";") + "\">";
                    rSty = " class=\"AltGridRow bold\"";
                    if (x % 2 == 1) { rSty = " class=\"GridRow bold\""; }
                    tbl += "<tr " + rSty + rLnk;
                    for (var p = jsTrackingRefId; p <= dt.ColumnCount - 2; p++) {
                        if (dt.Columns[p].indexOf("Date") > -1) { tbl += "<td nowrap class=\"center\">"; }
                        else { tbl += "<td>"; }
                        if (dt.Columns[p] != "") { tbl += IsNullField(eval("dt.Rows[x]." + dt.Columns[p] + ";")); }
                        tbl += "</td>";
                    }
                    tbl += "</tr>";
                }
            }
            tbl += "<tr id=\"Gridfooter\" class=\"GridHeader\">";
            tbl += "<td align=\"Center\" colspan=\"" + dt.ColumnCount + "\">";
            tbl += html.Footer;
            if (html.PayLoadCaption != "") { tbl += "<br />" + html.PayLoadCaption + " - (" + html.Caption + ")"; }
            else { tbl += "<br />(" + html.Caption + ")"; }
            tbl += "</td>";
            tbl += "</tr>";
            tbl += "</table>";
        }
    }
    return tbl;
}

function IsNullField(data) {
    if (data == null || data == "null") {
        return "-";
    }
    return data.toString().toUpperCase();
}

/* Collapsable Panels */
function doToggle(dst, cpe) {
    var bState = !getPanelState(dst);
    try { PageMethods.CachePanelStatePM(cpe, bState, SuccessToggleState); }
    catch (e) { alert(e.message); }
}
function SuccessToggleState(res) { }

function getPanelState(cpnl) {
    var currentBehavior = null;
    /*Get all the Behaviors Present in the Page*/
    var allBehaviors = Sys.Application.getComponents();
    /*Loop Through them*/
    for (var loopIndex = 0; loopIndex < allBehaviors.length; loopIndex++) {
        currentBehavior = allBehaviors[loopIndex];
        /*For each behavior , check the Behavior Name*/
        if (currentBehavior.get_name() === "CollapsiblePanelBehavior") {
            /*If its of type CollapsiblePanelBehavior and the collapseControlId matches*/
            if (currentBehavior._collapseControlID == cpnl) {
                return currentBehavior._collapsed;
            }
        }
    }
    return false;
}

/*Function To Collapse all CollapsiblePanels on a page , if not already collapsed.*/
function collapseAllCollapsiblePanels() {
    var currentBehavior = null;
    /*1) Find all instances of the CollapsiblePanel Behavior on the page.*/
    /*Get all the Behaviors Present in the Page*/
    var allBehaviors = Sys.Application.getComponents();
    /*Loop Through them*/
    for (var loopIndex = 0; loopIndex < allBehaviors.length; loopIndex++) {
        currentBehavior = allBehaviors[loopIndex];
        /*For each behavior , check the Behavior Name*/
        if (currentBehavior.get_name() === "CollapsiblePanelBehavior") {
            /*If its of type CollapsiblePanelBehavior*/
            /*3) Check if the Panel is Collapsed by calling the get_Collapsed() function.*/
            if (!currentBehavior.get_Collapsed()) {
                /*4) If not collapsed , call the collapsePanel Function to collapse the Panel.*/
                currentBehavior.collapsePanel();
            }
        }
    }
}

/* Email Validation */
function validateEmail(eml) {
    var invalidChars = '\/\'\\ ";:?!()[]\{\}^|';
    var msgs = new Array(10);
    msgs[0] = "Email address contains invalid character(s)";
    msgs[1] = "Email address contains non ascii character(s).";
    msgs[2] = "Email address must contain an @";
    msgs[3] = "Email address cannot start with @";
    msgs[4] = "Email address can only contain one @";
    msgs[5] = "Email address must contain a period in the domain name";
    msgs[6] = "A '.' must not immediately follow @";
    msgs[7] = "A '.' must not immediately precede @";
    msgs[8] = "A '.' cannot start an address";
    msgs[9] = "Invalid characters '..'";
    msgs[10] = "Invalid primary domain detected";
    var iErr = -1;
    for (i = 0; i < invalidChars.length; i++) {
        if (eml.indexOf(invalidChars.charAt(i), 0) > -1) {
            ShowErrorDiv(msgs[0]);
            return false;
        }
    }
    for (i = 0; i < eml.length; i++) {
        if (eml.charCodeAt(i) > 127) {
            ShowErrorDiv(msgs[1]);
            return false;
        }
    }
    var apos = eml.indexOf("@", 0);
    if (apos == -1) { iErr = 2; }
    else if (apos == 0) { iErr = 3; }
    else if (eml.indexOf("@", apos + 1) > -1) { iErr = 4; }
    else if (eml.indexOf(".", apos) == -1) { iErr = 5; }
    else if (eml.indexOf("@.", 0) != -1) { iErr = 6; }
    else if (eml.indexOf(".@", 0) != -1) { iErr = 7; }
    else if (eml.indexOf(".", 0) == 0) { iErr = 8; }
    else if (eml.indexOf("..", 0) != -1) { iErr = 9; }
    var suffix = eml.substring(eml.lastIndexOf('.') + 1);
    if (suffix.length != 2 && suffix != "com" && suffix != "net" && suffix != "org" && suffix != "edu" && suffix != "int" && suffix != "mil" && suffix != "gov" & suffix != "arpa" && suffix != "biz" && suffix != "aero" && suffix != "name" && suffix != "coop" && suffix != "info" && suffix != "pro" && suffix != "museum") {
        iErr = 10;
    }
    if (iErr == -1) { return true; }
    else {
        ShowErrorDiv(msgs[iErr]);
        return false;
    }
}

/*Table row highlighter*/
function highlightTableRow() {
    var tableObj = this.parentNode;
    if (tableObj.tagName != 'TABLE') tableObj = tableObj.parentNode;
    if (this != activeRow) {
        this.setAttribute('origCl', this.className);
        this.origCl = this.className;
    }
    this.className = arrayOfRolloverClasses[tableObj.id];
    activeRow = this;
}

function resetRowStyle() {
    var tableObj = this.parentNode;
    if (tableObj.tagName != 'TABLE') tableObj = tableObj.parentNode;
    var origCl = this.getAttribute('origCl');
    if (!origCl) origCl = this.origCl;
    this.className = origCl;
}

function addGridRowRolloverEffect(tableId, whichClass) {
    arrayOfRolloverClasses[tableId] = whichClass;
    var tableObj = $get(tableId);
    var tBody = tableObj.getElementsByTagName('TBODY');
    var rows;
    if (tBody) { rows = tBody[0].getElementsByTagName('TR'); }
    else { rows = tableObj.getElementsByTagName('TR'); }
    for (var no = 0; no < rows.length; no++) {
        if (rows[no].id == "") {
            rows[no].onmouseover = highlightTableRow;
            rows[no].onmouseout = resetRowStyle;
        }
    }
}

