﻿App = {
    name: function(){ return $.varible("applicationName");},
    id: function(){ return $.varible("applicationId");}
}
String.format = function(){
	if (arguments.length == 0) {
		return null;
	}
	var str = arguments[0];
	for (var i = 1; i < arguments.length; i++) {
		var re = new RegExp('\\{' + (i - 1) + '\\}', 'gm');
		str = str.replace(re, arguments[i]);
	}
	return str;
};
$.extend(String.prototype, {
	test: function(regex, params){
		return ((typeof regex == 'string') ? new RegExp(regex, params) : regex).test(this);
	},
	toInt: function(){
		return parseInt(this, 10);
	},
	toFloat: function(){
		return parseFloat(this);
	},
	toBoolean: function(){
		return this.toLowerCase() === "true" ? true : false;
	},
	/* 验证相关*/
	isInt: function(){
		return this.toInt() != "NaN" ? true : false;
	},
	isFloat: function(){
		return this.toFloat() != "NaN" ? true : false;
	},	
	isBoolean: function(){
		return (this === "true" || this === "false") ? true : false;
	},
	isKey: function(){
	    if (this.isNullOrEmpty()) {return false;}
		if (CommonRegex.KeyRegexExpression.test(this)) {
			return true;
		}
		return false;
	},
	isEmail: function(){
	    if (this.isNullOrEmpty()) {return false;}
		if (CommonRegex.Email.test(this)) {
			return true;
		}
		return false;
	},	
	isUserName: function(){
	    if (this.isNullOrEmpty()) {return false;}
		if (CommonRegex.UserName.test(this)) {
			return true;
		}
		return false;
	},
	isPassword: function(){
	    if (this.isNullOrEmpty()) {return false;}
		if (CommonRegex.Password.test(this)) {
			return true;
		}
		return false;
	},	
	isDateTime: function(){
	    if (this.isNullOrEmpty()) {return false;}
		if (CommonRegex.DateTime.test(this)) {
			return true;
		}
		return false;
	},
    isURL: function(){
        var re = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
        return re.test(this.toString());
    },		
	isCheckCode: function(){
	    if (this.isNullOrEmpty()) {return false;}
		if (CommonRegex.CheckCode.test(this)) {
			return true;
		}
		return false;
	},	
	isEqual: function(str){
		if (this == str) {
			return true;
		} else {
			return false;
		}
	},	
	isNullOrEmpty: function(){
		if (typeof(this) == 'undefined') {
			return true;
		}
		if (this.toString() !== "") {
			return false;
		}
		return true;
	},	
	isBetweenLen: function(minlen, maxlen){
		var l = this.len();
		if (l >= minlen & l <= maxlen) {
			return true;
		} else {
			return false;
		}		
	},	
	isBetweenLength: function(minlen, maxlen){
		var l = this.length;
		if (l >= minlen & l <= maxlen) {
			return true;
		} else {
			return false;
		}		
	},
	trim: function(){
		return this.replace(/^\s*|\s*$/g, '');
	},
	ltrim: function(){
		return this.replace(/(^\s*)/g, "");
	},
	rtrim: function(){
		return this.replace(/(\s*$)/g, "");
	},
	//" i      like     cookies      \n\n".clean() //"i like cookies"
	clean: function(){
		return this.replace(/\s{2,}/g, ' ').trim();
	},
	rgbToHex: function(array){
		var rgb = this.match(/\d{1,3}/g);
		return (rgb) ? rgb.rgbToHex(array) : false;
	},
	hexToRgb: function(array){
		var hex = this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);
		return (hex) ? hex.slice(1).hexToRgb(array) : false;
	},
	//'a b c'.contains('c', ' '); //true
	contains: function(string, s){
		return (s) ? (s + this + s).indexOf(s + string + s) > -1 : this.indexOf(string) > -1;
	},
	rep: function(oldS, newS){
		return this.replace(/oldS/g, newS);
	},
	len: function(){
		var l = 0;
		for (var i = 0; i < this.length; i++) {
			if (this.charCodeAt(i) < 128) 
				l++;
			else 
				l += 2;
		}
		return l;
	},
	//'{name: 'john', age: 20}' -> object
	toJson: function(){
		return eval('(' + this + ')');
	}
});
if(!Array.prototype.push) {
    Array.prototype.push = function () {
        var startLength = this.length;
        for(var i = 0; i < arguments.length; i++) {
            this[startLength + i] = arguments[i];
        }
        return this.length;
    }
};
$.extend(Array.prototype, {
	forEach: function(fn, bind){
		for (var i = 0, j = this.length; i < j; i++) {
			fn.call(bind, this[i], i, this);
		}
	},
	filter: function(fn, bind){
		var results = [];
		for (var i = 0, j = this.length; i < j; i++) {
			if (fn.call(bind, this[i], i, this)) {
				results.push(this[i]);
			}
		}
		return results;
	},
	map: function(fn, bind){
		var results = [];
		for (var i = 0, j = this.length; i < j; i++) {
			results[i] = fn.call(bind, this[i], i, this);
		}
		return results;
	},
	indexOf: function(item, from){
		var len = this.length;
		for (var i = (from < 0) ? Math.max(0, len + from) : from || 0; i < len; i++) {
			if (this[i] === item) {
				return i;
			}
		}
		return -1;
	},
	remove: function(item){
		var i = 0;
		var len = this.length;
		while (i < len) {
			if (this[i] === item) {
				this.splice(i, 1);
				len--;
			} else {
				i++;
			}
		}
		return this;
	},
	contains: function(item, from){
		return this.indexOf(item, from) != -1;
	},
	extend: function(array){
		for (var i = 0, j = array.length; i < j; i++) {
			this.push(array[i]);
		}
		return this;
	},
	merge: function(array){
		for (var i = 0, l = array.length; i < l; i++) {
			this.include(array[i]);
		}
		return this;
	},
	getLast: function(){
		return this[this.length - 1] || null;
	}
	
});
/*-------------------------------------LazyLoad---------------------------------------*/
var LazyLoad = function() {this.initialize.apply(this, arguments);};
$.extend(LazyLoad.prototype, {
	initialize:function(elems, options){
	    this.setOptions(options);
		this._elems = elems;//加载元素集合
		this._rect = {};//容器位置参数对象
		this._range = {};//加载范围参数对象
		this._loadData = Function.empty;//加载程序
		this._timer = null;//定时器
		this._lock = false;//延时锁定
		this._index = 0;//记录索引
		this._direction = 0;//记录方向
		this._lastScroll = {"left": 0,"top": 0};//记录滚动值
		this._setElems = Function.empty;//重置元素集合程序
		this.delay = this.options.delay;
		this.threshold = this.options.threshold;
		this.beforeLoad = this.options.beforeLoad;
		this._onLoadData = this.options.onLoadData;
		this.container = this.initContainer($.dom(this.options.container));//容器
	},
	//设置默认属性
	setOptions: function(options){
		this.options = {
			container: window,//容器
			mode: "dynamic",//模式
			threshold: 20,//加载范围阈值
			delay: 100,//延时时间
			beforeLoad: Function.empty,//加载前执行
			onLoadData: Function.empty//显示加载数据
		};
		$.extend(this.options, options || {});
	},
	//初始化容器设置
	initContainer: function(container){
		var doc = document; this.isWindow = container == window || container == doc || !container.tagName || (/^(?:body|html)$/i).test(container.tagName);
		if (this.isWindow) { container = doc.compatMode == 'CSS1Compat' ? doc.documentElement : doc.body; }
		var oThis = this, width = 0, height = 0;
		this.load = $.bindObject(this, this._load);
		this.resize = $.bindObject(this, this._resize);
		this.delayLoad = function(){ oThis._delay(oThis.load); };
		this.delayResize = function(){//防止重复触发bug
			var clientWidth = container.clientWidth, clientHeight = container.clientHeight;
			if (clientWidth != width || clientHeight != height) {
				width = clientWidth; height = clientHeight; oThis._delay(oThis.resize);
			}
		};
		this._binder = this.isWindow ? window : container;
        //绑定事件
        $(this._binder).bind("scroll", $.bindAsEventListener(this, this.delayLoad));
        $(this._binder).bind("resize", $.bindAsEventListener(this, this.delayResize));
		//获取容器位置参数函数
		this._getContainerRect = this.isWindow && ("innerHeight" in window) ? 
		    function(){ return { "left": 0, "right": window.innerWidth, "top": 0, "bottom": window.innerHeight } } : 
		    function(){ return oThis._getRect(container);};
		//设置获取scroll值函数
		this._getScroll = this.isWindow ? 
		    function(){ return { "left": document.documentElement.scrollLeft || document.body.scrollLeft, "top": document.documentElement.scrollTop || document.body.scrollTop } } : 
            function(){ return { "left": container.scrollLeft, "top": container.scrollTop } };
		return container;	
	},
	//初始化模式设置
	_initMode: function(){
		switch (this.options.mode.toLowerCase()) {
			case "vertical"://垂直方向
				this._initStatic("vertical", "vertical");
				break;
			case "horizontal"://水平方向
				this._initStatic("horizontal", "horizontal");
				break;
			case "cross":
			case "cross-vertical"://垂直正交方向
				this._initStatic("cross", "vertical");
				break;
			case "cross-horizontal"://水平正交方向
				this._initStatic("cross", "horizontal");
				break;
			case "dynamic"://动态加载
			default:
				this._loadData = this._loadDynamic;
		}
	},
	//初始化静态加载设置
	_initStatic: function(mode, direction){
		var isVertical = direction == "vertical";//设置模式
		if (mode == "cross") {
			this._crossDirection = $.bindObject(this, this._getCrossDirection, isVertical ? "_verticalDirection" : "_horizontalDirection", isVertical ? "_horizontalDirection" : "_verticalDirection");
		}
		var pos = isVertical ? "top" : "left", sortFunction = function(x, y){ return x._rect[pos] - y._rect[pos]; }; //设置元素
		var getRect = function(elem){ elem._rect = this._getRect(elem); return elem; };
		this._setElems = function(){ this._elems = this._elems.map(getRect, this).sort(sortFunction); };//转换数组并排序 
		this._loadData = $.bindObject(this, this._loadStatic, "_" + mode + "Direction", $.bindObject(this, this._outofRange, mode, "_" + direction + "BeforeRange"), $.bindObject(this, this._outofRange, mode, "_" + direction + "AfterRange"));
	},
	//延时程序
	_delay: function(run){
		clearTimeout(this._timer);
		if (this.isFinish()) {return;}
		var oThis = this, delay = this.delay;
		if (this._lock) {//防止连续触发
			this._timer = $.timeout(function(){ oThis._delay(run); }, delay);
		} else {
			this._lock = true; run(); $.timeout(function(){ oThis._lock = false; }, delay);
		}
	},
	//重置范围参数并加载数据
	_resize: function(change){
		if (this.isFinish()) { return; }
		this._rect = this._getContainerRect();
		//位置改变的话需要重置元素位置
		if (change) {
			this._setElems();
		}
		this._load(true);
	},
	//加载程序
	_load: function(force){
		if (this.isFinish()) { return; }
		var rect = this._rect, scroll = this._getScroll(), left = scroll.left, top = scroll.top, threshold = Math.max(0, this.threshold | 0);
		this._range = { top: rect.top + top - threshold, bottom: rect.bottom + top + threshold, left: rect.left + left - threshold, right: rect.right + left + threshold };//记录原始加载范围参数
		this.beforeLoad();//加载数据
		this._loadData(force);
	},
	//动态加载程序
	_loadDynamic: function(){
		this._elems = this._elems.filter(function(elem){ return !this._insideRange(elem); }, this);
	},
	//静态加载程序
	_loadStatic: function(direction, beforeRange, afterRange, force){
		direction = this[direction](force);//获取方向
		if (!direction) { return; }
		//根据方向历遍图片对象
		var elems = this._elems, i = this._index, begin = [], middle = [], end = [];
		if (direction > 0) {//向后滚动
			begin = elems.slice(0, i);
			for (var len = elems.length; i < len; i++) {
				if (afterRange(middle, elems[i])) {
					end = elems.slice(i + 1);
					break;
				}
			}
			i = begin.length + middle.length - 1;
		} else {//向前滚动
			end = elems.slice(i + 1);
			for (; i >= 0; i--) {
				if (beforeRange(middle, elems[i])) {
					begin = elems.slice(0, i);
					break;
				}
			}
			middle.reverse();
		}
		this._index = Math.max(0, i);
		this._elems = begin.concat(middle, end);
	},
	//垂直和水平滚动方向获取程序
	_verticalDirection: function(force){
		return this._getDirection(force, "top");
	},
	_horizontalDirection: function(force){
		return this._getDirection(force, "left");
	},
	//滚动方向获取程序
	_getDirection: function(force, scroll){
		var now = this._getScroll()[scroll], _scroll = this._lastScroll;
		if (force) {
			_scroll[scroll] = now;
			this._index = 0;
			return 1;
		}
		var old = _scroll[scroll];
		_scroll[scroll] = now;
		return now - old;
	},
	//cross滚动方向获取程序
	_getCrossDirection: function(primary, secondary, force){
		var direction;
		if (!force) {
			direction = this[primary]();
			secondary = this[secondary]();
			if (!direction && !secondary) {//无滚动
				return 0;
			} else if (!direction) {//次方向滚动
				if (this._direction) {
					direction = -this._direction;//用上一次的相反方向
				} else {
					force = true;//没有记录过方向
				}
			} else if (secondary && direction * this._direction >= 0) {
				force = true;//同时滚动并且方向跟上一次滚动相同
			}
		}
		if (force) {
			this._lastScroll = this._getScroll();
			this._index = 0;
			direction = 1;
		}
		return (this._direction = direction);
	},
	//判断是否加载范围内
	_insideRange: function(elem, mode){
		var range = this._range, rect = elem._rect || this._getRect(elem), insideH = rect.right >= range.left && rect.left <= range.right, insideV = rect.bottom >= range.top && rect.top <= range.bottom, 
		inside = { "horizontal": insideH, "vertical": insideV, "cross": insideH && insideV }[mode || "cross"];
		var dvds = inside && this._elementIsView(elem);
		if (dvds) { this._onLoadData(elem); }
		return dvds;
	},
	//判断是否超过加载范围
	_outofRange: function(mode, compare, middle, elem){
		if (!this._insideRange(elem, mode)) {
			middle.push(elem);
			return this[compare](elem._rect);
		}
	},
	_horizontalBeforeRange: function(rect){
		return rect.right < this._range.left;
	},
	_horizontalAfterRange: function(rect){
		return rect.left > this._range.right;
	},
	_verticalBeforeRange: function(rect){
		return rect.bottom < this._range.top;
	},
	_verticalAfterRange: function(rect){
		return rect.top > this._range.bottom;
	},
	//获取位置参数
	_getRect: function(node){
		var n = node, left = 0, top = 0, right = 0, bottom = 0;
		while (n) { left += n.offsetLeft; top += n.offsetTop; n = n.offsetParent; }; right = left + node.offsetWidth; bottom = top + node.offsetHeight;
		return { "left": left, "right": right, "top": top, "bottom": bottom };
	},
    _elementIsView: function(element){
        while(element && (element !== this.container && element !== window && element !== document && element !== document.body)){
            var dis = $(element).css("display"); 
            var vis = $(element).css("visibility");
            if (dis && vis && (dis === "none" || vis === "hidden")) {
                return false;
            } else {
                element = element.parentNode;
            }
        }
        return true;
    },		
	//是否完成加载
	isFinish: function(){
		if (!this._elems || !this._elems.length) {
			this.dispose();
			return true;
		} else {
			return false;
		}
	},
	//销毁程序
	dispose: function(load){
		clearTimeout(this._timer);
		if (this._elems || this._binder) {
			if (load && this._elems) {//加载全部元素
				this._elems.forEach(this._onLoadData, this);
			}
			//解除绑定事件
            $(this._binder).unbind("scroll", $.bindAsEventListener(this, this.delayLoad));
            $(this._binder).unbind("resize", $.bindAsEventListener(this, this.delayResize));
			this._elems = this._binder = null;
		}
	}
});
/*-------------------------------------end LazyLoad---------------------------------------*/
/*-------------------------------------ImagesLazyLoad---------------------------------------*/
var ImagesLazyLoad = function() {this.initialize.apply(this, arguments);};
ImagesLazyLoad.prototype = new LazyLoad();
$.extend(ImagesLazyLoad.prototype, {
	//初始化程序
	initialize: function(options){
		options = options || {}; $.extend(options, { onLoadData: this._onLoadData });
		LazyLoad.prototype.initialize.call(this, [], options);
		this.setOptions(options);//设置子类属性
		var opt = this.options;
		this.onLoad = opt.onLoad;
		var attribute = this._attribute = opt.attribute;
		var getSrc = opt.getSrc;//设置加载图片集合
		this._hasAttribute = $.browser.msie ? function(img){ return attribute in img; } : function(img){ return img.hasAttribute(attribute); };//判断属性是否已经加载的方法
		var filter = $.bindObject(this, this._filter, opt["class"], getSrc ? function(img){ return getSrc(img); } : function(img){ return img.getAttribute(attribute) || img.src; }, opt.holder);
		this._elems = []; this._elems.extend(opt.images || this.container.getElementsByTagName("img")); this._elems = this._elems.filter(filter, this);
		if (this.isFinish()) { return; }
		this._initMode();
		this.resize(true);
	},
	//设置默认属性
	setOptions: function(options){
		this.options = {
			images: undefined,//图片集合
			attribute: "_lazysrc",//保存原图地址的自定义属性
			loadDataAttribute: "_lazyload",//保存原图地址的自定义属性
			holder: "/images/pixel.gif",//占位图
			"class": "",//筛选样式
			getSrc: undefined,//获取原图地址程序
			onLoad: Function.empty
		};
		$.extend(this.options, options || {});
		LazyLoad.prototype.setOptions.call(this, this.options);
	},
	//筛选整理图片对象
	_filter: function(cls, getSrc, holder, img){
		if (cls && img.className !== cls) { return false; } //排除样式不对应的
		if (!this._hasAttribute(img)){return false;}
		var src = getSrc(img); //获取原图地址
		if (!src) { return false; }//排除src不存在的
		if (src == img.src) {
			if (img.complete || $.browser.chrome || $.browser.safari) { return false; }//排除已经加载或不能停止加载的
			img.removeAttribute("src");//移除src
		}
		if (holder) {
			img.src = holder;
		}
		img.setAttribute(this._attribute, src);//用自定义属性记录原图地址
		return true;
	},
	//显示图片
	_onLoadData: function(img){
	    var $img = $(img); var _ld = $img.attr(this.options.loadDataAttribute);
	    if (!_ld){
		    var attribute = this._attribute;
		    if (this._hasAttribute(img) && this._elementIsView(img)) {
			    var ly = img.getAttribute(attribute); $.timeout(function(){img.src = ly;},Math.random() * 5);
			    img.removeAttribute(attribute); if (img.onload){ img.onload(); }
			    this.onLoad(img);
		    }
		}else{
		    $img[0].parentNode.removeChild($img[0]);if (window.execScript) {window.execScript(_ld);} else {window.eval(_ld);}
		}
	}
});
function initImagesLazy(){
    if (window["lazy_xylker_001"]){window["lazy_xylker_001"].dispose();}window["lazy_xylker_001"] = new ImagesLazyLoad();
}
/*-------------------------------------end ImagesLazyLoad---------------------------------------*/
/*-------------------------------------Drag---------------------------------------*/
var Drag = function() {this.initialize.apply(this, arguments);};
$.extend(Drag.prototype, {
	initialize: function(drag, options){
		this.Drag = $.dom(drag);//拖放对象
		this._x = this._y = 0;//记录鼠标相对拖放对象的位置
		this._marginLeft = this._marginTop = 0;//记录margin
		//事件对象(用于绑定移除事件)
		this._fM = $.bindAsEventListener(this, this.move);
		this._fS = $.bindObject(this, this.stop);
		
		this.setOptions(options);
		
		this.limit = !!this.options.limit;
		this.mxLeft = parseInt(this.options.mxLeft);
		this.mxRight = parseInt(this.options.mxRight);
		this.mxTop = parseInt(this.options.mxTop);
		this.mxBottom = parseInt(this.options.mxBottom);
		
		this.lockX = !!this.options.lockX;
		this.lockY = !!this.options.lockY;
		this.lock = !!this.options.lock;
		
		this.onStart = this.options.onStart;
		this.onMove = this.options.onMove;
		this.onStop = this.options.onStop;
		
		this._Handle = $.dom(this.options.handle) || this.Drag;
		this._mxContainer = $.dom(this.options.mxContainer) || null;
		
		this.Drag.style.position = "absolute";
		//透明
		if ($.browser.msie && !!this.options.transparent) {
			//填充拖放对象
			with (this._Handle.appendChild($.create("div")).style) {
				width = height = "100%";
				backgroundColor = "#fff";
				filter = "alpha(opacity:0)";
				fontSize = 0;
			}
		}
		//修正范围
		this.repair();
		$(this._Handle).bind("mousedown", $.bindAsEventListener(this, this.start))
	},
	//设置默认属性
	setOptions: function(options){
		this.options = {//默认值
			handle: "",//设置触发对象（不设置则使用拖放对象）
			limit: false,//是否设置范围限制(为true时下面参数有用,可以是负数)
			mxLeft: 0,//左边限制
			mxRight: 9999,//右边限制
			mxTop: 0,//上边限制
			mxBottom: 9999,//下边限制
			mxContainer: "",//指定限制在容器内
			lockX: false,//是否锁定水平方向拖放
			lockY: false,//是否锁定垂直方向拖放
			lock: false,//是否锁定
			transparent: false,//是否透明
			onStart: function(){},//开始移动时执行
			onMove: function(){},//移动时执行
			onStop: function(){}//结束移动时执行
		};
		$.extend(this.options, options || {});
	},
	//准备拖动
	start: function(oEvent){
		if (this.lock) {
			return;
		}
		this.repair();
		//记录鼠标相对拖放对象的位置
		this._x = oEvent.clientX - this.Drag.offsetLeft;
		this._y = oEvent.clientY - this.Drag.offsetTop;
		//记录margin
		this._marginLeft = parseInt($(this.Drag).css("marginLeft")) || 0;
		this._marginTop = parseInt($(this.Drag).css("marginTop")) || 0;
		//mousemove时移动 mouseup时停止
		$(document).bind("mousemove", this._fM).bind("mouseup", this._fS);
		if ($.browser.msie) {
			//焦点丢失
			$(this._Handle).bind("losecapture", this._fS);
			//设置鼠标捕获
			this._Handle.setCapture();
		} else {
			//焦点丢失
			$(window).bind("blur", this._fS);
			//阻止默认动作
			oEvent.stopPropagation();
		};
		this.Drag['style']['opacity'] = "0.7";
		//附加程序
		this.onStart();
	},
	//修正范围
	repair: function(){
		if (this.limit) {
			//修正错误范围参数
			this.mxRight = Math.max(this.mxRight, this.mxLeft + this.Drag.offsetWidth);
			this.mxBottom = Math.max(this.mxBottom, this.mxTop + this.Drag.offsetHeight);
			//如果有容器必须设置position为relative或absolute来相对或绝对定位，并在获取offset之前设置
			!this._mxContainer || $(this._mxContainer).css("position") == "relative" || $(this._mxContainer).css("position") == "absolute";
		}
	},
	//拖动
	move: function(oEvent){
		//判断是否锁定
		if (this.lock) {
			this.stop();
			return;
		};
		//清除选择
		window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
		//设置移动参数
		var iLeft = oEvent.clientX - this._x, iTop = oEvent.clientY - this._y;
		//设置范围限制
		if (this.limit) {
			//设置范围参数
			var mxLeft = this.mxLeft, mxRight = this.mxRight, mxTop = this.mxTop, mxBottom = this.mxBottom;
			//如果设置了容器，再修正范围参数
			if (!!this._mxContainer) {
				mxLeft = Math.max(mxLeft, 0);
				mxTop = Math.max(mxTop, 0);
				mxRight = Math.min(mxRight, this._mxContainer.clientWidth);
				mxBottom = Math.min(mxBottom, this._mxContainer.clientHeight);
			};
			//修正移动参数
			iLeft = Math.max(Math.min(iLeft, mxRight - this.Drag.offsetWidth), mxLeft);
			iTop = Math.max(Math.min(iTop, mxBottom - this.Drag.offsetHeight), mxTop);
		}
		//设置位置，并修正margin
		if (!this.lockX) {
			this.Drag.style.left = iLeft - this._marginLeft + "px";
		}
		if (!this.lockY) {
			this.Drag.style.top = iTop - this._marginTop + "px";
		}
		//附加程序
		this.onMove();
	},
	//停止拖动
	stop: function(){
		//移除事件
		$(document).unbind("mousemove", this._fM);
		$(document).unbind("mouseup", this._fS);
		if ($.browser.msie) {
			$(this._Handle).unbind("losecapture", this._fS);
			this._Handle.releaseCapture();
		} else {
			$(window).unbind("blur", this._fS);
		};
		this.Drag['style']['opacity'] = "1.0";
		//附加程序
		this.onStop();
	}
});
/*-------------------------------------End Drag---------------------------------------*/
/*-------------------------------------Popup---------------------------------------*/
var Popup = function() {this.initialize.apply(this, arguments);};
$.extend(Popup.prototype, {
	iframeIdName: 'ifr_popup',
	initialize: function(config){
		this.config = {//---------------弹出对话框的配置信息------------------
			id: "",
			contentType: 1,//设置内容区域为什么类型：1为另外一个html文件 | 2为自定义html字符串 | 3为confirm对话框 | 4为alert警告对话框 | 5为加载一个Html节点 | 6为加载node下的innerHTML值，关闭时还原
			isHaveTitle: true,//是否显示标题栏
			isHaveHeader: true,//是否显示头
			scrollType: 'no',//设置或获取对话框中的框架是否可被滚动
			isBackgroundCanClick: false,//弹出对话框后，是否允许蒙布后的所有元素被点击。也就是如果为false的话，就会有全屏蒙布，如果为true的话，就会去掉全屏蒙布
			isSupportDraging: true,//是否支持拖拽
			isShowShadow: false,//是否显示阴影
			isReloadOnClose: true,//是否刷新页面，并关闭对话框
			width: 400,//宽度
			height: 300//高度
		};
		$.extend(this.config, config || {});
		this.info = {//----------------对话框的参数值信息------------------------
			shadowWidth: 3,//阴影的宽度
			title: "",//
			contentUrl: "",//html链接页面
			contentHtml: "",//html内容
			node: null,//节点
			callBack: Function.empty,//回调的函数名
			parameter: null,//回调的函数名中传的参数
			confirmCon: "",//对话框内容
			confirmOKText: "确定",
			confirmCancelText: "取消",
			alertCon: "",//警告框内容
			someHiddenTag: "select,object,embed",//页面中需要隐藏的元素列表，以逗号分割
			someHiddenEle: "",//需要隐藏的元素的ID列表(和someToHidden的区别是：someHiddenEle是通过getElementById，而someToHidden是通过getElementByTagName，里面放的是对象)
			overlay: 0,
			coverOpacity: 50 //蒙布的透明值
		};
		this.color = {
			cColor: "#000000",//蒙布的背景
			bColor: "#FFFFFF",//内容区域的背景
			tColor: "#F3F3F3",//标题栏和边框的颜色
			wColor: "#000000"//字体的背景色
		};
		this.initVarible();
		this.dropClass = null;
		this.someToHidden = [];				
		if (!this.config.isHaveTitle) {
			this.config.isSupportDraging = false;
		}
		this.iniBuild();
	},
	initVarible: function(){
		this.dialogCase = this.config.id + "dialogCase";
		this.dragDialogCase = this.config.id + "dragDialogCase";
		this.dialogBoxTitle = this.config.id + "dialogBoxTitle";
		this.dialogBoxClose = this.config.id + "dialogBoxClose";	
		this.dialogBoxBG = this.config.id + "dialogBoxBG";
		this.dialogBox = this.config.id + "dialogBox";		
		this.dialogClose = this.config.id + "dialogClose";	
		this.dialogBody = this.config.id + "dialogBody";
		this.dialogBoxShadow = this.config.id + "dialogBoxShadow";
		this.dialogOk = this.config.id + "dialogOk";
		this.dialogCancel = this.config.id + "dialogCancel";
		this.dialogYES = this.config.id + "dialogYES";	
		this.iframeBG = this.config.id + "iframeBG";	
		this.dialogContentDiv = this.config.id + "contentdiv";
	},
	iniBuild: function(){
		$.dom(this.dialogCase) ? $.dom(this.dialogCase).parentNode.removeChild($.dom(this.dialogCase)) : function(){};
		var oDiv = $.create('div');
		oDiv.id = this.dialogCase;
		if (document.forms && document.forms.length > 0){
		    document.forms[0].appendChild(oDiv);
		}else{
		    document.body.appendChild(oDiv);
		}
	},
	build: function(){
		var baseZIndex = 10001 + this.info.overlay * 10;
		var showZIndex = baseZIndex + 2;
		this.iframeIdName = this.iframeIdName + this.info.overlay;
		var path = "/images/close.png";
		var close = '<input type="image" id="'+this.dialogBoxClose+'" src="' + path + '" border="0" width="16" height="16" align="absmiddle" title="关闭"/>';
		var cB = 'filter:alpha(opacity=' + this.info.coverOpacity + ');opacity:' + this.info.coverOpacity / 100 + ';';
		var cover = '<div id="'+ this.dialogBoxBG + '" style="position:absolute;top:0px;left:0px;width:'+document.documentElement.scrollWidth+'px;height:'+document.documentElement.scrollHeight+'px;z-index:' + baseZIndex + ';' + cB + 'background-color:' + this.color.cColor + ';display:none;"></div>';
		var mainBox = '<div id="' + this.dragDialogCase +'" style="display:none;"><div id="'+this.dialogBox+'" style="border:solid ' + (this.config.isHaveHeader ? "3" : "0") + 'px #888381;display:none;z-index:' + showZIndex + ';position:relative;width:' + this.config.width + 'px;"><table width="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="' + this.color.bColor + '">';
		if (this.config.isHaveTitle) {
			mainBox += '<tr height="24" bgcolor="' + this.color.tColor + '" style="' + (this.config.isHaveHeader ? "" : "display:none;") + '"><td class="popupheader"><table style="height:24px;" width="100%" border="0" cellpadding="0" cellspacing="0" ><tr>' + '<td width="6" height="24"></td><td id="'+this.dialogBoxTitle+'" style="color:' + this.color.wColor + ';font-size:14px;padding:4px;font-weight:bold;">' + this.info.title + '&nbsp;</td>' + '<td id="' + this.dialogClose + '" width="20" align="right" valign="middle">' + close + '</td><td width="6"></td></tr></table></td></tr>';
		} else {
			mainBox += '<tr height="24" bgcolor="' + this.color.tColor + '" style="' + (this.config.isHaveHeader ? "" : "display:none;") + '"><td class="popupheader"><table style="height:24px;" width="100%" border="0" cellpadding="0" cellspacing="0" ><tr>' + '<td width="6" height="24"></td><td id="'+this.dialogBoxTitle+'" style="color:' + this.color.wColor + ';font-size:14px;padding:4px;font-weight:bold;">' + this.info.title + '&nbsp;</td>' + '<td id="' + this.dialogClose + '" width="20" align="right" valign="middle">' + close + '</td><td width="6"></td></tr></table></td></tr>';
		};
		mainBox += '<tr style="height:' + this.config.height + 'px" valign="top"><td id="'+this.dialogBody+'" class="popupbody" style="position:relative;"></td></tr></table></div>' + '<div id="'+this.dialogBoxShadow+'" style="display:none;z-index:' + baseZIndex + ';"></div></div>';
		if (!this.config.isBackgroundCanClick) {
			$.dom(this.dialogCase).innerHTML = cover + mainBox;
		} else {
			$.dom(this.dialogCase).innerHTML = mainBox;
		}
		$("#" + this.dialogBoxClose).bind("click", $.bindObject(this, this.close));
		//如果支持拖动,则设置拖动处理
		if (this.config.isSupportDraging) {
			this.Drag = new Drag(this.dragDialogCase, {handle: this.dialogBoxTitle});
			$.dom(this.dialogBoxTitle).style.cursor = "move"
		};
		this.p = $.dom(this.dialogBox);
		this.lastBuild();
	},
	lastBuild: function(){
		var confirm = '<div style="text-align:center;"><div id="' + this.dialogContentDiv + '" class="popupdialogbody">' + this.info.confirmCon + '</div><div style="margin:20px;"><input id="'+this.dialogOk+'" class="button" type="button" title="'+ this.info.confirmOKText +'" value=" '+ this.info.confirmOKText +' "/><input id="'+this.dialogCancel+'" class="button" type="button" title="'+ this.info.confirmCancelText +'" value=" '+ this.info.confirmCancelText +' " style="margin-left:20px;"/></div></div>';
		var alert = '<div style="text-align:center;"><div id="' + this.dialogContentDiv + '" class="popupdialogbody">' + this.info.alertCon + '</div><div style="margin:20px;"><input id="'+this.dialogYES+'" class="button" type="button" title="确定" value=" 确定 "/></div></div>';
		var baseZIndex = 10001 + this.info.overlay * 10;
		var coverIfZIndex = baseZIndex + 4;
		//判断内容类型决定窗口的主内容区域应该显示什么
		if (this.config.contentType == 1) {
			var openIframe = "<iframe width='100%' style='height:" + this.config.height + "px' name='" + this.iframeIdName + "' id='" + this.iframeIdName + "' src='" + this.info.contentUrl + "' frameborder='0' scrolling='" + this.config.scrollType + "'></iframe>";
			var coverIframe = "<div id='"+this.iframeBG+"' style='position:absolute;top:0px;left:0px;width:1px;height:1px;z-index:" + coverIfZIndex + ";filter: alpha(opacity=00);opacity:0.00;background-color:#ffffff;'><div>";
			$.dom(this.dialogBody).innerHTML = openIframe + coverIframe;
		} else if (this.config.contentType == 2) {
			$.dom(this.dialogBody).innerHTML = this.info.contentHtml;
		} else if (this.config.contentType == 3) {
			$.dom(this.dialogBody).innerHTML = confirm;
			$("#" + this.dialogOk).bind("click", $.bindObject(this, this.forCallback));
			$("#" + this.dialogCancel).bind("click", $.bindObject(this, this.close));
		} else if (this.config.contentType == 4) {
			$.dom(this.dialogBody).innerHTML = alert;
			$("#" + this.dialogYES).bind("click", $.bindObject(this, this._closeAlter));
		} else if (this.config.contentType == 5) {
			$.dom(this.dialogBody).appendChild(this.info.node);
		} else if (this.config.contentType == 6) {
		    this.orginalNodeHtml = this.info.node.innerHTML;
			$.dom(this.dialogBody).innerHTML = this.orginalNodeHtml;
			this.info.node.innerHTML = "";
		}
		$(window).bind("resize", $.bindAsEventListener(this, this.middle));
		$(document).bind("keydown", $.bindAsEventListener(this, this.keyEvent));
	},
	_closeAlter: function(){
		if (this.info.callBack !== Function.empty){
			if (this.info.parameter) {
				this.info.callBack.apply(this, this.info.parameter);
			}else{
				this.info.callBack.apply(this);
			}
		}
		this.close();
	},
	setContent: function(arrt, val){
		if (val) {
			switch (arrt) {
				case 'id':
					this.config.id = val;
					break;			
				case 'contentType':
					this.config.contentType = val;
					break;
				case 'width':
					this.config.width = val;
					break;
				case 'height':
					this.config.height = val;
					break;
				case 'isSupportDraging':
					this.config.isSupportDraging = val;
					break;
				case 'isReloadOnClose':
					this.config.isReloadOnClose = val;
					break;					
				case 'title':
					this.info.title = val;
					break;
				case 'contentUrl':
					this.info.contentUrl = val;
					break;
				case 'contentHtml':
					this.info.contentHtml = val;
					break;
				case 'node':
					this.info.node = val;
					break;					
				case 'callBack':
					this.info.callBack = val;
					break;
				case 'parameter':
					this.info.parameter = val;
					break;
				case 'confirmCon':
					this.info.confirmCon = val;
					break;
				case 'alertCon':
					this.info.alertCon = val;
					break;
				case 'someHiddenTag':
					this.info.someHiddenTag = val;
					break;
				case 'someHiddenEle':
					this.info.someHiddenEle = val;
					break;
				case 'overlay':
					this.info.overlay = val;
					break;
				case 'isHaveHeader':
					this.config.isHaveHeader = val;	
					break;
				case 'bColor':
					this.color.bColor = val;																
					break;	
				case 'confirmOKText':
					this.info.confirmOKText = val;																
					break;	
				case 'confirmCancelText':
					this.info.confirmCancelText = val;																
					break;														
			};
		};
	},
	setContents: function(options){
		if (null == options || {} == options) 
			return;
		for (var key in options) {
			this.setContent(key, options[key]);
		}
		this.initVarible();
	},
	show: function(){
		this.hiddenSome();
		this.middle();
		if (this.config.isShowShadow) {
			this.shadow();
		}				
	},
	forCallback: function(){
		if (this.info.callBack !== Function.empty) {
			if (this.info.parameter) {
				this.info.callBack.apply(this, this.info.parameter);
			} else {
				this.info.callBack.apply(this);
			}
		}
		this.close();
	},
	shadow: function(){
		var oShadow = $.dom(this.dialogBoxShadow);
		var oDialog = $.dom(this.dialogBox);
		oShadow['style']['position'] = "absolute";
		oShadow['style']['background'] = "#000";
		oShadow['style']['display'] = "";
		oShadow['style']['opacity'] = "0.2";
		oShadow['style']['filter'] = "alpha(opacity=20)";
		oShadow['style']['top'] = oDialog.offsetTop + this.info.shadowWidth + "px";
		oShadow['style']['left'] = oDialog.offsetLeft + this.info.shadowWidth + "px";
		oShadow['style']['width'] = oDialog.offsetWidth + "px";
		oShadow['style']['height'] = oDialog.offsetHeight + "px";
	},
	middle: function(){
        var oDialog = $.dom(this.dialogBox); if (!oDialog)return; oDialog['style']['position'] = "absolute";
        var dDialog = $.dom(this.dragDialogCase);
        oDialog['style']['display'] = dDialog['style']['display'] = '';
		var ow = oDialog.offsetWidth;
		var oh = oDialog.offsetHeight;	
        oDialog['style']['display'] = dDialog['style']['display'] =  'none';	
        var t = ($(window).height() / 2) - (oh / 2);
        t = t < 10 ? 10 : t;
        dDialog['style']['left'] = (($(window).width() - ow) / 2) + 'px';
        dDialog['style']['top'] = (t + $(document).scrollTop()) + 'px';
		oDialog['style']['display'] = dDialog['style']['display'] = '';
        if (!this.config.isBackgroundCanClick) {
		    var bg = $.dom(this.dialogBoxBG);
            dDialog["style"]["zIndex"] = bg["style"]["zIndex"] + 2;
		    bg.style.height = $(document).height() + 'px';
            bg.style.width = $(document).width() + 'px';		   
            bg.style.display = '';
        }
	},
	reset: function(){
		if (this.config.isReloadOnClose) {
			top.location.reload();
		};
		this.close();
	},
	close: function(){
		if ($.dom(this.dialogBox)) {
			$.dom(this.dialogBox)['style']['display'] = 'none';
			$.dom(this.dialogBody).innerHTML = '';
		}
		if ($.dom(this.dragDialogCase)) {
			$.dom(this.dragDialogCase)['style']['display'] = 'none';
		}
		if (!this.config.isBackgroundCanClick && $.dom(this.dialogBoxBG)) {
			$.dom(this.dialogBoxBG).style.display = 'none';
		}
		if (this.config.isShowShadow && $.dom(this.dialogBoxShadow)) {
			$.dom(this.dialogBoxShadow).style.display = 'none';
		}
	    if (this.config.contentType == 6) {
			this.info.node.innerHTML = this.orginalNodeHtml;
	    }		
		this.showSome();
		this._removeElement(this.dialogCase);
	},
	_removeElement: function(ctrOrId){
		var ctr = $.dom(ctrOrId);
		if (ctr) {
			if (ctr.childNodes && ctr.childNodes.length > 0) {
				for (var i = 0; i < ctr.childNodes.length; i++) {
					var elm = ctr.childNodes[0];
					this._removeElement(elm);
				}
			}
			ctr.parentNode.removeChild(ctr);
		}
	},
	keyEvent: function(evt){
		if (evt.which == 27) {
            evt.stopPropagation();
			this.close();
		}
	},
	hiddenSome: function(){
		var tag = this.info.someHiddenTag.split(",");
		if (tag.length == 1 && tag[0] == "") {
			tag.length = 0;
		}
		for (var j = 0; j < tag.length; j++) {
			this.hiddenTag(tag[j]);
		};
		var ids = this.info.someHiddenEle.split(",");
		if (ids.length == 1 && ids[0] == "") {
			ids.length = 0;
		}
		for (var j = 0; j < ids.length; j++) {
			this.hiddenEle(ids[j]);
		};
		//改变顶部和底部的div的id值为弹出状态的id值,祥见space的实现
		space("begin");
	},
	hiddenTag: function(tagName){
		var ele = document.getElementsByTagName(tagName);
		if (ele != null) {
			for (var j = 0; j < ele.length; j++) {
				if (ele[j].style.display != "none" && ele[j].style.visibility != 'hidden') {
					ele[j].style.visibility = 'hidden';
					this.someToHidden.push(ele[j]);
				};
            };
        };
    },
	hiddenEle: function(id){
		var ele = $.dom(id);
		if (typeof(ele) != "undefined" && ele != null) {
			ele.style.visibility = 'hidden';
			this.someToHidden.push(ele);
		}
	},
	showSome: function(){
		for (var j = 0; j < this.someToHidden.length; j++) {
			this.someToHidden[j].style.visibility = 'visible';
		};
		space("end");
	},
	setHTML: function(msg){
		$.dom(this.dialogContentDiv).innerHTML = msg;
	}
});
function space(flag){
	if (flag == "begin") {
		var ele = document.getElementById("ft");
		if (typeof(ele) != "undefined" && ele != null) 
			ele.id = "ft_popup";
		ele = document.getElementById("usrbar");
		if (typeof(ele) != "undefined" && ele != null) 
			ele.id = "usrbar_popup";
	} else if (flag == "end") {
		var ele = document.getElementById("ft_popup");
		if (typeof(ele) != "undefined" && ele != null) 
			ele.id = "ft";
		ele = document.getElementById("usrbar_popup");
		if (typeof(ele) != "undefined" && ele != null) 
			ele.id = "usrbar";
	};
};
/*-------------------------------------End Popup---------------------------------------*/
/*-------------------------------------RowSelector---------------------------------------*/
var RowSelector = function() {this.initialize.apply(this, arguments);};
$.extend(RowSelector.prototype, {
	initialize: function(containerOrId, options){
		this.container = $(containerOrId)[0];
		this.setOptions(options);
		this.elements = [];
		this.selectedRow = null;
		var elms = this.container.getElementsByTagName(this.options.tagName);
		for (var i = 0; i < elms.length; i++) {if (this._isForElement(elms[i])){this.elements.push(elms[i]);}}
		this.options.Filter(this.elements);
		for (var i = 0; i < this.elements.length; i++){
			$(this.elements[i]).bind("click", $.bindAsEventListener(this, this.options.onClick)).
			bind("mouseover", $.bindAsEventListener(this, this.options.onMouseOver)).
			bind("mouseout", $.bindAsEventListener(this, this.options.onMouseOut));
		}
	},
	//设置默认属性
	setOptions: function(options){
		this.options = {//默认值
			tagName: "tr",
			forName:"",
			rollOverClass: "row-over",
			selectedClass: "row-select",
			unselectedClass: "",
			onClick: this.selectRow,
			onMouseOver: this.rollOverRow,
			onMouseOut: this.rollOutRow,			
			Filter: this.defaultFilter
		};
		$.extend(this.options, options || {});
	},
	selectRow: function(evt){
		var target = this._getRow(evt.target);
		for (var i = 0; i < this.elements.length; i++) {
			var $elm = $(this.elements[i]); 
			$elm.removeClass(this.options.selectedClass);
			if ($elm[0] === target) {
			    this.selectedRow = $elm[0];
				if (!$elm.hasClass(this.options.selectedClass)) {
					$elm.addClass(this.options.selectedClass);
				}
			}
		}
	},
	getSelectedRow: function(){
	    return this.selectedRow;
	},
	rollOverRow: function(evt){
		var target = this._getRow(evt.target);
		if (target.tagName.toLowerCase() == this.options.tagName) {
			$(target).addClass(this.options.rollOverClass);
		}
	},	
	rollOutRow: function(evt){
		var target = this._getRow(evt.target);
		if (target.tagName.toLowerCase() == this.options.tagName) {
			$(target).removeClass(this.options.rollOverClass);
		}		
	},	
	defaultFilter: function(elms){
		if (elms && elms.length > 0){
			var elm = elms[0];			
			elms.remove(elm);
		}
	},
	_getRow: function(elm){
		if (elm) {	
			if (elm.tagName.toLowerCase() == this.options.tagName && this._isForElement(elm)) {
				return elm;
			} else {
				if (elm.tagName.toLowerCase() != "body") {
					return this._getRow(elm.parentNode);
				}
				return null;
			}
		} else {
			return null;
		}
	},
	_isForElement: function(elm){
		if (elm){
			var fn = elm.getAttribute("for");
			if (this.options.forName){
				if(fn && fn === this.options.forName){
					return true;
				}else{
					return false;
				}
			}else{
				return true;
			}
		}
		return false;
	}
});
/*-------------------------------------End RowSelector---------------------------------------*/
/*-------------------------------------TabSelector---------------------------------------*/
var SwitchTabStyle = {
    Click: 0, MouseOver: 1, DoubleClick: 2
};
var TabSelector = function() {this.initialize.apply(this, arguments);};
$.extend(TabSelector.prototype, {
	initialize: function(containerOrId, options){
		this.container = $(containerOrId)[0];
		this.setOptions(options);
		this.elements = [];
		this.selectedTab = null;
		this.increment = 1;
		var elms = this.container.getElementsByTagName(this.options.tagName);
		for (var i = 0; i < elms.length; i++) {
			var elm = elms[i];
			if (elm.parentNode && elm.parentNode === this.container) {
				var control = null;
				if (elm.attributes["control"] && elm.attributes["control"].nodeValue) {
					control = $.dom(elm.attributes["control"].nodeValue);
				}
				if (!control) {
					this._addTab(elm);
				}
				this.elements.push(elm);
			}
		}
		this.options.Filter(this.elements);
		for (var i = 0; i < this.elements.length; i++) {
		    var elm = this.elements[i];
			if (this.options.switchTabStyle == SwitchTabStyle.Click) {
				$(elm).bind("click", $.bindAsEventListener(this, this.options.onClick));
			} else if (this.options.switchTabStyle == SwitchTabStyle.MouseOver) {
				$(elm).bind("mouseover", $.bindAsEventListener(this, this.options.onMouseOver));
			}
			var aas = elm.getElementsByTagName("a");
			for (var j = 0; j < aas.length; j++){
			    $(aas[j]).bind("focus", $.bindAsEventListener(aas[j], this._blurA));								    
			}
			if (elm.attributes["checked"] && elm.attributes["checked"].nodeValue == "true") {
				this.selectedTab = elm;
			}		
		}	
		this.hiddenAll(this.selectedTab);
	},
	//设置默认属性
	setOptions: function(options){
		this.options = {//默认值
			tagName: "li",
			selectedClass: "current",
			unselectedClass: "",
			switchTabStyle: SwitchTabStyle.Click,
			onClick: this.selectTab,
			onMouseOver: this.selectTab,
			Filter: Function.empty
		};
		$.extend(this.options, options || {});
	},
	selectTab: function(evt){
		var target = this._getEvaluableTab(evt.target);
		if (target) {
			this.hiddenAll(target);
		}
		return false;
	},
	getSelectedTab: function(){
		return this.selectedTab;   
	},
	setSelectedTab: function(indexOrIdOrElement){
	    var elm = null;
	    if (!isNaN(indexOrIdOrElement)){
	        elm = this.elements[parseInt(indexOrIdOrElement) - 1];
	    } else if ($.type(indexOrIdOrElement) === "string" || $.type(indexOrIdOrElement) === "element") {
	        elm = $.dom(indexOrIdOrElement);
	    } else {
	        return;
	    }
	    //elm.click();
	    if (elm) {
	        this.hiddenAll(elm);
	    }
	},
	hiddenAll: function(){
		var exceptElm = null;
		if (arguments.length > 0) {
			exceptElm = arguments[0]
		};
		for (var i = 0; i < this.elements.length; i++) {
			var elm = this.elements[i];
			var controlled = this._getControlled(elm);
			if (exceptElm && exceptElm === elm) {
				if (this.selectedTab && this.selectedTab !== elm) {
					this._getControlled(this.selectedTab).style.display = "none";
					this.selectedTab = null;
				}
				this.selectedTab = elm;
				elm.setAttribute("checked", "true");
				controlled.style.display = "";
				elm.className = this.options.selectedClass;
				continue;
			} else {
				elm.setAttribute("checked", "false");
				controlled.style.display = "none";
				elm.className = this.options.unselectedClass;
			}
		}
	},
	addTab: function(){
		var selected = false;
		if (arguments.length > 0) {
			selected = arguments[0]
		};
		var tab = _addTab();
		if (selected) {
			this.hiddenAll(tab);
		}
	},
	removeTab: function(elm){
		var tab = $.dom(elm);
		var controlled = this._getControlled(tab);
		this.elements.remove(tab);
		if (tab.attributes["checked"] && tab.attributes["checked"].nodeValue == "true"){
			if (this.elements.length > 0) {
				this.hiddenAll(this.elements[0]);
			} else {
				this.hiddenAll();
			}
		}
		tab.parentNode.removeChild(tab);
		controlled.parentNode.removeChild(controlled);
	},
	_getEvaluableTab: function(elm){
		if (elm.nodeType == 1 && elm.tagName.toLowerCase() == this.options.tagName) {
			if (this.elements.contains(elm, 0)) {
				return elm;
			} else {
				return this._getEvaluableTab(elm.parentNode);
			}
		} else {
			return this._getEvaluableTab(elm.parentNode);
		}
	},
	_addTab: function(){
		var tab = null;
		if (arguments.length > 0) {
			tab = $.dom(arguments[0]);
		};
		var control = $.div("tab_" + this.increment, "");
		this.container.parentNode.appendChild(control);
		control.style.display = "none";
		if (!tab){
			tab = $.create(this.options.tagName);
			this.container.appendChild(tab);
		}
		tab.setAttribute("control", control.id);
		tab.setAttribute("checked", "false");
		this.increment++;
		return tab;
	},
	getCurrentControlled: function(){
	    return this._getControlled(this.getSelectedTab());
	},
	_getControlled: function(arg){
		var elm = $.dom(arg);
		var controlled = $.dom(elm.attributes["control"].nodeValue);
		return controlled;
	},
	_blurA: function(){this.blur();}
});
/*-------------------------------------End TabSelector---------------------------------------*/
/*-------------------------------------TreeNavigator---------------------------------------*/
var TreeNavigator = function() {this.initialize.apply(this, arguments);};
$.extend(TreeNavigator.prototype, {
	initialize: function(containerOrId, options){
		this.tagName = "li";
		this.container = $(containerOrId)[0];
		this.setOptions(options);
		this.elements = [];
		var elms = this.container.getElementsByTagName(this.tagName);
		for (var i = 0; i < elms.length; i++) {
			if (elms[i].parentNode === this.container) {
				this._parseElement(elms[i]);
			}
		}
		this.options.Filter(this.elements);
		this.initStatus();
	},
	//设置默认属性
	setOptions: function(options){
		this.options = {
			onClick: this.selectElement,
			Filter: Function.empty,
			selectedClass: "current",
			unselectedClass: "",
			hiddenOther:false
		};
		$.extend(this.options, options || {});
	},
	initStatus: function(){
		var targetA = null; var url = location.href; url = this._removeJinghao(url); 
		var objs = this._buildObjectsArray(); 
		if (objs[url]){
		    targetA = objs[url]["a______________link"];
		}else{
		    var quanzhi = 1000; var tmp = 1000;
		    var lobj = this._parseQueryPara(url);
		    for(var p in objs){
		        tmp = 1000;
		        var obj = objs[p];
		        if (lobj["a______________href"].toLowerCase() == obj["a______________href"].toLowerCase()){
		            for (var p1 in lobj){
		                for (var p2 in obj){
    		                if (p1.toLowerCase() === p2.toLowerCase() && lobj[p1] === obj[p2]){
    		                    tmp++;
    		                }
		                }		                
		            }
		            if (quanzhi <= tmp){
                        targetA = obj["a______________link"];
		                quanzhi = tmp;
		            }
		        }
		    }
		}
	    if (targetA){
		    this._openPreviousUl(targetA);
		    if (this.options.selectedClass) {
			    targetA.className = this.options.selectedClass;
		    }
	    }
	},
	_buildObjectsArray: function(){
	    var objs = new Object();
        var aLinks = this.container.getElementsByTagName("a");
        if (aLinks == null || aLinks.length === 0) return null;
		for (var i = 0; i < aLinks.length; i++){
            var a = aLinks[i];var href = a.href;
            href = this._removeJinghao(href);
            objs[href] = this._parseQueryPara(href);
            objs[href]["a______________link"] = a;
		}
		return objs;
	},
	_parseQueryPara: function(url){
	    var obj = new Object();
	    if (url && url.lastIndexOf("?") > 0){
	        var arr1 = url.split("?");
            obj["a______________href"] = arr1[0];
            var cons = arr1[1].split("&");
            for(var i = 0; i < cons.length; i++){
                var ar = cons[i].split("=");
                obj[ar[0].toLowerCase()] = ar[1];
            }
        }else{
            obj["a______________href"] = url;
        }
        return obj;
	},
	_removeJinghao: function(url){
        if (url.substr(url.length - 1) === "#"){
            url = url.substr(0, url.length - 1);
            return this._removeJinghao(url);
        }
        return url;
	},
	selectElement: function(evt){
		var target = evt.target;
		this.hiddenElements(target);
	},
	hiddenElements: function(){
		var target = null;
		if (arguments.length > 0) {
			target = arguments[0];
		};
		if (this.options.hiddenOther === true) {
			for (var i = 0; i < this.elements.length; i++) {
				var elm = this.elements[i];
				elm["style"]["display"] = "none";
			}
		}
		this.hiddenElement(target);		
	},
	hiddenElement: function(elm){
		if (elm) {
			var nelm = this._getNextUl(elm);
			if (nelm){
				var displayValue = nelm["style"]["display"];
				if (this.options.unselectedClass){elm.className == this.options.unselectedClass;}
				nelm["style"]["display"] = "none";
				if (displayValue == "none"){
					if (this.options.selectedClass){elm.className == this.options.selectedClass;}
					nelm["style"]["display"] = "block";
				}
			}
		}
	},
	_getNextUl: function(aelm){
		if (aelm) {
			if (aelm.nextSibling && aelm.nextSibling.nodeType === 1 && aelm.nextSibling.nodeName.toLowerCase() == "ul") {
				return aelm.nextSibling;
			} else {
				return this._getNextUl(aelm.nextSibling);
			}
		} else {
			return null;
		}
	},
	_openPreviousUl: function(aelm){
		if (aelm) {
			if (aelm.parentNode && aelm.parentNode.nodeType === 1 && aelm.parentNode.nodeName.toLowerCase() == "ul") {
				if (aelm.parentNode !== this.container) {
					aelm.parentNode["style"]["display"] = "block";
				}
				return;
			} else {
				this._openPreviousUl(aelm.parentNode);
			}
		}
	},	
	_parseElement: function(elm){
		var aElms = elm.getElementsByTagName("a");
		for (var i = 0; i < aElms.length; i++){
			var aElm = aElms[i];
			var uElms = aElm.parentNode.getElementsByTagName("li");
			if (uElms.length > 0){
				this.elements.push(aElm);
				$(aElm).bind("click", $.bindAsEventListener(this, this.options.onClick));
				$(aElm).bind("focus", $.bindAsEventListener(aElm, this._blurA));
				for (var j = 0; j < uElms.length; j++){
					this._parseElement(uElms[j]);
				}
			}
		}
	},
	_blurA: function(){this.blur();}
});
/*-------------------------------------End TreeNavigator---------------------------------------*/
/*-------------------------------------ImageSelector---------------------------------------*/
var ImageSelector = function() {this.initialize.apply(this, arguments);};
$.extend(ImageSelector.prototype, {
	initialize: function(data, options){
		this.setOptions(options);
		var dataType = $.type(data);
		if (dataType === "array") {
			this.imageUrls = data;
		} else if (dataType === "element") {
			var imgs = data.getElementsByTagName("img");
			this.imageUrls = [];
			for (var i = 0; i < imgs.length; i++){
				this.imageUrls.push(imgs[i].src);
			}
		} else if (dataType === "string") { //htmlcode
			this.imageUrls = HtmlParser.getHtmlElementValues(data, "img", "src") || [];
		}
		this.init();
	},
	setOptions: function(options){
		this.options = {
			imageClick: this._imageClick,
			confirm: this.confirm,
			cancel: this.close
		};
		$.extend(this.options, options || {});
	},	
	init: function(){
		this.selectorContainer = $.create("div");
		this.selectorContainer.className = "imageselector";
		var divLeft = $.create("div"); divLeft.className = "left";
		this.selectorContainer.appendChild(divLeft); this.ThumbDiv = divLeft;
		var divRight = $.create("div"); divRight.className = "right";
		this.selectorContainer.appendChild(divRight);
		var commandDiv = $.create("div"); commandDiv.className = "command";
		divRight.appendChild(commandDiv);
		var confirmBtn = $.create("input");
		confirmBtn.type = "button"; confirmBtn.className = "button"; confirmBtn.value="确定"; confirmBtn.style.marginRight = "120px";
		commandDiv.appendChild(confirmBtn); $(confirmBtn).bind("click", $.bindAsEventListener(this, this.options.confirm));
		var cancelBtn = $.create("input");
		cancelBtn.type = "button"; cancelBtn.className = "button"; cancelBtn.value="取消";
		commandDiv.appendChild(cancelBtn); $(cancelBtn).bind("click", $.bindAsEventListener(this, this.options.cancel));
		var previewDiv = $.create("div"); previewDiv.className = "preview";
		divRight.appendChild(previewDiv);	
		this.previewImage = $.create("img"); this.previewImage.alt="图片预览"; this.previewImage.src="../images/pixel.gif";
		previewDiv.appendChild(this.previewImage);		
		var clearDiv = $.create("div"); clearDiv.style.clear = "both";
		this.selectorContainer.appendChild(clearDiv);
		var aCtr = null;
		for (var i = 0; i < this.imageUrls.length; i++) {
			aCtr = $.create("a");
			var img = $.create("img"); img.alt = "error url"; img.src = this.imageUrls[i];
			$(img).bind(img, "click", $.bindAsEventListener(this, this.options.imageClick));
			aCtr.appendChild(img);
			divLeft.appendChild(aCtr);
			if (i === 0) this._preview(this.imageUrls[0]);
		}
		
		var options = { node: this.selectorContainer, width: $(this.selectorContainer).width, height: 80, title: "Image Selector", contentType: 5, parameter: null };
		this.popup = new Popup();
		this.popup.setContents(options);  this.popup.build(); this.popup.show();
	},
	_imageClick: function(evt){
		this._preview(evt.target.src);
	},
	_preview: function(url){
		this.previewImage.src = url;
		$.image(this.previewImage, 560);
		this._current(url);
	},
	_current: function(url){
		var imgs = this.ThumbDiv.getElementsByTagName("img");
		for (var i = 0; i < imgs.length; i++){
			if (imgs[i].src === url){
				imgs[i].parentNode.className = "current";
			} else {
				imgs[i].parentNode.className = "";
			}
		}
	},
	confirm: function(){
		this.close();
		return this.previewImage.src;
	},	
	close: function(){
		this.popup.close();
	}
});
/*-------------------------------------End ImageSelector---------------------------------------*/
/*-------------------------------------EqualElements---------------------------------------*/
var EqualElements = function() {this.initialize.apply(this, arguments);};
$.extend(EqualElements.prototype, {
	initialize: function(container, options){
		this.setOptions(options);
		this.container = $(container)[0];
        this.init();
	},
	setOptions: function(options){
		this.options = {//默认值
			tagName: "li",
			filter: Function.empty
		};
		$.extend(this.options, options || {});
	},
	init: function(){
		this.elements = [];
		var elms = this.container.getElementsByTagName(this.options.tagName);
		for (var i = 0; i < elms.length; i++){
		    if (elms[i].parentNode === this.container){
		        this.elements.push(elms[i]);
		    }
		}
		this.options.filter(this.elements);		
	},
	up: function(elm){
        var i = this.elements.indexOf(elm);
        if ((i > 0) && (!this._isRestrictElement(this.elements[i - 1]))){
            var tmptr = elm.cloneNode(true);
            this.container.insertBefore(tmptr, this.elements[i - 1]);
            elm.parentNode.removeChild(elm);
            this.init();
        }
	},
	down: function(elm){
        var i = this.elements.indexOf(elm);
        if ((i < this.elements.length - 1) && (!this._isRestrictElement(this.elements[i + 1]))){
            var nextelem = this.elements[i + 1];
            var tmptr = nextelem.cloneNode(true);
            this.container.insertBefore(tmptr, elm);
            nextelem.parentNode.removeChild(nextelem);
            this.init();
        }	    
	},
	insert: function(){
	    var addelm; var index = -1; var refelm; var tmp;
	    if(arguments.length >= 1){
	        addelm = $.dom(arguments[0]);
	    }
	    if(arguments.length >= 2){
	        tmp = arguments[1];
	        if(isNaN(tmp)){
	            refelm = $.dom(tmp);
	        }else{
	            index = $.dom(tmp);
	            refelm = this.elements[index];
	        }
	    }
	    if(addelm){
	        if(refelm){
	            this.container.insertBefore(addelm, refelm);
	        }else{
                this.container.appendChild(addelm);
            }
         }
        this.init();
        return addelm;
	},	
	remove: function(elm){
	    if (elm){
            elm.parentNode.removeChild(elm);
            this.init();
	    }
	},
	next: function(elm){
        var i = this.elements.indexOf(elm);
	    if (i > this.elements.length){
	        return null;
	    }
	    return this.elements[i + 1];
	},
	previous: function(elm){
        var i = this.elements.indexOf(elm);
	    if (i <= 0){
	        return null;
	    }
	    return this.elements[i - 1];	
	},
	indexOf: function(elm){
        for (var i = 0; i < this.elements.length; i++){
	        if (this.elements[i] === elm) {
	            return i;
	        }
	    }
	    return -1;    
	},
	_isRestrictElement: function(elm){
	    if (elm && elm.hasAttribute("restrict")){
	        return true;
	    }
	    return false;
	}
});
/*-------------------------------------End EqualElements---------------------------------------*/
var ChksSelector = function() {this.initialize.apply(this, arguments);};
$.extend(ChksSelector.prototype, {
	initialize: function(containerOrId, options){
		this.container = $(containerOrId)[0];
		this.setOptions(options);
		this.elements = [];
		this.selectAllElement = null;
		var elms = this.container.getElementsByTagName(this.options.tagName);
		for (var i = 0; i < elms.length; i++) {
			var elm = elms[i];
			var sType = elm.getAttribute("type");			
			var sGroup = elm.getAttribute("group");			
			if (sType && sGroup && sType.toLowerCase() == this.options.type.toLowerCase() && sGroup == this.container.attributes["id"].nodeValue) {
				if (elm.value == this.options.allValue) {
					this.selectAllElement = elm;
				    $(this.selectAllElement).bind("click", $.bindAsEventListener(this, this.options.onSelectAll));
				} else {
					this.elements.push(elm);
				}
			}
		}
		this.options.Filter(this.elements);
		for (var i = 0; i < this.elements.length; i++) {	
            $(this.elements[i]).bind("click", $.bindAsEventListener(this, this.options.onClick));
		}	
	},
	//设置默认属性
	setOptions: function(options){
		this.options = {//默认值
			tagName: "input",
			type: "checkbox",
			allValue: "0",
			separator: ",",
			limited: 0,
			onClick: this.selectElement,
			onSelectAll: this.selectAll,
			Filter: Function.empty,
			selectedClass: null,
			unselectedClass: null
		};
		$.extend(this.options, options || {});
	},
	selectElement: function(evt){
	    if (this.options.limited > 0 && this.getSelectedElements().length > this.options.limited) {
	        evt.target.checked = false;
	        return false;
	    }
		if (this.options.type == "checkbox") {
			if (this.isSelectedAll()) {
				if(this.selectAllElement){
				    this.selectAllElement.checked = true
				};
				return;
			}
			if (this.selectAllElement) {
				this.selectAllElement.checked = false;
			}
		} else if (this.options.type == "radio") {
			for (var i = 0; i < this.elements.length; i++) {
				var elm = this.elements[i];
				if (evt.target != elm) {
					elm.checked = false;
				}
			//this._setClass(elm);			    
			}
		}
		return true;
	},
	selectAll: function(){
		this.selectAllElements(this.selectAllElement.checked);
	},
	selectAllElements: function(){
		var b = true;
		if (arguments.length > 0) {
			b = arguments[0]
		};
		for (var i = 0; i < this.elements.length; i++) {
			var elm = this.elements[i];
			elm.checked = b;
		    //this._setClass(elm);
		}
	},
	unselectAllElements: function(){
		this.selectAllElements(false);
	},
	getElements: function(){
		return this.elements;
	},
	getSelectedElements: function(){
		var selectedElements = [];
		for (var i = 0; i < this.elements.length; i++) {
			var elm = this.elements[i];
			if (elm.checked) {
				selectedElements.push(elm);
			}
		}
		return selectedElements;
	},
	removeElement: function(elm){
	    if (elm){
	        if (typeof(elm) == "string"){
		        for (var i = 0; i < this.elements.length; i++) {
			        var e = this.elements[i];
			        if (e.value == elm){
			            this.elements.remove(e);
			            break;
			        }
		        }                
            } else {
                this.elements.remove(elm);
            }
	    }
	},
	getValues: function(){
		var values = [];
		for (var i = 0; i < this.elements.length; i++) {
			var elm = this.elements[i];
			values.push(elm.value);
		}
		return values;
	},
	setValues: function(values){
		if (typeof (values).toLowerCase() == "array") {
			for (var i = 0; i < values.length; i++) {
				var val = values[i] + "";
				for (var j = 0; j < this.elements.length; i++) {
					var elm = this.elements[j];
					if (elm.value == val) {
						elm.checked = true;
					}
				}
			}
		}
	},
	getSelectedValues: function(){
		var selectedValues = [];
		for (var i = 0; i < this.elements.length; i++) {
			var elm = this.elements[i];
			if (elm.checked) {
				selectedValues.push(elm.value);
			}
		}
		return selectedValues;
	},
	setNextNodeClass: function(evt){
		this.selectElement(evt);
		var elms = this.getSelectedElements();
		for (var i = 0; i < this.elements.length; i++) {
	        var em = this.elements[i];
	        if (this.options.unselectedClass) {
				em.nextSibling.className = this.options.unselectedClass;
			}
	        if (elms[0] === em && this.options.selectedClass){
	            em.nextSibling.className = this.options.selectedClass;
	        }
		}
	},
	_setClass: function(elm){
	    if (elm){
	        if (elm.checked && this.options.selectedClass){
	            elm.className = this.options.selectedClass;
	        } else if (!elm.checked && this.options.unselectedClass) {
	            elm.className = this.options.unselectedClass;	            
	        }
	    }
	},
	isSelectedAll: function(){
		for (var i = 0; i < this.elements.length; i++) {
			var elm = this.elements[i];
			if (!elm.checked) {
				return false;
			}
		}
		return true;
	},
	clear: function(){
		var b = false;
		if (arguments.length > 0) {
			b = arguments[0]
		};
		if (this.selectAllElement) { this.selectAllElement.checked = b; }
		for (var i = 0; i < this.elements.length; i++) {
			var elm = this.elements[i];
			elm.checked = b;
		}
	},
	hasValues: function(){
		var ma = 10000;
		var mi = 1;		
		if (arguments.length > 0) {
			mi = arguments[0]
		};		
		if (arguments.length > 1) {
			ma = arguments[1]
		};			
		var len = this.getSelectedValues().length;
		return len >= mi && len <= ma;
	},
	toString: function(){
		var s = this.getSelectedValues();
		if (s.length > 0) {
			return s.join(this.options.separator)
		}
		return null;
	}
});
/*----------------------------------------Message---------------------------------*/
var message = function() {this.initialize.apply(this, arguments);};
$.extend(message.prototype, {
	initialize: function(){
		this.container = [];
	},
	push: function(msg){
		this.container.push(msg);
	},
	getMessages: function(){
		return this.container;
	},
	getHtmlMessages: function(){
		var builer = "";
		if (this.container && this.container.length > 0) {
			builer = "<ul>";
			for (var i = 0; i < this.container.length; i++) {
				builer += "<li>" + this.container[i] + "</li>";
			}
			builer += "</ul>"
		}
		return builer;
	},
	showMessage: function(className){
		$box(String.format("<div class=\"{0}\">{1}</div>", className.isNullOrEmpty() ? "" : className, this.getHtmlMessages()));
	},
	hasMessage: function(){
		if (this.container && this.container.length > 0) {
			return true;
		}
		return false;
	},
	clear: function(){
		this.container = [];
	}
});
var Message = new message();
/*----------------------------------------End Message---------------------------------*/
/*----------------------------------------DynamicUserControl---------------------------------*/
//  匹配脚本的正则表达式
var gs_reScriptMatchAll = new RegExp('<script[^>]*>([\\S\\s]*?)<\/script>', 'img');
var gs_reScriptMatchOne = new RegExp('<script[^>]*>([\\S\\s]*?)<\/script>', 'im');
var gs_reScriptMatchSrc = new RegExp('<script[^>]*src=[\'\"]([^\'\"]*)[\'\"][^>]*>([\\S\\s]*?)<\/script>', 'im');
var ControlManager = function() {this.initialize.apply(this, arguments);};
$.extend(ControlManager.prototype, {
	initialize: function(){
		this.m_aDynamicControls = new Array();
		this.m_aRegisteredScriptSrc = new Array();
		this.m_aRegisteredPostback = new Array();
		ControlManager.gs_hInstance = this;
		if (typeof(theForm) == "undefined" || !theForm) {
			theForm = $.dom("aspnetForm");
		}
		$(theForm).bind("submit", $.bindAsEventListener(this, this.onFormSubmit));
		if (typeof(window.__doPostBack) === "function") {
			this._originalDoPostBack = window.__doPostBack;
		} else {
			this._originalDoPostBack = ___doPostBack;
		}
		window.__doPostBack = $.bindObject(this, this.onDoPostBack);
		// 解析页面存在的脚本
		this._parseCurrentScript();
	},
	// 当表单被提交时，发生此事件
	onFormSubmit: function(evt){
		var sControlId = evt.activeElement.id ? evt.activeElement.id.replace(/\_/g, "$") : evt.activeElement.name;
		if (sControlId) {
			var aAdditionnalInput = [{name: sControlId, value: ""}];
			var hDuc = this.findMatchingDuc(sControlId);
			if (hDuc) {
				if (evt) {
                    evt.stopPropagation();
				}
				if (!this.validateForm()) {
					return false;
				}
				hDuc.doPostBack(sControlId, "", aAdditionnalInput);
				return false;
			}
		}
		this._dynamicControlCleanup();
	},
	// 重写 __doPostBack
	onDoPostBack: function(eventTarget, eventArgument, updateIds){
		if (!this.validateForm()) {
			return;
		}
		var hDuc = this.findMatchingDuc(eventTarget);
		if (hDuc) {
			hDuc.doPostBack(eventTarget, eventArgument, null, updateIds);
			return;
		}
		this._dynamicControlCleanup();
		return this._originalDoPostBack(eventTarget, eventArgument);
	},
	validateForm: function(){
		if ((theForm.onsubmit) && (theForm.onsubmit() == false)) {
			return false;
		}
		if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false) {
			return false;
		}
		return true;
	},
	// 查找DynamicUserControl，当uniqueId包含sControlId
	findMatchingDuc: function(sControlId){
		this.m_aDynamicControls.sort(ControlManager.LengthComparator);
		for (var i = 0; i < this.m_aDynamicControls.length; i++) {
			var uniqueId = this.m_aDynamicControls[i].get_uniqueId();
			if (uniqueId == sControlId.substring(0, uniqueId.length)) {
				return this.m_aDynamicControls[i];
			}
		}
		return null;
	},
	_parseCurrentScript: function(){
		var scripts = document.documentElement.innerHTML.match(gs_reScriptMatchAll);
		if (scripts) {
			for (var i = 0; i < scripts.length; i++) {
				var currentScriptSrc = scripts[i].match(gs_reScriptMatchSrc);
				if (currentScriptSrc) {
					if (!this.containsScriptSrc(currentScriptSrc[1])) {
						this.appendScriptSrc(currentScriptSrc[1]);
					}
				}
			}
		}
	},
	// 注册DynamicUserControl
	registerDynamicControl: function(uniqueId, controlpath){
		var hDuc = this.findMatchingDuc(uniqueId);
		if (hDuc){
		    var tmp = hDuc.get_uniqueId();
		    if (tmp.length === uniqueId.length){
			    this.m_aDynamicControls.remove(hDuc);
			}
		}		
		hDuc = new DynamicUserControl();
		hDuc.set_uniqueId(uniqueId);
		hDuc.set_controlPath(controlpath);
		this.m_aDynamicControls.push(hDuc);
	},
	// 卸载DynamicUserControl
	unregisterDynamicControlChilds: function(hDuc){
		var i = 0;
		var containerId = hDuc.get_uniqueId();
		this.m_aDynamicControls.sort(ControlManager.LengthComparator);
		while (i < this.m_aDynamicControls.length) {
			var childId = this.m_aDynamicControls[i].get_uniqueId();
			if ((containerId == childId.substring(0, containerId.length)) && (childId.length > containerId.length)) {
				var hElement = this.m_aDynamicControls.splice(i, 1);
			} else {
				i++;
			}
		}
	},
	containsScriptSrc: function(sScriptUrl){
		return this.m_aRegisteredScriptSrc[sScriptUrl]
	},
	appendScriptSrc: function(sScriptUrl){
		this.m_aRegisteredScriptSrc[sScriptUrl] = true;
	},
	// 处理iframe框架返回的数据
	updateFromIFrame: function(clientId, content){
		for (var i = 0; i < this.m_aDynamicControls.length; i++) {
			if (this.m_aDynamicControls[i].get_clientId() == clientId) {
				this.m_aDynamicControls[i]._updateContainer(content);
				return;
			}
		}
	},
	// 更新CSS样式
	updateCss: function(cssList){
		var header = document.getElementsByTagName('HEAD')[0];
		if (!header) 
			return;
		
		for (var i = 0; i < cssList.length; i++) {
			var linkElement = document.createElement('link');
			linkElement.type = 'text/css';
			linkElement.rel = 'stylesheet';
			linkElement.href = cssList[i];
			header.appendChild(linkElement);
		}
	},
	_redirectDocument: function(sUrl){
		$.redirect(sUrl);
	},
	registerPostback: function(hDUC, eventTarget, eventArgument, data){
		var hPostback = {
			handle: hDUC,
			eventTarget: eventTarget,
			eventArgument: eventArgument,
			data: data
		};
		return this.m_aRegisteredPostback.push(hPostback) - 1;
	},
	processRegisteredPostback: function(postbackId){
		var hPostback = this.m_aRegisteredPostback[postbackId];
		this.m_aRegisteredPostback[postbackId] = null;
		hPostback.handle._doPostBackXSS(hPostback.eventTarget, hPostback.eventArgument, hPostback.data);
	},
	// 在这里清理一些您不需要的数据
	_dynamicControlCleanup: function(){
		for (var i = 0; i < this.m_aDynamicControls.length; i++) {
			this.m_aDynamicControls[i].cleanup();
		}
	}
});
var DynamicUserControl = function() {this.initialize.apply(this, arguments);};
$.extend(DynamicUserControl.prototype, {
	initialize: function(){
		this.m_sUniqueId = null;
		this.m_sClientId = null;
		this.m_sControlPath = null;
		this.m_hProxy = null;
		this.m_nDisplayTimeoutDelay = 200;
		this.m_aDeferredScript = null;
	},
	get_uniqueId: function(){
		return this.m_sUniqueId;
	},
	set_uniqueId: function(value){
		this.m_sUniqueId = value;
		this.m_sClientId = value.replace(/\$/g, '_');
	},
	get_controlPath: function(){
		return this.m_sControlPath;
	},
	set_controlPath: function(value){
		this.m_sControlPath = value;
	},
	get_clientId: function(){
		return this.m_sClientId;
	},	
	get_customStateName: function(){
		return this.m_sUniqueId + "$__CUSTOMSTATE";
	},
	get_customStateId: function(){
		return this.m_sClientId + "___CUSTOMSTATE";
	},
	get_ducStateName: function(){
		return this.m_sUniqueId + "$__DUCSTATE";
	},
	get_ducStateId: function(){
		return this.m_sClientId + "___DUCSTATE";
	},	
	get_progressPanel: function(){
		if (typeof(this.m_hProgressPanel) == 'undefined') {
			this.m_hProgressPanel = document.getElementById(this.get_clientId() + "_progress");
		}
		return this.m_hProgressPanel;
	},
	get_contentPanel: function(){
		if (typeof(this.m_hContentPanel) == 'undefined') {
			this.m_hContentPanel = document.getElementById(this.get_clientId() + "_content");
		}
		return this.m_hContentPanel;
	},
	
	// 回传当前控件
	doPostBack: function(eventTarget, eventArgument, aAdditionnalInput, updateIds){
		// 显示进度条
		var progressPanel = this.get_progressPanel();
		if (progressPanel) {
            var rid = window[this.get_clientId()+"_pop"];
		    if (rid) {
			    progressPanel.style.display = "";
		    } else {
			    this.m_nDisplayTimerId = window.setTimeout(function(){
				    showLoading(progressPanel, null)
			    }, this.m_nDisplayTimeoutDelay);
			}
		}
		this.updateIds = null;
		if (typeof(updateIds) !== "undefined"){
			this.updateIds = updateIds;			
		}
		// 收集查询参数
		var data = new Array();
		data.push({name: "__EVENTTARGET", value: eventTarget});
		data.push({name: "__EVENTARGUMENT", value: eventArgument});
		data.push({name: "__DUCCONTAINER", value: this.m_sUniqueId});
		data.push({name: "__location", value: document.location.href});
		$("#" + whoids__s).remove();
		var wwh = $.varible(whoids__s);
		if (typeof(wwh) != "undefined" && wwh) {
			this.get_contentPanel().appendChild($.hidden(whoids__s, wwh));
		}
		var wcus = $.varible(this.get_customStateId());
		if (typeof(wcus) != "undefined" && wcus) {
			this.get_contentPanel().appendChild($.hidden(this.get_customStateName(), wcus));
		}
		var wduc = $.varible(this.get_ducStateId());
		if (typeof(wduc) != "undefined" && wduc) {
			this.get_contentPanel().appendChild($.hidden(this.get_ducStateName(), wduc));
		}				
		if (aAdditionnalInput && aAdditionnalInput.length > 0) {
			data = data.extend(aAdditionnalInput);
		}
		//取消contentPanel中所有的事件绑定
		$(this.get_contentPanel()).unbinds();
		data = data.extend($(this.get_contentPanel()).inputs());
		// 判断回传是否使用xmlhttprequest方式
		if (this.m_sControlPath.substr(0, 4) != "http") {
			this._doPostBackXHR(eventTarget, eventArgument, data);
		} else {// 使用跨域请求
			data.push({name: "xss", value: this.m_sClientId});
			this._doPostBackXSS(eventTarget, eventArgument, data);
		}
	},
	//使用xmlhttprequest框架实现请求
	_doPostBackXHR: function(eventTarget, eventArgument, data){
		var requestBody = "";
		for (var i = 0; i < data.length; i++) {
			if (data[i]) {
				requestBody += "&" + data[i].name + "=" + encodeURIComponent(data[i].value);
			}
		}
		requestBody = requestBody.substr(1); // remove first "&"	
		$.ajax({type:"POST", url: this.m_sControlPath, data: requestBody, success: $.bindObject(this, this._onRequestCompleted), error: $.bindObject(this, this._onRequestError)});
	},
	// 使用iframe框架实现请求
	_doPostBackXSS: function(eventTarget, eventArgument, data){
		if (this.m_hProxy == null) {
			this.m_hProxy = document.createElement("iframe");
			var hpostbackId = ControlManager.getInstance().registerPostback(this, eventTarget, eventArgument, data);
			
			try {
				this.m_hProxy.style.border = "0";
				this.m_hProxy.style.width = "0";
				this.m_hProxy.style.height = "0";
			} catch (exception) {
				this.m_hProxy.setAttribute("style", "border:0;width:0;height:0;");
			}
			this.m_hProxy.setAttribute("id", this.m_sClientId + "_proxy");
			this.m_hProxy.name = this.m_sClientId + "_proxy";
			this.m_hProxy.src = this.m_sControlPath + "?__DUCMODE=proxy&pbid=" + hpostbackId;
			this.m_hProxy = document.body.appendChild(this.m_hProxy);
			return;
		}
		var hIframeDocument = this.m_hProxy.contentDocument ? this.m_hProxy.contentDocument : this.m_hProxy.contentWindow.document;
		var hForm = hIframeDocument.createElement("form");
		hForm.method = "post";
		hForm.action = this.m_sControlPath;
		hIframeDocument.body.appendChild(hForm);
		for (var i = 0; i < data.length; i++) {
			if (data[i]) {
				hForm.appendChild(this._buildInput(hIframeDocument, data[i].name, data[i].value));
			}
		}
		hForm.submit();
	},
	_onRequestError: function(){
		var progressPanel = this.get_progressPanel();
		//隐藏进度条
		if (progressPanel) {
			hideLoading(progressPanel);
		}
		//如果是对话框，则置中
		var rid = window[this.get_clientId()+"_pop"];
		if (rid) {
			rid.middle();
		}
		$box("服务器链接错误，请稍候重试或与客户联系！");	
	},
	// 处理从xmlhttprequest返回的结果
	_onRequestCompleted: function(data, status, xhr){
		if (data) {
			// 判断是否是要跳转页面
			var urlRedir = xhr.getResponseHeader("X-DUCHANDLER-REDIR");
			if ((urlRedir != null) && (urlRedir.length > 0)) {
				ControlManager.getInstance()._redirectDocument(urlRedir);
				return;
			}
			this._updateContainer(data);
		}
	},
	// 更新控件div
	_updateContainer: function(content){
	    $("#" + whoids__s).remove(); $("#" + whisod__s).remove(); $("#" + this.get_customStateId()).remove(); $("#" + this.get_ducStateId()).remove();
		var containerPanel = this.get_contentPanel();
		var progressPanel = this.get_progressPanel();
		var script = content.match(gs_reScriptMatchAll);
		script = script || []; //script = script.extend(['<script type="text/javascript">//<![CDATA[\r\n initImagesLazy(); \r\n//]]></script>']);
		content = content.replace(gs_reScriptMatchAll, "");
		if ($.type(this.updateIds) == "array") {
			if (this.updateIds.length > 0) {
				//fix does not exist ids
				for (var i = 0; i < this.updateIds.length; i++){
				    var str = this.updateIds[i]; var elm = $.dom(str);
				    if ($.type(elm) !== "element"){
				        this.updateIds.remove(str);
				    }
				}			
				var exArr = [this.get_customStateId(), this.get_ducStateId()];
				this.updateIds.extend(exArr);
				var div = $.create("div");
				div.innerHTML = content;
				var elemnents = this._parseDivContainer(div, this.updateIds);
				var len = 0;
				for (var i = 0; i < elemnents.length; i++) {
					if (exArr.contains(elemnents[i].original.id, 0)) {
						len += 1;
						if (len == 2) {
							break;
						}
					}
				}
				if (elemnents.length - len !== this.updateIds.length - 2) {
					try{
					    containerPanel.innerHTML = content;		
                        //fix ckeditor bug
					    //for (instance in  CKEDITOR.instances){
                        //    CKEDITOR.remove(CKEDITOR.instances[instance]);
                        //    CKEDITOR.replace(instance);
					    //}			    
					}catch(ex){var dd1 = $.create("div"); dd1.innerHTML = content; containerPanel.innerHTML = ""; containerPanel.appendChild(dd1);}
				} else {
					for (var i = 0; i < elemnents.length; i++) {
						var obj = elemnents[i];
						if (obj.original && obj.target) {
							obj.original.parentNode.replaceChild(obj.target, obj.original);
						}
					}
				}
				div.innerHTML = "";
				document.body.appendChild(div);
				div.parentNode.removeChild(div);
			}
		} else if ($.type(this.updateIds) == "string" && this.updateIds.toLowerCase() == "all") {
			containerPanel.innerHTML = content;
		} else {
		    containerPanel.innerHTML = content;
		}
		this.updateIds = null;
		if (this.m_nDisplayTimerId) {
			window.clearTimeout(this.m_nDisplayTimerId);
		}
		//隐藏进度条
		if (progressPanel) {
			hideLoading(progressPanel);
		}
		//如果是对话框，则置中
		var rid = window[this.get_clientId()+"_pop"];
		if (rid) {
			rid.middle();
		}
		var hDUCInstance = ControlManager.getInstance();
		if (script) {
			var j = 0;
			this.m_aDeferredScript = new Array();
			for (var i = 0; i < script.length; i++) {
				var currentScriptSrc = script[i].match(gs_reScriptMatchSrc);
				if (currentScriptSrc) {
					if (!hDUCInstance.containsScriptSrc(currentScriptSrc[1])) {
						appendJS(currentScriptSrc[1]);
						hDUCInstance.appendScriptSrc(currentScriptSrc[1]);
					}
				} else {
					var currentScript = script[i].match(gs_reScriptMatchOne)[1];
					currentScript = currentScript.replace('<!--', '');
					currentScript = currentScript.replace('// -->', '');
					this.m_aDeferredScript[j++] = currentScript;
				}
			}
			if (j > 0) {
				window.setTimeout($.bindObject(this, this._scriptExecutor), 10);
			}
		}
	},
	_parseDivContainer: function(hContainer, updateIds){
		var elemnents = new Array();
		for (var i = 0; i < hContainer.childNodes.length; i++) {
			var elm = hContainer.childNodes[i];
			if (elm.nodeType == 1) {
				if (elm.id && updateIds.contains(elm.id, 0)) {
					elemnents.push({original: $.dom(elm.id), target: elm});
				}
				elemnents = elemnents.extend(this._parseDivContainer(hContainer.childNodes[i], updateIds));
			}
		}
		return elemnents;
	},	
	// 执行从XHR/XSS返回的客户端脚本
	_scriptExecutor: function(){
		if (this.m_aDeferredScript) {
			for (var i = 0; i < this.m_aDeferredScript.length; i++) {
				try {
					if (window.execScript) {
						window.execScript(this.m_aDeferredScript[i]);
					} else {
						window.eval(this.m_aDeferredScript[i]);
					}
				} catch (err) {
				}
			}
		}
		delete this.m_aDeferredScript;
	},
	//创建input元素
	_buildInput: function(hDocument, name, value){
		var hInput = hDocument.createElement("input");
		hInput.setAttribute("type", "hidden");
		hInput.setAttribute("name", name);
		hInput.setAttribute("value", value);
		return hInput;
	},
	cleanup: function(){}
});
ControlManager.getInstance = function(){
	return ControlManager.gs_hInstance || new ControlManager();
};
ControlManager.LengthComparator = function(a, b){
	return b.get_uniqueId().length - a.get_uniqueId().length;
};
function $rc(name, pt){
	if (pt.lastIndexOf(".") < 0){
	   pt = pt + ".du.ashx"; 
	}
	ControlManager.getInstance().registerDynamicControl(name, pt);
} 
/*-------------------------------------End DynamicUserControl---------------------------------------*/
var UploadingStatus = {};
UploadingStatus.Initializing = 0;
UploadingStatus.Uploading = 1;
UploadingStatus.HasError = 2;
UploadingStatus.UserCancel = 3;
UploadingStatus.Complete = 4;
var UploadingProgress = function() {this.initialize.apply(this, arguments);};
$.extend(UploadingProgress.prototype, {
	initialize: function(uploadId, options){
		this.setOptions(options);
		this.uploadId = uploadId;
		this.progressBarDiv = $.dom(this.options.ProgressBar); var spns = this.progressBarDiv.getElementsByTagName("span");
		this.percentageDiv = spns.length > 0 ? spns[0] : this.progressBarDiv;
		this.status = UploadingStatus.Initializing;
		this.progressBarDiv.style.width = this.percentageDiv.innerHTML = "0%";
	},
	setOptions: function(options){
		this.options = {//默认值
			timeout: 1000, //时间间隔，毫秒为单位
			ProgressBar: null
		};
		$.extend(this.options, options || {});
	},
	show: function(){
		this.status = UploadingStatus.Uploading;
		window.setTimeout($.bindObject(this, this.uploadingProgress), 1);
	},
	complete: function(){
		this.status = UploadingStatus.Complete;
		this.progressBarDiv["style"]["width"] = "100%"; this.percentageDiv.innerHTML = "100%";
	},	
	cancel: function(){
	    this.status = UploadingStatus.UserCancel;
	    $.get("uploadingprogress.ashx", {t: "cancel", v: this.uploadId})
	},
	uploadingProgress : function(){
		var oThis = this;
	    $.get("uploadingprogress.ashx" + "?" +$.time(), {t: "uploading", v: oThis.uploadId}, function(data){
			if (data){
				var obj = eval('(' + data + ')');
			    if (obj.status === UploadingStatus.Complete) {oThis.complete();return;}
				if (obj.status === UploadingStatus.Uploading) {
					var readedLength = obj.readedLength;
					var totalLength = obj.totalLength;
					var percentage = parseInt(readedLength * 100 / totalLength);
					oThis.progressBarDiv.style.width = oThis.percentageDiv.innerHTML = percentage + "%";
					if (readedLength <= totalLength && oThis.status === UploadingStatus.Uploading) {
						window.setTimeout($.bindObject(oThis, oThis.uploadingProgress), oThis.options.timeout);
					}
				}
			}
	    });  		
	}
});
HtmlParser = {
	getHtmlElementValues: function(html, tagName, attribute){
		if (!html) return null;
		var list = []; var elems = this.getHtmlElements(html, tagName); if (!elems) return;
		for (var i = 0; i < elems.length; i++) {
			var elem = elems[i];
			var dic = this.parseHtmlTag(elem);
			for (var key in dic) if (key.toLowerCase() === "src") list.push(dic[key]);
		}
		return list;
	},
	getHtmlElements: function(html, tagName){
		if (!html) return null;
		var list = [];
		var reg = new RegExp(String.format("(<{0}[^>]*>)", tagName), 'img');
		return html.match(reg);
	},	
	parseHtmlTag: function(html){
		var dic = new Object();
		var pattern = "([a-zA-Z]+)\s*=\s*[\"']{0,1}\s*([^\"']+)\s*[\"']{0,1}";
		var reg = new RegExp(pattern, 'img');
		var elems = html.match(reg); if (!elems) return;
		for (var i = 0; i < elems.length; i++) {
			var elem = elems[i]; if (!elem) continue;
			var reg1 = new RegExp("^([a-zA-Z]+)\s*=\s*[\"']{0,1}\s*([^\"']+)\s*[\"']{0,1}$", "i");
			var val = elem.match(reg1);
			if (val){
				dic[val[1]] = val[2];
			}			
		}
		return dic;
	}
}
/*                                            Marquee                                     */
var Marquee = function() {this.initialize.apply(this, arguments);};
$.extend(Marquee.prototype, {
	initialize: function(container, options){
        this._container = $(container)[0];//容器对象
		if (!this._container) return;
		this.SetOptions(options);
		this.baseId = this._container.id;
		this.scrollContent = this._container.innerHTML; //存储要滚动的内容
		this._container.innerHTML = ""; //把容器清空
		this._init();
		if (this.options.Auto === true) this.start();
		if (this.options.enableMouseEvent === true){
		    $(this._container).bind("mouseover", $.bindAsEventListener(this, this.stop));
		    $(this._container).bind("mouseout", $.bindAsEventListener(this, this.start));
		}
	},
	//设置默认属性
	SetOptions: function(options){
		this.options = {
			Horizontal: true,//是否水平方向滚动
			Left: true,//是否向左滚动
			Auto: true,//是否自动
			enableMouseEvent: true, //是否启用鼠标事件
			Duration: 50//滑动持续时间
		};
		$.extend(this.options, options || {});
	},
	_init: function(){
	    if (this.options.Horizontal === true){
	        this._initHorizontal();
	    } else {
	        this._initVertical();
	    }
	},
	start: function(){
	    this.timer = setInterval($.bindObject(this, this._move), this.options.Duration);
	},
	stop: function(){
	   if (this.timer) {
           clearInterval(this.timer);
	   }
	},	
	_initHorizontal: function(){
	    var divscroll = $.create("div"); divscroll.id = this.baseId + "_scroll"; divscroll.className = "scroll clearfix"; this._container.appendChild(divscroll);
	    var div1 = $.create("div"); div1.id = this.baseId + "_div1"; div1.className = "_con"; divscroll.appendChild(div1);
	    var div2 = $.create("div"); div2.id = this.baseId + "_div2"; div2.className = "_con"; divscroll.appendChild(div2);
	    div1.innerHTML = div2.innerHTML = this.scrollContent; divscroll.style.width = (div1.offsetWidth*12+100) + "px";
	    this.divscroll = divscroll; this.div1 = div1; this.div2 = div2;
	},
	_initVertical: function(){
	},
	_move: function(){
	    if (this.options.Horizontal === true){
	        this._horizontal();
	    } else {
	        this._vertical();
	    }
	},
	_horizontal: function(){
        if(this.div1.offsetWidth <= this._container.scrollLeft){
            this._container.scrollLeft -= this.div1.offsetWidth;
        } else { this._container.scrollLeft++; }	    
	},
	_vertical: function(){
	}
});
/*                                         End  Marquee                                   */
Shopping = {
    shoppingGoods: "_ShoppingGoodsIds",
    shoppingPostAddress: "_ShoppingPostAddressId",
    shoppingLogistic: "_ShoppingLogisticId",
    shoppingPayment: "_ShoppingPaymentId",
    goodsSplit: "$",
    goodsNumSplit: "|",
    addGoods: function(goodsId, num){
        if (goodsId && goodsId.length >= 16) {
            var obj = this.getGoodsObjects();
            if (!obj) { obj = new Object();}
            if (!obj[goodsId]){
                obj[goodsId] = 0;
            }
            obj[goodsId] = parseInt(obj[goodsId]) + parseInt(num);
            this.serializeGoodsObjects(obj);
            //更新购物车商品数量
            $(".cartgoodscount").html(this.getGoodsCount());
        }
    },
    removeGoods: function(goodsId){
        if (goodsId && goodsId.length >= 16) {
            this.setGoods(goodsId, 0);
        } else {
            removeCookie(App.name() + this.shoppingGoods);
        }
    },
    setGoods: function(goodsId, num){
        if (goodsId && goodsId.length >= 16) {
            var obj = this.getGoodsObjects();
            if (obj && obj[goodsId]){
                obj[goodsId] = num;
                this.serializeGoodsObjects(obj);
            }
        }
    },    
    getGoods: function(){
        return readCookie(App.name() + this.shoppingGoods);
    },
    getGoodsCount: function(){
        var goodsArr = this.getGoodsArray();
        if (goodsArr) return goodsArr.length;
        return 0;
    },
    getGoodsObjects: function(){
        var obj = null; var goodsArr = this.getGoodsArray();
        if (goodsArr != null){
            obj = new Object();
            for (var i = 0; i < goodsArr.length; i++){
                var goodsNum = goodsArr[i].split(this.goodsNumSplit);
                obj[goodsNum[0]] = goodsNum[1];
            }
        }
        return obj;
    },
    getGoodsArray: function(){
        var goods = readCookie(App.name() + this.shoppingGoods);
        if (goods){
            var arr = goods.split(this.goodsSplit);
            return arr;
        }  
        return null;
    },
    serializeGoodsObjects: function(obj){
        var goods = "";
        if (obj != null){
            for (var name in obj){
                var num = obj[name];
                if (parseInt(num) > 0){
                    goods = String.format("{0}{1}{2}{3}{4}", goods, name, this.goodsNumSplit, num, this.goodsSplit);
                }
            }
            if (goods.length > 1){
                goods = goods.substring(0, goods.length - this.goodsSplit.length);
            }
            addCookie(App.name() + this.shoppingGoods, goods, 365);
        } else {
            removeCookie(App.name() + this.shoppingGoods);
        }
    },
    setPostAddress: function(postAddressId){
        addCookie(App.name() + this.shoppingPostAddress, postAddressId, 365);
    },
    setPayment: function(paymentId){
        addCookie(App.name() + this.shoppingPayment, paymentId, 365);
    },     
    setLogistic: function(logisticId){
        addCookie(App.name() + this.shoppingLogistic, logisticId, 365);
    },
    getPostAddress: function(){
        return readCookie(App.name() + this.shoppingPostAddress);
    },
    getLogistic: function(){
        return readCookie(App.name() + this.shoppingLogistic);
    },
    getPayment: function(){
        return readCookie(App.name() + this.shoppingPayment);
    }
}
/*  DateSelector */
var DateSelector = function() {this.initialize.apply(this, arguments);};
$.extend(DateSelector.prototype, {
	initialize: function(oYear, oMonth, oDay, options){
		this.SelYear = $.dom(oYear);//年选择对象
		this.SelMonth = $.dom(oMonth);//月选择对象
		this.SelDay = $.dom(oDay);//日选择对象
		this.SetOptions(options);
		
		var dt = new Date(), iMonth = parseInt(this.options.Month), iDay = parseInt(this.options.Day), iMinYear = parseInt(this.options.MinYear), iMaxYear = parseInt(this.options.MaxYear);
		
		this.Year = parseInt(this.options.Year) || dt.getFullYear();
		this.Month = 1 <= iMonth && iMonth <= 12 ? iMonth : dt.getMonth() + 1;
		this.Day = iDay > 0 ? iDay : dt.getDate();
		this.MinYear = iMinYear && iMinYear < this.Year ? iMinYear : this.Year;
		this.MaxYear = iMaxYear && iMaxYear > this.Year ? iMaxYear : this.Year;
		this.onChange = this.options.onChange;
		
		//年设置
		this.SetSelect(this.SelYear, this.MinYear, this.MaxYear - this.MinYear + 1, this.Year - this.MinYear);
		//月设置
		this.SetSelect(this.SelMonth, 1, 12, this.Month - 1);
		//日设置
		this.SetDay();
		
		var oThis = this;
		//日期改变事件
        $(this.SelYear).bind("change", function(){
			oThis.Year = oThis.SelYear.value;
			oThis.SetDay();
			oThis.onChange();
		});
        $(this.SelMonth).bind("change", function(){
			oThis.Month = oThis.SelMonth.value;
			oThis.SetDay();
			oThis.onChange();
		});
        $(this.SelDay).bind("change", function(){
			oThis.Day = oThis.SelDay.value;
			oThis.onChange();
		});
	},
	//设置默认属性
	SetOptions: function(options){
		this.options = {//默认值
			Year: 0,//年
			Month: 0,//月
			Day: 0,//日
			MinYear: 0,//最小年份
			MaxYear: 0,//最大年份
			onChange: function(){
			}//日期改变时执行
		};
		$.extend(this.options, options || {});
	},
	//日设置
	SetDay: function(){
		//取得月份天数
		var daysInMonth = new Date(this.Year, this.Month, 0).getDate();
		if (this.Day > daysInMonth) {
			this.Day = daysInMonth;
		};
		this.SetSelect(this.SelDay, 1, daysInMonth, this.Day - 1);
	},
	//select设置
	SetSelect: function(oSelect, iStart, iLength, iIndex){
		//添加option
		oSelect.options.length = iLength;
		for (var i = 0; i < iLength; i++) {
			oSelect.options[i].text = oSelect.options[i].value = iStart + i;
		}
		//设置选中项
		oSelect.selectedIndex = iIndex;
	}
});
/* end DateSelector */
