﻿var AjaxRequest = {}; //AJAX
var AjaxTip = {}; //AJAX提示框
var Dialog = {}; //对话框
var StringHelper = {}; //字符串剔除
var DomNode = {}; //节点操作

//设置选中样式
function setstyle(newstyle, curid) {
    $('#' + curid).attr('class', newstyle);
}

//打开URL
function GoUrl(url) {
    location.href = url;
}

//Ajax GET方法
AjaxRequest.Get = function (url, panelIDs) {

    url = url || (document.forms[0] && document.forms[0].action) || StringHelper.Clear(location.href, '#');
    var IDs = Array.prototype.slice.apply(arguments).slice(1 || 0);

    var callback = IDs[IDs.length - 1];
    if (typeof callback == 'function') {
        IDs = IDs.slice(0, IDs.length - 1);
    }
    else {
        callback = null;
    }

    var panelStrings = IDs.length > 0 ? IDs.join(',') : '__DefaultAjaxPanleID'; //panelIDs为空不更新

    $.ajax
    (
        {
            type: 'get',
            dataType: 'json',
            cache: false,
            url: url,
            data: '__AjaxPanelIDs=' + panelStrings,
            success:
            function (content) {
                //显示提示信息
                if (content['Status'] == 'Success') {

                    //如果需要更新ajaxpanel就更新
                    for (var i = 0; i < IDs.length; i++) {
                        var pannelIDs = IDs[i].split(',');
                        $.each(pannelIDs, function (key, val) {
                            var o = document.getElementById(val);
                            if (o) {
                                document.getElementById(val).innerHTML = $.trim(content['Panels'][val]);
                            }
                        });
                        //                        var o = document.getElementById(IDs[i]);
                        //                        if (o) {
                        //                            document.getElementById(IDs[i]).innerHTML = $.trim(content['Panels'][IDs[i]]);
                        //                        }
                    }
                    //url && document.forms[0] && (document.forms[0].action = url);
                }
                if (callback != null)//如果有回调函数
                {
                    callback(content);
                }
            },
            complete:

            function () {

                // AjaxTip.Show('完成');
                // AjaxTip.Hide();
            },
            beforeSend:
            function () {

                //AjaxTip.Show('正在请求，请稍后...');
            },
            error:
            function (XMLHttpRequest, textStatus, errorThrown) {
                // AjaxTip.Show('请求错误，请重试');
            },
            timeout:
            function () {
                // AjaxTip.Show('请求超时，请重试');
            }


        }
    );
};
//--AJAX POST 方法
AjaxRequest.Post = function (buttonName, panelIDs) {
    var f;
    for (var i = 0; i < document.forms.length; i++) {
        if (document.forms[i].elements[buttonName] || (document.forms[i].elements['ButtonProxy'] && document.forms[i].elements['ButtonProxy'].value == [buttonName])) {
            f = document.forms[i];
            break;
        }
    }

    if (!f) {
        f = document.forms[0];
    }

    var url = (f && f.action) || StringHelper.Clear(location.href, '#');
    var IDs = Array.prototype.slice.apply(arguments).slice(1 || 0);
    var callback = IDs[IDs.length - 1];
    if (typeof callback == 'function') {
        IDs = IDs.slice(0, IDs.length - 1);
    }
    else {
        callback = null;
    }

    var panelStrings = IDs.length > 0 ? IDs.join(',') : '__DefaultAjaxPanleID';
    var data = [];
    data.push({ name: buttonName, value: buttonName });
    data.push({ name: '__AjaxPanelIDs', value: panelStrings });
    var options =
    {
        contentType: "application/x-www-form-urlencoded; charset=utf-8",
        type: 'post',
        dataType: 'json',
        url: url,
        data: data,
        cache: false,
        success:
        function (content) {
            if (content['Status'] == 'Success') {
                //如果需要更新ajaxpanel就更新
                for (var i = 0; i < IDs.length; i++) {
                    document.getElementById(IDs[i]).innerHTML = $.trim(content['Panels'][IDs[i]]);
                }

            }
            if (callback != null)//如果有回调函数
            {
                callback(content);
            }


        },
        complete:
        function () {
            $('input[name=' + buttonName + ']').attr('disabled', ''); //按钮设置为可用
            //AjaxTip.Hide();
        },
        beforeSend:
        function () {
            $('input[name=' + buttonName + ']').attr('disabled', 'disabled'); //按钮设置为不可用
            // AjaxTip.Show('正在处理，请稍后...');

        },
        error:
        function () {
            // AjaxTip.Show('请求错误，请重试');
        },
        timeout:
        function () {
            // AjaxTip.Show('请求超时，请重试');
        },
        resetForm: false
    };

    $('#' + f.id).ajaxSubmit(options);
    return false;
};

//字符串剔除方法
StringHelper.Clear = function (str, charString) {
    str = str.substring(0, str.indexOf(charString)) || str;
    return str;
};




//==============DOM节点常用操作 start===============
DomNode.IsNode = function (el /* :HTMLElement */) {
    if (el && typeof el == 'object' && el.nodeType == 1)
        return true;
    return false;
};

