﻿/*
Author:Samson zhou
Description:common js library.
Create Date:Feb 22,2011
*/
var lurl = window.location.href;

//get url per single arguments 
function getArgsFromHref(shref, sArgName) {
    var args = shref.split("?");
    var retval = "";
    if (args[0] == shref) { return ''; }
    var str = args[1];
    args = str.split("&");
    for (var i = 0; i < args.length; i++) {
        str = args[i];
        var arg = str.split("=");
        if (arg.length <= 1) continue;
        if (arg[0] == sArgName) retval = arg[1];
    }
    if (retval.contains('#')) { retval = retval.replace('#', ''); }
    return retval;
}

//String startwith function
String.prototype.startwith = function (element) {
    var l = element.length;
    if (this.length > 0 && l > 0) {
        if (this.substring(0, l) == element) { return true; }
    }
    return false;
}
//String contains funcction 
String.prototype.contains = function (element) {
    if (this.length > 0 && element.length > 0) {
        if (this.indexOf(element) != -1) {
            return true;
        }
    }
    return false;
}
//String endwith function
String.prototype.endwith = function (element) {
    if (this.length > 0 && element.length > 0) {
        if (this.substring(this.length - element.length) == element) {
            return true;
        }
    }
    return false;
}
// string.trim
String.prototype.trim = function () {
    return this.replace(/(^\s*)|(\s*$)/g, "");
}
String.prototype.ltrim = function () {
    return this.replace(/(^\s*)/g, "");
}
String.prototype.rtrim = function () {
    return this.replace(/(\s*$)/g, "");
}
String.prototype.isdouble = function () {
    var newp = /^(-|\+)?\d+(\.\d+)?$/;
    return newp.test(this);
}
String.prototype.trimzero = function () {
    var a = this.toString().replace(/(^(-|\+)?\d*\.\d*?)(0*$)/, "$1");
    if (a.endwith('.') == true) {
        a = a.replace(".", "");
    }
    return a;
}
//filter the string inputing.
function htmltoTextSplit(s) {
    if (s != '' && s != null) {
        if (s.indexOf("'") != -1) {
            var regs = new RegExp("\'", "gi");
            s = s.replace(regs, "&acute;");
        }
        if (s.indexOf("\\") != -1) {
            s = s.replace(/\\/g, "&#47;");
        }
        if (s.indexOf("\"") != -1) {
            var rga = new RegExp("\"", "gi");
            s=s.replace(rga,"\\\"");
        }
        return s;
    } else { return ''; }
}
//show error information check the string if startwith error
String.prototype.showerror = function () {
    return this.startwith("error:");
}
//filter the notice suffix
String.prototype.noticemsg = function (bol) {
    if (bol == true) {
        return this.substring(6);
    } else {
        return this.substring(3);
    }
}
String.prototype.left = function (l) {
    if (this.length > l) {
        return this.substring(0, l) + '...';
    }
    return this;
}
//whether is int charactor
String.prototype.isint = function () {
    if (this.length < 1) { return false; }
    if (isNaN(this)) { return false; }
    if (parseInt(this, 10) < 0) { return false; }
    if (parseFloat(this) > parseInt(this, 10)) { return false; }
    return true;
}
function isint(v) {
    if (v.length < 1) { return false; }
    if (isNaN(v)) { return false; }
    if (parseInt(v, 10) < 0) { return false; }
    if (parseFloat(v) > parseInt(v, 10)) { return false; }
    return true;
}
//get data list
function recordlist(url, data, useloading, loadingspan, allowpage, pageurl, pagedata, p, callback, pagecallback, isasyn) {
    $.ajax({
        type: "POST",
        url: url,
        dataType: "json",
        async: (isasyn == null ? false : isasyn),
        beforeSend: function (xhr) {
            if (useloading == true) { $(loadingspan).html(""); }
        },
        complete: function () {
            if (useloading == true) { $(loadingspan).html(''); }
        },
        contentType: "application/json",
        data: '{' + data + '}',
        success: function (data, ex_s) {
            var s = data.d;
            if (s.showerror() == true) {
                jAlert(s.noticemsg(true), '操作失败'); return;
            } else {
                if (callback) {
                    callback(s);
                }
                if (p == 0 && allowpage == true) {
                    //paging information 
                    $.ajax({
                        type: "POST",
                        url: pageurl,
                        data: '{' + pagedata + '}',
                        contentType: "application/json",
                        dataType: "json",
                        success: function (data, ex_s) {
                            var m = data.d;
                            var c = 0;
                            if (m.showerror() == false) {
                                c = m.noticemsg(false);
                            }
                            $("#counter").html('共有符合条件数据' + c + '条');
                            $("#Pagination").pagination(c, {
                                callback: function (page_id, jp) {
                                    if (pagecallback) { pagecallback(page_id); }
                                },
                                prev_text: '« Previous',
                                next_text: 'Next »',
                                items_per_page: 13,
                                num_display_entries: 6,
                                current_page: p,
                                num_edge_entries: 2
                            });
                        },
                        error: function (xhr, msg, e) { return; }

                    });
                } //allow paging while p==0 and allowpage is true .
            }
        }, //success
        error: function (xhr, msg, e) {
            jAlert("connected to server failed.please check network information", "connected failed");
            return;
        }
    });

}
//data per operation
function dataoperateresult(url,data,useloading,loadingspan,callback,isasyn) {
    $.ajax({
        type: "post",
        url: url,
        data: '{' + data + '}',
        beforeSend: function (xhr) {
            if (useloading == true) {
                $(loadingspan).html("");
            }
        },
        async: (isasyn == null ? false : isasyn),
        complete: function () {
            if (useloading == true) {
                $(loadingspan).html('');
            }
        }, //complete
        contentType: "application/json",
        dataType: "json",
        success: function (data, ex_s) {
            var s = data.d;
            if (s.showerror() == true) {
                jAlert(s.noticemsg(true), "operate failed");
                return;
            } else {
                if (callback) {
                    callback(s.noticemsg(false));
                } else { jAlert(s.noticemsg(false), "operate successfull"); return; }
            }
        }, //successfull 
        error: function (xhr, msg, e) {
            jAlert("connected to server failed,please check network", "connected failed");
            return;
        } //error dealwith 

    });
}
//focus settings
function nextfocus(curr, next) {
    if (curr != null && curr != '' && curr.contains('#') == false) { curr = '#' + curr; }
    if (next != null && next != '' && next.contains('#') == false) { next = '#' + next; }
    if (curr != null) {
        $(curr).keypress(function (e) {
            if (e.which == 13) {
                $(next).focus();
                return false;
            }
        });
    } else {
        if (next != null) {
            $(next).focus();
            return false;
        }
    }

}

