﻿// Cross browser attach event function. For 'evt' pass a string value with the leading "on" omitted
// e.g. AttachEvent(window,'load',MyFunctionNameWithoutParenthesis,false);

function APAttachEvent(obj,evt,fnc){
	if (obj.addEventListener){
		obj.addEventListener(evt,fnc,false);
		return true;
    }
    if (obj.attachEvent) {
        return obj.attachEvent("on" + evt, fnc);
    }
    myAttachEvent(obj, evt, fnc);
    obj['on' + evt] = function() { myFireEvent(obj, evt) };
} 

//The following are for browsers like NS4 or IE5Mac which don't support either
//attachEvent or addEventListener
function myAttachEvent(obj,evt,fnc){
	if (!obj.myEvents) obj.myEvents={};
	if (!obj.myEvents[evt]) obj.myEvents[evt]=[];
	var evts = obj.myEvents[evt];
	evts[evts.length]=fnc;
}
function myFireEvent(obj,evt){
	if (!obj || !obj.myEvents || !obj.myEvents[evt]) return;
	var evts = obj.myEvents[evt];
	for (var i=0,len=evts.length;i<len;i++) evts[i]();
}

function HideElement(id) {
    var elem = document.getElementById(id);
    if (elem) {
        elem.style.display = "none";
    }
}

function HideElementIfEmpty(id, childTag) {
    var elem = document.getElementById(id);
    if (elem) {
        var childElems = elem.getElementsByTagName(childTag);
        if (childElems && childElems.length && childElems.length > 0) {
            // contains children with childTag, do nothin
        } else {
        // childTag does not exist
            elem.style.display = "none";
        }
    }       
}

String.prototype.format = function( text )
{
    //check if there are two arguments in the arguments list
    if ( arguments.length <= 1 )
    {
        //if there are not 2 or more arguments there’s nothing to replace
        //just return the original text
        return text;
    }
    //decrement to move to the second argument in the array
    var tokenCount = arguments.length - 2;
    for( var token = 0; token <= tokenCount; token++ )
    {
        //iterate through the tokens and replace their placeholders from the original text in order
        text = text.replace( new RegExp( "\\{" + token + "\\}", "gi" ),
                                                arguments[ token + 1 ] );
    }
    return text;
};

String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g,"");
}

function getParentByTagName(parentTagName, node)
{
    parentTagName = parentTagName.toLowerCase();
    var parent = node.parentNode;
    while(parent != null && parent.tagName.toLowerCase() != parentTagName)
    {
        parent = parent.parentNode;
    }
    return parent;
}

function GetCheckboxesForParent(parentNode) {
    var checkboxes = [];
    var count=0;
    if (parentNode) {
        var elems = parentNode.getElementsByTagName("input");
        if (elems != null && elems.length > 0) { 
            for (var i=0; i<elems.length; i++) {
                var elem = elems[i];
                if (elem.type.toLowerCase() == "checkbox") {
                    checkboxes[count++] = elem;
                }
            }
        }
    }
	return checkboxes;
}

function EscapeHtml(s) {
    if (s == null || s == "") {
        return s;
    }
    var ret = "";
    for (var i=0; i<s.length; i++) {
        var c = s.charAt(i);
        if (c == '<') {
            ret +=  '&lt;';
        } else if (c == '>') {
            ret +=  '&gt;';
        } else if (c == '"') {
            ret +=  '&quot;';
        } else {
            ret += c;
        }
    }
    return ret;
}

function GetCookie(name) {
    var argv = GetCookie.arguments;
    var argc = GetCookie.arguments.length;

    var isUnEscape = (argc > 1) ? argv[1] : false;
    var arg = name + "=";

    var alen = arg.length;

    var clen = document.cookie.length;

    var i = 0;

    while (i < clen) {

        var j = i + alen;

        if (document.cookie.substring(i, j) == arg) {
            var val = getCookieVal(j);
            if (isUnEscape) {
                return unescape(val);
            }
            return val;
        }
        i = document.cookie.indexOf(" ", i) + 1;

        if (i == 0) break;
    }
    return null;
}

function SetCookie(name, value) {
    var argv = SetCookie.arguments;

    var argc = SetCookie.arguments.length;

    var isEscape = (argc > 2) ? argv[2] : false;

    var path = (argc > 3) ? argv[3] : "/";
    /*
    var expires = (argc > 2) ? argv[2] : null;  

	var path = (argc > 3) ? argv[3] : null;  

	var domain = (argc > 4) ? argv[4] : null;  

	var secure = (argc > 5) ? argv[5] : false;  

	var cookieValue = name + "=" + escape (value) + 

	((expires == null) ? "" : ("; expires=" + expires.toGMTString())) + 

	((path == null) ? "" : ("; path=" + path)) +  

	((domain == null) ? "" : ("; domain=" + domain)) +    

	((secure == true) ? "; secure" : "");
    */
    var cookieValue = name + "=";
    if (isEscape) {
        cookieValue += escape(value);
    } else {
        cookieValue += value;
    }
    if (path != null && path != "") {
        cookieValue += "; path=" + path;
    }
    document.cookie = cookieValue;
    // alert(document.cookie);

}