DomNode.IsDocumentFragment = function (el /* :HTMLElement */) {
    return el && typeof el == 'object' && el.nodeType == 11;
};

DomNode.IsNodeOrDocumentFragment = function (el /* :HTMLElement */) {
    return this.IsNode(el) || this.IsDocumentFragment(el) || false;
};

DomNode.IsTextNode = function (el /* :HTMLElement */) {
    if (el && typeof el == 'object' && el.nodeType == 3)
        return true;
    return false;
};

DomNode.CreateNode = function (tag /* :String */) {
    return document.createElement(tag);
};

DomNode.CreateTextNode = function (str /* :String */) {
    return document.createTextNode(str);
};

DomNode.AddNode = function (node /* :HTMLElement */, target /* :HTMLElement */) {
    target = target || document.body;
    if (this.IsNodeOrDocumentFragment(node) || this.IsTextNode(node)) {
        if (node.parentNode && this.IsNode(node.parentNode)) return false;
        target.appendChild(node);
    }
    else {
        this.AddNode(this.CreateTextNode(node.toString()), target);
    }
    return true;
};

DomNode.RemoveNode = function (node /* :HTMLElement */, target /* :HTMLElement */) {
    if (!node || !node.parentNode || (node.parentNode && node.parentNode.nodeType != 1)) return null;
    return node.parentNode.removeChild(node);
};


DomNode.CreateInput = function (name /* :String */) {
    var el;
    try {
        el = this.CreateNode('<input name="' + name + '">');
    }
    catch (e) {
        el = this.CreateNode('input');
        el.name = name;
    }
    return el;
};

DomNode.AddButtonToForm = function (buttonName, buttomvalue, formID) {
    var f = document.forms[formID];
    if (!f.elements[buttonName]) {
        var but = DomNode.CreateInput(buttonName);
        but.type = 'hidden';
        DomNode.AddNode(but, f);
    }

    f.elements[buttonName].value = buttomvalue;
};

DomNode.AddButtonProxyToForm = function (buttonName, formID) {
    var f = document.forms[formID];
    if (!f.elements['ButtonProxy']) {
        var but = DomNode.CreateInput('ButtonProxy');
        but.type = 'hidden';
        DomNode.AddNode(but, f);
    }

    f.elements['ButtonProxy'].value = [buttonName];
};

//==============DOM节点常用操作 end===============

//==============表单提交 start===============
function Submit(ButtonName, formID) {
    var f;
    if (!formID) {
        for (var i = 0; i < document.forms.length; i++) {
            if (document.forms[i].elements[ButtonName] || (document.forms[i].elements['ButtonProxy'] && document.forms[i].elements['ButtonProxy'].value == [buttonName])) {
                f = document.forms[i];
                break;
            }
        }

        if (!f) {
            f = document.forms[0];
        }
    }
    else {
        f = document.forms[formID];
    }

    DomNode.AddButtonProxyToForm(ButtonName, f.id);

    $('input[name=' + ButtonName + ']').attr('disabled', 'disabled');
    if (!f.action) { f.action = StringHelper.Clear(location.href, '#'); }
    f.submit();
}
//==============表单提交 end===============


Date.prototype.Format = function (fmt) { //author: meizz 
    var o = {
        "M+": this.getMonth() + 1,                 //月份 
        "d+": this.getDate(),                    //日 
        "h+": this.getHours(),                   //小时 
        "m+": this.getMinutes(),                 //分 
        "s+": this.getSeconds(),                 //秒 
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度 
        "S": this.getMilliseconds()             //毫秒 
    };
    if (/(y+)/.test(fmt))
        fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    for (var k in o)
        if (new RegExp("(" + k + ")").test(fmt))
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    return fmt;
}



function StringBuffer() {
    this._strings = [];
    if (arguments.length == 1) {
        this._strings.push(arguments[0]);
    }
}

StringBuffer.prototype.append = function (str) {
    this._strings.push(str);
    return this;
}

StringBuffer.prototype.remove = function (str) {
    if (this._strings.toString().indexOf(str) >= 0) {
        var start = this.getIndexByValue(str);

        this._strings.splice(start, 1);

        return true;
    }

    return false;
}

StringBuffer.prototype.getIndexByValue = function (value) {
    var index = -1;
    for (var i = 0; i < this._strings.length; i++) {
        if (this._strings[i] == value) {
            index = i;
            break;
        }
    }
    return index;
}


StringBuffer.prototype.toString = function () {
    return this._strings.join("");
}

StringBuffer.prototype.toSplitString = function () {
    return this._strings.join(",");
}

/* 返回长度 */
StringBuffer.prototype.length = function () {
    var str = this._strings.join("");
    return str.length;
}

/* 删除后几位字符 */
StringBuffer.prototype.del = function (num) {
    var len = this.length();
    var str = this.toString();
    str = str.slice(0, len - num);
    this._strings = [];
    this._strings.push(str);
}

StringBuffer.prototype.clear = function () {
    this._strings = [];
}


