﻿/*RegExp*/
var Regex = {};
Regex.String = {
    Script     : "<script[^>]*>([\\S\\s]*?)<\/script>",
    Tags       : "<(\"[^\"]*\"|'[^']*'|[^'\">])*>",
	JSON       : "^\/\*-secure-([\s\S]*)\*\/\s*$",
	IP         : "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$",
	Int        : "^[0-9]+$",
	Color      : "#[a-fA-F0-9]{6}",
	Letter     : "^[a-zA-Z]+$",
	Tellphone  : "^(\\d{3}-\\d{8}|\\d{4}-\\d{7,8})(\\-\\d{1,5})?$",
	Mobile     : "^1[3|5][0-9]\\d{8}$",
	EMail      : "^([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$",
	Zip        : "^\\d{6}$",
	QQ         : "^\\d{5,12}$",
	Identity   : "^\\d{15}$|^\\d{18}$|^\\d{17}x$",
	Domain     : "^([\\w-]+\\.)+((com)|(net)|(org)|(gov\\.cn)|(info)|(cc)|(com\\.cn)|(net\\.cn)|(org\\.cn)|(name)|(biz)|(tv)|(cn)|(mobi)|(name)|(sh)|(ac)|(io)|(tw)|(com\\.tw)|(hk)|(com\\.hk)|(ws)|(travel)|(us)|(tm)|(la)|(me\\.uk)|(org\\.uk)|(ltd\\.uk)|(plc\\.uk)|(in)|(eu)|(it)|(jp))$",
	URL        : "^((ht|f)tp(s?))\\:\\/\\/([0-9a-zA-Z\\-]+\\.)+[a-zA-Z]{2,6}(\\:[0-9]+)?(\\/\\S*)?$",
	DoubleByte : "^([^\\x00-\\xff])*$",//gi
	Decimal    : "^[0-9]+(.[0-9]{1,2})?$"
};
Regex.Register = function (pattern,option){return new RegExp(pattern, option)};
if(!RegExp.prototype.match) RegExp.prototype.match = RegExp.prototype.test;
/*Object toLowerCase toUpperCase getAttribute setAttribute*/
Object.Empty = function(){};
Object.Extend = function(destination,source){var property; for (property in source) destination[property] = source[property]; return(destination);};
Object.Copy = function(object) {return Object.Extend({}, object);}
Object.Browser = {
    MSIE                 : !!(window.attachEvent && !window.opera),
    Opera                : !!window.opera,
    Firefox              : navigator.userAgent.indexOf(' Firefox/') > -1,
    WebKit               : navigator.userAgent.indexOf('AppleWebKit/') > -1,
    Gecko                : navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1,
    Safari               : !!navigator.userAgent.match(/Apple.*Mobile.*Safari/),
    hasDebuggerStatement : false,
	name                 : navigator.appName,
	version              : parseFloat(navigator.appVersion),
    Features: {
        XPath: !!document.evaluate,
        ElementExtensions: !!window.HTMLElement,
        SpecificElementExtensions:(document.createElement('div').__proto__ && document.createElement('div').__proto__ !== document.createElement('form').__proto__)
    }
};
if(Object.Browser.MSIE){Object.Browser.version=parseFloat(navigator.userAgent.match(/MSIE (\d+\.\d+)/)[1]);Object.Browser.hasDebuggerStatement=true}else if(Object.Browser.Firefox){Object.Browser.version=parseFloat(navigator.userAgent.match(/ Firefox\/(\d+\.\d+)/)[1]);Object.Browser.name='Firefox';Object.Browser.hasDebuggerStatement=true}else if(Object.Browser.Safari){Object.Browser.version=parseFloat(navigator.userAgent.match(/ Safari\/(\d+(\.\d+)?)/)[1]);Object.Browser.name='Safari'};
Object.Bounds=function(){var clientWidth;var clientHeight;if(Object.Browser.MSIE){clientWidth=document.documentElement.clientWidth;clientHeight=document.documentElement.clientHeight}else if(Object.Browser.Safari){clientWidth=window.innerWidth;clientHeight=window.innerHeight}else if(Object.Browser.Opera){clientWidth=Math.min(window.innerWidth,document.body.clientWidth);clientHeight=Math.min(window.innerHeight,document.body.clientHeight)}else{clientWidth=Math.min(window.innerWidth,document.documentElement.clientWidth);clientHeight=Math.min(window.innerHeight,document.documentElement.clientHeight)}return new Model.Size(clientWidth,clientHeight)};
Object.isNull = function(object){if(!object || object == null){return true;}if(Object.isString(object)){return object.Trim().length == 0;}return false;};
Object.isElement = function(object) {return (object) && (object.nodeType == 1);};
Object.isArray = function(object) {return (object != null) && (typeof(object) == "object") && ('splice' in object) && ('join' in object);};
Object.isHash = function(object) {return object instanceof Hash;};
Object.isFunction = function(object) {return typeof object == "function";};
Object.isString = function(object) {return typeof object == "string";};
Object.isNumber = function(object) {return typeof object == "number";};
Object.isUndefined = function(object) {return typeof object == "undefined";};
//产生随机数(max:上限;min:下限)
Object.Rand = function(min,max){return(parseInt(Math.floor(Math.random() * ((Number(max)-min) + 1)) + min));};
//将一个具有length属性的其它对象转换成数组对象
Object.toArray = function(iterable){if (!iterable){return [];}if (iterable.toArray){return iterable.toArray();}else{var results = [];for (var i = 0; i < iterable.length; i++) results.push(iterable[i]);return results;}};
//返回对象中第一个执行成功的对象
Object.Try = function(){var returnValue;for (var i = 0; i < arguments.length; i++) {var lambda = arguments[i];try {returnValue = lambda(); break;}catch (e) {}}return returnValue;};
//触发异常
Object.Throw = function(e,x){throw e; return x;};
//确认提示
Object.Alert = function (txt){return window.confirm(txt);};
Object.keys = function(object) {var keys = [];for (var property in object) keys.push(property);return keys;};
//返回键名称在对象中的位置
Object.indexOf = function(object, key) {var result = -1;var i = 0; for (var property in object){if(property == key){result = i; break;}i++;}return result;};
var $A = Object.toArray;
//模型
var Model = {};
Model.Position = function (x, y){this.X = x;this.Y = y;};
Model.Size = function(width, height){this.Width = width;this.Height = height;};
Model.Bound = function (x, y, width, height) {this.X = x;this.Y = y;this.Width = width;this.Height = height;};
/*Function*/
//指定绑定到元素的事件
Function.prototype.Attach = function(element, eventType){if (Object.Browser.MSIE) $(element).attachEvent("on"+eventType, this);else $(element).addEventListener(eventType, this, false);};
//取消绑定到元素的事件
Function.prototype.Detach = function(element, eventType){if (Object.Browser.MSIE){$(element).detachEvent(("on" + eventType), this);}else{$(element).removeEventListener(eventType, this, true);}};
if (!Function.prototype.apply) Function.prototype.apply = function(object, parameters) {var parameterStrings = []; if (!object) object = window; if (!parameters) parameters = []; for (var i = 0; i < parameters.length; i++){ parameterStrings[i] = 'parameters[' + i + ']';} object.__apply__ = this; var result = eval('object.__apply__(' + parameterStrings.join(', ') + ')'); object.__apply__ = null; return result;};
Function.prototype.Bind = function(){var __method = this, args = Object.toArray(arguments), object = args.shift();return function() {return __method.apply(object, args.concat(Object.toArray(arguments)));}};
Function.prototype.Methodize = function(){if (this._methodized) return this._methodized;var __method = this;return (this._methodized = function(){return (__method.apply(null, [this].concat($A(arguments))));});};