// private function, don't use it
function getCookieVal(offset) {

    var endstr = document.cookie.indexOf(";", offset);

    if (endstr == -1) { endstr = document.cookie.length; }

    return document.cookie.substring(offset, endstr);

}

function SaveArrayToCookie(cookieName, myarray) {
    if (myarray && myarray.length > 0) {
        var cookieVal = '';
        for (var i = 0; i < myarray.length; i++) {
            cookieVal += "|" + escape(myarray[i]);
        }
        if (cookieVal != "") {
            cookieVal = cookieVal.substring(1);
        }
        SetCookie(cookieName, cookieVal, false);
    }
}

function RestoreArrayFromCookie(cookieName) {
    var cookieVal = GetCookie(cookieName, false);
    if (cookieVal != null && cookieVal != "") {
        var myarray = cookieVal.split("|");
        for (var i = 0; i < myarray.length; i++) {
            myarray[i] = unescape(myarray[i]);
        }
        return myarray;
    }
    return null;
}

function winPopup(url, windowName) {

    var args = winPopup.arguments;
    var win = "";
    if (args.length > 1) {
        win = windowName;
    }

    window.open(url, win, "toolbar=no,directories=no,menubar=no,scrollbars=yes,width=700,height=500,resizable=yes");
}

function NewPopup(url, windowName) {
    var args = NewPopup.arguments;
    var win = "";
    if (args.length > 1) {
        win = windowName;
    }
    window.open(url, win, "toolbar=no,directories=no,menubar=no,scrollbars=yes,width=800,height=500,resizable=yes");
}

function windowPopup0(url, width) {
    var args = windowPopup0.arguments;
    var win = (args.length > 2 ? args[2] : "");
    var mywin = window.open(url, win, "toolbar=no,directories=no,menubar=no,scrollbars=yes,width=" + width + ",height=500,resizable=yes");
    mywin.focus();
}

function LNJPSitePopup(url) {
    var width = (window.screen.width < 1024 ? 550 : 840);
    windowPopup0(url, width);
}

function isEmpty(s) {
    return (s == null || s == "");
}

function isNumeric(fval) {
    for (var i = 0; i < fval.length; i++) {
        var c = fval.charAt(i);
        if (!(c >= '0' && c <= '9')) {
            return false;
        }
    }
    return true;
}

function gotoUrl(path, queryStr) {
    var url = path;
    if (queryStr != null && queryStr != "") {
        url += "?" + queryStr.trim();
    }
    window.location.href = url;
}

/* query string */

function APQuerystring(qs) { // optionally pass a querystring to parse
    this.params = new Array();

    if (qs == null) {
        qs = location.search;
    }
    if (qs.length == 0 || qs == "?") {
        return;
    }
    if (qs.charAt(0) == '?') {
        qs = qs.substring(1);
    }
    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 pos = args[i].indexOf('=');
        if (pos > 0) {
            var key = args[i].substring(0, pos).toLowerCase();
            var val = "";
            if (pos + 1 < args[i].length) {
                val = args[i].substring(pos + 1);
            }
            if (this.params[key]) {
                this.params[key].push(val);
            } else {
                this.params[key] = [val];
            }
        }
    }
}

APQuerystring.prototype.get = function(key, default_) {
    var values = this.params[key.toLowerCase()];
    return (values != null) ? values[0] : default_;
}

APQuerystring.prototype.getValues = function(key) {
    var values = this.params[key.toLowerCase()];
    return values;
}

APQuerystring.prototype.contains = function(key) {
    var value = this.params[key.toLowerCase()];
    return (value != null);
}

APQuerystring.prototype.set = function(key, value) {
    this.params[key.toLowerCase()] = [value];
}

APQuerystring.prototype.toString = function() {
    var str = "";
    for (var key in this.params) {
        var values = this.params[key];
        if (values != null) {
            for (var i = 0; i < values.length; i++) {
                str += "&" + key + "=" + values[i];
            }
        }
    }
    if (str.length > 1) {
        str = str.substring(1);
    }
    return str;
}

function APParseDateStr(dateStr) { // dateStr = "yyyyMMddHHmmss"
    var year = parseInt(dateStr.substring(0, 4), 10);
    var month = parseInt(dateStr.substring(4, 6), 10);
    var day = parseInt(dateStr.substring(6, 8), 10);
    var hour = parseInt(dateStr.substring(8, 10), 10);
    var min = parseInt(dateStr.substring(10, 12), 10);
    var sec = parseInt(dateStr.substring(12, 14), 10);
    return new Date(year, month - 1, day, hour, min, sec);
}