//获取url参数
function GetUrlParms() {
    var args = new Object();
    var query = location.search.substring(1); //获取查询串   
    var pairs = query.split("&"); //在逗号处断开   
    for (var i = 0; i < pairs.length; i++) {
        var pos = pairs[i].indexOf('='); //查找name=value   
        if (pos == -1) continue; //如果没有找到就跳过   
        var argname = pairs[i].substring(0, pos); //提取name   
        var value = pairs[i].substring(pos + 1); //提取value  
        args[argname] = unescape(value); //存为属性   
    }
    return args;
}


var LoadScript = {
    load: function (url, callback) {
        $.ajax({
            type: "get",
            url: url,
            async: false,
            cache: false,
            dataType: "script",
            scriptCharset: "utf-8",
            beforeSend: function () {
                //external.extOnShowLoading("加载中。。。");
            },
            complete: function () {
                //external.extOnHideLoading();
            },
            success: function () {
                if (callback != null) {
                    callback();
                }
            }
        });
    }
};

var Css = {
    loadCss: function (cssfile) {

        var cssTag = document.getElementById("baseCss");
        if (cssTag) {
            cssTag.href = cssfile;
        }

        var head = document.getElementsByTagName("head").item(0);
        var css = document.createElement("link");
        css.href = cssfile;
        css.rel = "stylesheet";
        css.type = "text/css";
        css.id = "baseCss";
        head.appendChild(css);


    }
};


var JsonUti = {
    //定义换行符
    n: "\n",
    //定义制表符
    t: "\t",
    //转换String
    convertToString: function (obj) {
        return JsonUti.__writeObj(obj, 1);
    },
    //写对象
    __writeObj: function (obj    //对象
                    , level             //层次（基数为1）
                    , isInArray) {       //此对象是否在一个集合内
        //如果为空，直接输出null
        if (obj == null) {
            return "null";
        }
        //为普通类型，直接输出值
        if (obj.constructor == Number || obj.constructor == Date || obj.constructor == String || obj.constructor == Boolean) {
            var v = obj.toString();
            var tab = isInArray ? JsonUti.__repeatStr(JsonUti.t, level - 1) : "";
            if (obj.constructor == String || obj.constructor == Date) {
                //时间格式化只是单纯输出字符串，而不是Date对象
                return tab + ("\"" + v + "\"");
            }
            else if (obj.constructor == Boolean) {
                return tab + v.toLowerCase();
            }
            else {
                return tab + (v);
            }
        }

        //写Json对象，缓存字符串
        var currentObjStrings = [];
        //遍历属性
        for (var name in obj) {
            var temp = [];
            //格式化Tab
            var paddingTab = JsonUti.__repeatStr(JsonUti.t, level);
            temp.push(paddingTab);
            //写出属性名
            temp.push(name + " : ");

            var val = obj[name];
            if (val == null) {
                temp.push("null");
            }
            else {
                var c = val.constructor;

                if (c == Array) { //如果为集合，循环内部对象
                    temp.push(JsonUti.n + paddingTab + "[" + JsonUti.n);
                    var levelUp = level + 2;    //层级+2

                    var tempArrValue = [];      //集合元素相关字符串缓存片段
                    for (var i = 0; i < val.length; i++) {
                        //递归写对象                         
                        tempArrValue.push(JsonUti.__writeObj(val[i], levelUp, true));
                    }

                    temp.push(tempArrValue.join("," + JsonUti.n));
                    temp.push(JsonUti.n + paddingTab + "]");
                }
                else if (c == Function) {
                    temp.push("[Function]");
                }
                else {
                    //递归写对象
                    temp.push(JsonUti.__writeObj(val, level + 1));
                }
            }
            //加入当前对象“属性”字符串
            currentObjStrings.push(temp.join(""));
        }
        return (level > 1 && !isInArray ? JsonUti.n : "")                       //如果Json对象是内部，就要换行格式化
                    + JsonUti.__repeatStr(JsonUti.t, level - 1) + "{" + JsonUti.n     //加层次Tab格式化
                    + currentObjStrings.join("," + JsonUti.n)                       //串联所有属性值
                    + JsonUti.n + JsonUti.__repeatStr(JsonUti.t, level - 1) + "}";   //封闭对象
    },
    __isArray: function (obj) {
        if (obj) {
            return obj.constructor == Array;
        }
        return false;
    },
    __repeatStr: function (str, times) {
        var newStr = [];
        if (times > 0) {
            for (var i = 0; i < times; i++) {
                newStr.push(str);
            }
        }
        return newStr.join("");
    }
};

//操作Cookie
jQuery.cookie = function (name, value, options) {
    if (typeof value != 'undefined') { // name and value given, set cookie 
        options = options || {};
        if (value === null) {
            value = '';
            options.expires = -1;
        }
        var expires = '';
        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
            var date;
            if (typeof options.expires == 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            } else {
                date = options.expires;
            }
            expires = '; expires=' + date.toUTCString();
        }
        var path = options.path ? '; path=' + (options.path) : '';
        var domain = options.domain ? '; domain=' + (options.domain) : '';
        var secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    } else {
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
}; 

