﻿/*  
/*--------------------------------------------------------------------------*/
var JSON = function () {
    var m = {
            '\b': '\\b',
            '\t': '\\t',
            '\n': '\\n',
            '\f': '\\f',
            '\r': '\\r',
            '"' : '\\"',
            '\\': '\\\\'
        },
        s = {
            'boolean': function (x) {
                return String(x);
            },
            number: function (x) {
                return isFinite(x) ? String(x) : 'null';
            },
            string: function (x) {
                if (/["\\\x00-\x1f]/.test(x)) {
                    x = x.replace(/([\x00-\x1f\\"])/g, function(a, b) {
                        var c = m[b];
                        if (c) {
                            return c;
                        }
                        c = b.charCodeAt();
                        return '\\u00' +
                            Math.floor(c / 16).toString(16) +
                            (c % 16).toString(16);
                    });
                }
                return '"' + x + '"';
            },
            object: function (x) {
                if (x) {
                    var a = [], b, f, i, l, v;
                    if (x instanceof Array) {
                        a[0] = '[';
                        l = x.length;
                        for (i = 0; i < l; i += 1) {
                            v = x[i];
                            f = s[typeof v];
                            if (f) {
                                v = f(v);
                                if (typeof v == 'string') {
                                    if (b) {
                                        a[a.length] = ',';
                                    }
                                    a[a.length] = v;
                                    b = true;
                                }
                            }
                        }
                        a[a.length] = ']';
                    } else if (x instanceof Object) {
                        a[0] = '{';
                        for (i in x) {
                            v = x[i];
                            f = s[typeof v];
                            if (f) {
                                v = f(v);
                                if (typeof v == 'string') {
                                    if (b) {
                                        a[a.length] = ',';
                                    }
                                    a.push(s.string(i), ':', v);
                                    b = true;
                                }
                            }
                        }
                        a[a.length] = '}';
                    } else {
                        return;
                    }
                    return a.join('');
                }
                return 'null';
            }
        };
    return {
        copyright: '(c)2005 JSON.org',
        license: 'http://www.crockford.com/JSON/license.html',
/*
    Stringify a JavaScript value, producing a JSON text.
*/
        stringify: function (v) {
            var f = s[typeof v];
            if (f) {
                v = f(v);
                if (typeof v == 'string') {
                    return v;
                }
            }
            return null;
        },
/*
    Parse a JSON text, producing a JavaScript value.
    It returns false if there is a syntax error.
*/
        parse: function (text) {
            try {
                /*return !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(
                        text.replace(/"(\\.|[^"\\])*"/g, ''))) &&*/
                   return eval('(' + text + ')');
            } catch (e) {
                return false;
            }
        }
    };
}();

var Parameter=Class.create();
Object.extend(Parameter.prototype,{
    initialize: function(){this.data=new Object();},
    append:function(name,value){this.data[name]=value;},
    remove:function(name){this.data[name]=null;},
    join:function()
    {
	    var result="";
	    var data=this.data;
	    for(var param in data)
	    {
	        if(data[param])
	        {
	            result+=param+"="+data[param]+"&";
	        }
	    }
	    return result;
    }
});

var Xdbc = Class.create();
Object.extend(Xdbc.prototype, {
    initialize: function(options) 
    {
        this.connect=options.connectstring;
        this.method=options.method?options.method:"post";
        this.parameter=new Parameter();
    },
    method:"post",
    onDataTable:null,
    onDataSet:null,
    onMessage:null,
    onError:null,
    _complete:function(request)
    {
        var result = JSON.parse(request.responseText);
        switch(result.type)
        {
            case "DataTable":
                if(typeof(this.onDataTable) == "function")
                    this.onDataTable(new DataTable(result));
                break;
            case "DataSet":
                if(typeof(this.onDataSet) == "function")
                    this.onDataSet(new DataSet(result));
                break;
            case "Message":
                if(typeof(this.onMessage) == "function")
                        this.onMessage(result);
                    break;
            case "Error":
                if(typeof(this.onError) == "function")
                        this.onError(result);
                    break;
        }
        if(typeof(this.onComplete) == "function" ) this.onComplete();
    },
    exec:function()
    {
        var ajaxObj=new Ajax.Request(
            this.connect,
            {
	            method: this.method,
	            parameters: this.parameter.join(),
	            onComplete: this._complete.bind(this)
            });
    }
});
//DataTable
var DataTable = Class.create();
Object.extend(DataTable.prototype, {
    initialize: function(data) 
    {
        try
        {
            if(data.type!="DataTable") return null;
		    this.isBroken = data.cols == null || data.cols.length < 1;
		    this.isEmpty = data.rows.length <1;
		    this.cols = new Object();
		    this.rows=[];
		    
		    var colNames=data.cols;
		    var rowData=data.rows;
		    for(var i=0;i<colNames.length; i++) this.cols[colNames[i]] = i;
		    for(var i=0;i<rowData.length;i++)
		    {
		        var row=this.rows[i]=new Object();
		        row.index = i;
		        for(var colName in this.cols) row[colName] = rowData[i][this.cols[colName]];
		    }
        }
        catch(e)
        {
		    this.isBroken = true;
		    alert("开发者：传给DataTable的数据不合法！");
        }
    }
});
//DataSet
var DataSet = Class.create();
Object.extend(DataSet.prototype, {
    initialize: function(data) 
    {
        try
        {
            if(data.type!="DataSet") return null;
		    this.isBroken = data.tableNames == null || data.tableNames.length < 1;
		    this.isEmpty = data.tables.length <1;
		    var tableData=data.tables;
		    this.tables=new Object();
		    this.tableArray=[];
		    for(var i=0;i<data.tableNames.length;i++)
		    {
		        var newTable=i<tableData.length?new DataTable(tableData[i]):null;
		        this.tableArray[i]=this.tables[data.tableNames[i]]=newTable;
		    }
        }
        catch(e)
        {
		    this.isBroken = true;
		    alert("开发者：传给DataSet的数据不合法！");
        }
    }
});
//Repeater
var Repeater = Class.create();

var tSep = "%";
var sStart = "{@--";
var sEnd = "--@}";
var tempate_RegExp = new RegExp(tSep+"[\\d\\w.#-]+?"+tSep, "gim");
var new_tempate_RegExp = new RegExp(sStart+".*?"+sEnd, "gim");

Object.extend(Repeater.prototype, {
    initialize:function(viewId,options)
    {
        this.data = null;
        this.onDataBind = null;
        this.onAfterDataBind=null;
        
        dataId=options.dataId?options.dataId:viewId;
        this.repeatCount=options.repeatCount?options.repeatCount:1;
        if((this.view=$(viewId))==null) alert("没有找到Repeater呈现内容的容器"+viewId+"!");
        if((this.item = $(dataId+"_item"))==null) alert("Itemtemplate" + dataId + "_item" + "不能为空!");
	    
        var header      = $(dataId+"_header");
        var footer      = $(dataId+"_footer");
        var nodata      = $(dataId+"_nodata");
        var lTag        = $(dataId+"_ltag");
        var rTag        = $(dataId+"_rtag");
        var vSeparator  = $(dataId+"_vseparator");
        var hSeparator  = $(dataId+"_hseparator");
        var emptyItem   = $(dataId+"_emptyitem");
        var alternating = $(dataId+"_alternating");
        
        this.headerHTML     = (header != null) ? header.innerHTML.replace("<!--", "").replace("-->", "") : "";
        this.footerHTML     = (footer != null) ? footer.innerHTML.replace("<!--", "").replace("-->", "") : "";
	    this.nodataHTML     = (nodata != null) ? nodata.innerHTML.replace("<!--", "").replace("-->", "") : "";
	    this.vSeparator     = (vSeparator != null) ? vSeparator.innerHTML.replace("<!--", "").replace("-->", "") : "";
	    this.hSeparator     = (hSeparator != null) ? hSeparator.innerHTML.replace("<!--", "").replace("-->", "") : "";
        this.emptyItem      = (emptyItem != null) ? emptyItem.innerHTML.replace("<!--", "").replace("-->", "") : "";
	    this.lefterHTML     = (lTag != null) ? lTag.innerHTML.replace("<!--", "").replace("-->", "") : "";
	    this.righterHTML    = (rTag != null) ? rTag.innerHTML.replace("<!--", "").replace("-->", "") : "";
	    
	    this.alternating    = (alternating != null) ? this._fixTemplate(alternating.innerHTML.replace("<!--", "").replace("-->", "")):"";
	    this.itemTemplate   = this._fixTemplate(this.item.innerHTML.replace("<!--", "").replace("-->", ""));
	    
    },
    _fixTemplate:function(val)
    {
	    var arr = val.match(tempate_RegExp);
	    if(arr != null)
		    for(i=0;i<arr.length;i++)
			    val = val.replace(new RegExp(arr[i], "g"), sStart+arr[i].substring(1, arr[i].length-1)+sEnd);	
	    return val;
    },
    renderItem:function(data,alternating)
    {
	    if (!data) return "";
	    itemHTML = this.itemTemplate;
	    if (alternating)
	        itemHTML = this.alternating;
	    for(prop in data)
		    if( typeof(data[prop]) != 'undefined')
   			    itemHTML = itemHTML.replace(new RegExp(sStart+prop+sEnd, "g"), data[prop] );
   			    
	    return itemHTML.replace(new_tempate_RegExp,"");
    },
    getHtml:function()
    {
	    var resultHtml = "";
	    var hasAlternating = !(this.alternating==null||this.alternating=="");
    	
	    resultHtml += this.headerHTML;
	    var step = this.repeatCount;
	    var dataCount=this.data.rows.length;
	    var row=0;
	    for(var i = 0; i < dataCount; i = i + step)
	    {
		    for(var j = i;j < i+step;j++)
		    {
			    var itemData = this.data.rows[j];
			    if(typeof(this.onDataBind) == "function") this.onDataBind(this, itemData);
			    if(j==i) resultHtml += this.lefterHTML;
    			
			    if(j<dataCount)
			    {
			        if(hasAlternating){
				        if(row%2==1)resultHtml += this.renderItem(itemData,true);
				        else        resultHtml += this.renderItem(itemData);
				    }else           resultHtml += this.renderItem(itemData);
			    }else               resultHtml += this.emptyItem;
			    if(j==i+step-1)     resultHtml += this.righterHTML;
			    else                resultHtml += this.vSeparator;
		    }
		    if(i<dataCount-step)    resultHtml += this.hSeparator;
		    row++;
	    }
	    resultHtml += this.footerHTML;
	    return resultHtml;
    },
    bind:function()
    {
	    if (this.data == null || this.data.isBroken == null || this.data.isBroken) alert("数据源为空或不合法!");
	    if (this.data.isEmpty)
	    {
		    this.view.innerHTML = this.nodataHTML;	   
		    if(typeof(this.onAfterDataBind) == "function") this.onAfterDataBind(this);
		    return;
	    }
	    this.view.innerHTML = this.getHtml();
	    if(typeof(this.onAfterDataBind) == "function") this.onAfterDataBind(this);
    }
});

var Options = Class.create();
Object.extend(Options.prototype, {
    initialize:function(options)
    {
        this.data=options;
    },
    repeater:function()
    {
        var result=new Object();
        result.dataId=this.data.dataId;
        result.repeatCount=this.data.repeatCount;
        return result;
    },
    xdbc:function()
    {
        var result=new Object();
        result.connectstring=this.data.connectstring;
        result.method=this.data.method;
        return result;
    }
});

var DataGrid = Class.create();
Object.extend(DataGrid.prototype, {
    initialize:function(viewId,options)
    {
        var dataGrid=this;
        this.options=new Options(options);
        var repeater=this.repeater=new Repeater(viewId,this.options.repeater());
        this.xdbc=new Xdbc(this.options.xdbc());
        this.onDataBind=null;
        this.onAfterDataBind=null;
        this.xdbc.onDataTable=function(table)
        {
            repeater.data=table;
            repeater.onDataBind=dataGrid.onDataBind;
            repeater.onAfterDataBind=dataGrid.onAfterDataBind;            
            repeater.bind();
        };
        this.xdbc.onDataSet=function(dataSet)
        {
            dataGrid.xdbc.onDataTable(dataSet.tableArray[0]);
        };
        this.xdbc.onError=function(msg)
        {
            alert(msg.message);
        };
    },
    show:function()
    {
        this.xdbc.exec();
    },
    refresh:function()
    {
        this.show();
    }
});
//Pager
var PagerButton = Class.create();
Object.extend(PagerButton.prototype, {
    initialize:function(pager)
    {
        this.pager=pager;
    },
    prevDetail:function()
    {
        return this.createLink("上一条",this.pager.prev);
    },
    nextDetail:function()
    {
        return this.createLink("下一条",this.pager.next);
    },
    first:function()
    {
        return this.createLink("首页",this.pager.first);
    },
    prev:function()
    {
        return this.createLink("前页",this.pager.prev);
    },
    next:function()
    {
        return this.createLink("后页",this.pager.next);
    },
    last:function()
    {
        return this.createLink("末页",this.pager.last);
    },
    delimiter:function()
    {
        return this.createDelimiter("&nbsp;|&nbsp;");
    },
    turn:function()
    {
        return this.createDelimiter("&nbsp;&nbsp;转到第"); 
    },
    turn1:function()
    {
        return this.createDelimiter("页&nbsp;"); 
    },
    information:function()
    {
        var info="页次:"+this.pager.page+"/"+this.pager.count;
        return this.createDelimiter(info);
    },
    createLink:function(text,action)
    {
	    var link=document.createElement("a");
	    link.href='javascript:void(0);';
	    link.innerHTML=text;
	    Event.observe(link, "click", action.bind(this.pager));
	    return link;
    },
    createInput:function()
    {
        var input=document.createElement("input");
        var pager=this.pager;
        var pagerButton=this;
        with(input)
        {
            type="text";
		    maxLength = 4;
		    size = 4;
		    value = this.pager.page;
		}
		Event.observe(input, "blur", function()
		    {
		        pager.newIndex=pagerButton.validate(this,pager.page);
		    }.bind(input));
		Event.observe(input, "focus", function()
		    {
		        this.select();
		    }.bind(input));
		return input;
    },
    createButton:function()
    {
        var button=document.createElement("button");
        var pager=this.pager;
        var pagerButton=this;
		Event.observe(button, "click", function()
		    {
		        pager.changeIndex(pager.newIndex);
		        return false;
		    }.bind(button));
		return button;
    },
    createDelimiter:function(text)
    {
        var delimiter=document.createElement("span");
        delimiter.innerHTML=text;
        return delimiter;
    },
    validate:function (obj,defaltValue)
    {
	    var value = obj.value;
	    if(!value.match(/^[0-9]{0,4}$/))
	    {
		    alert("输入的页码包含不合法的字符!");
		    obj.value="";
		    obj.focus();
		    return defaltValue;
	    }
	    return parseInt(value);
    }
    
});

var Pager = Class.create();
Object.extend(Pager.prototype, {
    initialize:function(containerId)
    {
        if (arguments.length == 0) {alert("开发者: Pager至少需要一个参数"); return;}
        var pager=this;
        var pagerButton = new PagerButton(this);
        this.infoFlags="0,1";
        this.extra=[];
        this.container=$(containerId);
        
        if((this.container != null) && (typeof(this.container.contains) == "undefined")) HTMLElement.prototype.contains = _htmlEl_contains;
	    function _htmlEl_contains( obj ){
		    var objNodes = pager.childNodes;
		    if( objNodes.length < 1 )
			    return false;
		    for( var i=0; i< objNodes.length; i++ ){
			    if( objNodes[i] == obj )
				    return true;
		    }
		    return false;
	    };
	    
	    if (this.container == null) return; 
	    
	    this.firstLink=pagerButton.first();
	    this.prevLink=pagerButton.prev();
	    this.nextLink=pagerButton.next();
	    this.lastLink=pagerButton.last();
	    this.input=pagerButton.createInput();
	    this.go=pagerButton.createButton();
	    
	    this.information=pagerButton.information();
	    
	    this.delimiter1=pagerButton.delimiter();
	    this.delimiter2=pagerButton.delimiter();
	    this.delimiter3=pagerButton.delimiter();
	    this.turn=pagerButton.turn();
	    this.turn1=pagerButton.turn1();
	    if (this.container != null) {
		    ["firstLink","delimiter1","prevLink","delimiter2","nextLink","delimiter3","lastLink", "information", "turn","input","turn1","go"
		    ].each(function(el) {this.container.appendChild(this[el]);}.bind(this));
	    }
	    
	    if (arguments.length > 1)
	    {
		    var el = null;
		    for (var i = 1; i < arguments.length; i++)
		    {
			    this.extra[i-1] = {container: $(arguments[i])};
				var x_this = this.extra[i-1];

			    x_this.firstLink=pagerButton.first();
	            x_this.prevLink=pagerButton.prev();
	            x_this.nextLink=pagerButton.next();
	            x_this.lastLink=pagerButton.last();
	            x_this.input=pagerButton.createInput();
	            x_this.go=pagerButton.createButton();
        	    
	            x_this.information=pagerButton.information();
        	    
	            x_this.delimiter1=pagerButton.delimiter();
	            x_this.delimiter2=pagerButton.delimiter();
	            x_this.delimiter3=pagerButton.delimiter();
	            x_this.turn=pagerButton.turn();
	            x_this.turn1=pagerButton.turn1();
	            var temp_pagecont = x_this.container;
			    if(temp_pagecont != null) {
				["firstLink","delimiter1","prevLink","delimiter2","nextLink","delimiter3","lastLink", "information", "turn","input","turn1","go"
				].each(function(el) {temp_pagecont.appendChild(x_this[el]);});
			    }
		    }
	    }
    },
    count:1,   
    isFirst:true,
    isLast:true,
    newIndex:1,
    onAfterRender:null,
    onChange:null,
    page:1,
    pageInfo:[1,1,0,0],
    records:10,
    size:10,
    changeIndex:function(newIndex)
    {
	    if (typeof(this.onChange) == 'function') this.onChange(this,newIndex);
    },
    first:function()
    {
        if (typeof(this.onChange) == 'function') this.onChange(this, 1);
        return false;
    },
    last:function()
    {
        if (typeof(this.onChange) == 'function') this.onChange(this, this.count);
        return false;
    },
    next:function()
    {
        var newIndex=this.page+1;
        newIndex=newIndex>this.count?this.count:newIndex;
        if (typeof(this.onChange) == 'function') this.onChange(this, newIndex);
        return false;
    },
    prev:function()
    {
        var newIndex=this.page-1;
        newIndex=newIndex<1?1:newIndex;
        if (typeof(this.onChange) == 'function') this.onChange(this, newIndex);
        return false;
    },
    render:function()
    {
	    var currentPage=this.page = parseInt(this.pageInfo[0])>0?parseInt(this.pageInfo[0]):1;
	    var totlalPage=this.count = parseInt(this.pageInfo[1]);
	    this.size = parseInt(this.pageInfo[2]);
	    this.records = parseInt(this.pageInfo[3]);
	    
	    this.isLast = this.page >= this.count;
	    this.isFirst = this.page<= 1;
        this.newIndex = this.page;
        var isFirst=this.isFirst==true;
        var isLast=this.isLast==true;
        
        var showInfos=this.infoFlags.split(",");
        if(totlalPage==0)
        {
            totlalPage=1;
        }
        this.information.innerHTML=(showInfos[0]=="1")?"&nbsp;&nbsp;页次："+currentPage+"/"+totlalPage+"页&nbsp;":"";
        this.input.value=currentPage;
        this.firstLink.disabled=isFirst;
        this.prevLink.disabled=isFirst;
        this.nextLink.disabled=isLast;
        this.lastLink.disabled=isLast;

	    if (this.extra.length > 0) {
		    var x_this = null;
		    for (var i = 0; i < this.extra.length; i++) 
		    {
			    x_this  = this.extra[i];
                x_this.information.innerHTML=(showInfos[i+1]=="1")?"&nbsp;&nbsp;页次："+currentPage+"/"+totlalPage+"页&nbsp;":"";
                x_this.input.value=currentPage;
                x_this.firstLink.disabled=isFirst;
                x_this.prevLink.disabled=isFirst;
                x_this.nextLink.disabled=isLast;
                x_this.lastLink.disabled=isLast;
		    }
		    x_this = null;
	    }
    	
	    if( typeof( this.onAfterRender ) == "function" )
		    this.onAfterRender();
    },
    show:function(visible)
    {
	    if (typeof(visible)=="undefined") visible = true;
	    if (this.container) this.container.style.display = (visible) ? "" : "none";
	    if (this.extra)
		    for (var i = 0; i < this.extra.length; i++) {
			    if (this.extra[i].container) this.extra[i].container.style.display = (visible) ? "" : "none";
		    }
    }
});

var SimplePager = Class.create();
Object.extend(SimplePager.prototype, {
    initialize:function(containerId)
    {
        if (arguments.length == 0) {alert("开发者: Pager至少需要一个参数"); return;}
        var pager=this;
        var pagerButton = new PagerButton(this);
        this.extra=[];
        this.container=$(containerId);
        
        if((this.container != null) && (typeof(this.container.contains) == "undefined")) HTMLElement.prototype.contains = _htmlEl_contains;
	    function _htmlEl_contains( obj ){
		    var objNodes = pager.childNodes;
		    if( objNodes.length < 1 )
			    return false;
		    for( var i=0; i< objNodes.length; i++ ){
			    if( objNodes[i] == obj )
				    return true;
		    }
		    return false;
	    };
	    
	    if (this.container == null) return; 
	    
	    this.prevLink=pagerButton.prev();
	    this.nextLink=pagerButton.next();
	    this.delimiter1=pagerButton.delimiter();


	    if (this.container != null) {
		    ["prevLink","delimiter1","nextLink"
		    ].each(function(el) {this.container.appendChild(this[el]);}.bind(this));
	    }
	    
	    if (arguments.length > 1)
	    {
		    var el = null;
		    for (var i = 1; i < arguments.length; i++)
		    {
			    this.extra[i-1] = {container: $(arguments[i])};
				var x_this = this.extra[i-1];

	            x_this.prevLink=pagerButton.prev();
	            x_this.nextLink=pagerButton.next();


	            x_this.delimiter1=pagerButton.delimiter();

	            var temp_pagecont = x_this.container;
			    if(temp_pagecont != null) {
				["prevLink","delimiter1","nextLink"
				].each(function(el) {temp_pagecont.appendChild(x_this[el]);});
			    }
		    }
	    }
    },
    count:1,   
    isFirst:true,
    isLast:true,
    newIndex:1,
    onAfterRender:null,
    onChange:null,
    page:1,
    pageInfo:[1,1,0,0],
    records:10,
    size:10,

    next:function()
    {
        var newIndex=this.page+1;
        newIndex=newIndex>this.count?this.count:newIndex;
        if (typeof(this.onChange) == 'function') this.onChange(this, newIndex);
        return false;
    },
    prev:function()
    {
        var newIndex=this.page-1;
        newIndex=newIndex<1?1:newIndex;
        if (typeof(this.onChange) == 'function') this.onChange(this, newIndex);
        return false;
    },
    render:function()
    {
	    var currentPage=this.page = parseInt(this.pageInfo[0])>0?parseInt(this.pageInfo[0]):1;
	    var totlalPage=this.count = parseInt(this.pageInfo[1]);
	    this.size = parseInt(this.pageInfo[2]);
	    this.records = parseInt(this.pageInfo[3]);
	    
	    this.isLast = this.page >= this.count;
	    this.isFirst = this.page<= 1;
        this.newIndex = this.page;
        var isFirst=this.isFirst==true;
        var isLast=this.isLast==true;
        
        this.prevLink.disabled=isFirst;
        this.nextLink.disabled=isLast;

	    if (this.extra.length > 0) {
		    var x_this = null;
		    for (var i = 0; i < this.extra.length; i++) 
		    {
			    x_this  = this.extra[i];
                x_this.prevLink.disabled=isFirst;
                x_this.nextLink.disabled=isLast;
		    }
		    x_this = null;
	    }
    	
	    if( typeof( this.onAfterRender ) == "function" )
		    this.onAfterRender();
    },
    show:function(visible)
    {
	    if (typeof(visible)=="undefined") visible = true;
	    if (this.container) this.container.style.display = (visible) ? "" : "none";
	    if (this.extra)
		    for (var i = 0; i < this.extra.length; i++) {
			    if (this.extra[i].container) this.extra[i].container.style.display = (visible) ? "" : "none";
		    }
    }
});

var DetailPager = Class.create();
Object.extend(DetailPager.prototype, {
    initialize:function(containerId)
    {
        if (arguments.length == 0) {alert("开发者: Pager至少需要一个参数"); return;}
        var pager=this;
        var pagerButton = new PagerButton(this);
        this.extra=[];
        this.container=$(containerId);
        
        if((this.container != null) && (typeof(this.container.contains) == "undefined")) HTMLElement.prototype.contains = _htmlEl_contains;
	    function _htmlEl_contains( obj ){
		    var objNodes = pager.childNodes;
		    if( objNodes.length < 1 )
			    return false;
		    for( var i=0; i< objNodes.length; i++ ){
			    if( objNodes[i] == obj )
				    return true;
		    }
		    return false;
	    };
	    
	    if (this.container == null) return; 
	    
	    this.prevLink=pagerButton.prevDetail();
	    this.nextLink=pagerButton.nextDetail();
	    this.delimiter1=pagerButton.delimiter();


	    if (this.container != null) {
		    ["prevLink","delimiter1","nextLink"
		    ].each(function(el) {this.container.appendChild(this[el]);}.bind(this));
	    }
	    
	    if (arguments.length > 1)
	    {
		    var el = null;
		    for (var i = 1; i < arguments.length; i++)
		    {
			    this.extra[i-1] = {container: $(arguments[i])};
				var x_this = this.extra[i-1];

	            x_this.prevLink=pagerButton.prevDetail();
	            x_this.nextLink=pagerButton.nextDetail();


	            x_this.delimiter1=pagerButton.delimiter();

	            var temp_pagecont = x_this.container;
			    if(temp_pagecont != null) {
				["prevLink","delimiter1","nextLink"
				].each(function(el) {temp_pagecont.appendChild(x_this[el]);});
			    }
		    }
	    }
    },
    count:1,   
    isFirst:true,
    isLast:true,
    newIndex:1,
    onAfterRender:null,
    onChange:null,
    page:1,
    pageInfo:[1,1,0,0],
    records:10,
    size:10,

    next:function()
    {
        var newIndex=this.page+1;
        newIndex=newIndex>this.count?this.count:newIndex;
        if (typeof(this.onChange) == 'function') this.onChange(this, newIndex);
        return false;
    },
    prev:function()
    {
        var newIndex=this.page-1;
        newIndex=newIndex<1?1:newIndex;
        if (typeof(this.onChange) == 'function') this.onChange(this, newIndex);
        return false;
    },
    render:function()
    {
	    var currentPage=this.page = parseInt(this.pageInfo[0])>0?parseInt(this.pageInfo[0]):1;
	    var totlalPage=this.count = parseInt(this.pageInfo[1]);
	    this.size = parseInt(this.pageInfo[2]);
	    this.records = parseInt(this.pageInfo[3]);
	    
	    this.isLast = this.page >= this.count;
	    this.isFirst = this.page<= 1;
        this.newIndex = this.page;
        var isFirst=this.isFirst==true;
        var isLast=this.isLast==true;
        
        this.prevLink.disabled=isFirst;
        this.nextLink.disabled=isLast;

	    if (this.extra.length > 0) {
		    var x_this = null;
		    for (var i = 0; i < this.extra.length; i++) 
		    {
			    x_this  = this.extra[i];
                x_this.prevLink.disabled=isFirst;
                x_this.nextLink.disabled=isLast;
		    }
		    x_this = null;
	    }
    	
	    if( typeof( this.onAfterRender ) == "function" )
		    this.onAfterRender();
    },
    show:function(visible)
    {
	    if (typeof(visible)=="undefined") visible = true;
	    if (this.container) this.container.style.display = (visible) ? "" : "none";
	    if (this.extra)
		    for (var i = 0; i < this.extra.length; i++) {
			    if (this.extra[i].container) this.extra[i].container.style.display = (visible) ? "" : "none";
		    }
    }
});


var DataView = Class.create();
Object.extend(DataView.prototype, {
    initialize:function(viewId,pagerObj,options)
    {
        var dataView=this;
        var pager=this.pager=pagerObj;
        this.options=new Options(options);
        var repeater=this.repeater=new Repeater(viewId,this.options.repeater());
        this.xdbc=new Xdbc(this.options.xdbc());
        this.onDataBind=null;
        this.onAfterDataBind=null;
        this.xdbc.onDataTable=function(table)
        {
            alert("开发者：从服务器端返回的数据必须为DataSet！");
        };
        this.xdbc.onDataSet=function(dataSet)
        {
            var pageRow=dataSet.tableArray[1].rows[0];
            var pageInfo=[];
            pageInfo[0]=pageRow["page"];
            pageInfo[1]=pageRow["count"];
            pageInfo[2]=pageRow["size"];
            pageInfo[3]=pageRow["records"];
            pager.pageInfo=pageInfo;
            pager.render();/**/
            repeater.data=dataSet.tableArray[0];
            repeater.onDataBind=dataView.onDataBind;
            repeater.onAfterDataBind=dataView.onAfterDataBind;            
            repeater.bind();
        };
        this.xdbc.onError=function(msg)
        {
            alert(msg.message);
        };
        pager.onChange=function(a,b)
        {
            dataView.xdbc.parameter.append("page",b);
            dataView.show();
        };
    },
    show:function()
    {
        this.xdbc.exec();
    },
    refresh:function()
    {
        this.show();
    }
});