var dateFormat = function () {
    var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
		timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
		timezoneClip = /[^-+\dA-Z]/g,
		pad = function (val, len) {
		    val = String(val);
		    len = len || 2;
		    while (val.length < len) val = "0" + val;
		    return val;
		};

    // Regexes and supporting functions are cached through closure
    return function (date, mask, utc) {
        var dF = dateFormat;

        // You can't provide utc if you skip other args (use the "UTC:" mask prefix)
        if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) {
            mask = date;
            date = undefined;
        }

        // Passing date through Date applies Date.parse, if necessary
        date = date ? new Date(date) : new Date;
        if (isNaN(date)) return;// throw SyntaxError("invalid date");

        mask = String(dF.masks[mask] || mask || dF.masks["default"]);

        // Allow setting the utc argument via the mask
        if (mask.slice(0, 4) == "UTC:") {
            mask = mask.slice(4);
            utc = true;
        }

        var _ = utc ? "getUTC" : "get",
			d = date[_ + "Date"](),
			D = date[_ + "Day"](),
			m = date[_ + "Month"](),
			y = date[_ + "FullYear"](),
			H = date[_ + "Hours"](),
			M = date[_ + "Minutes"](),
			s = date[_ + "Seconds"](),
			L = date[_ + "Milliseconds"](),
			o = utc ? 0 : date.getTimezoneOffset(),
			flags = {
			    d: d,
			    dd: pad(d),
			    ddd: dF.i18n.dayNames[D],
			    dddd: dF.i18n.dayNames[D + 7],
			    m: m + 1,
			    mm: pad(m + 1),
			    mmm: dF.i18n.monthNames[m],
			    mmmm: dF.i18n.monthNames[m + 12],
			    yy: String(y).slice(2),
			    yyyy: y,
			    h: H % 12 || 12,
			    hh: pad(H % 12 || 12),
			    H: H,
			    HH: pad(H),
			    M: M,
			    MM: pad(M),
			    s: s,
			    ss: pad(s),
			    l: pad(L, 3),
			    L: pad(L > 99 ? Math.round(L / 10) : L),
			    t: H < 12 ? "a" : "p",
			    tt: H < 12 ? "am" : "pm",
			    T: H < 12 ? "A" : "P",
			    TT: H < 12 ? "AM" : "PM",
			    Z: utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
			    o: (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
			    S: ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
			};

        return mask.replace(token, function ($0) {
            return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
        });
    };
} ();