/*Array*/
//历遍指定数组对象(iterator:函数)
Array.prototype.Each = function(iterator){for(var i = 0; i < this.length; i++){if (iterator(this[i]) == false) break;}};
//历遍指定数组对象(iterator:函数)
Array.prototype.EachIndex = function(iterator){for(var i = 0; i < this.length; i++){if (iterator(this[i],i) == false) break;}};
Array.prototype.Map = function(iterator, context) {iterator = iterator ? iterator.Bind(context) : function(){};var results = [];this.Each(function(value, index) {results.push(iterator(value, index));});return results;};
Array.prototype.Inject = function(memo, iterator, context) {iterator = iterator.Bind(context);this.EachIndex(function(value, index) {memo = iterator(memo, value, index); return true;});return memo;};
//对象是否存在于数组中
Array.prototype.Contains = function(object){var result = false;this.Each(function(obj){if(obj == object){result = true; return false;} return true;});return result;};
//对象在数组中第一次出现的索引位置
Array.prototype.indexOf = function(object){var result = -1;this.EachIndex(function(obj, index){if(obj == object){result = index; return false;} return true;});return result;};
//对象在数组中最后一次出现的索引位置
Array.prototype.lastIndexOf = function(object){var result = -1;this.EachIndex(function(obj, index){if(obj == object) result = index;return true;});return result;};

