//添加通用outerHTML属性
if (typeof(HTMLElement) != "undefined" && !window.opera)
{
    HTMLElement.prototype.__defineGetter__("outerHTML", function()
    {
        var a = this.attributes, str = "<" + this.tagName, i = 0;
        for (; i < a.length; i++)
            if (a[i].specified)
                str += " " + a[i].name + '="' + a[i].value + '"';
        if (!this.canHaveChildren)
            return str + " />";
        return str + ">" + this.innerHTML + "</" + this.tagName + ">";
    });
    HTMLElement.prototype.__defineSetter__("outerHTML", function(s)
    {
        var r = this.ownerDocument.createRange();
        r.setStartBefore(this);
        var df = r.createContextualFragment(s);
        this.parentNode.replaceChild(df, this);
        return s;
    });
    HTMLElement.prototype.__defineGetter__("canHaveChildren", function()
    {
        return !/^(area|base|basefont|col|frame|hr|img|br|input|isindex|link|meta|param)$/.test(this.tagName.toLowerCase());
    });
}
var franken={version:"1.0.0"};
franken.byId = function(id) {
    return document.getElementById(id);
};
/*继承机制*/
franken.inherits = function(subclass, superclass) {
    /*继承必须是俩个函数的继承*/
    if (typeof superclass != 'function') {
        alert("franken.inherits: superclass argument [" + superclass + "] must be a function (subclass: [" + subclass + "']");
    }
    /*设置子类的原型*/
    subclass.prototype = new superclass();
    /*设置子类的构造函数*/
    subclass.prototype.constructor = subclass;
    subclass.superclass = superclass.prototype;
    subclass['super'] = superclass.prototype;
};

/*基本类*/
franken.base = function(url, divId, evalScripts) {
    var THIS = this;
    /*私有参数,被请求的链接或者action */
    this._baseUrl = url;
    this._baseMethod = "post";
    this._resultDivId = divId;
    this.__isloading = false;
    this._evalScripts = evalScripts === true ? true : false;

    /* 共有方法 */
    this.setUrl = function(url) {
        THIS._baseUrl = url;
    };

    this.getUrl = function() {
        return THIS._baseUrl;
    };

    this.setMethod = function(method) {
        THIS._baseMethod = method;
    };

    this.getMethod = function() {
        return THIS._baseMethod;
    };

    this.setDivId = function(divId) {
        THIS._resultDivId = divId;
    };

    this.getDivId = function() {
        return THIS._resultDivId;
    };

    this.getEvalScripts = function() {
        if (THIS._evalScripts) {
            return THIS._evalScripts;
        } else {
            return false;
        }
    };


    this.send = function() {
        if (!THIS.__isloading) {
            THIS.__isloading = true;
            new Request({
                method: THIS.getMethod(),
                url:THIS.getUrl().split("?")[0],
                data:THIS.__getSendData(),
                evalScripts:THIS.getEvalScripts(),
                onRequest:THIS.__onReqest,
                onSuccess:THIS.__onSuccess,
                onFailure:THIS.__onFailure ,
                onComplete:THIS.__onComplete,
                onCancel:THIS.__onCancel
            }).send();
        }
    };

    /*组织请求参数*/
    this.__getSendData = function() {
        var key = "client_";
        var _content = {};
        var prop;
        for (var element_client in this) {
            prop = this[element_client];
            if (prop && typeof prop != "function" &&
                element_client.length > key.length &&
                element_client.substring(0, key.length).toLowerCase() == key) {
                var name = element_client.substring(key.length);
                _content[name] = prop;
            }
        }
        var data = {};
        /*分解请求中的url参数*/
        if (THIS.getUrl()) {
            var m = THIS.getUrl().split("?");
            if (m[1]) {
                var t = m[1].split("&");
                for (var i = 0; i < t.length; i++) {
                    var subt = t[i].split("=");
                    if (subt[1]) {
                        data[subt[0]] = subt[1];
                    }
                }
            }
        }
        /*把url中的参数组织到_content中，统计提交，方式url的参数传递不了。*/
        if (data) {
            for (var element_url in data) {
                prop = data[element_url];
                if (prop)
                    _content[element_url] = prop;
            }
        }
        return _content;
    };


    this.__onReqest = function() {
        if (THIS.onRequest) {
            THIS.onRequest();
        }
    };

    this.__onSuccess = function(text, xml) {
        THIS.__isloading = false;
        var ro = $(THIS._resultDivId);
        if (ro) {
            ro.innerHTML = text;
        }
        if (THIS.onSuccess) {
            THIS.onSuccess(text, xml);
        }
    };

    this.__onFailure = function(xml) {
        THIS.__isloading = false;
        if (THIS.onFailure) {
            THIS.onFailure(xml);
        }
    };

    this.__onComplete = function(text) {
        //        var ro = $(THIS._resultDivId);
        //        if (ro) {
        //            ro.innerHTML = "<img src=\"/images/jcarousel_loading.gif\" alt=\"数据加载中,请等待...\" title=\"数据加载中,请等待...\">";
        //        }
        THIS.__isloading = false;
        if (THIS.onComplete) {
            THIS.onComplete(text);
        }
    };

    this.__onCancel = function() {
        THIS.__isloading = false;
        if (THIS.onCancel) {
            THIS.onCancel();
        }
    };
    this.onRequest = null;
    this.onSuccess = null;
    this.onFailure = null;
    this.onComplete = null;
    this.onCancel = null;
};