// Some common format strings
dateFormat.masks = {
    "default": "ddd mmm dd yyyy HH:MM:ss",
    shortDate: "m/d/yy",
    mediumDate: "mmm d, yyyy",
    longDate: "mmmm d, yyyy",
    fullDate: "dddd, mmmm d, yyyy",
    shortTime: "h:MM TT",
    mediumTime: "h:MM:ss TT",
    longTime: "h:MM:ss TT Z",
    isoDate: "yyyy-mm-dd",
    isoTime: "HH:MM:ss",
    isoDateTime: "yyyy-mm-dd'T'HH:MM:ss",
    isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
};

// Internationalization strings
dateFormat.i18n = {
    dayNames: [
		"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
		"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
	],
    monthNames: [
		"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
		"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
	]
};

// For convenience...
Date.prototype.format = function (mask, utc) {
    return dateFormat(this, mask, utc);
};

function parseDate(val) {
    var preferEuro = (arguments.length == 2) ? arguments[1] : false;
    generalFormats = new Array('yyyy-MM-dd','yyyy-MM-dd HH:mm:ss', 'yyyy-M-dd HH:mm:ss', 'yyyy-M-d HH:mm:ss', 'yyyy-M-dd H:mm:ss', 'yyyy-MM-d H:mm:ss');
    monthFirst = new Array('M/d/y', 'M-d-y', 'M.d.y', 'MMM-d', 'M/d', 'M-d');
    dateFirst = new Array('d/M/y', 'd-M-y', 'd.M.y', 'd-MMM', 'd/M', 'd-M');
    var checkList = new Array('generalFormats', preferEuro ? 'dateFirst' : 'monthFirst', preferEuro ? 'monthFirst' : 'dateFirst');
    var d = null;
    for (var i = 0; i < checkList.length; i++) {
        var l = window[checkList[i]];
        for (var j = 0; j < l.length; j++) {
            d = getDateFromFormat(val, l[j]);
            if (d != 0) { return new Date(d); }
        }
    }
    return null;
}
function getDateFromFormat(val, format) {
    val = val + "";
    format = format + "";
    var i_val = 0;
    var i_format = 0;
    var c = "";
    var token = "";
    var token2 = "";
    var x, y;
    var now = new Date();
    var year = now.getYear();
    var month = now.getMonth() + 1;
    var date = 1;
    var hh = now.getHours();
    var mm = now.getMinutes();
    var ss = now.getSeconds();
    var ampm = "";

    while (i_format < format.length) {
        // Get next token from format string
        c = format.charAt(i_format);
        token = "";
        while ((format.charAt(i_format) == c) && (i_format < format.length)) {
            token += format.charAt(i_format++);
        }
        // Extract contents of value based on format token
        if (token == "yyyy" || token == "yy" || token == "y") {
            if (token == "yyyy") { x = 4; y = 4; }
            if (token == "yy") { x = 2; y = 2; }
            if (token == "y") { x = 2; y = 4; }
            year = _getInt(val, i_val, x, y);
            if (year == null) { return 0; }
            i_val += year.length;
            if (year.length == 2) {
                if (year > 70) { year = 1900 + (year - 0); }
                else { year = 2000 + (year - 0); }
            }
        }
        else if (token == "MMM" || token == "NNN") {
            month = 0;
            for (var i = 0; i < MONTH_NAMES.length; i++) {
                var month_name = MONTH_NAMES[i];
                if (val.substring(i_val, i_val + month_name.length).toLowerCase() == month_name.toLowerCase()) {
                    if (token == "MMM" || (token == "NNN" && i > 11)) {
                        month = i + 1;
                        if (month > 12) { month -= 12; }
                        i_val += month_name.length;
                        break;
                    }
                }
            }
            if ((month < 1) || (month > 12)) { return 0; }
        }
        else if (token == "EE" || token == "E") {
            for (var i = 0; i < DAY_NAMES.length; i++) {
                var day_name = DAY_NAMES[i];
                if (val.substring(i_val, i_val + day_name.length).toLowerCase() == day_name.toLowerCase()) {
                    i_val += day_name.length;
                    break;
                }
            }
        }
        else if (token == "MM" || token == "M") {
            month = _getInt(val, i_val, token.length, 2);
            if (month == null || (month < 1) || (month > 12)) { return 0; }
            i_val += month.length;
        }
        else if (token == "dd" || token == "d") {
            date = _getInt(val, i_val, token.length, 2);
            if (date == null || (date < 1) || (date > 31)) { return 0; }
            i_val += date.length;
        }
        else if (token == "hh" || token == "h") {
            hh = _getInt(val, i_val, token.length, 2);
            if (hh == null || (hh < 1) || (hh > 12)) { return 0; }
            i_val += hh.length;
        }
        else if (token == "HH" || token == "H") {
            hh = _getInt(val, i_val, token.length, 2);
            if (hh == null || (hh < 0) || (hh > 23)) { return 0; }
            i_val += hh.length;
        }
        else if (token == "KK" || token == "K") {
            hh = _getInt(val, i_val, token.length, 2);
            if (hh == null || (hh < 0) || (hh > 11)) { return 0; }
            i_val += hh.length;
        }
        else if (token == "kk" || token == "k") {
            hh = _getInt(val, i_val, token.length, 2);
            if (hh == null || (hh < 1) || (hh > 24)) { return 0; }
            i_val += hh.length; hh--;
        }
        else if (token == "mm" || token == "m") {
            mm = _getInt(val, i_val, token.length, 2);
            if (mm == null || (mm < 0) || (mm > 59)) { return 0; }
            i_val += mm.length;
        }
        else if (token == "ss" || token == "s") {
            ss = _getInt(val, i_val, token.length, 2);
            if (ss == null || (ss < 0) || (ss > 59)) { return 0; }
            i_val += ss.length;
        }
        else if (token == "a") {
            if (val.substring(i_val, i_val + 2).toLowerCase() == "am") { ampm = "AM"; }
            else if (val.substring(i_val, i_val + 2).toLowerCase() == "pm") { ampm = "PM"; }
            else { return 0; }
            i_val += 2;
        }
        else {
            if (val.substring(i_val, i_val + token.length) != token) { return 0; }
            else { i_val += token.length; }
        }
    }
    // If there are any trailing characters left in the value, it doesn't match
    if (i_val != val.length) { return 0; }
    // Is date valid for month?
    if (month == 2) {
        // Check for leap year
        if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) { // leap year
            if (date > 29) { return 0; }
        }
        else { if (date > 28) { return 0; } }
    }
    if ((month == 4) || (month == 6) || (month == 9) || (month == 11)) {
        if (date > 30) { return 0; }
    }
    // Correct hours value
    if (hh < 12 && ampm == "PM") { hh = hh - 0 + 12; }
    else if (hh > 11 && ampm == "AM") { hh -= 12; }
    var newdate = new Date(year, month - 1, date, hh, mm, ss);
    return newdate.getTime();
}

