﻿if(window.Event){// 修正Event的DOM
    Event.prototype.__defineSetter__("returnValue",function(b){// 
        if(!b)this.preventDefault();
        return b;
        });
    Event.prototype.__defineSetter__("cancelBubble",function(b){// 设置或者检索当前事件句柄的层次冒泡
        if(b)this.stopPropagation();
        return b;
        });
    Event.prototype.__defineGetter__("srcElement",function(){
        var node=this.target;
        while(node.nodeType!=1)node=node.parentNode;
        return node;
        });
    Event.prototype.__defineGetter__("fromElement",function(){// 返回鼠标移出的源节点
        var node;
        if(this.type=="mouseover")
            node=this.relatedTarget;
        else if(this.type=="mouseout")
            node=this.target;
        if(!node)return;
        while(node.nodeType!=1)node=node.parentNode;
        return node;
        });
    Event.prototype.__defineGetter__("toElement",function(){// 返回鼠标移入的源节点
        var node;
        if(this.type=="mouseout")
            node=this.relatedTarget;
        else if(this.type=="mouseover")
            node=this.target;
        if(!node)return;
        while(node.nodeType!=1)node=node.parentNode;
        return node;
        });
    Event.prototype.__defineGetter__("offsetX",function(){
        return this.layerX;
        });
    Event.prototype.__defineGetter__("offsetY",function(){
        return this.layerY;
        });
    }
if(window.Document){// 修正Document的DOM
    }
if(window.Node){// 修正Node的DOM
    Node.prototype.replaceNode=function(Node){// 替换指定节点
        this.parentNode.replaceChild(Node,this);
        }
    Node.prototype.removeNode=function(removeChildren){// 删除指定节点
        if(removeChildren)
            return this.parentNode.removeChild(this);
        else{
            var range=document.createRange();
            range.selectNodeContents(this);
            return this.parentNode.replaceChild(range.extractContents(),this);
            }
        }
    Node.prototype.swapNode=function(Node){// 交换节点
        var nextSibling=this.nextSibling;
        var parentNode=this.parentNode;
        node.parentNode.replaceChild(this,Node);
        parentNode.insertBefore(node,nextSibling);
        }
    }