//分页请求
franken.page = function(url, divId, requestObject, pageSize, showCount) {
    this.__requestObject = requestObject;
    this.__pageNum = 1;
    this.__totalCount = 0;
    this.__pageSize = pageSize;
    this.__showCount = showCount;
    var THIS = this;
    franken.base.call(this, url, divId, true);
    this.init = function() {
        var __pbar = document.getElementById("__frankne_pagebar");
        if (THIS.__totalCount > THIS.__pageSize) {
            var start = THIS.__pageNum;
            //全部页数，（总数/每页数量，如果有余数则页数+1）；
            var totalPage = (THIS.__totalCount / THIS.__pageSize);
            var totalIntPage = parseInt(totalPage);
            totalPage = totalPage == totalIntPage ? totalIntPage : (totalIntPage + 1);

            //翻页栏显示多少页（如果有设置的显示多少页的话，则显示多少页，如果没有的话，默认为10页）
            var loopCount = (THIS.__showCount == null || THIS.__showCount <= 0) ? 10 : THIS.__showCount;
            //显示的页数不能超过总页数
            loopCount = loopCount <= totalPage ? loopCount : totalPage;

            //获得显示的页数的中间个数是第几个，
            var m_loopCount = parseInt(loopCount / 2);

            //上次选中的分页按钮是第几个，从0开始，默认为0；
            var lastPoint = 0;
            lastPoint += ((THIS.__pageNum - 1) % m_loopCount);

            //如果显示的页数为单数，则中间数顺延1
            m_loopCount += (loopCount % 2 == 0 ? 0 : 1);

            //找出分页中间页按钮(默认为0,总翻页数为单数则加1)

            start = start - lastPoint;
            if (start < 1) {
                start = 1;
            }
            start = ((start + loopCount) > totalPage) ? (totalPage - loopCount+1) : start;
            if (start < 1) {
                start = 1;
            }
            var pagebar = document.createElement("DIV");
            pagebar.className = "digg";


            if (THIS.__pageNum > 1) {
                var first = document.createElement("A");
                first.href = "javascript:" + THIS.__requestObject + ".prev();";
                first.innerHTML = "&lt;";
                first.title = "上一页";
                pagebar.appendChild(first);
            }


            for (var i = 0; i < loopCount; i++) {
                var j = start + i;
                var node = null;
                if (j == THIS.__pageNum) {
                    node = document.createElement("SPAN");
                    node.className = "current";
                } else {
                    node = document.createElement("A");
                    node.href = "javascript:" + THIS.__requestObject + ".changeNum(" + j + ");";
                    node.title = "第" + j + "页";
                }
                node.innerHTML = j;
                pagebar.appendChild(node);
            }


            if (THIS.__pageNum < totalPage) {
                var last = document.createElement("A");
                last.href = "javascript:" + THIS.__requestObject + ".next();";
                last.innerHTML = "&gt;";
                last.title = "下一页";
                pagebar.appendChild(last);
            }
            if (__pbar) {
                __pbar.innerHTML = pagebar.outerHTML;
                __pbar.style.display = "block";
            }
        } else {
            if (__pbar) {
                __pbar.innerHTML = "";
                __pbar.style.display = "none";
            }
        }
    };


    this.next = function() {
        THIS.changeNum((THIS.__pageNum + 1));
    };

    this.prev = function() {
        THIS.changeNum((THIS.__pageNum - 1));
    };

    this.changeNum = function(pnum) {
        THIS.__pageNum = pnum;
        if (THIS.onPageChange) {
            THIS.onPageChange((THIS.__pageSize * (THIS.__pageNum - 1)), THIS.__pageSize);
            THIS.send();
        }
    };


    this.flush = function() {
        THIS.__pageNum = 1;
        if (THIS.onPageChange) {
            THIS.onPageChange(0, THIS.__pageSize);
        }
        THIS.send();
    };

    this.onSuccess = function(text, xml) {
        var result = $("resultCount");
        if (result) {
            THIS.__totalCount = parseInt(result.value);
        }
        THIS.init();
        if (THIS.onPageSuccess) {
            THIS.onPageSuccess(text, xml);
        }
    };

    this.onPageSuccess = null;
    this.onPageChange = null;
};
franken.inherits(franken.page, franken.base);


franken.customer_service = function(divId) {
    franken.base.call(this, '/customer_service/index.jsp', divId, true);
};
franken.inherits(franken.customer_service, franken.base);
window.onload = function() {
    var askPanel = new franken.customer_service("ask");
    askPanel.send();
};