function _getInt(str, i, minlength, maxlength) {
    for (var x = maxlength; x >= minlength; x--) {
        var token = str.substring(i, i + x);
        if (token.length < minlength) { return null; }
        if (token.isint()==true) { return token; }
    }
    return null;
}
var MONTH_NAMES = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
var DAY_NAMES = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
function LZ(x) { return (x < 0 || x > 9 ? "" : "0") + x }
function exitsysetm() {
    dataoperateresult("../services/contentservice.svc/UserLogout", "", false, '', function (msg) {
        window.location.href = 'login.aspx'; return;
    }, false);
}

function menuactions() {
    var container = $("#nav");
    var nav = function (c, config) {
        this.config = config || { speed: 10, num: 2 };
        this.container = c;
        this.lineHeight = this.container.offsetHeight;
        this.scrollTimeId = null;
        var t = this;
        this.structure = function () {
            var inner, el, href;
            inner = t.container.childNodes[0].innerHTML;
            href = t.container.childNodes[0].href;
            el = document.createElement("a");
            el.innerHTML = inner;
            el.href = href;
            el.className = 'hover';
            t.container.appendChild(el);
            t.container.onmouseover = function () {
                t.start();
            };
            t.container.onmouseout = function () {
                t.end();
            };
        };
        this.clear = function () {
            clearTimeout(t.scrollTimeId);
        };
        this.start = function () {
            t.clear();
            t.scrollTimeId = setTimeout(function () { t.scrollUp(); }, t.config.speed);
        };
        this.end = function () {
            t.clear();
            t.scrollTimeId = setTimeout(function () { t.scrollDown(); }, t.config.speed);
        };
        this.scrollUp = function () {
            var c = t.container;
            if (c.scrollTop >= t.lineHeight) {
                c.scrollTop = t.lineHeight;
                return;
            }
            c.scrollTop += t.config.num;
            t.scrollTimeId = setTimeout(function () { t.scrollUp(); }, t.config.speed);

        };
        this.scrollDown = function () {
            var c = t.container;
            if (c.scrollTop <= 0) {
                c.scrollTop = 0; return;
            }
            c.scrollTop -= t.config.num;
            t.scrollTimeId = setTimeout(function () { t.scrollDown(); }, t.config.speed);
        };
    };         //nav end
    var el_li = container.find("li");
    var arr = [];
    for (var i = 0; i < el_li.length - 1; i++) {
        if (el_li[i].className == 'on') continue;
        arr[i] = new nav(el_li[i], { speed: 10, num: 4 }).structure();
    }
}
   