if(window.HTMLElement){
    HTMLElement.prototype.__defineGetter__("all",function(){
        var a=this.getElementsByTagName("*");
        var node=this;
        a.tags=function(sTagName){
            return node.getElementsByTagName(sTagName);
            }
        return a;
        });
    HTMLElement.prototype.__defineGetter__("parentElement",function(){
        if(this.parentNode==this.ownerDocument)return null;
        return this.parentNode;
        });
    HTMLElement.prototype.__defineGetter__("children",function(){
        var tmp=[];
        var j=0;
        var n;
        for(var i=0;i<this.childNodes.length;i++){
            n=this.childNodes[i];
            if(n.nodeType==1){
                tmp[j++]=n;
                if(n.name){
                    if(!tmp[n.name])
                        tmp[n.name]=[];
                    tmp[n.name][tmp[n.name].length]=n;
                    }
                if(n.id)
                    tmp[n.id]=n;
                }
            }
        return tmp;
        });
    HTMLElement.prototype.__defineGetter__("currentStyle", function(){
        return this.ownerDocument.defaultView.getComputedStyle(this,null);
        });
    HTMLElement.prototype.__defineSetter__("outerHTML",function(sHTML){
        var r=this.ownerDocument.createRange();
        r.setStartBefore(this);
        var df=r.createContextualFragment(sHTML);
        this.parentNode.replaceChild(df,this);
        return sHTML;
        });
    HTMLElement.prototype.__defineGetter__("outerHTML",function(){
        var attr;
        var attrs=this.attributes;
        var str="<"+this.tagName;
        for(var i=0;i<attrs.length;i++){
            attr=attrs[i];
            if(attr.specified)
                str+=" "+attr.name+'="'+attr.value+'"';
            }
        if(!this.canHaveChildren)
            return str+">";
        return str+">"+this.innerHTML+"</"+this.tagName+">";
        });
    HTMLElement.prototype.__defineGetter__("canHaveChildren",function(){
        switch(this.tagName.toLowerCase()){
            case "area":
            case "base":
            case "basefont":
            case "col":
            case "frame":
            case "hr":
            case "img":
            case "br":
            case "input":
            case "isindex":
            case "link":
            case "meta":
            case "param":
                return false;
            }
        return true;
        });
    HTMLElement.prototype.__defineSetter__("innerText",function(sText){
        var parsedText=document.createTextNode(sText);
        this.innerHTML=parsedText;
        return parsedText;
        });
    HTMLElement.prototype.__defineGetter__("innerText",function(){
        var r=this.ownerDocument.createRange();
        r.selectNodeContents(this);
        return r.toString();
        });
    HTMLElement.prototype.__defineSetter__("outerText",function(sText){
        var parsedText=document.createTextNode(sText);
        this.outerHTML=parsedText;
        return parsedText;
        });
    HTMLElement.prototype.__defineGetter__("outerText",function(){
        var r=this.ownerDocument.createRange();
        r.selectNodeContents(this);
        return r.toString();
        });
    HTMLElement.prototype.attachEvent=function(sType,fHandler){
        var shortTypeName=sType.replace(/on/,"");
        fHandler._ieEmuEventHandler=function(e){
            window.event=e;
            return fHandler();
            }
        this.addEventListener(shortTypeName,fHandler._ieEmuEventHandler,false);
        }
    HTMLElement.prototype.detachEvent=function(sType,fHandler){
        var shortTypeName=sType.replace(/on/,"");
        if(typeof(fHandler._ieEmuEventHandler)=="function")
            this.removeEventListener(shortTypeName,fHandler._ieEmuEventHandler,false);
        else
            this.removeEventListener(shortTypeName,fHandler,true);
        }
    HTMLElement.prototype.contains=function(Node){// 是否包含某节点
        do if(Node==this)return true;
        while(Node=Node.parentNode);
        return false;
        }
    HTMLElement.prototype.insertAdjacentElement=function(where,parsedNode){
        switch(where){
            case "beforeBegin":
                this.parentNode.insertBefore(parsedNode,this);
                break;
            case "afterBegin":
                this.insertBefore(parsedNode,this.firstChild);
                break;
            case "beforeEnd":
                this.appendChild(parsedNode);
                break;
            case "afterEnd":
                if(this.nextSibling)
                    this.parentNode.insertBefore(parsedNode,this.nextSibling);
                else
                    this.parentNode.appendChild(parsedNode);
                break;
            }
        }
    HTMLElement.prototype.insertAdjacentHTML=function(where,htmlStr){
        var r=this.ownerDocument.createRange();
        r.setStartBefore(this);
        var parsedHTML=r.createContextualFragment(htmlStr);
        this.insertAdjacentElement(where,parsedHTML);
        }
    HTMLElement.prototype.insertAdjacentText=function(where,txtStr){
        var parsedText=document.createTextNode(txtStr);
        this.insertAdjacentElement(where,parsedText);
        }
    HTMLElement.prototype.attachEvent=function(sType,fHandler){
        var shortTypeName=sType.replace(/on/,"");
        fHandler._ieEmuEventHandler=function(e){
            window.event=e;
            return fHandler();
            }
        this.addEventListener(shortTypeName,fHandler._ieEmuEventHandler,false);
        }
    HTMLElement.prototype.detachEvent=function(sType,fHandler){
        var shortTypeName=sType.replace(/on/,"");
        if(typeof(fHandler._ieEmuEventHandler)=="function")
            this.removeEventListener(shortTypeName,fHandler._ieEmuEventHandler,false);
        else
            this.removeEventListener(shortTypeName,fHandler,true);
        }
    }
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-06-26
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:遍历设置直至创建对象成功
*Example:
*--------------------------------------------------------------------------------------------------
*/
var Try = {
	these:function()
	{
		for(var i=0,len=arguments.length;i<len;i++)
		{
			var arg = arguments[i];
			try
			{
				var result = arg();
				if(result)
					return result;
			}
			catch (ex)
			{
				continue;
			}
		}
		return false;
	}
};
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-06-26
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:重设对象自己并赋于自己参数
*Example:function a(){};a=a.bind("oo");
*--------------------------------------------------------------------------------------------------
*/
Function.prototype.bind = function()
{
	var self = this;
	var args = [];
	for(var i=0;i<arguments.length;i++)
	{
		args[i] = arguments[i];
	}
	var obj = args.shift();
	return function()
	{
		var len = args.length;
		for(var i=0,len=arguments.length;i<len;i++)
		{
			args[len++] = arguments[i];
		}
		self.apply(obj,args);
	};
}
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-06-25
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:去除字符串左边的空格（全角、半角）
*Example:var x = " abcd";x = x.lTrim();
*--------------------------------------------------------------------------------------------------
*/
String.prototype.lTrim = function()
{
	var reg = /^[\s|　]*/gi;
	return this.replace(reg,"");
}
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-06-25
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:去除字符串右边的空格（全角、半角）
*Example:var x = "abcd ";x = x.rTrim();
*--------------------------------------------------------------------------------------------------
*/
String.prototype.rTrim = function()
{
	var reg = /[\s|　]*$/gi;
	return this.replace(reg,"");
}
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-06-25
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:去除字符串两边的空格（全角、半角）
*Example:var x = " abcd ";x = x.trim();
*--------------------------------------------------------------------------------------------------
*/
String.prototype.trim = function()
{	
	var reg = /(^[\s|　]*)|([\s|　]*$)/gi;
	return this.replace(reg,"");	
	/*
	return this.lTrim().rTrim();
	*/
}
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-06-25
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:获取字符串的长度(如果带参则获取真实长度)
*Example:var x = "abcd";x = x.len()或者x = x.len(true);
*--------------------------------------------------------------------------------------------------
*/
String.prototype.len = function()
{
	if(arguments.length==0)
	{
		return this.length;
	}
	var reg = /[\u4e00-\u9fa5]/gi;
	return this.replace(reg,"**").length;
}
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-06-25
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:将当前对象克隆一个副本
*Example:var x = "abcd";var y = x.clone();
*--------------------------------------------------------------------------------------------------
*/
String.prototype.clone = function()
{
	return this;
}
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-06-25
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:判断当前对象是否以某个串开始
*Example:var x = "abcd";var y = x.startsWith("a");
*--------------------------------------------------------------------------------------------------
*/
String.prototype.startsWith = function()
{
	if(arguments.length<=0)
		return false;
	return (this.indexOf(arguments[0])==0)
}
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-06-25
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:判断当前对象是否以某个串结束
*Example:var x = "abcd";var y = x.endWith("d");
*--------------------------------------------------------------------------------------------------
*/
String.prototype.endsWith = function()
{
	if(arguments.length<=0)
		return false;
	var value = arguments[0];
	return (this.substring(this.length-value.length)==value)
}
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-06-25
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:从当前串中左取指定长度的字符串
*Example:var x = "abcd";var y = x.left(5);
*--------------------------------------------------------------------------------------------------
*/
String.prototype.left = function()
{
	if(arguments.length<=0)
		return this;
	if(isNaN(arguments[0]))
		return this;
	return this.substring(0,Math.abs(arguments[0]));
}
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-06-25
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:从当前串中右取指定长度的字符串
*Example:var x = "abcd";var y = x.right(5);
*--------------------------------------------------------------------------------------------------
*/
String.prototype.right = function()
{
	if(arguments.length<=0)
		return this;
	if(isNaN(arguments[0]))
		return this;
	var len = Math.abs(arguments[0]);
	if((this.length-len)>0)
		return this.substring(this.length-len);
	else
		return this;
}
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-06-25
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:将当前串以指定内容左扩展到指定长度
*Example:var x = "abcd";var y = x.padLeft(10,"0");
*--------------------------------------------------------------------------------------------------
*/
String.prototype.padLeft = function()
{
	if(arguments.length<=1)
		return this;
	if(isNaN(arguments[0]))
		return this;
	var len = Math.abs(arguments[0]);
	var value = arguments[1]+"";
	var strResult = this.valueOf();
	for(var i=0;i<len;i++)
	{
		strResult = value + strResult;
	}
	return strResult;
}
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-06-25
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:将当前串以指定内容右扩展到指定长度
*Example:var x = "abcd";var y = x.padRight(10,"0");
*--------------------------------------------------------------------------------------------------
*/
String.prototype.padRight = function()
{
	if(arguments.length<=1)
		return this;
	if(isNaN(arguments[0]))
		return this;
	var len = Math.abs(arguments[0]);
	var value = arguments[1]+"";
	var strResult = this.valueOf();
	for(var i=0;i<len;i++)
	{
		strResult = strResult + value;
	}
	return strResult;
}
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-06-25
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:将指定内容插入到当前串中指定位置
*Example:var x = "abcd";var y = x.insert(4,"999");
*--------------------------------------------------------------------------------------------------
*/
String.prototype.insert = function()
{
	if(arguments.length==0)
		return this;
	if(arguments.length==1)
		return (this.valueOf()+arguments[0].toString());
	if(isNaN(arguments[0]))
		return (this.valueOf()+arguments[1].toString());
	if(parseInt(arguments[0])<=0)
		return (arguments[1].toString()+this.valueOf());
	var len = this.length;
	var pos = Math.abs(arguments[0]);
	if(pos>=len)
		return (this.valueOf()+arguments[1].toString());
	var p1 = this.substring(0,pos);
	var p2 = this.substring(pos);
	return (p1+arguments[1].toString()+p2);
}
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-06-25
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:从当前串中删除指定位置的指定长度的内容
*Example:var x = "abcd";var y = x.remove(2)或者var y = x.remove(2,5);
*--------------------------------------------------------------------------------------------------
*/
String.prototype.remove = function()
{
	var s = "";
	if(arguments[0]>0)
		s = this.valueOf().substring(0,arguments[0]);
	if(arguments[0]+arguments[1]<=this.length)
		s += this.valueOf().substring(arguments[0]+arguments[1]);
	return s;
}
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-06-25
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:获取当前串中是否包含指定串
*Example:var x = "abcd";var y = x.contains("a");
*--------------------------------------------------------------------------------------------------
*/
String.prototype.contains = function()
{
	if(arguments.length==0)
		return true;
	var value = arguments[0].toString();
	return (this.indexOf(value)>-1);
}
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-06-26
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:扩展数组基类方法，拷贝副本
*Example:var x = [];var y = x.clone();
*--------------------------------------------------------------------------------------------------
*/
Array.prototype.clone=function()
{
	return ([].concat(this));
};
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-06-26
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:扩展数组基类方法，获取当前对象长度
*Example:var x = [];var y = x.size();
*--------------------------------------------------------------------------------------------------
*/
Array.prototype.size=function()
{
	return this.length;
};
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-06-26
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:扩展数组基类方法，获取第一个数组元素
*Example:var x = ["aa","bb","cc"];var y = x.first();
*--------------------------------------------------------------------------------------------------
*/
Array.prototype.first=function()
{
	return this[0];
};
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-06-26
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:扩展数组基类方法，获取数组最后一个元素
*Example:var x = ["aa","bb","cc"];var y = x.last();
*--------------------------------------------------------------------------------------------------
*/
Array.prototype.last=function()
{
	return this[this.length-1];
};
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-06-26
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:扩展数组基类方法，判断数组中是否含有某个元素
*Example:var x = ["aa","bb","cc"];var y = x.indexOf("aa");
*--------------------------------------------------------------------------------------------------
*/
Array.prototype.indexOf=function(arrElement)
{
	for(var i=0,len=this.length;i<len;i++)
	{
		if(this[i] == arrElement)
		{
			return i;
		}
	}
	return -1;
};
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-06-26
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:扩展数组基类方法，获取排除当前元素后得到的新数组
*Example:var x = ["aa","bb","cc"];var y = x.without("aa");
*--------------------------------------------------------------------------------------------------
*/
Array.prototype.without=function(arrElement)
{
	var result = [];
	for(var i=0,j=0,len=this.length;i<len;i++)
	{
		if(this[i] == arrElement)
		{
			continue;
		}
		result[j++] = this[i];
	}	
	return result;
};
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-06-26
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:扩展数组基类方法，清空当前数组并返回
*Example:var x = ["aa","bb","cc"];var y = x.clear();
*--------------------------------------------------------------------------------------------------
*/
Array.prototype.clear=function()
{
	this.length = 0;
	return this;
};
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-06-26
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:扩展数组基类方法，在指定位置插入新的元素
*Example:var x = ["aa","bb","cc"];var y = x.insert("dd")或者var y = x.insert(2,"dd");
*--------------------------------------------------------------------------------------------------
*/
Array.prototype.insert = function()
{
	if(arguments.length==0) return this;
	if(arguments.length==1) return this.concat(arguments[0]);
	if(arguments.length==2)
	{
		var start = arguments[0];
		var value = arguments[1];
		var p1 = this.slice(0,start);
		var p2 = this.slice(start);
		return p1.concat(value).concat(p2);
	}
	else return this;
}
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-07-01
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:扩展日期类，isLeapYear(),lunar(),getDays(),dateAdd(flag,number),dateDiff(flag,enddate)
*Example:var x = new Date();var y = x.lunar();
*--------------------------------------------------------------------------------------------------
*/
with(Date)
{
	//为当前日期添加指定日、月及年数后的新日期
	prototype.dateAdd = function(flag,number)
	{
		flag = flag.toLowerCase();
		number = parseInt(number);
		var d = new Date(this.getFullYear(),this.getMonth(),this.getDate());
		switch(flag)
		{
			case "day":
				d.setDate(d.getDate()+number);
				break;
			case "month":
				d.setMonth(d.getMonth()+number);
				break;
			case "year":
				d.setYear(d.getFullYear()+number);
				break;
			default:
				break;
		};
		return d;
	};
	//判断两个日期之间的相距日、月及年数
	prototype.dateDiff = function(flag,newdate)
	{
		switch(flag.toLowerCase())
		{
			case "day":
				var result = 0;
				var d,d1,d2;
				if(this.getFullYear()<newdate.getFullYear())
				{
					for(var i=this.getMonth()+1;i<=12;i++)
					{
						if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12)
							result += 31;
						else if(i==4 || i==6 || i==9 || i==11)
							result += 30;
						else if(this.isLeapYear())
							result += 29;
						else
							result += 28;
					}
					result -= this.getDate();
					
					for(var i=1;i<newdate.getMonth()+1;i++)
					{
						if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12)
							result += 31;
						else if(i==4 || i==6 || i==9 || i==11)
							result += 30;
						else if(newdate.isLeapYear())
							result += 29;
						else
							result += 28;
					}
					result += newdate.getDate();
					for(var i=this.getFullYear()+1;i<newdate.getFullYear();i++)
					{
						d = new Date(i,0,1);
						if(d.isLeapYear()) result += 366;
						else result += 365;
					}
				}
				else if(this.getFullYear()==newdate.getFullYear())
				{
					d1=this,d2=newdate;
					if(d1.getMonth()>d2.getMonth()) {d1 = newdate;d2=this;}
					result = d1.getDays();
					
					for(var i=d1.getMonth()+1;i<d2.getMonth();i++)
					{
						if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12)
							result += 31;
						else if(i==4 || i==6 || i==9 || i==11)
							result += 30;
						else if(d1.isLeapYear())
							result += 29;
						else
							result += 28;							
					}
					result -= d1.getDate();
					result += d2.getDate();
					if(d2==this) result *= -1;
				}
				else
				{
					result = -1 * newdate.dateDiff("day",this);
				}
				return result;
			case "month":
				return ((newdate.getFullYear()-this.getFullYear())*12+newdate.getMonth()-this.getMonth());
				break;
			case "year":
				return (newdate.getFullYear()-this.getFullYear());
			default:
				return 0;
		};
	};
	//判断当前日期是否为闰年
	prototype.isLeapYear = function(){
		var year = this.getFullYear();
		if(year%400==0 || (year%4==0 && year%100!=0)) return true;
		else return false;
	};
	//获取当前日期的天干地支信息
	prototype.lunar = function()
	{
		var tian = ["甲","乙","丙","丁","戊","已","庚","寅","壬","癸"];
		var di1 = ["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"];
		var di2 = ["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"];
		var result = [];
		var tian_index = (this.getFullYear()-3)%tian.length;
		tian_index = (tian_index==0)?(tian.length-1):(tian_index-1);
		var di_index = (this.getFullYear()-3)%di1.length;		
		di_index = (di_index==0)?(di1.length-1):(di_index-1);
		result[0] = tian[tian_index]+di1[di_index];
		result[1] = di2[di_index]+"年";
		return result;
	};
	//获取当前日期的当前月的天数
	prototype.getDays = function()
	{
		var i = this.getMonth()+1;
		var result = 0;
		if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12)
			result = 31;
		else if(i==4 || i==6 || i==9 || i==11)
			result = 30;
		else if(this.isLeapYear())
			result = 29;
		else
			result = 28;
		return result;
	};
}
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-07-01
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:cookier操作类，静态方法get,set,erase(获取、添加、删除)
*Example:var x = new Cookie("name","value");Cookie.set(x);var y = Cookie.get("name");
*--------------------------------------------------------------------------------------------------
*/
function Cookie(name,value,seconds)
{
	this.name = name;
	if(value==null) this.value="";
	else if((typeof value).toLowerCase()=="undefined") this.value = "";
	else this.value = value;
	var d = new Date();
	if((typeof seconds).toLowerCase()=="object") d = seconds;
	else if((typeof seconds).toLowerCase()=="number") d.setTime(d.getTime()+seconds);
	else d.setTime(d.getTime()+24*60*60*1000);
	this.expires = d;
}
//静态设置方法
Cookie.set = function(cookie)
{
	if(cookie instanceof Cookie)
	{
		document.cookie = escape(cookie.name)+"="+escape(cookie.value)+";expires="+cookie.expires.toGMTString()+"/";
	}
}
//静态获取方法
Cookie.get = function(name)
{
	name = escape(name)+"=";
	var start,end;
	start = document.cookie.indexOf(name);
	if(start>=0)
	{
		start += name.length;
		end = document.cookie.indexOf(";",start);
		if(end==-1)
			end = document.cookie.length;
		result = unescape(document.cookie.substring(start,end));
	}
	else
		result = "";
	return result;
}
//静态删除方法
Cookie.erase =function(name)
{
	var d = new Date();
	d.setTime(d.getTime()-86400*1000);
	var c = new Cookie(name,"",d);
	Cookie.set(c);
}
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-07-02
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:块内容滚动类(ID或者对象，滚动宽度，滚动高度，滚动周期，滚动方向)
*Example:var x = new WBMarquee("div",150,120,10,"left");
*--------------------------------------------------------------------------------------------------
*/
function WBMarquee(element,width,height,delay,direction)
{
	var obj;
	var flag = false;
	var timer;
	var start;
	var speed = 1;
	direction = direction.toLowerCase();
	if((typeof element).toLowerCase()=="object") obj=element;
	else obj=document.getElementById(element);
	obj.style.width = width+"px";
	obj.style.height = height+"px";
	obj.style.overflow = "hidden";
	obj.onmouseover = pause;
	obj.onmouseout = resume;
	function pause(){flag = true;}
	function resume(){flag = false;}
	function up()
	{
		if(flag) return;
		if(obj.scrollTop>=obj.scrollHeight-height) obj.scrollTop = 0;
		else obj.scrollTop += speed;
	}
	function down()
	{
		if(flag) return;
		if(obj.scrollTop<=0) obj.scrollTop = obj.scrollHeight;
		else obj.scrollTop -= speed;
	}		
	function left()
	{
		if(flag) return;
		if(obj.scrollLeft>=obj.scrollWidth-width) obj.scrollLeft = 0;
		else obj.scrollLeft += speed;
	}
	function right()
	{
		if(flag) return;
		if(obj.scrollLeft<=0) obj.scrollLeft = obj.scrollWidth;
		else obj.scrollLeft -= speed;
	}
	if(direction=="up") start = up;
	if(direction=="down") start = down;
	if(direction=="left") start = left;
	if(direction=="right") start = right;
	timer = window.setInterval(start,delay);
}
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-07-02
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:历史收藏类(添加收藏、设置首页)
*Example:onclick=History.add(url,提示信息);onclick=History.setHome(event,url);
*--------------------------------------------------------------------------------------------------
*/
var History = {
	isIE:(navigator.userAgent.toLowerCase().indexOf("msie")>=0)?true:false,
	add:function(url,title)
	{
	    if(arguments.length==2)
	    {
		    if(!(/^http:\/\//gi.test(url)))
		    {
			    var host = location.protocol+"//"+location.hostname+":"+location.port
			    if(/^\//gi.test(url)) url = host + url;
			    else url = host + "/"+url;
		    }
		    if(!title) title = document.title;
	    }
	    else
	    {
		    title = document.title;
		    url = location;
		}
		if(this.isIE && window.external) window.external.addFavorite(url,title);
		else if(window.sidebar) window.sidebar.addPanel(title,url,"");
	},
	setHome:function(e,url)
	{
		if(!url) url = location.href;
		try
		{
			if(!e) e = window.event;
			var element = (this.isIE)?e.srcElement:e.target;
			element.style.behavior = "url(#default#homepage)";			
			element.setHomePage(url);
			return;
		}
		catch (ex1)
		{
            try
            {
				if(window.confirm("将"+url+"设置为首页，继续吗？"))
				{
					netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
					var prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components. interfaces.nsIPrefBranch);
					prefs.setCharPref('browser.startup.homepage',url);
				}
            }
            catch (ex2)
            {
				var msg = "错误原因如下：\n";
				msg += "1、调用格式不正确，请按照History.setHome(事件，URL)格式调用!\n";
				msg += "2、您使用的为Mozilla FireFox等浏览器，当前设置不允许使用此功能，在地址栏中输入about:config更改signed.applets.codebase_principal_support键值为true即可。\n";
				msg += "3、浏览器不支持!\n";
				window.alert(msg);
            }
		}
	}
};
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-07-02
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:消息提醒类(警告、确认、输入、跳转)
*Example:onclick=Message.confirm(event,url,提示信息);onclick=Message.alert(提示信息);onclick=Message.prompt(标题,默认值)
*--------------------------------------------------------------------------------------------------
*/
var Message = {
	isIE:(navigator.userAgent.toLowerCase().indexOf("msie")>=0)?true:false,
	confirm:function(e,url,msg)
	{
		if(arguments.length!=3) {this.alert("请参照Message.confirm(事件，URL，消息)格式调用!");return;}
		if(!msg) msg = "继续操作吗？";
		if(window.confirm(msg))
		{
			location = url;
		}
		else
		{
			if(!e) e = window.event;
			if(this.isIE)
			{				
				e.returnValue = false;
				e.cancelBubble = true;
			}
			else
			{
				e.stopPropagation();
				e.preventDefault();
			}
		}
	},
	alert:function(msg)
	{
		window.alert(msg);
	},
	prompt:function()
	{
		if(arguments.length==1) return window.prompt(arguments[0],"");
		if(arguments.length==2) return window.prompt(arguments[0],arguments[1]);
	},
	redirect:function()
	{
		if(arguments.length!=1) return;
		var url = arguments[0].toString();
		location = url;
	}
};
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-07-02
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:字符串缓存类
*Example:var x = new StringBuilder();x.append("aaa");x.append("bbb");var y = x.toString();
*--------------------------------------------------------------------------------------------------
*/
function StringBuilder()
{
	this._value = new Array();
	for(var i=0;i<arguments.length;i++)
	{
		this._value.push(arguments[i]);
	}
}
//追加方法
StringBuilder.prototype.append = function(value)
{
	this._value.push(value);
}
//获取串结果
StringBuilder.prototype.toString = function()
{
	return this._value.join("");
}
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-07-06
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:拖动层类,可以和浮动层配合使用
*Example:
*--------------------------------------------------------------------------------------------------
*/
var Drag = {
	source:"",
	dragged:false,
	oldMouse:[0,0],
	oldPoint:[0,0],
	$:function(){return document.getElementById(arguments[0]);},
	isIE:(navigator.userAgent.toLowerCase().indexOf("msie")>=0)?true:false,
	currentStyle:function()
	{
		if(!Drag.source) return null;
		if(Drag.isIE)
		{
			return Drag.source.currentStyle;
		}
		return document.defaultView.getComputedStyle(Drag.source,null);
	},
	getElement:function(e)
	{
		if(!e) e = window.event;
		return ((e.target)?e.target:e.srcElement);
	},
	down:function(e)
	{
		if(!e) e = window.event;
		var obj = Drag.getElement(e);
		var att = obj.getAttribute("drag");
		if(att && att.toLowerCase()=="head")
		{
			Drag.source = obj.parentNode;
			document.onmousemove = Drag.move;
			Drag.dragged = true;
			Drag.oldMouse[0] = e.clientX;
			Drag.oldMouse[1] = e.clientY;
			Drag.oldPoint[0] = parseInt(Drag.currentStyle().left)|0;
			Drag.oldPoint[1] = parseInt(Drag.currentStyle().top)|0;
		}
	},
	move:function(e)
	{
		if(!e) e = window.event;
		if(Drag.dragged && Drag.source)
		{
			Drag.source.style.zIndex = 10000;
			Drag.source.style.left = e.clientX-Drag.oldMouse[0]+Drag.oldPoint[0]+"px";
			Drag.source.style.top = e.clientY-Drag.oldMouse[1]+Drag.oldPoint[1]+"px";
			Drag.$("pos").innerHTML =(Drag.source.style.top);
		}
		$("pos").innerHTML = "Drag.oldPoint[0]:"+Drag.oldPoint[0]+",Drag.oldMouse[0]:"+Drag.oldMouse[0]+",e.clentX:"+e.clientX;
	},
	up:function(e)
	{
		Drag.dragged = false;
		if(Drag.source)
			Drag.source.style.zIndex = 9999;
		document.onmousemove = null;
	},
	enable:function()
	{
		if(arguments.length==0) return;
		var floatObject = arguments[0];
		var id;
		if(typeof floatObject == "object")
			id = floatObject.ID;
		else
			id = floatObject;
		var item = Drag.$(id);
		var head = Drag.$(id+"_t");
		item.setAttribute("drag","item");
		head.setAttribute("drag","head");
		var width = head.clientWidth-50;
		head.innerHTML = "<div drag='title' style='float:left;'></div>"+head.innerHTML;
		head.style.cursor = "move";
	},
	initialize:function()
	{
		document.onmousedown = Drag.down;
		document.onmouseup = Drag.up;
	}
};
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-06-26
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:判断当前浏览器类型
*Example:var x = $B().isIE;
*--------------------------------------------------------------------------------------------------
*/
var $B ={
	isIE:(navigator.userAgent.toLowerCase().indexOf("msie")>=0)?true:false
};
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-06-26
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:获取当前文档中的某个标签对象
*Example:var x = $("test");
*--------------------------------------------------------------------------------------------------
*/
function $(element)
{
	if (arguments.length > 1)
	{
		for (var i = 0, elements = [], length = arguments.length; i < length; i++)
		{
			elements.push($(arguments[i]));
		}
		return elements;
	}
	if ((typeof element).toLowerCase() == 'string')
	{
		element = document.getElementById(element);
	}
	return element;
}
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-07-10
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:DOM对象事件注册类
*Example:var x = $E.add(对象，事件名称，事件句柄)或者$E.remove(对象，事件名称，事件句柄);
*--------------------------------------------------------------------------------------------------
*/
var $E = {
	element:null,
	event:null,
	handler:null,
	add:function(element,e,handler)
	{
		if((typeof element)=="string" && element) $E.element = document.getElementById(element);
		if((typeof element)=="object" && element) $E.element = element;
		if(!$E.element) return false;
		$E.event = e.replace(/^on/gi,"").toLowerCase();
		$E.handler = handler;
		try
		{
			if(window.attachEvent) $E.element.attachEvent("on"+$E.event,$E.handler);
			else if(window.addEventListener) $E.element.addEventListener($E.event,$E.handler,false);
			else eval("$E.element.on"+$E.event+"=$E.handler");		
		}
		catch (ex)
		{
			return false;
		}
		return true;
	},
	remove:function(element,e,handler)
	{
		if((typeof element)=="string" && element) $E.element = document.getElementById(element);
		if((typeof element)=="object" && element) $E.element = element;
		if(!$E.element) return;
		$E.event = e.replace(/^on/gi,"").toLowerCase();
		$E.handler = handler;
		try
		{
			if(window.detachEvent) $E.element.detachEvent("on"+$E.event,$E.handler);
			else if(window.removeEventListener) $E.element.removeEventListener($E.event,$E.handler,false);
			else eval("$E.element.on"+$E.event+"=null");		
		}
		catch (ex)
		{
			;
		}
	},
	source:function(e)
	{
		if(!e) e = window.event;
		return ((e.target)?e.target:e.srcElement);
	}
};
/********************************************Float浮动类**************************************************/
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-07-02
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:浮动类
*Example:var x = new Float({ID:"xyz"});
*--------------------------------------------------------------------------------------------------
*/
if((typeof $).toLowerCase()!="function") function $(element){return document.getElementById(element);}
function Float(pFloat)
{
	this.isIE = (navigator.userAgent.toLowerCase().indexOf("msie")>=0)?true:false;
	this.opacity = 1.0;
	this.space = 20;
	this.interval = 50;
	if(!pFloat.ID) return;
	this.element = $(pFloat.ID);
	if(!this.element) return;
	if(pFloat.content) this.element.innerHTML = pFloat.content;
	if(pFloat.opacity && pFloat.opacity>1) this.opacity = pFloat.opacity/100;
	if(pFloat.space) this.space = parseInt(pFloat.space);
	if(!this.element.style.position) this.element.style.position = "absolute";
	this.x = document.documentElement.clientWidth - this.element.offsetWidth - this.space;
	this.y = document.documentElement.clientHeight - this.element.offsetHeight - this.space*2;
	if(pFloat.x)
	{
		this.x = parseInt(pFloat.x)|0;
		this.element.setAttribute("x",this.x);
	}
	if(pFloat.y)
	{
		this.y = parseInt(pFloat.y)|0;
	}
	with(this.element.style)
	{
		if(this.isIE) filter = "alpha(opacity="+this.opacity*100+")";
		else opacity = this.opacity;
	}
	this.element.setAttribute("y",this.y);
	if(pFloat.interval) this.interval = parseInt(pFloat.interval);
	this.element.style.left = this.x + "px";
	this.element.style.top = this.y + "px";
	this.element.setAttribute("interval",this.interval);
	this.element.setAttribute("space",this.space);
	this.element.setAttribute("h",document.documentElement.scrollHeight - document.documentElement.clientHeight);
	if(pFloat.content) this.element.innerHTML = pFloat.content;
	Float.play(pFloat.ID);
}
Float.play = function(element)
{
	var obj = $(element);
	if(!element) return;
	var interval = parseInt(obj.getAttribute("interval"))|0;
	var space = parseInt(obj.getAttribute("space"))|0;
	var y = parseInt(obj.getAttribute("y"));
	var h = parseInt(obj.getAttribute("h"));
	var current = document.documentElement.scrollTop;
	if(current>=h)
		current = h;
	obj.style.top = (current + space + y) + "px";
	obj.setAttribute("c",current);
	window.setTimeout("Float.play('"+element+"')",interval);
}
/********************************************AJAX**************************************************/
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-06-25
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:创建AJAX类
*Example:var ajax = new AJAX();ajax.Request(url,{onSuccess:事件指针,onActive:事件指针,onFail:事件指针});ajax.Update(id,url);
*--------------------------------------------------------------------------------------------------
*/
if(!Try)
{
	var Try = {
		these:function()
		{
			for(var i=0,len=arguments.length;i<len;i++)
			{
				var arg = arguments[i];
				try
				{
					var result = arg();
					if(result)
						return result;
				}
				catch (ex)
				{
					continue;
				}
			}
			return false;
		}
	};	
}
function AJAX()
{
	this.method = "get";
	this.url = "";
	this.asynchronous = true;
	this.parameters = "";
	this.parameters = "";
	this.onSuccess = function(){};
	this.onActive = function(){};
	this.onFail = function(){};
	this.element = "";
};
AJAX.prototype.get = Try.these(
		function(){return new XMLHttpRequest()},
		function(){return new ActiveXObject("Msxml2.XMLHTTP.6.0")},
		function(){return new ActiveXObject("Msxml2.XMLHTTP.5.0")},
		function(){return new ActiveXObject("Msxml2.XMLHTTP.4.0")},
		function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},
		function(){return new ActiveXObject("Msxml2.XMLHTTP")},
		function(){return new ActiveXObject("Microsoft.XMLHTTP")}
)
AJAX.prototype.setOptions = function(pOptions)
{
	if((typeof pOptions).toLowerCase()=="undefined") return;
	if((typeof pOptions.asynchronous).toLowerCase()!="undefined")
	{
		if(pOptions.asynchronous.toString().toLowerCase()=="false")
			this.synchronous = false;
	}
	if((typeof pOptions.method).toLowerCase()!="undefined")
	{
		this.method = pOptions.method.toLowerCase();
	}
	if((typeof pOptions.parameters).toLowerCase()!="undefined")
	{
		this.parameters = (this.parameters=="")?(pOptions.parameters):(this.parameters+"&"+pOptions.parameters);
	}
	if((typeof pOptions.onSuccess).toLowerCase()=="function")
	{
		this.onSuccess = pOptions.onSuccess.bind(this.get);
	}
	if((typeof pOptions.onActive).toLowerCase()=="function")
	{
		this.onActive = pOptions.onActive.bind(this.get);
	}
	if((typeof pOptions.onFail).toLowerCase()=="function")
	{
		this.onFail = pOptions.onFail.bind(this.get);
	}
}
//扩展自动请求方法
AJAX.prototype.Request = function(url,pOptions)
{
	//配置通信参数
	if((typeof url).toLowerCase()!="undefined")
	{
		if(url.indexOf("?")>=0)
		{
			this.url = url.split("?")[0];
			this.parameters = url.split("?")[1];
		}
		else
		{
			this.url = url;
		}
	}
	this.setOptions(pOptions);
	//根据参数进行远程通信
	if(ajax = this.get)
	{
		var path = (this.parameters=="")?this.url:(this.url+"?"+this.parameters);
		ajax.open(this.method,path,this.asynchronous);
		//设置头部信息
		if(this.method=="post")
			if((typeof ajax.setRequestHeader).toLowerCase()=="function")
				ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		//如果异步，则绑定状态改变事件
		if(this.asynchronous) ajax.onreadystatechange = this.onStateChange.bind(this);
		//发送请求
		if(this.method=="post" && this.parameters!="") ajax.send(this.parameters);
		else ajax.send(null);
	}
}
AJAX.prototype.onStateChange = function()
{
	if(this.get.readyState>=0 && this.get.readyState<=3) this.onActive();
	else if(this.get.readyState==4)
	{
		if(this.get.status==200) this.onSuccess();
		else this.onFail();
	}
	else this.onFail();
}
//扩展自动更新方法
AJAX.prototype.Update = function(element,url,pOptions)
{
	//配置通信参数
	this.element = ((typeof $).toLowerCase()=="undefined")?(document.getElementById(element)):($(element));
	if((typeof url).toLowerCase()!="undefined")
	{
		if(url.indexOf("?")>=0)
		{
			this.url = url.split("?")[0];
			this.parameters = url.split("?")[1];
		}
		else
		{
			this.url = url;
		}
	}
	this.setOptions(pOptions);
	//根据参数进行远程通信
	if(ajax = this.get)
	{
		var path = (this.parameters=="")?this.url:(this.url+"?"+this.parameters);
		ajax.open(this.method,path,this.asynchronous);
		//设置头部信息
		if(this.method=="post")
			if((typeof ajax.setRequestHeader).toLowerCase()=="function")
				ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		//如果异步，则绑定状态改变事件
		ajax.onreadystatechange = this.onUpdateContent.bind(this);
		//发送请求
		if(this.method=="post" && this.parameters!="") ajax.send(this.parameters);
		else ajax.send(null);
	}
}
AJAX.prototype.onUpdateContent = function()
{
	if(this.get.readyState==4)
	{
		if(this.get.status==200)
		{			
			this.element.innerHTML = ((typeof this.element).toLowerCase()=="object")?unescape(this.get.responseText):(this.element.innerHTML);
		}
	}
}
/********************************************PinYinDictionary**************************************************/
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-06-25
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:得到汉字串首字的首拼音的第一个字母
*Example:var x = "中华人民共和国";x = PinYinDictionary.getFirstAlpha(x);
*--------------------------------------------------------------------------------------------------
*/
var PinYinDictionary = {	a:[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,356,67,,247,,,,330,378,277,286,338,,20,362,,90,39,,389,252,238,291,,256,18,355,48,69,301,36,,,,68,,170,352,,278,293,,94,351,,384,,,85,,42,,173,,64,,330,57,332,386,,167,137,241,,,,205,,136,,327,190,356,,383,336,375,119,80,164,,243,233,251,,102,,36,356,,,217,136,247,355,337,340,,,,,293,,,127,,,,,,,186,179,,270,,,,,,,,,,,249,,,,,,,,171,,362,382,,291,79,40,362,156,,365,119,247,336,134,,,96,,351,342,,,,127,,331,144,,131,109,356,31,116,203,,340,134,320,170,,,,253,19,,342,,,,,265,,,,,356,291,265,164,67,371,133,246,39,,378,133,132,,266,48,,,181,,24,394,291,309,378,88,339,,,,321,265,249,,94,,56,174,356,,,277,,356,203,192,,,,353,,384,238,,336,129,128,,,,265,,84,,82,,247,,,,,,,,144,356,,,336,127,88,80,346,,,,,,384,361,126,124,362,,,277,332,42,,351,,286,32,181,24,,,332,386,,,,19,100,,213,,7,,174,,289,,301,,301,128,,,,,,64,,,57,,,,,,,332,62,386,401,361,,316,,113,,327,288,362,356,86,401,99,219,321,213,,,360,328,249,,141,,235,,,163,,,353,6,,,128,205,,127,,,,,318,131,,356,291,,,,143,383,,,,37,152,,167,,291,,386,,361,,,202,,,69,,,,98,,356,,,338,,,183,,131,381,26,251,153,30,,221,,336,118,,,,,,253,,,,,,,,,,14,,,,50,76,256,,,,,140,,,,397,251,167,360,,,,,,304,88,,167,,243,9,362,301,,343,,362,,,39,,352,168,167,,,129,346,88,,137,,231,,,,,85,,2,,,,13,,,,,,,,,,,,,,103,10,,293,,,59,,139,,,,312,118,356,,316,,,132,,32,,,,149,138,,137,249,213,,393,335,182,,,,,,,,,,,,376,,383,,254,,,,,352,,,,128,127,,,,274,,332,239,,,,,,342,,,,,401,,320,,,,,,,,,129,,,,,,,395,,,,,,,,,,229,322,,,,183,,,84,32,156,,,,,88,,,167,,,,,8,,,,,,,,,,,,,,,,,,,,,,56,,312,,17,40,226,,,52,,,,,,4,,,,,,,,37,283,,,,,,,,,,,,,,,,,,,,340,,,,,,,337,,,,171,,,,,,,,,,,,136,282,,,,,131,129,390,,,,,304,,130,,,,,,238,,,,,,,,,,,134,348,,,,57,,,,,,,270,,,,,,,,,,,,,,,165,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,79,336,365,,363,345,38,379,,339,104,,146,,195,,,,73,,,323,301,352,,,,58,,70,,,,,,134,,,270,,,258,,,5,98,175,337,,161,98,,103,344,18,247,137,64,394,,353,129,292,,,127,31,,,,210,,,92,261,,,26,367,,,,,189,,,195,,268,,342,,140,221,,,,103,,384,,363,199,,,,,,,69,,,85,18,119,38,139,,155,355,166,,,,69,339,172,,,134,,,,247,,392,302,,170,,65,174,,,129,,49,,,,,,,,,,173,,219,,,127,81,,,85,,,,,,,88,,243,,142,123,,,61,,,345,,323,4,40,127,57,110,,370,59,65,,265,,,84,252,356,,143,,,40,333,,,344,120,,,,364,172,175,371,92,43,,40,,,285,,,,232,,,,234,167,,16,,134,101,,59,,,151,,,383,294,258,283,47,146,,105,,105,142,75,127,316,,,,,,,341,,159,249,,,101,129,,,316,,245,,,,,,330,,127,,,352,,,,9,,137,,290,129,,,,,88,,,94,,,,,,,,,,,240,,131,,251,139,,,,,,238,,,,,,,,126,,,356,,,,,,,,167,,258,7,98,128,336,186,172,,,,,69,386,223,132,257,287,,,,167,133,163,,,,,,,,,,,113,291,,,,19,,,,360,,195,,350,,,,,193,,164,,,,347,,143,,,,,,,203,,,,,253,,,,,,,,,,,,342,,,,,,,,,9,287,,,,99,336,365,,,,,9,48,,345,,,,,246,,234,88,,,,,13,120,10,,37,,,,366,,,130,155,,338,,,105,,,,83,,,,156,,,,,,,,,,,238,257,356,,,14,213,,291,,249,,275,,290,336,124,7,,,,120,342,,10,397,393,,57,186,206,,,19,,20,,14,20,377,141,178,361,178,,101,335,,,,332,,,383,189,357,332,,127,259,179,,138,342,,133,,,,,254,,,32,,76,320,167,,,167,,351,352,288,,,,,,,,26,,,167,,118,,,54,,363,,,340,352,,139,338,,40,136,,,,,301,,,,,,,,301,,,,,257,,,,339,,277,23,,,,,,361,29,127,361,297,81,,,,80,,,293,,257,292,14,347,,232,,,,303,66,,,150,100,137,174,,59,150,383,131,379,5,67,146,310,37,291,361,,244,355,112,301,311,,164,65,127,,,,362,,37,94,,354,,113,127,65,,321,199,118,167,323,340,375,338,,183,0,185,,,,140,,173,326,357,83,13,,253,,,87,5,74,84,,110,320,148,299,247,,383,357,,336,33,,,337,44,,333,118,,336,,351,,,76,,,56,,36,,93,88,,,,,204,,184,356,56,229,167,10,363,107,,250,336,,,,,,209,,174,,361,,385,,,,,,,,,101,394,332,,113,208,338,235,,,289,119,199,,,137,,366,,75,,234,,,,,375,113,,136,360,88,,385,,141,100,141,,,176,69,219,,301,,,,,,104,375,,356,172,394,197,194,383,354,127,,141,,368,,146,124,,,,339,,,346,,352,,356,1,242,289,,117,,75,328,108,367,,,231,340,1,96,155,351,55,341,13,364,,120,,153,75,,127,221,202,359,,,,,,94,228,37,287,167,204,,,151,341,,,,380,375,,,,,,,20,,116,97,,94,,352,,,,,308,45,,1,,,,,,337,312,401,,,336,,,,,,,185,,,,,163,,308,370,122,,,127,,,85,,119,,292,332,294,32,,167,,,,359,,,,,283,,327,119,,385,,147,393,,286,,,173,0,,,,,,52,,,,,313,57,,,,,,46,,,,,83,,,238,283,159,371,,,230,,280,389,217,,,,,,,19,67,162,341,,,37,316,,136,,141,360,332,206,285,,,159,132,118,110,66,,,,264,,357,,,335,,,,42,124,,,337,113,,156,,,,,,,,348,,,,,,,,,,167,,375,,196,,236,,156,,362,,177,151,,,,,,0,346,,,,304,,,1,308,,,,146,309,278,35,,303,,,,,,291,94,,132,,334,,301,37,112,308,,109,,253,217,113,,,78,,,63,1,,321,,4,,,,,,303,303,,62,247,,,,,,,25,128,,,240,,89,100,,,,,,,,,347,,,185,,,165,71,,,,12,358,,,194,,,,,41,237,,,,386,33,,399,,301,,,171,,337,,,,114,,,,,,,,,,,,,28,131,355,,,,,,61,,,246,139,253,,,178,,,,,,228,,133,,,,247,76,370,356,291,,,,,349,,,,,89,,,,,276,238,,,,,,,,,270,112,,,,,,,,112,316,,,,21,,,,,,,,,,,,,,,,341,,,,,,,,,,,,126,,,,,,,,262,,,,,131,,,,,,,,,,,,,,207,,,,,,,,,,207,,,55,,,256,301,,129,124,343,357,206,324,,74,,,,,,,119,,363,,,157,48,,,332,181,,,,174,100,,,107,323,361,,,,246,362,,363,,258,362,254,,,,,,,,,,,,,,,,,,122,,,323,,,,290,,,,,367,332,94,,336,105,238,356,62,,,381,,,,,,155,32,247,,,127,,383,,7,,,,,140,,,82,,11,311,143,121,401,148,,,,,,153,,,129,311,167,5,336,84,391,244,,,157,,311,,327,91,243,64,,213,,238,,,,4,,,203,146,,,,62,34,,,,,,44,159,176,176,178,,,,,344,69,,,,,,165,89,,,,,,,,75,,,,,357,80,99,363,66,,147,286,,76,,64,,351,152,,,,142,,208,,,,363,,,,,,,,,,97,1,,,,,,,,186,,,36,285,,,172,,246,36,,,291,350,107,,,214,,362,20,,,,238,,,,,,,,,56,,2,,,,,383,,,,356,235,127,,,279,,,151,,312,,,,73,133,,,,237,,323,,,,249,,,,75,,,,357,,,,,66,,118,9,,,62,,,,,,143,,,,,,352,,,,,71,,,,,,,,,,,,,,,166,,,,,,,,309,36,,,,304,,,309,,,,312,,,,,,276,,,,,,,94,,,,,,317,363,,,,,,,,,,,,,,,,,,293,,37,187,,134,,293,,,,360,,,,,,,,,286,203,,,,,,250,170,,,,374,347,,,,,,,,,201,74,,,,,,,,,,,,,,,,,,,127,,,,,13,,,,360,,,,,,,,,,,,113,,,,112,,,,,,,,,,,,,,,262,,,,,,,291,265,,390,,290,,,146,,,119,,,356,,,,,,,,,81,,40,,,10,,,,,,88,,338,,,,,156,337,329,,,304,75,,355,,,99,,,,,357,126,,55,,317,310,88,,354,353,111,,291,,,322,,,356,152,128,75,,155,,,,,169,122,,352,,,247,205,85,,84,,,156,396,,247,,,11,356,130,313,369,,337,,,,,,64,,288,,,4,,,,,,,,,,,,,,227,223,,205,,129,309,,,,112,,,,300,270,83,331,,390,88,185,,265,,,352,,,,,71,127,,,354,133,,196,,,,,220,,,,,13,362,327,,,82,336,362,105,,,213,385,,,55,,,,,,,191,,247,,,252,,,,,,,,203,,,,394,291,,,,,132,100,301,344,332,,,285,242,,354,,130,293,,,,,,131,,163,,,356,,,,127,,,,,,,,,,,,,29,,357,,,,394,,332,,328,177,351,263,131,179,243,,,167,,,,,308,,332,,,,,215,,,,204,,,138,289,,,62,,76,,,,195,,,,,,,,362,328,,339,,257,,,,,,32,,,,76,,,,,,244,,,330,15,,,,,,,,,,,132,,,,,125,,,,,,,,13,,,,,134,,,161,,,,,,,,,,358,31,289,320,,,336,,,,,347,,,,,,,,,,,,,,,,,,,191,,,,,,,,191,363,,,,,,,,,,,,,,,4,,,,,,,,238,337,,358,,,37,,,,,,99,,,128,279,,,,,,,127,,,339,,,,,,1,,242,,240,,165,,,,378,,,,167,62,,352,,,32,,,211,,201,,,,,,250,,,,,,,,,,,,,,,,,,,,,,,,337,,,,,,,,,,,,,13,285,,,,,,,,,,,,,,,,,,,,,,,,,,,216,,358,,,201,,,,,,,,,297,,,,,,,,,,,,,,,,394,132,,139,149,365,,394,53,307,88,10,394,341,,193,,,9,127,100,223,349,,,109,179,,208,,,,293,31,,394,,88,,,,,270,,,217,,,,219,,309,105,376,,362,292,2,,302,330,,,117,,,,194,,57,,395,103,385,67,330,356,9,291,,38,289,146,348,291,361,122,,,,339,98,,,,,367,,,109,352,341,128,,35,268,,,,154,17,304,,,127,,127,357,194,150,,,,,88,,,,191,,110,362,,,,,,,,,,253,201,29,,101,,,336,171,,,376,,,,,,171,,122,,,,,,,,53,73,301,350,59,,,292,,85,,,288,,130,,,332,400,,,,,341,,287,,,79,89,129,,35,,286,,89,32,,,,,361,,361,171,,354,,,,,89,,,,,136,,,91,,,,291,357,37,145,213,133,332,216,137,238,28,,,137,,,257,316,132,336,,,291,243,127,342,,,,377,,,,76,,,,,293,,323,183,,337,,183,137,,,,,,,,,326,,285,,,,,,,,356,247,,,,,362,,306,247,,,,,,351,,,,127,249,,,247,27,,,29,,257,92,339,4,161,59,5,,,,,,146,99,,,,,,352,,346,128,174,,,,56,,364,,119,,198,2,,,,,69,,156,,189,,,356,,,,,,,350,,,,,,,69,,,,,,,383,,,,,,,,338,,,131,382,179,,76,,362,,,251,,,85,,,,,,,,,,,140,,,,,,,163,160,,,149,38,,,,,,,247,,,,,,52,,351,,,,,139,,,107,,,,,,341,,352,302,,12,,,,377,100,,,,,,329,,,,,,,,,367,354,,,,,,,,,127,,,290,191,249,,,,,,,,,,,,268,,,362,,177,,,,,,,,,,,,302,,394,332,,,54,,,,,127,,,,,,,,,,,,,,378,,,,,,,,,,,,,,,,,,,,,,,173,,,,61,,,,,,,,,,,,,,,,,,,,,,,,,,356,,,,,,,,,,,,,,64,,,,,,,,332,,,,,,,,,,,,,,,,42,385,,,350,33,,,98,401,251,137,98,,336,,,29,256,,127,356,301,5,,,340,,,,,,350,133,,,13,291,20,,295,81,,291,,,,337,,,332,378,312,,,235,230,319,,169,383,385,19,383,62,,,,,,,,,56,381,,,,,,337,8,,,39,,,,,,332,32,,,371,107,189,,,,,194,,335,88,,,,,,,123,,,,,,,,187,203,,,,,,378,,,88,,,81,43,,,,,,,,,,,,,,,,91,243,214,,18,,344,,354,122,361,361,,104,238,,,,390,,254,13,,,43,105,,,,347,178,336,,151,358,62,234,64,,196,97,,88,,233,83,340,,,,,346,71,401,,,,,,320,,,,,,13,,2,293,144,360,327,,,,,362,,,,,,,,,,,169,162,,,,,,,133,4,158,,,171,,,,,31,,,,,,,,,,,,,342,,173,,,,,,,,,,,,352,320,,,129,,,,,214,142,14,356,247,221,,,,356,,13,356,,,,291,,291,,98,,357,,88,117,,,37,,,,62,378,,,,,194,339,119,,223,134,,,194,,330,,274,,,,,,,,57,250,,13,,,,99,,,,,,,,,,,,,,,,,,105,58,,178,324,124,383,,,,,356,,,,277,344,,321,,352,,,22,15,,17,237,,,378,358,,37,,,,233,,356,,34,13,,,,331,382,50,,134,56,,350,115,353,121,183,118,,,,347,,323,,,160,,60,231,337,,,32,,,,,362,,,,,,,123,,350,,,354,332,,,,,,,382,,60,,,,,131,124,,,,,,343,,13,356,,,163,,,127,265,,31,311,314,314,,,,53,383,331,188,,,,317,,,384,38,,,336,,,361,,,302,153,,14,383,,,35,,,,214,,,220,,,343,,119,142,84,121,310,302,336,229,32,43,,,,33,,,401,373,353,,,223,,382,230,20,,,119,,55,169,301,,,56,356,,,,127,237,344,363,213,102,88,,,,252,,,,,,40,,,,,,395,73,,,356,,211,350,291,,,,,,,,169,,123,,,149,,116,,,293,,,,353,124,,,128,,,,,124,394,347,,,227,115,78,146,69,317,98,,337,248,,,147,,,76,,321,352,142,26,208,365,,360,,,,157,251,,,,,337,,,316,110,,,,,356,,124,,10,,,,302,258,,156,,336,361,,,122,,,364,,218,,,259,348,249,,198,,83,10,,52,,,,127,,,344,59,,,,,,,,,254,39,,,,134,330,,,,,,126,,,,316,,,331,,119,,337,32,,332,124,,,,,,64,137,23,36,,10,252,23,57,103,75,,,340,391,,123,,,264,344,,,,,,251,39,,,,,249,,362,362,,,,198,13,356,,,,,,76,,,,,362,,,,,91,365,,,166,84,,156,156,,,,304,,,,,,,,,,,,,,,,,,,,363,,,,,,,,,47,,249,,123,,289,,,288,,,,203,,,,,,,,314,,,,,187,,,,,124,142,,,,,,,,332,,,,,360,,144,,,,,,,,,,,,,,,,,,,,16,,,374,,,,,,251,,,,,,,,,73,,,,,,,,,,38,110,247,,,134,,,,,,,,,,,40,,,,,,,110,,,,69,,,,,,342,,4,189,,,,,,192,161,,173,,,,,,,,,,,,,,,,,,226,,,,,,,,,,,,,,,193,,,,,,,,,,356,,,,,,,92,,94,,336,129,347,293,268,337,36,335,132,,,250,126,250,377,,247,128,,,,127,,143,127,,90,61,,,,,132,,129,,178,,,,,46,56,,,119,,,,,,119,167,82,308,14,,135,,,,285,119,83,,292,,22,375,,,246,5,55,266,,,,327,,,144,,,,,,,,150,,,249,383,,158,192,279,353,220,7,34,263,,,7,,,88,,,238,,,76,,379,36,127,,,,33,,,,,139,5,,,,,,,356,293,387,,322,70,144,380,,88,234,,,,324,150,181,250,,119,9,,,237,,,238,310,,,,,9,,,,62,,,,201,,35,351,39,,198,,,88,,386,57,30,203,214,159,88,,7,231,173,,102,,137,327,5,,327,4,137,393,232,379,6,,,213,,,176,129,,360,161,219,19,371,,,158,291,132,382,,98,,258,296,,366,145,,,,,242,388,291,204,,37,101,,,,,383,252,2,,,,,152,,,318,,,,,328,,,,383,179,,335,309,342,208,58,131,382,127,124,,,1,,225,54,,,,381,,,308,,,,,,,356,320,,,330,,,,,336,140,,321,157,,,393,,183,5,110,287,217,138,,,,,20,,,,,,,,,163,307,,129,122,59,,,,237,,172,,,,6,137,,,1,,,,,44,132,,,204,214,,,,,339,,64,,,,,75,292,65,245,,378,,127,313,248,,231,,,,355,,139,,,,,,,,180,,311,34,,132,,149,325,352,54,,137,317,249,,6,,,178,102,,,383,57,,31,,103,,363,,,,,,362,,156,,,269,,,,396,348,196,316,,29,,,,356,,,,,,,,2,,351,335,,41,,,,,,142,136,,,132,,,,,288,,363,,355,,375,,,,,161,,253,31,94,177,,,131,,,,,,41,377,,,19,40,,,54,279,,,,,,,129,303,,93,,300,278,,,,,226,,,,312,,7,55,,,,,,,249,,,,,,342,,,29,,94,,78,,,288,293,6,354,17,,311,,,,,,,,18,,295,,,,376,,,,,,182,,,,,,,,,52,,201,,,,383,,,,,,,,,,,201,201,380,,,,,,,,171,,358,139,,241,,,,,,,,,,36,275,,,301,110,,,400,,,,,390,,,,,,34,,,,,171,,,251,19,54,,389,,,,,214,,342,178,,51,,110,,,,91,,165,,,285,,,,,,,,25,254,,122,,253,,,,,238,19,,,,,,303,,,,393,,344,,21,,,,,,,,,,,,,,,,,,,,,,,,,,232,,,,,,,,,126,,,,,,,,,368,,,,,,262,,,,,,,,,,,,,398,,,,,,139,,,207,383,,,,,,81,292,,361,90,,98,,,82,382,,,,,,100,,,341,194,,,62,,,198,,136,,,,37,4,,,131,,169,,13,32,,,,91,277,,,74,,,,,131,134,,,,293,,251,,382,,,88,,,,,,,,,,,,,,,,333,,,,376,17,,,,83,7,,161,,,,70,,171,,119,342,,,381,,335,,,133,37,,88,,377,,393,,72,,301,343,,,,,,,,,82,,,362,291,,,,233,,377,189,183,235,,,,,348,134,,213,397,,,175,,,,356,247,,,,,,,,,336,,127,,,267,57,136,383,370,,,350,347,89,159,91,110,,,,,291,155,,,331,,,,,,365,,3,371,,,157,,,,112,,32,,199,125,,,,356,337,343,,,,311,,,,368,,344,358,,,,,45,,191,401,,,,,379,,291,,362,,,189,213,32,,,,,,385,,339,,,33,,123,,,,,,,,133,286,,,352,,,284,341,355,365,124,110,,,330,,,,,290,,20,,,336,,124,,35,,,,,,246,134,337,,,,254,,134,105,,,383,,,,170,,,,368,,348,,,338,,,,,156,,,,,293,,,,,224,2,,,,,,199,,,,,,,,,,1,127,,,,,,203,,,,,,9,,,,,339,,,,,326,,,,,,,,,,,,,,,,,,,,,,,,,,,293,,350,354,246,,,,,,,,,337,,,207,,,,,,,364,,257,355,97,,,113,,25,,,187,,374,316,399,,,,,,,,364,361,271,237,,88,,,257,,,,300,381,,162,,,,331,,33,,247,,,,,,,193,,203,,332,201,11,375,,293,,386,,,246,75,,,,,127,,,346,,,283,,366,258,,,91,,29,285,,,336,,167,344,22,53,,287,,,378,,,,,,71,,247,293,92,318,,,,160,,,353,185,196,,,111,,10,132,,93,354,,40,,230,,,,,386,,302,7,,127,,,99,,,238,,331,,82,,,,,337,,,,,381,,173,272,,191,,107,383,48,,,,293,370,,167,,129,36,,250,85,,341,,151,243,,,383,,341,128,128,99,,,,,,,,,327,,174,18,,,,,,,,,,,6,202,91,247,261,269,,,,380,338,361,,105,327,401,,219,,62,,,29,,,,136,,,129,,,146,205,386,,175,30,,,,,,,,,36,,291,383,,,,,375,,15,377,383,176,69,178,,167,161,,293,,296,,,247,167,,,,,,101,,,,341,,,,,,,,347,386,,,,,,,,145,163,,,,353,113,96,,,94,367,179,,132,116,105,313,104,332,155,,2,2,138,,393,,383,,321,278,,122,132,136,,,,,,,,,,,351,263,381,58,247,251,120,124,130,390,,308,,,,,,,,,88,,321,139,,,,,,,,,,170,,320,,191,8,,,,,,,,,100,,,,394,,,,97,,,,,,,,,,,287,,,,193,336,167,,,,,308,,316,342,,,293,,81,,,,,,,,,,,129,,174,,,,,,,195,,247,,106,,,,,8,,,395,,,127,,237,,,,,,312,,,62,,,,,,,,,,,281,,44,166,,,,146,,,,379,103,,84,,,,,107,,,,356,,,,,,170,,383,391,,137,,131,,,,,,,,,,,,,71,249,,,,182,,,,,,,,,327,,,355,,,,72,,,,,381,,,,42,,45,,,29,,,,,,,,,,,,,,,,,,342,,,129,,,40,,,169,166,,206,,,191,,,348,,,,,127,,,40,,,49,,,,,,142,256,358,,,177,,,,242,,90,,161,,362,35,183,137,,,,342,,,,,,,162,268,,,137,,,381,8,,,,,,,,,,,83,375,,,307,,342,,,,52,,,175,,,259,,,,309,,,,,,93,,,,,,,,,300,,44,,29,,121,,,,93,,,,,,,129,,,,17,386,,,,,,,,,,,,,247,,,,,119,,,,,,,,,,,25,,133,,,,,,,,,,,81,,,,,,,,,,,,,40,312,,,,,,,378,,201,,,,,,,337,,116,,,,,250,,358,,,,251,,,,,,,,400,364,,,,,,91,,,251,,,,,,,,,327,,,,,,,,137,36,,139,,,,,,340,,,,386,,,,,,,,,,,,40,,,,,,,,178,,,363,,,,311,,,,337,,,,,,,,,,253,,352,165,,,,,,19,,,,,,,,,254,,,,,,,,,173,,29,193,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,249,47,122,343,362,,,229,,,,,,,,,,,362,,,,,337,,356,247,,,,154,,,,,283,,,343,342,,249,,,94,,,,,,,,,,,,,337,,,,,,,,,383,382,47,20,336,247,,,329,,,,,,,,,,,,,,,56,,301,129,,,,,201,50,353,317,,56,286,,350,293,23,,240,,,,,365,169,,,383,,,,57,127,,,,,,17,,,,,,,,,356,,,,,,,,,293,229,72,,357,,,,,,,,64,,124,100,,,356,,,,,,336,,203,,191,,,71,362,13,13,13,238,,13,,189,,,,,,377,,,,,,,,,203,112,,,,311,,,,52,,277,,,,293,,,,129,,,,,,,,32,246,178,,,,,,257,,291,62,198,,188,247,241,205,,59,339,42,84,,,,88,,69,254,,357,,109,353,2,351,146,,,,57,183,254,,365,,298,,,,360,,,,,326,,,320,383,256,,,,51,124,,110,29,,,,,,337,,,,247,285,,110,,,,350,301,270,98,130,37,336,,,312,,,,194,100,331,,,,,,310,,127,,14,,333,,,345,,,,247,84,,,253,356,335,,363,111,,289,35,,,74,,,247,203,,,309,195,,,,,283,,235,,,,99,,191,,85,229,167,181,24,,332,119,201,,293,137,,,327,75,113,,,,,83,361,,383,379,100,377,352,,,,,342,256,,,,258,19,,194,,,,164,,,117,91,80,189,301,,,,81,,,219,,174,234,19,247,,213,,,386,,165,348,,,232,198,310,353,,360,,12,349,286,178,,182,342,244,371,134,,,132,,,124,,,357,,,,353,172,,127,,,,275,,,,,337,,386,130,182,,,69,,,,,,,133,,332,,,117,347,,,313,,,79,385,270,,350,,,,122,,126,328,248,231,,,175,,128,,249,130,131,381,,393,26,,153,127,175,,125,119,221,350,,,,,380,140,,8,,393,,337,,,122,,,246,,,112,162,,,,88,,,,,,362,,,109,133,,,,191,,,,,,323,,,217,,,341,288,,,360,,339,,,304,,138,27,316,,,,,,313,,163,160,169,332,335,,122,62,,273,129,378,280,88,103,,,296,351,,,355,,,110,,,113,,,,,,,393,64,,,,394,337,341,247,,,,173,312,,,,,293,,,,,208,,313,48,,,,83,302,,238,57,,,362,,91,,,,,357,52,,121,,,289,,45,,,,125,,352,,317,196,,,,,,,,,254,,,,,363,,178,394,71,,129,195,,,362,,289,289,,,386,,,362,,,257,71,,375,19,335,,,,333,,342,,332,,92,,,348,,146,,,,361,,196,,,,,,,,,231,191,,,,,,,,,324,195,,,,,236,129,,119,,340,,,377,,,,123,,,,,,,,,,,,256,,,352,,,,,,,,,,,,,,,,330,291,,,,156,,129,347,,,90,,,,,,312,363,,,,,,,,146,,,,175,,,199,,,356,,,246,,167,,,337,,,,,304,,253,303,,346,,268,125,,,213,309,,270,,,,40,233,,,,,64,,,,394,,,,88,,120,,394,313,315,,13,,,106,,,,383,352,288,187,358,,183,161,179,,17,311,,,,,,,,,,,62,,,,,119,,,,,,,,,240,,,,247,,,178,,,,,,177,,,,167,352,25,,,,,,,,,,,201,,,,161,,,,,348,356,187,,188,,182,,293,,378,,,122,,,,,,,,353,,,,,,,,358,341,,,,169,,332,,,,,,,,,,,232,,,,249,,178,,,,123,,,,171,,,,,,,311,33,,,,287,,386,,,,285,,31,,321,,,,,,,,36,,,,34,91,,,301,293,237,,,,,,,,,,,,,,161,,,,,370,,,,,,167,,,,,,,,,,,,4,,,31,,,57,,,,,,,127,,169,,,,,,,306,,,,,,,,160,17,,,,,,,,,,,,13,,112,270,,,,,,,,,,,,,246,393,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,246,,,,,,,,,110,358,,,,,,,,342,,,,,,,,,,,,,,,,,,84,,,,364,,,,,,,,,,,,,,,,,,,103,,,112,,,,,,,,,,,,,,,5,,,,,,,,,,,,,126,,197,,61,124,,,,,174,370,,136,,,,393,,367,23,353,,,,,105,,,,178,44,,,,352,,,,33,,259,144,74,,,383,,,332,250,,,,,,,,,,,,,,348,137,311,234,135,,310,,18,,,,386,375,64,,291,169,37,,,119,300,161,320,,,,,172,,353,,,,,,,,,,,,,,117,163,,386,,,,352,,,,,145,,81,287,355,124,,312,133,264,,337,,,,,,,,330,,237,,,,85,,,,,,,,,,,,352,110,,,,,,336,,,110,,122,192,,59,10,84,,,,,,,,,,,,131,,,,,,,,,33,352,352,,,,,261,,,,,,,,,,,,,,,72,,,,,348,,123,,129,,,,,,,,,,,,,,362,,283,,,,,,191,,347,379,332,,,,,,386,,,,9,119,,,,,14,,325,,,285,,,,,,,337,,,,,,345,,,,,350,,,,,268,,,,175,337,,,,,,293,356,,,,,,,,365,,,,4,,,,,,,187,,286,,,,337,,,,,,,,,,261,,,,,,,,,,,171,,,,,,81,352,,,,,,,,,,,362,,,,,370,,306,,,,,,,342,,,,,,,,,,,339,,,,,,,,,,,,,9,,,,,,,,,,,,,,,,,,,,,,,139,,,,,,,,,,,51,,387,,230,,,,363,1,,,,139,88,355,5,66,,354,,297,,232,,,,,,,,239,7,,,,231,71,,,,,66,,,,361,,,351,,220,,242,,202,,203,163,,,,189,203,,336,,,,,129,100,,,290,,,249,,,,314,337,,,,336,100,337,167,,,127,,,,,,71,137,,129,,239,,,145,,,,,,,,,,,,,130,,,,,,,,,,,,,258,258,,81,256,,,,2,,390,104,185,361,,,,,,,,365,155,220,62,,,,10,,,,,234,338,,119,,83,,,,,99,,137,,,,,219,,115,131,,,,,,,268,292,,,71,338,291,153,382,362,307,362,13,,,138,167,,357,305,162,,,,,167,,339,,,,,,,213,,,,172,,,,,107,,194,32,356,,,,193,22,50,288,,,182,119,,,332,,,,344,386,189,332,,339,,,208,,,118,,,361,191,29,,,,,120,363,,,,,,,,,,,,,,134,,,378,,4,,,,,139,,,,,,,,,171,,,,,,,,,,,,342,309,,350,,,,,,,,,,,,,,,122,,,,,,348,,,183,,362,,331,,,67,,,127,,,,,136,,,,,185,,,,198,,,17,,,,,,,330,,191,,,332,122,339,,174,56,,,,64,,,337,19,,,,,244,,146,,,,,,128,198,285,,,381,,139,80,176,,,,,,,,98,,,,,182,,386,,,,,79,,354,,116,,,,7,,,,,124,,,,,,,,,,,,,,,,,256,,162,167,,,175,351,,,,,169,308,,,,,,,,,,137,35,,,,,,,393,,,119,247,,157,,247,,330,,48,,352,,,173,253,238,230,,,,,,255,,,,,189,,,,,,,,,,,,,,,,,,,,338,,363,,208,119,358,362,,272,280,,,,,,,,,,,,,,312,,,105,,,,,,354,1,,,,,,,133,,52,48,,167,,,,348,,,,378,,,358,,178,,,,,,,,,,,,123,,246,,,,,,,,,13,23,257,,,,,,,,,,,,,,,,,333,,,,,,,,,,,,,,,,,,,,,,,,368,,,,,,,,,,101,,66,,119,,240,7,262,,328,,,,,,,,334,229,,,,,174,,243,47,,,,,,,,20,,,,,381,,,,,,,,,193,,12,,374,,238,,,,,91,56,289,,317,,,290,,,,,,290,,,360,295,,88,360,12,,219,317,361,128,289,,64,,206,64,,67,120,,,367,,13,,,,,32,,,81,,,317,132,,258,332,,,,,232,,,,,175,11,381,347,,,,,,,,,180,247,,,,81,,,,,,,,362,,39,,,,127,330,,,,,,127,,,,324,,,130,,,,,238,,,,293,,356,,,67,,132,171,,94,136,,,285,,225,167,353,,361,5,132,,,,,,356,167,,43,85,386,234,238,91,146,47,,,57,381,,,315,137,127,,,,128,348,375,18,,382,360,134,258,,,356,,,,,353,,383,115,351,,70,,,321,,,238,,,,167,383,54,,336,283,163,,122,339,,,,,311,83,,,37,,,,,13,,,100,,,332,362,52,,386,,57,,,,,118,,159,,,,362,,,,,128,,356,177,279,,37,,,,333,127,,7,,175,30,292,,,55,16,311,,15,,,182,,,39,378,376,,,259,,,,201,,357,358,123,,,176,,,,,,,,,1,7,,,,,,,356,,238,,,,,,64,,160,,,,,348,,,,,,,,64,,,,257,,,,,,,,,105,,,61,,6,6,,,,370,,60,,132,123,105,,,93,,,131,,,1,,112,,,330,,,337,,,,,,,,,,,244,,,,,,,,,,238,,,385,140,,53,,,,,,,,,,,198,,,362,,,384,236,,358,,356,,,113,3,377,352,129,113,,156,,90,59,232,,,290,,,,193,,,,,,103,,,,,,,,,203,67,,347,188,,383,,,,340,74,,,232,,74,,,290,,,195,,,196,57,191,,143,,150,,,,,,,,,,,,356,290,,,,,381,195,,363,,,,394,,375,348,,,,306,,194,,,,,,37,155,138,202,,318,,352,,,,393,382,,308,,,,62,,,,,,,,,160,129,,,,,,,,,351,134,,,,,,298,306,71,,13,203,,213,,,132,22,,,,,,,,,,,,,71,,,,156,93,272,189,,,,196,39,,,,,,,146,303,338,,,199,187,,,,,,,,,,,,,240,36,,193,,,241,,251,,386,61,,299,,,,143,,,321,,173,,,,,,377,,100,,257,,,,,,,,,,,,,,139,,,,,,,,,,40,,,,189,133,,,,,,291,356,,383,,289,,137,,131,54,72,1,,,,,291,,,127,,91,,,,,337,81,155,58,185,283,,,,,,,120,,,247,143,,,,351,238,,352,,389,34,74,,352,,85,80,,375,,,,327,,62,376,381,,83,,,159,14,,,237,,,,244,,,289,366,1,167,176,321,,167,,40,,,,,105,,208,,,,,94,,344,,69,,337,,,300,338,251,,,,,,341,,,,,,,,,,,,,335,175,358,188,259,,,,,,,,,129,,,,,237,,,,,,,,,,,67,,65,,,178,1,306,,,10,,73,,,,330,64,,10,247,35,,,66,,385,,132,,14,,13,,,,,,,,,237,129,62,311,29,,,,,348,,,,,214,,,47,,,,8,,,,278,165,54,,,,,232,,,,380,146,,,,106,,,,,,,,,,,,,,,201,,,,254,,,,,,257,,61,,,173,,,123,,,,,,,131,,,,74,,,,,,,,,,,,,,130,,,,,,,,,,,193,,,,,,21,,,,,,,,,,,,,,,,19,,,,,,291,291,167,,288,,301,247,,,,,339,,247,383,,,,,,,,,,88,,,397,62,,,401,257,119,386,289,306,47,,194,,,340,,318,240,,,,,127,,381,,,,,,,,59,126,,247,,,,,,18,133,,,178,31,,,,,337,,,,,88,,,,,,,,,,,393,,,,,,,,,,,,,337,,,,,,,,,,,,262,,,,,,362,362,167,,253,113,,346,301,,323,,,91,,,18,,256,,384,,,,146,196,,,13,,,194,,,,,,,397,,,,201,36,,253,353,,383,,293,,394,,127,36,,,,,,,,132,,,356,,124,,,337,,162,88,,,183,,,,,36,,287,298,,,,,,265,,,6,,,383,,,,146,,39,,,304,,,,,,,,,,,,,,,,333,,,,127,,381,,59,128,127,,93,,,,,,,203,,,,,,,,,,,280,,,,,,306,,,,,,,,,,,,,,,,,,,,,,,,,262,,,,349,,136,255,337,255,149,,,,,42,392,323,,252,376,,14,,354,,,,,251,,,,354,383,,,318,131,43,135,,,,51,335,,151,146,,,,,156,70,,357,,,,362,137,,,,,,362,,,,,,,,,,,,176,,,,,,,,,,,,167,,,,,,,,,,,293,,,377,,,,,134,134,378,,,140,,321,302,,,,,,,132,,72,,,,,,,,,,386,386,,,362,,91,,,,71,127,,5,,127,,379,307,,,,119,,341,,,13,129,,,,290,,62,,,37,,167,,,,318,301,88,,11,,55,394,62,,401,,,99,,128,,,,,244,,129,,176,,14,,,,,,,339,,255,,61,,133,258,,,80,155,386,321,,55,,26,,150,,13,284,,382,,,365,,230,,,,,,,,,,,,291,,,341,287,,,352,,153,,39,,92,,,249,,129,,,,,13,,,,,,,,100,,,134,,,,19,127,,305,,,,,149,249,,,,103,363,,,,371,252,327,182,57,341,274,129,,,,340,,,381,,,,386,,,,,,,,,123,,,,,389,239,,,,,118,,,,,156,,177,,,,,,93,83,,,99,,,,51,,,,167,13,,,,37,,,,161,,,167,,,,,,237,,,,,70,,197,,,,,,,,,50,,,,105,304,,,178,,,,,,,72,,,,,,,,,64,,,,,,,61,123,,,368,,,,,,,,,,,,,,19,,,,,,,20,385,160,,,,,,,,,,,,127,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,194,62,,,,,,,165,339,394,,,,,,,,,,,,84,,,,,,,,5,167,,,244,,50,377,,,,318,167,337,304,,,394,,364,385,,,,,84,,,,170,,,170,23,134,,,,,,52,,,173,395,134,,,289,,,,269,,118,347,,119,,368,47,,,,,,,,93,312,256,,25,,,194,,,370,144,,,,,,,,130,,,,,,,226,,,,,,,,,,,,337,,,,,,,,,,,,,,,333,,,,,,,,,,,,,,,,,,,,,,304,,308,,,,,133,,,,394,,,,165,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,347,,,,,,,,,383,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,247,,,,,,,,254,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,194,,,,,,81,,,,,,361,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,398,,,,,,,,,,,,,,,,,,,,,,,,,59,,,,,136,362,117,385,339,94,364,127,330,155,127,265,332,365,,45,238,283,92,204,,395,181,84,383,333,82,,,220,293,339,91,342,88,169,397,289,337,383,384,385,7,88,40,287,356,134,56,8,268,132,151,263,,111,124,95,348,130,182,139,131,321,97,341,138,346,,306,313,127,316,127,347,174,,347,247,83,46,286,106,290,332,195,292,12,39,,175,258,395,377,330,183,391,394,146,340,129,195,161,316,196,127,,124,301,75,72,14,,99,391,122,62,183,14,198,363,133,88,270,381,85,,93,31,167,356,129,17,240,187,165,358,308,196,279,342,171,285,374,130,249,251,122,131,398,87,,92,,259,,,,,,,,358,,254,338,,,,,,,,,,,103,331,,,331,110,,182,88,,80,,,,,100,,92,5,,,,,,352,379,399,,,,383,,,161,293,,238,,,,,167,,,,,374,,,127,,,,,,,,,353,,250,,191,,,,,,93,,,,,,174,,,62,346,250,,339,,,260,,,308,,,,,,,,132,312,,337,,,,,,165,97,,,31,362,,356,,334,,,,37,,,,,356,,356,,174,,,,,,340,337,,,251,,,,,,,62,52,83,,,,386,129,,,239,,,,,113,,110,4,,356,,,,,,,,81,356,,,,354,163,,145,189,380,247,,,,,66,79,294,,,205,,165,,394,97,33,112,365,5,,,301,,,,126,,163,,,312,229,177,222,130,233,,,,,,,201,,79,,67,355,55,302,,,37,,57,,97,,,217,57,,,174,,,,171,176,383,219,,,,,107,,169,,,,242,,137,,,,,,,,,,,,,,,156,48,,,,,,,4,,,,,,,,,,,,,,362,,,,304,356,,301,379,,269,,165,127,,,,,,,123,,,341,,385,,71,92,268,91,,335,32,100,383,,88,83,,,,129,82,392,,204,3,147,,98,362,,354,,,249,,,83,,134,310,289,384,378,342,289,332,385,,57,,,,,,10,101,310,,,,,,,,233,381,,401,235,128,290,383,9,,,119,,,357,347,,176,69,141,178,134,223,352,,152,356,104,109,94,69,,131,,345,,2,,239,212,,,,,383,,,,52,,,186,127,,,153,275,369,247,208,194,221,179,,19,,330,,131,,,,54,,,,,,,,,,,,,,234,,,88,,327,216,,,,182,,169,,,,,,238,,,,,,,,317,,134,,159,355,0,,,,88,88,,83,250,330,,,,395,67,,,,,,49,,,,,344,,293,,206,,,,76,276,,354,129,,,362,,,,,88,339,213,195,328,315,325,8,,183,,,,,,94,,19,,,,,93,,17,,,,,,,15,,,312,201,337,,,,,,383,,,167,,237,,41,,,,,,,,,285,,,,,,,358,285,,,,,326,169,13,360,,,356,,,,279,,100,,,,,,,,,,,,,,,,,,,,,,,35,,,,369,,,394,,217,39,,,,,,383,383,,,,,,,381,136,,362,,354,362,38,,337,136,362,,,,,,288,288,,,291,,293,,317,,,,,,,42,299,,336,385,,42,285,356,,,,,7,,111,82,7,13,,384,129,24,,386,371,75,19,339,94,42,,178,,,337,,,,,,287,,,320,,332,,193,,,,292,,,,,,,,,303,,25,,,,,38,,,,,,,,,193,,,,,,96,170,129,,280,352,88,,,,,,356,,,131,1,205,,,132,,330,,,,194,,249,362,,287,345,71,,247,188,,,,,340,238,88,,,336,383,,285,,249,,,150,132,178,,127,253,247,363,84,5,272,343,127,120,,82,336,,,383,365,253,,,,351,88,,,48,,,14,,,332,167,,76,339,32,24,386,304,,363,261,174,310,318,,196,254,,,146,203,,9,99,198,356,,137,241,274,151,,,,,285,,,,11,,358,,,137,,,91,,243,,88,,,,,,393,189,81,252,189,189,5,47,201,,,37,,134,176,,216,,,358,255,,199,,,357,96,249,,,,,,,,,,,129,47,,,188,29,131,,88,,386,,130,124,357,29,,268,270,38,,321,,,,350,,,258,,,134,344,,25,,,,,,265,129,356,123,,167,,,,,,128,263,13,,251,124,127,58,,268,125,344,182,358,249,133,307,357,186,117,385,354,,,,,,,,113,13,,,62,323,306,,,,,,,,167,246,,,167,,,,,283,,,,137,191,,,,,289,,,320,361,,103,,361,,,,,,,,170,88,76,201,,,,,143,160,169,291,335,,339,126,361,358,358,,45,188,,,330,134,,,,129,,100,,,137,,140,,,113,,,,,88,,32,,302,,,,22,5,,323,19,110,,,,337,,,,246,57,,,,,,100,174,83,,,,,,352,397,,,,293,,,,247,,52,313,,13,,,,,247,193,243,332,57,,391,,,,,,,205,,,,319,182,,,,,,,358,358,358,341,275,,,,,,,,,348,,,,,,,362,,,,76,182,,,,,,,,,9,,,,,,,,,,,85,,,,,,386,,340,289,94,248,,,,,246,,69,,,,,,230,,119,369,128,,,,48,,332,,156,320,,337,,247,,,,,,,,62,,,,,31,142,156,,130,177,,231,,,,,,,,,162,,193,,,305,,,,,8,,,,,,,,,,,,,,153,,,246,,300,,,,382,129,127,,,78,,112,,381,,,347,,,,,268,334,,,291,,,270,308,,10,,,13,,,,,,,161,,127,167,,,362,,358,201,,,,,,237,,,,337,,,,,,,,,,,,171,,,347,,,,,,,,,,,,,304,,,,,197,,187,,,,380,,,332,,,,,50,,22,,,,,,,,,,214,293,,,,,,,,,,,250,70,169,173,150,1,13,,,,,,81,,,,,350,131,272,,,,,,,,,,,,257,,,124,,,,,399,,,,,,272,,,,139,,,,,,,,,,247,,365,,,,,334,127,117,,,165,,,,,,9,112,,332,,,,,,,,356,,,,,,,,,,,,349,13,,,,,,,,342,,,,117,,343,,,,303,293,350,,,,,,,270,,310,,,,,,,,93,,,,,,,,132,,,,,,24,196,,,339,,229,,,,,,,167,,,,,,,,315,,,,,81,,,,,,,,,,,,,,,,,,370,,,,126,,,,,,116,,,,,,,,,,,,201,,,,,217,,,,,,,,,,,,,,,,,257,,81,,,,,,,,,,,,,,,377,,,,213,,,,,,,,,,,,,,,,,,119,178,225,183,,,249,,,,,,347,,,,362,,,,107,,,,,,,,,38,256,,127,,,291,,,,,,,,117,124,193,94,306,338,30,291,356,185,,,,,,,,333,272,8,238,,,,,,357,,23,,,,,,,351,112,,,,,,98,370,,,132,88,37,70,,339,,,256,361,375,,,361,113,110,,,,261,,,,,,386,,,,100,,257,288,,174,100,57,,,167,36,257,202,,,124,,,,353,328,,386,,,158,131,,,,,94,,,,,255,,,,383,187,,380,128,208,301,247,,,,341,360,,,,,76,,293,,85,289,,,,380,336,88,167,,,40,,,,,352,320,,325,,335,383,,83,,194,,247,,,159,193,250,,337,,,,318,,,,,362,,,238,,,356,,,258,,,,254,,,107,330,,,,,,,,358,107,31,,,146,,342,,,,,362,,,,123,,14,,,,,,,88,,,361,256,189,,,,,,,,,88,,156,,,,119,,66,,,,,206,177,45,268,,,,162,233,,337,,,363,,,303,,268,,,,,,253,,,,312,,,,,,,,199,,,,,,,,,187,,,291,25,37,,4,,,,312,,240,,,,,182,,,384,,,295,,,,,,185,,,,189,337,,,,,,378,188,340,,,,,,,,237,,,,,232,,,,,123,,,,,124,,,,285,,,,,,,,,,,342,,,,,31,,,,,182,,,,,,,169,,,,,,,,,193,,270,126,,,,,197,,,,,,167,45,,,,,,,,,,,,,,,,138,,,,,,,71,,,257,,,,349,,,,227,343,,,,,,,344,352,,,,,,,339,,,132,,351,,,,,,,,116,257,356,,20,,,15,29,,285,35,,106,,295,,204,,,,,384,,,,,,265,253,133,,363,191,,4,216,,,128,,,56,,234,,,,,311,,,,346,,,,,,328,,,,,,232,,189,,,,,,,10,,337,,,,88,,,,,,248,,,,,94,,,,,22,172,,,390,58,,,147,,,,,36,,,,245,,356,362,,,256,260,,,,,,283,,,169,169,151,129,,,13,,,,,,,,75,15,,286,235,,,,182,107,,,337,,137,,,,101,,,,,,,,14,,,,,,113,,9,9,,,,,,10,40,183,,,,,,55,,,,270,,,,,325,37,,,,,249,,,,161,,380,,,,,,,,,,,250,,,340,,,,,,,,,,,,,,,,,,,,,,,,,,13,133,,,,,,,270,,,,,,,,,,,,,,,,,,,,,232,,,,337,,354,,311,,,88,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,129,103,,105,194,291,31,161,139,127,337,62,,362,99,133,257,131,,,,139,,,,100,,399,,286,,,,,132,,98,40,,,,,304,,,,383,,,,119,,,,,,,,,,,,,352,,,,,,,117,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,394,,,,,,,,,,167,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,377,,,,,,,,,,,,,,,,362,315,,,,,,,,,291,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,129,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,254,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,134,,,,,,238,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,127,67,88,265,127,132,117,313,262,285,247,,350,356,350,127,,130,124,229,137,351,209,347,76,181,,302,85,288,82,139,382,100,113,243,397,291,,375,304,381,62,385,47,257,379,,356,356,155,165,291,101,291,132,124,36,386,289,120,57,99,258,105,350,356,382,90,340,29,125,347,,132,336,362,251,336,93,361,124,155,300,302,77,254,386,396,226,71,393,83,146,332,362,298,289,65,31,170,392,306,311,,356,202,35,66,123,129,342,349,355,332,76,362,348,31,394,2,352,62,194,239,,201,58,304,342,354,8,291,249,194,133,187,380,129,200,311,373,251,161,246,139,352,249,377,35,100,,,,,,,,,,126,,,,,70,130,,37,,,330,,,,,,,,,291,,,,,326,,,,,,,340,122,,,,,,,,112,362,,,,,,,,17,,,,,383,9,30,,,,,,,,65,,,346,,,,113,201,,189,,,,,,,,238,,,,201,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10,381,88,,98,22,371,339,6,378,126,383,81,311,242,14,99,386,103,79,129,13,291,319,105,155,56,189,83,113,356,372,383,128,124,394,173,178,369,394,90,133,256,381,160,288,88,71,127,293,286,47,,,97,235,57,160,,391,88,389,276,371,352,368,,374,285,358,91,37,,288,206,,,,113,,380,,,396,,,136,88,379,91,247,,,,,,,,,,35,,,252,33,,,,,364,257,,,,,,394,,,172,,,,,,,,,,,312,,,,257,,,,,,,,,,,,,,368,,397,230,9,,,74,,88,,352,,383,309,,,,364,250,,310,,,,,5,66,,327,128,,234,,,,,383,88,,,285,19,,137,167,96,,,,339,131,,,,152,,105,255,156,,,178,,,,318,,129,,251,13,339,75,127,,127,,,,,,,,349,,,,170,360,,39,,,309,,,,,46,,,,,,,,,121,137,37,,,316,19,,,,,,22,395,,383,,64,383,,75,,,,384,,,,41,129,,,137,,,342,239,269,,316,,,129,59,54,337,309,,,,,,217,232,,,,,,,50,,,,,,,,,,,,,12,,,16,,,61,28,,81,40,,74,,50,,139,,,,,,246,,,51,,370,,,,386,,40,,,,,,,,173,172,,,,31,,,,,,,,398,,342,,,,,,,,,,,,,289,98,,,257,,,75,,,,,,,,312,,,,,,,,,,,,,,,,,,,,332,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,34,375,105,348,,265,389,76,181,271,117,100,146,178,385,383,356,119,381,167,354,254,291,367,383,131,,258,178,131,380,88,170,214,10,124,106,331,,46,394,49,88,127,,293,235,363,338,377,178,380,173,343,100,,47,13,,,,159,,,,,14,14,,14,,,,,35,270,,,,,,,,14,,,,171,55,,,249,362,,247,350,,107,186,,,,,,358,,365,133,,351,81,336,,,122,380,,133,363,332,169,37,,,318,,356,135,128,,56,79,62,244,,66,371,,293,,,134,,,,194,12,127,,,,391,,,325,302,291,313,233,118,213,,,348,350,20,,341,,322,386,256,62,,323,,316,70,,,321,104,,291,36,304,370,260,85,,,,167,,,,,,,122,56,178,,,,,,156,332,,356,,,182,13,,362,,,74,306,,42,,,362,,,,,,14,,76,338,123,256,59,,,,356,99,,,175,,,,,,,309,249,,354,,,4,,,,,370,380,,,,,,173,400,,,,,,,,137,,13,354,,342,306,,,,,196,,,159,,,,,,356,,61,,360,,110,,188,,255,,155,,,,82,344,204,,,8,,,,342,,336,,361,110,310,256,,238,18,287,10,,62,396,355,173,,,386,,,362,,,252,383,,122,,,131,,,,162,128,153,382,,365,,,,337,,,,88,93,112,,,,140,358,,,,167,365,20,,,238,,107,,311,,,,,35,,,,57,,,,,70,352,,,,76,,138,,,,,,,,,,,,,,,,,,,,,13,,,,,357,,,,352,378,,,,,,,,,,,,285,,244,,,,,,,,396,,,,,,,,,,174,,,85,,,361,67,256,393,235,385,356,91,,136,,,,,347,,,84,,,365,310,,,327,50,110,100,304,,,,199,163,,39,,321,383,339,130,36,,323,131,191,151,305,165,,,,352,284,215,,,,,,235,,45,,399,,50,157,316,,,119,347,344,,,,,,,,194,258,,,,,,,109,312,,,,,,,163,,,20,131,337,,,,,167,137,,,,,350,,,,,,,,,,,,,22,,361,291,,167,384,355,170,,133,,,,,,,,,,,88,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,129,,,,,,,,,,,,,,,,,,,,,,,,,,255,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,179,,,,,,,,,,,,,,,,,,,,,,,,,,336,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,368,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,202,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,175,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,4,,,,,,,,,,,,4,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,343,,,,,,,,,,,,,,,,,,,,,,,,,,,89,356,381,67,379,244,171,323,249,42,285,,81,65,192,227,,30,,90,20,310,137,74,33,384,204,10,92,7,249,364,253,140,336,99,144,82,126,70,220,5,362,249,382,249,100,19,146,244,20,19,364,398,203,311,128,64,361,319,19,174,300,249,189,,291,348,309,13,213,238,75,,145,163,79,,,361,36,128,355,208,,36,321,183,65,357,142,375,386,337,320,68,,120,258,283,108,354,94,199,382,280,131,356,31,38,312,2,357,270,386,163,246,,160,314,169,148,341,308,167,374,40,107,93,76,346,54,180,85,343,175,142,129,272,316,170,253,137,0,250,380,226,54,189,11,,60,146,157,,337,100,182,44,391,133,,339,138,126,235,311,67,129,137,193,394,252,,142,250,301,76,29,251,384,72,303,,122,1,71,191,177,,83,191,201,381,,94,217,,138,217,204,175,93,8,356,128,17,,15,312,187,182,,360,134,62,397,348,,343,139,171,246,178,73,161,246,51,250,61,126,165,,393,169,356,29,15,,,340,,,,,,,,,32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,192,296,285,352,,13,333,43,273,332,339,117,129,198,144,192,375,208,105,333,309,198,183,,80,94,113,157,136,364,162,,362,352,32,337,333,125,352,352,31,161,257,,158,259,113,317,,259,143,,88,,,73,,249,336,,,,,,,,7,,,,271,,,134,82,353,357,381,132,,,,,397,401,64,,0,327,,10,,88,127,178,176,35,344,,177,201,130,,,339,,,,90,285,,,,,,13,,,,383,,70,363,,40,,,217,365,339,235,,396,,,,,,44,,238,174,313,339,,,,,,,,,,,,,,362,176,,332,,,306,,123,,306,357,,,,94,,,156,1,337,,,378,,,,,,,,,,,306,,,,,,,,,337,,,124,,,167,,,391,,,307,138,206,,259,352,,,345,351,127,100,,383,,,47,360,137,40,,,182,,,65,,,,,,,,,,,39,,,,,,,,362,362,349,,,,,333,,,,167,,,174,165,,9,,,,,336,,347,127,,,341,,320,381,235,191,,,,126,283,83,,,,213,,,173,,,,,,297,,338,,,,,,,,,,,,357,,,1,,,339,,178,,,,,,5,238,,,,,186,,,,,,,,,,,,,,,,,,,,254,130,,,134,,,134,,64,,,83,,145,194,195,,,355,,,,94,,,,,,,,,,133,349,,5,,,,,,55,,,,,,,,,353,,,,,,342,,2,,,,55,251,,187,,,,251,,,,,,,,137,,,269,,,,,,,,137,,14,,129,,,99,,10,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,332,265,,110,332,365,313,136,,,,,,357,,365,287,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,355,67,254,110,340,299,347,347,330,100,74,247,7,302,111,362,178,174,244,134,132,128,,94,358,,146,356,242,,325,110,,358,146,316,,76,389,352,76,217,187,64,278,112,,31,270,242,258,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,85,,,15,275,137,,303,,,240,15,15,,,,83,291,,,,,,,,307,340,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,352,,,23,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,319,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,360,313,,,,,,,,,,,,,,,,127,,344,326,337,265,362,37,81,357,129,291,9,301,,356,79,263,340,,,131,,18,19,,76,362,210,,,125,339,103,29,156,,303,31,,201,,175,346,133,187,277,389,207,292,156,107,340,,,,,,,,,,,,88,,,343,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,185,362,327,350,37,257,,19,183,369,291,301,88,137,396,386,327,223,128,356,310,341,185,,131,120,182,109,239,,167,36,352,,,140,247,247,146,391,,,23,239,383,,279,336,4,175,249,285,15,182,48,31,385,127,,340,100,,,,,,,,322,132,,,,,62,151,109,,118,,94,,,,13,146,248,,,177,,,,,,154,17,,,,,71,,306,,,,,93,,,,,,,,,157,,,,,189,,,,,318,,394,,261,,,,,,,,,,346,,127,,,,,,,,395,,,,,258,,,,,,,136,,,,17,,,,,,,,,,,,122,,,,172,,,,,,,,,,,,32,,,94,,,,,,,,,362,105,,,,,156,125,5,244,191,,352,341,170,,,,331,,332,,37,,,201,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,362,,,361,,178,82,,,5,243,214,178,,,88,,9,118,,310,105,132,,332,79,,,,,127,131,339,,340,350,97,167,169,129,167,291,318,106,283,122,,127,,254,174,,396,83,157,32,100,213,214,65,134,,291,394,84,66,,,,,,276,76,256,88,123,,,14,279,4,247,309,103,354,,,164,15,349,16,187,198,360,,,105,285,173,400,,,167,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,216,136,127,363,199,,229,351,,9,381,100,69,178,351,,353,,37,257,363,,327,301,383,79,101,346,,,94,179,117,,19,167,138,100,76,362,339,316,336,259,196,2,,10,237,,45,,,,119,,76,119,,47,191,336,,354,,,,,129,113,,358,380,175,171,131,136,362,178,,,358,119,,103,,,,,,,,,,,54,178,,,127,,,,,140,386,,,194,,,,,,,247,178,,,,,,,,,,288,,173,,,,,,,186,,,,,,,,,,,,,,257,,,,88,,,185,,190,124,,,,,,123,,,,,117,,,,293,167,214,,114,,,249,,,,201,,,56,40,361,,356,338,,257,,,254,,167,,71,23,,,,,2,,,,,,,,,,383,,88,88,,198,,,,,,,,,,,,,363,,327,67,,205,,,100,,,,313,,238,,,,,,,293,,84,,,,,,,,,,361,,,336,,,,,,,,337,,352,,13,,256,110,,,,,,375,,,,,,,,,,,,247,127,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,35,,,137,174,9,318,394,357,362,46,257,335,,,,,,,,,,,,,176,98,143,,,,105,364],	b:['a','ai','an','ang','ao','ba','bai','ban','bang','bao','bei','ben','beng','bi','bian','biao','bie','bin','bing','bo','bu','ca','cai','can','cang','cao','ce','cen','ceng','cha','chai','chan','chang','chao','che','chen','cheng','chi','chong','chou','chu','chuai','chuan','chuang','chui','chun','chuo','ci','cong','cou','cu','cuan','cui','cun','cuo','da','dai','dan','dang','dao','de','deng','di','dia','dian','diao','die','ding','diu','dong','dou','du','duan','dui','dun','duo','e','ei','en','er','fa','fan','fang','fei','fen','feng','fo','fou','fu','ga','gai','gan','gang','gao','ge','gei','gen','geng','gong','gou','gu','gua','guai','guan','guang','gui','gun','guo','ha','hai','han','hang','hao','he','hei','hen','heng','hong','hou','hu','hua','huai','huan','huang','hui','hun','huo','ji','jia','jian','jiang','jiao','jie','jin','jing','jiong','jiu','ju','juan','jue','jun','ka','kai','kan','kang','kao','ke','ken','keng','kong','kou','ku','kua','kuai','kuan','kuang','kui','kun','kuo','la','lai','lan','lang','lao','le','lei','leng','li','lia','lian','liang','liao','lie','lin','ling','liu','long','lou','lu','luan','lue','lun','luo','lv','m','ma','mai','man','mang','mao','me','mei','men','meng','mi','mian','miao','mie','min','ming','miu','mo','mou','mu','na','nai','nan','nang','nao','ne','nei','nen','neng','ni','nian','niang','niao','nie','nin','ning','niu','nong','nou','nu','nuan','nue','nuo','nv','o','ou','pa','pai','pan','pang','pao','pei','pen','peng','pi','pian','piao','pie','pin','ping','po','pou','pu','qi','qia','qian','qiang','qiao','qie','qin','qing','qiong','qiu','qu','quan','que','qun','ran','rang','rao','re','ren','reng','ri','rong','rou','ru','ruan','rui','run','ruo','sa','sai','san','sang','sao','se','sen','seng','sha','shai','shan','shang','shao','she','shen','sheng','shi','shou','shu','shua','shuai','shuan','shuang','shui','shun','shuo','si','song','sou','su','suan','sui','sun','suo','ta','tai','tan','tang','tao','te','teng','ti','tian','tiao','tie','ting','tong','tou','tu','tuan','tui','tun','tuo','wa','wai','wan','wang','wei','wen','weng','wo','wu','xi','xia','xian','xiang','xiao','xie','xin','xing','xiong','xiu','xu','xuan','xue','xun','ya','yan','yang','yao','ye','yi','yin','ying','yo','yong','you','yu','yuan','yue','yun','za','zai','zan','zang','zao','ze','zei','zen','zeng','zha','zhai','zhan','zhang','zhao','zhe','zhen','zheng','zhi','zhong','zhou','zhu','zhua','zhuai','zhuan','zhuang','zhui','zhun','zhuo','zi','zong','zou','zu','zuan','zui','zun','zuo'],
getFirstAlpha : function(pWord){
		pWord = pWord.split("")[0];
		if(pWord.length==1 && pWord.charCodeAt()>18000)
		{
			return (this.b[this.a[pWord.charCodeAt()-18000]]||"?").substring(0,1).toUpperCase();
		}
		else
		{
			return "?";
		}
	}
};
/*--------------------------------------------------------------------------------------------------
*Author:李善举
*CompletedDate:2008-07-11
*Editor:
*ModifiedDate:
*Version:V1.0
*Description:创建表单验证类,表单创建后要对其中元素进行事件注册，并在onsubmit事件中进行调用
*Example:<form onSubmit="return WBForm.validate(formID);">,在表单后调用WBForm.register();进行初始化目
*前可以验证数字、小数、Email、联系方式（包括手机）、URL、邮编、英文、中文、混合、必填、重复、组化等功
*能，并具有过滤数据库危险字符功能，使用时只须在原HTML元素上加自定义属性dataType[min|max]及msg信息即可
*--------------------------------------------------------------------------------------------------
*/
var WBForm ={
	message:[],//错误集合
	form:null,//表单
	elements:[],//元素集合,
	length:0,//元素数目,
	style:{color:"#cd0000",backgroundColor:"#ffffff",fontWeight:"normal"},
	/*****正则验证*****/
	number:/^[-]?\d+$/,//验证整数
	decimal:/^[-]?\d+(\.\d{1,2})?$/,//验证小数默认最多两位小数
	email:/^([\w|_|-]+)@([\w|_|-]+)(\.[\w|_|-]+)+/i,//验证email
	telephone:/(^(\d{3,4})[-]?(\d{7,8})(-\d{1,4})?$)|(^\d{11}$)/,//验证电话、手机
	url:/^http:\/\//i,//验证网址
	postcode:/^[1-9]\d{5}$/,//验证邮编
	
	double : /^[-\+]?\d+(\.\d+)?$/, //验证正负数 ,卢晓光
	/*****正则替换验证*****/
	english:/^[-_a-zA-Z][\w]*$/,//与min、max属性配合验证英文输入长度
	chinese:/^[\u4e00-\u9fa5]+$/,//与min、max属性配合验证输入中文长度
	mixed:/^.*$/,//与min、max属性配合验证输入长度
	/*****单独验证*****/
	required:true,//必填
	repeated:true,//与to属性配合验证重复
	group:true,//与min、max属性配合验证复选框选中数目
	danger:/(like)|(insert)|(select)|(update)|(delete)|(drop)|(truncate)|(and)|(or)|(alter)|(column)|(grant)|(revoke)|(create)|(exec)|(execute)|(constraint)/i,//危险字符组合
	initialize:function(element)//确保表单存在且正确
	{
		if((typeof element)=="string" && element) WBForm.form = $(element);
		else if((typeof element)=="object" && element!=null) WBForm.form = element;
		else WBForm.form = document.forms[0];//默认使用文档中第一个表单
		if((typeof WBForm.form)=="object" && WBForm.form.tagName && WBForm.form.tagName.toLowerCase()=="form")
		{
			WBForm.length = WBForm.form.elements.length;
			for(var i=0;i<WBForm.length;i++)
			{
				WBForm.elements.push(WBForm.form.elements[i]);
			}
			return true;
		}
		else return false;
	},
	childHandler:function(e,obj,pType)
	{
		if(pType==0 && !e) e = window.event;
		var dataType = obj.getAttribute("dataType").toLowerCase();
		var min = obj.getAttribute("min");
		var max = obj.getAttribute("max");
		var to = obj.getAttribute("to");
		var flag = true;
		var value;
		switch(dataType)
		{
			case "number":
			case "decimal":
			case "english":
			case "chinese":
			case "mixed":
			case "double":
				value = obj.value;
				//正则验证通过且长度或者大小符合指定范围
				if(WBForm[dataType].test(value))
				{
					if(/^(number)|(decimal)$/.test(dataType)) value = parseFloat(value);
					else value = value.length;
					if(min && max && value>=parseFloat(min) && value<=parseFloat(max)) flag = false;
					else if(min && value>=parseFloat(min) && !max) flag = false;
					else if(max && value<=parseFloat(max) && !min) flag = false;
					else if(!min && !max) flag = false;
					else flag = true;
				}
				else flag = true;
				break;
			case "email":
			case "telephone":
			case "url":
			case "postcode":
				//如果按键是上下左右箭头则直接返回
				if(e && e.keyCode>=37 && e.keyCode<=40) return;
				obj.value = obj.value.replace(WBForm["danger"],"");
				value = obj.value;
				//正则验证通过
				if(WBForm[dataType].test(value)) flag = false;
				break;
			case "required":
				value = obj.value.trim(true);
				//必填内容
				if(value.length>0) flag = false;
				break;
			case "repeated":
				value = obj.value.trim(true);
				//必填且不能为空（不包括空格）
				if(value.length>0 && to && $(to) && $(to).value==value) flag = false;
				break;
			case "group":
				if(obj.name && obj.tagName.toLowerCase()=="input" && obj.type.toLowerCase()=="checkbox")
				{
					var objs = document.getElementsByName(obj.name);
					var total = 0;
					for(var i=0,len=objs.length;i<len;i++)
					{
						if(objs[i].checked) total++;
						if(objs[i].getAttribute("min")) min = objs[i].getAttribute("min");
						if(objs[i].getAttribute("max")) min = objs[i].getAttribute("max");
					}
					if(min && max && total>=parseInt(min) && total<=parseInt(max)) flag = false;
					else if(min && total>=parseInt(min) && !max) flag = false;
					else if(max && total<=parseInt(max) && !min) flag = false;
					else if(!min && !max) flag = false;
					else flag = true;
				}
				if(obj.name && obj.tagName.toLowerCase()=="select")
				{
					value = obj.value;
					min = obj.getAttribute("min");
					if(min && value!=min) flag = false;
					else if(!min) flag = false;
				}
				break;
			default:
				break;
		};
		WBForm.createErrorSpan(obj,flag,pType);
	},
	allHandler:function(e)
	{
		//事件对象一定具有dataType属性
		var obj = $E.source(e);
		WBForm.childHandler(e,obj,0);
	},
	createErrorSpan:function(obj,flag,pType)//创建隐藏错误对象
	{
		if(arguments.length==3)
		{
			for(var i=0;i<WBForm.length;i++)
			{
				var err = $(WBForm.form.id+"_errorspan_"+i.toString());
				if(WBForm.elements[i]==obj && err.innerHTML!="" && flag)
				{
					err.style.display = "block";
				}
				if(pType==0)
				{
					err.style.display=(WBForm.elements[i]==obj && err.innerHTML!="" && flag)?"block":"none";
				}
			}
		}
		else
		{
			for(var i=0;i<WBForm.length;i++)
			{
				var errorspan = document.createElement("SPAN");
				var msg;
				if(WBForm.elements[i].getAttribute("dataType")) msg = WBForm.elements[i].getAttribute("msg")||"[该项]不能为空";
				else msg = "";
				errorspan.id = WBForm.form.id+"_errorspan_"+i.toString();
				errorspan.style.display = "none";
				errorspan.style.color = WBForm.style.color;
				errorspan.style.backgroundColor = WBForm.style.backgroundColor;
				errorspan.style.fontWeight = WBForm.style.fontWeight;
				errorspan.innerHTML = msg;
				WBForm.elements[i].parentNode.appendChild(errorspan);
			}
		}
	},
	validate:function(element)
	{
		if(!WBForm.initialize(element)) return false;
		var flag = true;
		for(var i=0;i<WBForm.length;i++)
		{
			if(WBForm.elements[i].getAttribute("dataType"))
			{
				WBForm.childHandler(null,WBForm.elements[i],1);
			}
			var err = $(WBForm.form.id+"_errorspan_"+i.toString());
			if(err.style.display == "block") flag = false;
		}
		return flag;
	},
	register:function(element)//注册事件
	{
		if(!WBForm.initialize(element)) return;
		//创建所有错误隐藏对象
		WBForm.createErrorSpan();
		//注册事件
		for(var i=0;i<WBForm.length;i++)
		{
			//文本框
			if(WBForm.elements[i].getAttribute("dataType") && WBForm.elements[i].tagName.toLowerCase()=="input" && WBForm.elements[i].type.toLowerCase()=="text")
			{
				WBForm.elements[i].onfocus = WBForm.allHandler;
				WBForm.elements[i].onkeyup = WBForm.allHandler;
				WBForm.elements[i].onblur = WBForm.allHandler;
			}
			//复选框、单选框
			if(WBForm.elements[i].getAttribute("dataType") && WBForm.elements[i].tagName.toLowerCase()=="input" && (WBForm.elements[i].type.toLowerCase()=="checkbox" || WBForm.elements[i].type.toLowerCase()=="radio"))
			{
				WBForm.elements[i].onclick = WBForm.allHandler;
			}
			//下拉框
			if(WBForm.elements[i].getAttribute("dataType") && WBForm.elements[i].tagName.toLowerCase()=="select")
			{
				WBForm.elements[i].onchange = WBForm.allHandler;
			}
			//文本域
			if(WBForm.elements[i].getAttribute("dataType") && WBForm.elements[i].tagName.toLowerCase()=="textarea")
			{
				WBForm.elements[i].onfocus = WBForm.allHandler;
				WBForm.elements[i].onkeyup = WBForm.allHandler;
				WBForm.elements[i].onblur = WBForm.allHandler;
			}
		}
	}
}    