/*String*/
Object.Extend(
    String.prototype,
    {
        //计算字符串对象长度(双字节算两个)
        Length:function(){return this.replace(/[^x00-xff]/g,"aa").length;},
        //从左边截取n个字符 ,如果包含汉字,则汉字按两个字符计算
        SubString:function(n){if(this.Length()>n){var temp="",tmp='';for(var i=0;i<n;i++){tmp=this.charAt(i);if(/([^\x00-\xff])*$/.test(tmp))i++;temp+=this.charAt(i)}return(temp+"..")}return this;},
        //字符是否是在字符串中
        Contains:function(k1,k2){if((!k2)||(k2==''))return(this.indexOf(k1)>-1);else return((k2+this+k2).indexOf(k2+k1+k2)>-1);},
        Trim:function(){return this.replace(/^\s+/, '').replace(/\s+$/, '');},
        StripTags:function() {return this.replace(Regex.Register(Regex.String.Tags,'gi'), '');},
        StripBads:function(){return this.replace(/\</g, '').replace(/\>/g, '').replace(Regex.Register("'",'g'), '').replace(Regex.Register('"','g'), '“');},
        StripScripts:function() {return this.replace(Regex.Register(Regex.String.Script, 'img'), '');},
        extractScripts:function(){var matchAll=Regex.Register(Regex.String.Script,'img');var matchOne=Regex.Register(Regex.String.Script,'im');return(this.match(matchAll)||[]).Map(function(scriptTag){return(scriptTag.match(matchOne)||['',''])[1]});},
        evalScripts : function(){return this.extractScripts().Map(function(script){return eval(script);});},
        //对URI进行编码
        UrlEncode : function (){return window.encodeURIComponent(this);},
        //对URI进行解码
        UrlDecode : function (){return window.decodeURIComponent(this);},
        //将字符串转成浮点数据
        toFloat : function(){return parseFloat(this);},
        //将字符串转骆驼形式z-index to zIndex
        toCamel:function(){var oStringList=this.split('-');var isFirstEntry=true;var camelizedString='';$A(oStringList).Each(function(s){if(!Object.isNull(s)){if(isFirstEntry){camelizedString=s;isFirstEntry=false}else{camelizedString+=s.charAt(0).toUpperCase()+s.substring(1)}}});isFirstEntry=null;return camelizedString}
    }
);
/*Number*/

//定义新类的构造方法。
var Class={Create:function(){return function(){this.initialize.apply(this,arguments)}}};
//定时器
var Execute=Class.Create();Execute.prototype={initialize:function(callback,frequency){this.callback=callback;this.frequency=frequency;this.currentlyExecuting=false;this.registerCallback()},registerCallback:function(){setInterval(this.onTimerEvent.Bind(this),this.frequency*1000)},stop:function(){if(!this.timer)return;clearInterval(this.timer);this.timer=null},onTimerEvent:function(){if(!this.currentlyExecuting){try{this.currentlyExecuting=true;this.callback()}finally{this.currentlyExecuting=false}}}};
/*
***************************************************************************
扩展Element功能
***************************************************************************
*/
function $(element){if(arguments.length>1){for(var i=0,elements=[],length=arguments.length;i<length;i++){elements.push($(arguments[i]))}return elements}if(Object.isString(element)){element=document.getElementById(element)}return Element.Extend(element)}(function(){var element=this.Element;this.Element=function(tagName,attributes){attributes=(attributes||{});tagName=tagName.toLowerCase();var cache=Element.cache;if(Object.Browser.IE&&attributes.name){tagName='<'+tagName+' name="'+attributes.name+'">';delete attributes.name;return Element.writeAttribute(document.createElement(tagName),attributes)}if(!cache[tagName]){cache[tagName]=Element.Extend(document.createElement(tagName))}return Element.writeAttribute(cache[tagName].cloneNode(false),attributes)};Object.Extend(this.Element,element||{})}).call(window);
Element.cache = { };
Element.Methods = {
    //判断元素是否不可见
    Visible:function(element){return $(element).style.display != 'none';},
    //反转元素的可见性
    Toggle:function(element){element = $(element);element.visible() ? element.hide() : element.show();return element;},
    //使元素不可见
    Hide:function(element){$(element).style.display = 'none';return element;},
    //使元素可见
    Show:function(element){$(element).style.display = 'block';return element;},
    //移除元素
    Remove:function(element) {element = $(element);element.parentNode.removeChild(element);return element;},
    //设置元素HTML内容
    HTML:function(element, html){element = $(element);element.innerHTML = html;return element;},
    //追加元素HTML内容
    AddHTML: function(element, html){element = $(element);element.innerHTML += html;return element;},
    //设置元素属性值
    SetAtt:function(element,attributeObject){element=$(element);var property;for(property in attributeObject)element.setAttribute(property,attributeObject[property]);return element;},
    //获取元素属性值
    //class:IE用element.GetAtt("className");FireFox用element.GetAtt("class")
    GetAtt:function(element){element=$(element);var args=arguments;var result={};if(args.length==1){var attributes=element.attributes;for(var i=0;i<attributes.length;i++)result[attributes[i].name]=attributes[i].value}else{for(var i=1;i<args.length;i++)result[args[i]]=element.getAttribute(args[i])}return result;},
    //设置元素的VALUE(值)
    SetValue:function(element,_value,parentElement){element=$(element);if((!element)||(!element.tagName))return element;switch(element.tagName.toLowerCase()){case'select':$A(element.options).Each(function(ele){if(ele.value==_value)ele.selected=true});break;case'input':var _type=element.getAttribute('type');switch(_type){case'radio':document.GetElementsByName(parentElement,element.getAttribute('name')).Each(function(ele){if(ele.value==_value){ele.checked=true;return false}return true});break;case'checkbox':var boxValues=$A(_value.split(','));document.GetElementsByName(parentElement,element.getAttribute('name')).Each(function(ele){if(boxValues.Contains(ele.value))ele.checked=true;else ele.checked=false;return true});break;default:element.value=_value;break}break;case'textarea':element.value=_value;break;default:element.SetAtt({value:_value});break}return element;},
    //获取元素的VALUE(值)
    GetValue:function(element,parentElement){element=$(element);var result='';if((!element)||(!element.tagName))return result;switch(element.tagName.toLowerCase()){case'select':result=element.options[element.selectedIndex].value;break;case'input':var _type=element.getAttribute('type');switch(_type){case'radio':document.GetElementsByName(parentElement,element.getAttribute('name')).Each(function(ele){if(ele.checked){result=ele.value;return false}return true});break;case'checkbox':var boxValues=[];document.GetElementsByName(parentElement,element.getAttribute('name')).Each(function(ele){if(ele.checked)boxValues.push(ele.value);return true});result=boxValues.join(',');break;default:result=(!element.value?'':element.value);break}break;case'textarea':result=element.value;break;default:result=(!element.value?'':element.value);break}return result;},
    //获取元素的文本部分(值)
    GetText:function(element,parentElement){element=$(element);var result='';if((!element)||(!element.tagName))return result;switch(element.tagName.toLowerCase()){case'select':result=element.options[element.selectedIndex].innerHTML;break;case'input':var _type=element.getAttribute('type');switch(_type){case'radio':document.GetElementsByName(parentElement,element.getAttribute('name')).Each(function(ele){if(ele.checked){document.GetElementsByTagName(parentElement,'label').Each(function(elem){var _for=elem.getAttribute("for");if(!_for){var atts=$(elem).GetAtt();for(var key in atts)if(key=="for")_for=atts[key]}if(_for==ele.getAttribute('id')){result=elem.innerHTML;return false}return true});return false}return true});break;case'checkbox':var boxValues=[];document.GetElementsByName(parentElement,element.getAttribute('name')).Each(function(ele){if(ele.checked){document.GetElementsByTagName(parentElement,'label').Each(function(elem){var _for=elem.getAttribute("for");if(!_for){var atts=$(elem).GetAtt();for(var key in atts)if(key=="for")_for=atts[key]}if(_for==ele.getAttribute("id")){boxValues.push(elem.innerHTML);return false}return true});return false}return true});result=boxValues.join(',');break;default:result=element.value;break}break;case'textarea':result=element.value;break;default:result=element.innerHTML;break}return result;},
    //设置元素STYLE属性
    Style:function(element,object){element=$(element);var property;for(property in object)element.style[property.toCamel()]=object[property];return element;},
    //获取元素尺寸
    Size:function(element){element=$(element);var width,height;if(element.style.display=='none'){element.Style({display:'block',visibility:'hidden'});width=(element.offsetWidth||element.clientWidth);height=(element.offsetHeight||element.clientHeight);element.Style({display:'none',visibility:'visible'})}else{width=(element.offsetWidth||element.clientWidth);height=(element.offsetHeight||element.clientHeight)}return new Model.Size(width,height);},
    //获取元素位置
    Locations:function(element){var position=new Model.Position(0,0);if(element===document.documentElement)return position;if(Object.Browser.MSIE&&Object.Browser.version<7){if((element.window===element)||(element.nodeType===9)||(!element.getClientRects)||(!element.getBoundingClientRect)){return position}var screenRects=element.getClientRects();if(!screenRects||!screenRects.length)return position;var first=screenRects[0];var dLeft=0;var dTop=0;var inFrame=false;try{inFrame=element.ownerDocument.parentWindow.frameElement}catch(ex){inFrame=true}if(inFrame){var clientRect=element.getBoundingClientRect();if(!clientRect)return position;var minLeft=first.left;var minTop=first.top;for(var i=1;i<screenRects.length;i++){var r=screenRects[i];if(r.left<minLeft)minLeft=r.left;if(r.top<minTop)minTop=r.top}dLeft=minLeft-clientRect.left;dTop=minTop-clientRect.top}var ownerDocument=element.document.documentElement;position.X=(first.left-2-dLeft+ownerDocument.scrollLeft);position.Y=(first.top-2-dTop+ownerDocument.scrollTop);return position}if((element.window&&(element.window===element))||(element.nodeType===9))return position;var offsetX=0;var offsetY=0;var previous=null;var previousStyle=null;var currentStyle;for(var parent=element;parent;previous=parent,previousStyle=currentStyle,parent=parent.offsetParent){currentStyle=parent.CurrentStyle();var tagName=parent.tagName;if((parent.offsetLeft||parent.offsetTop)&&((tagName!=="BODY")||(!previousStyle||previousStyle.position!=="absolute"))){offsetX+=parent.offsetLeft;offsetY+=parent.offsetTop}}currentStyle=element.CurrentStyle();var elementPosition=currentStyle?currentStyle.position:null;if(!elementPosition||(elementPosition!=="absolute")){for(var parent=element.parentNode;parent;parent=parent.parentNode){tagName=parent.tagName;if((tagName!=="BODY")&&(tagName!=="HTML")&&(parent.scrollLeft||parent.scrollTop)){offsetX-=(parent.scrollLeft||0);offsetY-=(parent.scrollTop||0)}currentStyle=parent.CurrentStyle();var parentPosition=currentStyle?currentStyle.position:null;if(parentPosition&&(parentPosition==="absolute"))break}}position.X=offsetX;position.Y=offsetY;return position;},
    //获取元素样式
    CurrentStyle:function(element){if(element.nodeType===3)return null;var w=element.Window();if(element.documentElement)element=element.documentElement;var computedStyle=(w&&(element!==w)&&w.getComputedStyle)?w.getComputedStyle(element,null):(element.currentStyle||element.style);if(!computedStyle&&Object.Browser.Safari&&element.style){var oldDisplay=element.style.display;var oldPosition=element.style.position;element.style.position='absolute';element.show();var style=w.getComputedStyle(element,null);element.style.display=oldDisplay;element.style.position=oldPosition;computedStyle={};for(var n in style)computedStyle[n]=style[n];computedStyle.display='none'}return computedStyle;},
    //返回某元素的根元素
    Window:function(element){var doc=(element.ownerDocument||element.document||element);return(doc.defaultView||doc.parentWindow);},
    //使元素填充满整个屏幕
    FillFullScreen:function(element){if(Object.Browser.MSIE&&Object.Browser.version<7){var backgroundLocation=element.Locations();var backgroundXCoord=backgroundLocation.X;if(backgroundXCoord!=0)element.style.left=(-backgroundXCoord)+'px';var backgroundYCoord=backgroundLocation.Y;if(backgroundYCoord!=0)element.style.top=(-backgroundYCoord)+'px'}var clientBounds=Object.Bounds();var clientWidth=clientBounds.Width;var clientHeight=clientBounds.Height;element.style.width=Math.max(Math.max(document.documentElement.scrollWidth,document.body.scrollWidth),clientWidth)+'px';element.style.height=Math.max(Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),clientHeight)+'px';return element;}
};
Element.Methods.ByTag = {};
Element.Extend=(function(){if(Object.Browser.Features.SpecificElementExtensions)return function(x){return x};var Methods={},ByTag=Element.Methods.ByTag;var Extend=Object.Extend(function(element){if(!element||element._ExtendedByJary||element.nodeType!=1||element==window)return element;var methods=Object.Copy(Methods),tagName=element.tagName,property,value;if(ByTag[tagName])Object.Extend(methods,ByTag[tagName]);for(property in methods){value=methods[property];if(Object.isFunction(value)&&!(property in element))element[property]=value.Methodize()}element._ExtendedByJary=function(){};return element},{refresh:function(){if(!Object.Browser.Features.ElementExtensions){Object.Extend(Methods,Element.Methods);Object.Extend(Methods,Element.Methods.Simulated)}}});Extend.refresh();return Extend;})();
Element.addMethods=function(methods){var F=Object.Browser.Features,T=Element.Methods.ByTag;if(arguments.length==2){var tagName=methods;methods=arguments[1]}if(!tagName)Object.Extend(Element.Methods,methods||{});else{if(Object.isArray(tagName))tagName.each(extend);else extend(tagName)}function copy(methods,destination,onlyIfAbsent){onlyIfAbsent=onlyIfAbsent||false;for(var property in methods){var value=methods[property];if(!Object.isFunction(value))continue;if(!onlyIfAbsent||!(property in destination))destination[property]=value.Methodize()}}if(F.ElementExtensions){copy(Element.Methods,HTMLElement.prototype);copy(Element.Methods.Simulated,HTMLElement.prototype,true)}if(F.SpecificElementExtensions){for(var tag in Element.Methods.ByTag){var klass=findDOMClass(tag);if(Object.isUndefined(klass))continue;copy(T[tag],klass.prototype)}}Object.Extend(Element,Element.Methods);delete Element.ByTag;if(Element.Extend.refresh)Element.Extend.refresh();Element.cache={};};

if (!window.Event) var Event = { };
//键盘按键代码枚举
Event.Keys={KEY_BACKSPACE: 8, KEY_TAB: 9, KEY_ENTER: 13, KEY_SHIFT: 16, KEY_CTRL: 17, KEY_ALT: 18, KEY_PAUSE: 19, KEY_CAPS_LOCK: 20, KEY_ESCAPE: 27, KEY_SPACE: 32, KEY_PAGE_UP: 33, KEY_PAGE_DOWN: 34, KEY_END: 35, KEY_HOME: 36, KEY_LEFT_ARROW: 37, KEY_UP_ARROW: 38, KEY_RIGHT_ARROW: 39, KEY_DOWN_ARROW: 40, KEY_INSERT: 45, KEY_DELETE: 46, KEY_LEFT_WINDOW: 91, KEY_RIGHT_WINDOW: 92, KEY_SELECT: 93, KEY_F1: 112, KEY_F2: 113, KEY_F3: 114, KEY_F4: 115, KEY_F5: 116, KEY_F6: 117, KEY_F7: 118, KEY_F8: 119, KEY_F9: 120, KEY_F10: 121, KEY_F11: 122, KEY_F12: 123, KEY_NUM_LOCK: 144, KEY_SCROLL_LOCK: 145};
//捕获当前事件
Event.Current = function(){if(document.all) return(window.event);var Arg; var Fun = Event.Current.caller;while(Fun != null){Arg = Fun.arguments[0];if(Arg){if(((Arg.constructor == Event) || (Arg.constructor == MouseEvent)) || (typeof(Arg) == "object") && Arg.preventDefault && Arg.stopPropagation)return(Arg);}Fun = Fun.caller;}return(Arg);};
//防止发生冒泡事件
Event.Stop = function(event){if (event.preventDefault) {event.preventDefault();event.stopPropagation();}else {event.returnValue = false;event.cancelBubble = true;}};
//根据当前对象向上获取符合指定标签名的第一个元素
Event.FindElement = function(event, tagName) {tagName = tagName.toUpperCase();var element = event;while (element.parentNode && (!element.tagName || (element.tagName.toUpperCase() != tagName))) element = element.parentNode;return element;};
//根据引发事件获取元素
Event.Element = function(event){return (event.srcElement || event.target);};
//根据引发事件获取键盘输入的按键代码
Event.KeyCode = function(event){return (event.keyCode || event.which);};
//回车键事件处理onkeyup
Event.Enter = function(event, obj, paras){event = event ? event : Event.Current();if(Event.Keys.KEY_ENTER == Event.KeyCode(event)){if (Object.isFunction(obj)) return obj(paras); else if(Object.isString(obj)) $(obj).focus();else if(Object.isElement(obj)) obj.click();return false;}return true;};
//事件是否来源左键点击
Event.IsLeftClick = function(event) {return (((event.which) && (event.which == 1)) || ((event.button) && (event.button == 1)));};
//只能输入数字onkeypress
Event.OnlyDigital = function(event){event = event ? event : Event.Current();var code = Event.KeyCode(event);var retValue = (((code >= 48) && (code <= 57)) || (code == Event.Keys.KEY_BACKSPACE) || (code == Event.Keys.KEY_ENTER) || (code == Event.Keys.KEY_TAB));if (!retValue) Event.Stop(event); return (retValue);};
//只能输入数字及小写字母
Event.OnlyDigitalOrLowercaseLetter = function(event){event = event ? event : Event.Current();var code = Event.KeyCode(event);var retValue=(((code >= 48) && (code <= 57)) || ((code >= 97) && (code <= 122)) || (code == Event.Keys.KEY_BACKSPACE) || (code == Event.Keys.KEY_ENTER) || (code == Event.Keys.KEY_TAB));if (!retValue) {Event.Stop(event);alert("温馨提示：\n\n1、大写键[CapsLock]可能已打开，请关闭后再输入！\n\n2、可能你输入了非数字或大写字母，请重新输入！");}return (retValue);};
//元素在页面中绝对位置
Event.Position = function(element) {return new Model.Position((element.x ? element.x : this.AbsPos(element,"Left")),(element.y ? element.y : this.AbsPos(element,"Top")));}
Event.AbsPos = function(element,which) {var retValue = 0; while (element != null) {retValue += element["offset" + which]; element = element.offsetParent; }return(retValue);};
//Event扩展
Event.Extend=(function(){var methods=Object.keys(Event.Methods).Inject({},function(m,name){m[name]=Event.Methods[name].Methodize();return m});if(Object.Browser.IE){Object.Extend(methods,{stopPropagation:function(){this.cancelBubble=true},preventDefault:function(){this.returnValue=false},inspect:function(){return"[object Event]"}});return function(event){if(!event)return false;if(event._extendedByPrototype)return event;event._extendedByPrototype=function(){};var pointer=Event.pointer(event);Object.Extend(event,{target:event.srcElement,relatedTarget:Event.relatedTarget(event),pageX:pointer.x,pageY:pointer.y});return Object.Extend(event,methods)}}else{try{Event.prototype=(Event.prototype||document.createEvent("HTMLEvents").__proto__)}catch(ex){}Object.Extend(Event.prototype,methods);return function(x){return x}}})();
Object.Extend(Event,(function(){var cache=Event.cache;function getEventID(element){if(element._prototypeEventID)return element._prototypeEventID[0];arguments.callee.id=(arguments.callee.id||1);return element._prototypeEventID=[++arguments.callee.id]}function getDOMEventName(eventName){if(eventName&&eventName.include(':'))return"dataavailable";return eventName}function getCacheForID(id){return cache[id]=cache[id]||{}}function getWrappersForEventName(id,eventName){var c=getCacheForID(id);return c[eventName]=c[eventName]||[]}function createWrapper(element,eventName,handler){var id=getEventID(element);var c=getWrappersForEventName(id,eventName);if(c.pluck("handler").include(handler))return false;var wrapper=function(event){if(!Event||!Event.Extend||(event.eventName&&event.eventName!=eventName))return false;Event.Extend(event);handler.call(element,event)};wrapper.handler=handler;c.push(wrapper);return wrapper}function findWrapper(id,eventName,handler){var c=getWrappersForEventName(id,eventName);return c.find(function(wrapper){return wrapper.handler==handler})}function destroyWrapper(id,eventName,handler){var c=getCacheForID(id);if(!c[eventName])return false;c[eventName]=c[eventName].without(findWrapper(id,eventName,handler))}function destroyCache(){for(var id in cache)for(var eventName in cache[id])cache[id][eventName]=null}if(window.attachEvent){window.attachEvent("onunload",destroyCache)}return{observe:function(element,eventName,handler){element=$(element);var name=getDOMEventName(eventName);var wrapper=createWrapper(element,eventName,handler);if(!wrapper)return element;if(element.addEventListener){element.addEventListener(name,wrapper,false)}else{element.attachEvent("on"+name,wrapper)}return element},stopObserving:function(element,eventName,handler){element=$(element);var id=getEventID(element),name=getDOMEventName(eventName);if(!handler&&eventName){getWrappersForEventName(id,eventName).each(function(wrapper){element.stopObserving(eventName,wrapper.handler)});return element}else if(!eventName){Object.keys(getCacheForID(id)).each(function(eventName){element.stopObserving(eventName)});return element}var wrapper=findWrapper(id,eventName,handler);if(!wrapper)return element;if(element.removeEventListener){element.removeEventListener(name,wrapper,false)}else{element.detachEvent("on"+name,wrapper)}destroyWrapper(id,eventName,handler);return element},fire:function(element,eventName,memo){element=$(element);if(element==document&&document.createEvent&&!element.dispatchEvent)element=document.documentElement;var event;if(document.createEvent){event=document.createEvent("HTMLEvents");event.initEvent("dataavailable",true,true)}else{event=document.createEventObject();event.eventType="ondataavailable"}event.eventName=eventName;event.memo=memo||{};if(document.createEvent){element.dispatchEvent(event)}else{element.fireEvent(event.eventType,event)}return Event.Extend(event)}}})());
Element.addMethods({fire:Event.fire,observe:Event.observe,stopObserving:Event.stopObserving});

/*Request*/
var Request = {
    QueryString:{},
    Query:{
        //获取地址栏中的参数
        Get:function(key){return Request.QueryString[key];},
        //将哈希表转换为QueryString
        Parse:function(object){var result = [];var property;for (property in object) result.push((property + '=' + object[property]));return result.join('&');},
        //将QueryString转换为哈希表
        ToHash:function(query){var result={};$A(query.split('&')).Each(function(kvs){var kv=kvs.split('=');if(!result[kv[0]])result[kv[0]]=[];result[kv[0]].push(kv[1]);return true});var property;for(property in result)result[property]=result[property].join(',');return result}
    }
};
Request.QueryString = Request.Query.ToHash((document.location.search || document.location.hash).substr(1));
var $Q = Request.Query.Get;
var Effects = {};
Effects.Drag = {};
//拖曳元素类
//var drag = new Effects.Drag.Layer("TargetElementId");
//drag.UpEvent = OnMouseUpEvaent;
//drag.DownEvent = OnMouseDownEvaent;
//drag.Execute("TriggerElementId");
Effects.Drag.Layer = Class.Create();
Object.Extend(Effects.Drag.Layer.prototype,{initialize:function(element){this.Element=$(element);this.Trigger=null;this.Moved=false;this.UpEvent=null;this.DownEvent=null;},Difference:{X:0, Y:0},MouseMove:function(event){if(this.Moved){event=(event||Event.Current());var _top=(event.clientY||event.pageY)-this.Difference.Y;var _left=(event.clientX||event.pageX)-this.Difference.X;this.Element.Style({top:(_top+"px"),left:(_left+"px")});}return true;},MouseUp:function(){if(this.Moved){this.Moved = false;if(Object.isFunction(this.UpEvent))this.UpEvent();}},MouseDown:function(event){this.Moved=false;var element=Event.Element((event||Event.Current()));if(element==null)return true;if(element.tagName!=this.Trigger.tagName)element=Event.FindElement(element,this.Trigger.tagName);if((element==null)||(element.tagName!=this.Trigger.tagName))return true;var pos=Event.Position(this.Element);this.Difference.X=(event.clientX||event.pageX)-pos.X;this.Difference.Y=(event.clientY||event.pageY)-pos.Y;this.Moved=true;if(Object.isFunction(this.DownEvent))this.DownEvent();},Execute:function(trigger){this.Trigger=$(trigger);if(this.Trigger==null)return;this.MouseDown.Bind(this).Attach(this.Trigger,"mousedown");this.MouseMove.Bind(this).Attach(document,"mousemove");this.MouseUp.Bind(this).Attach(document,"mouseup");}});
//返回父元素包含具有相同标签名的所有子元素
document.GetElementsByTagName = function(parent, tag){if(!parent) return $A(document.getElementsByTagName(tag)); else return $A($(parent).getElementsByTagName(tag));};
//返回父元素包含具有相同名称属性的所有子元素
document.GetElementsByName = function(parent, name){var elements = [];if(document != parent){document.GetElementsByTagName(parent, "*").Each(function (element){if(element.getAttribute('name') == name) elements.push(element);return true;});} else elements = $A(document.getElementsByName(name));return elements;};
//返回父元素包含具有相同样式名的所有子元素
document.getElementsByClassName=function(parentElement,className){var children=$A(document.GetElementsByTagName(parentElement,"*"));var elements=[];children.Each(function(element){if(element.className.match(new RegExp("(^|\\s)"+className+"(\\s|$)")))elements.push(element);return true});children=null;return elements};
//返回父元素包含具有相同类型属性的所有子元素
document.getElementsByType = function(element, tag, type){var elements = [];document.GetElementsByTagName(element, tag).Each(function(_element){if(_element.getAttribute("type") == type) elements.push(_element);});return elements;};
//文档对象扩展
document.Extend = {
    scrollTop: function(){ return Math.max(document.documentElement.scrollTop, document.body.scrollTop)},
    scrollLeft: function(){ return Math.max(document.documentElement.scrollLeft, document.body.scrollLeft)},
    scrollWidth: function(){ return Math.max(document.documentElement.scrollWidth, document.body.scrollWidth)},
    scrollHeight: function(){ return Math.max(document.documentElement.scrollHeight, document.body.scrollHeight)},
    //设置BODY高度为文档内容高度
    SetBodyHeightToContentHeight: function(){document.body.style.height = document.Extend.scrollHeight() + "px";}
};
//设置BODY高度
document.setBodyHeightToContentHeight = function(){document.body.style.width = document.Extend.scrollWidth() + "px";document.body.style.height = document.Extend.scrollHeight() + "px";};
document.XML = {
    //获取节点文本部分(含CDATA)
    GetNodeValue:function(node){var retValue='';if(navigator.userAgent.indexOf(' MSIE ')>-1){if(node.hasChildNodes())for(var i=0;i<node.childNodes.length;i++)retValue+=document.XML.GetNodeValue(node.childNodes[i]);else retValue+=node.text}else{if(node.hasChildNodes()){for(var i=0;i<node.childNodes.length;i++)retValue+=document.XML.GetNodeValue(node.childNodes[i])}else{try{retValue+=node.textContent}catch(e){try{retValue+=node.nodeValue}catch(e){}}}}return(retValue)}
};