var _C = 
{
	//得到检测内容
	getCheckStr:function(obj)
	{
		var strValue 	= obj || '';
		if(typeof obj != "object")
		{
			if(document.getElementById(obj))
			{
				obj = document.getElementById(obj);
				strValue = obj.vlaue;
			}
			else try{obj = eval(obj);strValue = obj.vlaue;}catch(e){}
		}else strValue = obj.value;
		return strValue;
	},
	//函数作用：判断对象的值是否为空(true: 为空)
	isBlank:function(obj)
	{
		return /^[\s　]*$/.test(this.getCheckStr(obj));
	},
	//函数作用：检索是否含有汉字(true: 不包含; false: 包含)
	checkWord:function(obj,isCheckBool)
	{
		var str = this.getCheckStr(obj);
		if(!isCheckBool && (str == '' || str == null)) return true;
		return /[\u4e00-\u9fa5]/.test();
	},
	//函数作用：检索Email格式是否有效
	checkMail:function(obj,isCheckBool)
	{
		var str = this.getCheckStr(obj);
		if(!isCheckBool && (str == '' || str == null)) return true;
		return /^\s*\w+([-+.]\w+)*@\w+([-.]\w+)*(\.\w+([-.]\w+)*){1,2}\s*$/i.test(str);
	},
	//函数作用：检索密码是否有效(空格以外的所有字符均有效)
	checkPwd:function(obj) 
	{
		return /\s/.test(this.getCheckStr(obj));
	},
	//函数作用：检索电话号码格式是否有效
	checkPhone:function(obj,isCheckBool)
	{
		var str = this.getCheckStr(obj);
		if(!isCheckBool && (str == '' || str == null)) return true;
		var reg = /^([\d\uFF10-\uFF19]{2,5}[-\uFF0D])?[\d\uFF10-\uFF19]{3,5}[-\uFF0D][1-9\uFF11-\uFF19]{1}[\d\uFF10-\uFF19]{5,7}([-\uFF0D][1-9\uFF11-\uFF19]{1}[\d\uFF10-\uFF19]{1,3})?$/;
		var reg2 = /^[\d\uFF10-\uFF19-]{6,12}$/;
		return reg.test(str) || reg2.test(str);
	},
	//函数作用：检索手机号码格式是否有效
	checkMobile:function(obj,isCheckBool)
	{
		var str = this.getCheckStr(obj);
		if(!isCheckBool && (str == '' || str == null)) return true;
		return /^0?1[3|5|8]\d{9}$/.test(str);
	},
	//函数作用：检索是否有效的数字
	checkNumber:function(obj,isCheckBool) 
	{
		var str = this.getCheckStr(obj);
		if(!isCheckBool && (str == '' || str == null)) return true;
		return /^\d+$/.test(str);
	},
	//函数作用：检索url地址是否有效
	checkUrl:function(obj,isCheckBool)
	{
		var str = this.getCheckStr(obj);
		if(!isCheckBool && (str == '' || str == null)) return true;
		return /^\s*(\w{3,6}:\/\/)?([\w-]+(\.[\w-]+)+(:\d+)?(\/[\w-.\/\?%&=\u4e00-\u9fa5]*)?)?\s*$/i.test(str);
	},
	//函数作用：检索文件后缀名是否有效
	checkFile:function(obj,suffix,isCheckBool)
	{
		suffix = suffix || 'jpg,jpeg,gif';
		var str = this.getCheckStr(obj);
		if(!isCheckBool && (str == '' || str == null)) return true;
		suffix = new RegExp('\\.'+suffix.replace(/\,/g,'$|\\.')+'$','i');
		return suffix.test(str);
	},
	//函数作用: 				计算用户输入的字符数
	computeChar:function(obj) 
	{ 
		obj = this.getCheckStr(obj);
		return obj.length;
	},
	//函数作用: 				计算用户输入的字节数
	computeBChar:function(obj) 
	{ 
		obj = this.getCheckStr(obj);
		return obj.replace(/[^\x00-\xff]/g,"~^").length;
	},
	defaulAlertStr:{isBlank:'不能为空',checkWord:'不能含有汉字',checkMail:'格式不正确',checkPwd:'不能含有空白字符',checkPhone:'格式不正确',checkMobile:'格式不正确',checkNumber:'只能为数字',checkUrl:'格式不正确',computeChar:['不能小于{X}个字符','不能大于{X}个字符','请输入{X}至{X}个实际字符'],computeBChar:['不能小于{X}个字节','不能大于{X}个字节','请输入{X}至{X}个字节'],checkFile:'只能上传"jpg,jpeg,gif"格式的文件'},
	//检测表单提交项 isA为真时为<SPAN>输出
	checkForm:function(oForm,isA)
	{
		if(typeof oForm != 'object') oForm = document.getElementById(oForm);
		for (var i = 0; i < oForm.elements.length;i++) {
			if(isA)
			{
				if(!this.checkInput(oForm.elements[i],isA) && !first_err) var first_err = oForm.elements[i];
			}
			else{if(!this.checkInput(oForm.elements[i])) return false;}
		}
		if(isA && first_err){if(!first_err.disabled) first_err.focus();return false;}
		return true;
	},
	//检测输入框内空：checkItem为检测属性,cnName为中文名称 如:<input name="XXX" cnName="名称" checkItem="isBlank:true">
	//checkItem使用格式为：
	//	1.检测方法名称:检测返回值 如 isBlank:true 或 isBlank:false 此时检测提示信息为由_C.defaulAlertStr定义提示信息
	//	2.检测方法名称:'[TF]|提示信息' 如 检测方法返回值为真时为 isBlank:'T|提示信息' 为假时 isBlank:'F|提示信息'
	//	3.检测字节或字符数时 [computeChar|computeBChar]:'>20<50|提示信息' 其中 >20 为检测是否大于20,<50 为检测是否小于50，如果检测值为假则显示提示信息（没有则显示默认提示信息）
	//	4.检测文件后缀名时 如 checkFile:[true|false] 或 checkFile:'[T|F]|{jpg,gif}提示信息' [T|F]没有时默认为T 检测值为假则显示提示信息（没有则显示默认提示信息）
	checkInput:function(oInput,isA)
	{
		if(typeof oInput != 'object') oInput = document.getElementById(oInput);
		var strCheck = oInput.getAttribute('checkItem');
		if(strCheck != null && strCheck != '')
		{
			var cnName = oInput.getAttribute('cnName')?oInput.getAttribute('cnName'):'';
			if(isA)
			{
				var err_id = oInput.name || oInput.id;
				err_id += '_'+(typeof isA == 'string'?isA:'error');
				showCheckInfo();
			}
			try{eval('var oCheck = {'+strCheck.replace(/^\,+|\,+$/g,'')+'}');}catch(e){alert(oInput.name+'.checkItem 格式有误!');return false;}
			for(var i in oCheck)
			{
				var j = eval('oCheck.'+i);
				var e_str = this.defaulAlertStr[i];
				var checkFunc = new Function('o',' return _C.'+i+'(o);');
				if(i == 'computeChar' || i == 'computeBChar')
				{
					var a = j.match(/([><]\d+)/g);
					if(a.length > 1)
					{
						if(a[0].substr(0,1) == '>') var minj = parseInt(a[0].substr(1)); else var maxj = parseInt(a[0].substr(1));
						if(a[1].substr(0,1) == '>') var minj = parseInt(a[1].substr(1)); else var maxj = parseInt(a[1].substr(1));
					}
					else
					{
						if(a[0].substr(0,1) == '>') var minj = parseInt(a[0].substr(1)); else var maxj = parseInt(a[0].substr(1));
					}
					if(minj && maxj)
					{
						if(checkFunc(oInput) < minj || checkFunc(oInput) > maxj)
						{
							if(/^([><]\d+){1,2}\|/.test(j)) e_str = j.replace(/^([><]\d+){1,2}\|/,'');
							else e_str = cnName+e_str[2].replace('{X}',minj).replace('{X}',maxj);
							if(isA) showCheckInfo(); else return showCheckInfo();
						}
					}
					else if(minj)
					{
						if(checkFunc(oInput) < minj)
						{
							if(/^([><]\d+){1,2}\|/.test(j)) e_str = j.replace(/^([><]\d+){1,2}\|/,'');
							else e_str = cnName+e_str[0].replace('{X}',minj);
							if(isA) showCheckInfo(); else return showCheckInfo();
						}
					}
					else if(maxj)
					{
						if(checkFunc(oInput) > maxj)
						{
							if(/^([><]\d+){1,2}\|/.test(j)) e_str = j.replace(/^([><]\d+){1,2}\|/,'');
							else e_str = cnName+e_str[1].replace('{X}',maxj);
							if(isA) showCheckInfo(); else return showCheckInfo();
						}
					}
				}
				else
				{
					if(typeof j == 'string')
					{
						e_str = j.replace(/^[TF]\|/,'');
						j = !(/^F\|/.test(j));
						if(i == 'checkFile' && /^\{[\w\,]+\}/.test(e_str))
						{
							var suffix = e_str.replace(/^\{([\w\,]+)\}.*$/,'$1');
							var c_e_str = e_str.replace('{'+suffix+'}','');
							if(c_e_str != '' && c_e_str != null) e_str = c_e_str;
							else if(suffix != '' && suffix != null)
							{
								e_str = cnName+this.defaulAlertStr[i];
								e_str = e_str.replace('"jpg,jpeg,gif"','"'+suffix+'"');
								var checkFunc = new Function('o',' return _C.'+i+'(o,\''+suffix+'\');');
							}
						}
					}else e_str = cnName+e_str;
					if(checkFunc(oInput) == j) if(isA) showCheckInfo(); else return showCheckInfo();
				}
			}
			if(isA) return document.getElementById(err_id).innerHTML == '';
		}
		function showCheckInfo()
		{
			if(isA)
			{
				if(document.getElementById(err_id)) var obj = document.getElementById(err_id);
				else
				{
					var obj = document.createElement('SPAN');
					obj.id = err_id;
					if(oInput.nextSibling) oInput.parentNode.insertBefore(obj,oInput.nextSibling);
					else oInput.parentNode.appendChild(obj);
				}
				if(e_str)
				{
					obj.className = 'FORM_ERROR';
					obj.innerHTML += e_str+' ';
				}
				else
				{
					obj.className = '';
					obj.innerHTML = '';
				}
			}
			else
			{
				alert(e_str);
				if(!oInput.disabled) oInput.focus();
				return false;
			}
		}
		return true;
	}
}


//Prototype
var Prototype = {
  Version: '1.4.0',
  ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',
  emptyFunction: function() {},
  K: function(x) {return x}
}
var Class = {
  create: function() {
    return function() {
      this.initialize.apply(this, arguments);
    }
  }
}
var Abstract = new Object();
Object.extend = function(destination, source) {
  for (property in source) {
    destination[property] = source[property];
  }
  return destination;
}
Object.inspect = function(object) {//ضȷ/wusg1
  try {
    if (object == undefined) return 'undefined';
    if (object == null) return 'null';
    return object.inspect ? object.inspect() : object.toString();
  } catch (e) {
    if (e instanceof RangeError) return '...';
    throw e;
  }
}
Function.prototype.bind = function() {
  var __method = this, args = $A(arguments), object = args.shift();
  return function() {
    return __method.apply(object, args.concat($A(arguments)));
  }
}
Function.prototype.bindAsEventListener = function(object) {//Ϊ¼һЩָĲ
  var __method = this;
  return function(event) {
    return __method.call(object, event || window.event);
  }
}
Object.extend(Number.prototype, {
  toColorPart: function() {
    var digits = this.toString(16);
    if (this < 16) return '0' + digits;
    return digits;
  },
  succ: function() {
    return this + 1;
  },
  times: function(iterator) {
    $R(0, this, true).each(iterator);
    return this;
  }
});
var Try = {
  these: function() {
    var returnValue;
    for (var i = 0; i < arguments.length; i++) {
      var lambda = arguments[i];
      try {
        returnValue = lambda();
        break;
      } catch (e) {}
    }
    return returnValue;
  }
}

/*--------------------------------------------------------------------------*/
function $() {
  var elements = new Array();
  for (var i = 0; i < arguments.length; i++) {
    var element = arguments[i];
    if (typeof element == 'string')
      element = document.getElementById(element);
    if (arguments.length == 1)
    {
      return element;

    }
    elements.push(element);
  }
  return elements;
}
Object.extend(String.prototype, {
  stripTags: function() {
    return this.replace(/<\/?[^>]+>/gi, '');
  },
  stripScripts: function() {
    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
  },
  extractScripts: function() {
    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
    return (this.match(matchAll) || []).map(function(scriptTag) {
      return (scriptTag.match(matchOne) || ['', ''])[1];
    });
  },
  evalScripts: function() {
    return this.extractScripts().map(eval);
  },
  escapeHTML: function() {
    var div = document.createElement('div');
    var text = document.createTextNode(this);
    div.appendChild(text);
    return div.innerHTML;
  },
  unescapeHTML: function() {
    var div = document.createElement('div');
    div.innerHTML = this.stripTags();
    return div.childNodes[0] ? div.childNodes[0].nodeValue : '';
  },
  toQueryParams: function() {
    var pairs = this.match(/^\??(.*)$/)[1].split('&');
    return pairs.inject({}, function(params, pairString) {
      var pair = pairString.split('=');
      params[pair[0]] = pair[1];
      return params;
    });
  },
  toArray: function() {
    return this.split('');
  },
  camelize: function() {
    var oStringList = this.split('-');
    if (oStringList.length == 1) return oStringList[0];
    var camelizedString = this.indexOf('-') == 0
      ? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1)
      : oStringList[0];
    for (var i = 1, len = oStringList.length; i < len; i++) {
      var s = oStringList[i];
      camelizedString += s.charAt(0).toUpperCase() + s.substring(1);
    }
    return camelizedString;
  },
  inspect: function() {
    return "'" + this.replace('\\', '\\\\').replace("'", '\\\'') + "'";
  },

  ismail: function()
  {
		return /^\w+([-+._]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(this);
  },

  trim: function()
  {
		return this.replace(/(^\s*)|(\s*$)/g,"");
  }
});

var Enumerable = {            ////options.find( function(employee){return (employee.value == emp_id);})
  each: function(iterator) { //this.each(function(value, index) {  if (iterator(value, index)) { result = value; throw $break; }})
    var index = 0;
    try {
      this._each(function(value) {
        try {
          iterator(value, index++);
        } catch (e) {
          if (e != $continue) throw e;
        }
      });
    } catch (e) {
      if (e != $break) throw e;
    }
  },
 _each: function(iterator) {
    for (var i = 0; i < this.length; i++)
      iterator(this[i]);
  },
  all: function(iterator) {
    var result = true;
    this.each(function(value, index) {
      result = result && !!(iterator || Prototype.K)(value, index);
      if (!result) throw $break;
    });
    return result;
  },
  any: function(iterator) {
    var result = true;
    this.each(function(value, index) {
      if (result = !!(iterator || Prototype.K)(value, index))
        throw $break;
    });
    return result;
  },
  collect: function(iterator) {
    var results = [];
    this.each(function(value, index) {
      results.push(iterator(value, index));
    });
    return results;
  },
  detect: function (iterator) {//options.find( function(employee){return (employee.value == emp_id);})
    var result;
    this.each(function(value, index) {
      if (iterator(value, index)) {
        result = value;
        throw $break;
      }
    });
    return result;
  },
  findAll: function(iterator) {
    var results = [];
    this.each(function(value, index) {
      if (iterator(value, index))
        results.push(value);
    });
    return results;
  },
  grep: function(pattern, iterator) {
    var results = [];
    this.each(function(value, index) {
      var stringValue = value.toString();
      if (stringValue.match(pattern))
        results.push((iterator || Prototype.K)(value, index));
    })
    return results;
  },
  include: function(object) {
    var found = false;
    this.each(function(value) {
      if (value == object) {
        found = true;
        throw $break;
      }
    });
    return found;
  },
  inject: function(memo, iterator) {
    this.each(function(value, index) {
      memo = iterator(memo, value, index);
    });
    return memo;
  },
  invoke: function(method) {
    var args = $A(arguments).slice(1);
    return this.collect(function(value) {
      return value[method].apply(value, args);
    });
  },
  max: function(iterator) {
    var result;
    this.each(function(value, index) {
      value = (iterator || Prototype.K)(value, index);
      if (value >= (result || value))
        result = value;
    });
    return result;
  },
  min: function(iterator) {
    var result;
    this.each(function(value, index) {
      value = (iterator || Prototype.K)(value, index);
      if (value <= (result || value))
        result = value;
    });
    return result;
  },
  partition: function(iterator) {
    var trues = [], falses = [];
    this.each(function(value, index) {
      ((iterator || Prototype.K)(value, index) ?
        trues : falses).push(value);
    });
    return [trues, falses];
  },
  pluck: function(property) {
    var results = [];
    this.each(function(value, index) {
      results.push(value[property]);
    });
    return results;
  },
  reject: function(iterator) {
    var results = [];
    this.each(function(value, index) {
      if (!iterator(value, index))
        results.push(value);
    });
    return results;
  },
  sortBy: function(iterator) {
    return this.collect(function(value, index) {
      return {value: value, criteria: iterator(value, index)};
    }).sort(function(left, right) {
      var a = left.criteria, b = right.criteria;
      return a < b ? -1 : a > b ? 1 : 0;//ֵ,ڵС
    }).pluck('value');
  },
  toArray: function() {
    return this.collect(Prototype.K);
  },
  zip: function() {
    var iterator = Prototype.K, args = $A(arguments);
    if (typeof args.last() == 'function')
      iterator = args.pop();
    var collections = [this].concat(args).map($A);
    return this.map(function(value, index) {
      iterator(value = collections.pluck(index));
      return value;
    });
  },
  inspect: function() {
    return '#<Enumerable:' + this.toArray().inspect() + '>';
  }
}
Object.extend(Enumerable, {
  map:     Enumerable.collect,
  find:    Enumerable.detect,
  select:  Enumerable.findAll,
  member:  Enumerable.include,
  entries: Enumerable.toArray
});
var $A = Array.from = function(iterable) {
  if (!iterable) return [];
  if (iterable.toArray) {
    return iterable.toArray();
  } else {
    var results = [];
    for (var i = 0; i < iterable.length; i++)
      results.push(iterable[i]);
    return results;
  }
}
Object.extend(Array.prototype, Enumerable);
Array.prototype._reverse = Array.prototype.reverse;
Object.extend(Array.prototype, {
  _each: function(iterator) {
    for (var i = 0; i < this.length; i++)
      iterator(this[i]);
  },
  clear: function() {
    this.length = 0;
    return this;
  },
  first: function() {
    return this[0];
  },
  last: function() {
    return this[this.length - 1];
  },
  compact: function() {
    return this.select(function(value) {
      return value != undefined || value != null;
    });
  },
  flatten: function() {
    return this.inject([], function(array, value) {
      return array.concat(value.constructor == Array ?
        value.flatten() : [value]);
    });
  },
  without: function() {
    var values = $A(arguments);
    return this.select(function(value) {
      return !values.include(value);
    });
  },
  indexOf: function(object) {
    for (var i = 0; i < this.length; i++)
      if (this[i] == object) return i;
    return -1;
  },
  reverse: function(inline) {
    return (inline !== false ? this : this.toArray())._reverse();
  },
  shift: function() {
    var result = this[0];
    for (var i = 0; i < this.length - 1; i++)
      this[i] = this[i + 1];
    this.length--;
    return result;
  },
  inspect: function() {
    return '[' + this.map(Object.inspect).join(', ') + ']';
  },

	removeByIndex: function(x){
    if( isNaN(x) || x > this.length )  return false;
      for( var i=0,n=0; i<this.length; i++ )   if( i!= x ) this[n++]=this[i];
      this.length-=1;
  },
   removeByValue: function(x)
   {
      for ( var i = 0 ; i < this.length ; i++ )  if (this[i]==x) return this.removeByIndex(i)
   }
});

var Ajax = {
  getTransport: function() {
    return Try.these(
      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
      function() {return new ActiveXObject('Microsoft.XMLHTTP')},
      function() {return new XMLHttpRequest()}
    ) || false;
  },
  activeRequestCount: 0
}
Ajax.Responders = {
  responders: [],
  _each: function(iterator) {
    this.responders._each(iterator);
  },
  register: function(responderToAdd) {
    if (!this.include(responderToAdd))
      this.responders.push(responderToAdd);
  },
  unregister: function(responderToRemove) {
    this.responders = this.responders.without(responderToRemove);
  },
  dispatch: function(callback, request, transport, json) {
    this.each(function(responder) {
      if (responder[callback] && typeof responder[callback] == 'function') {
        try {
          responder[callback].apply(responder, [request, transport, json]);
        } catch (e) {}
      }
    });
  }
};
Object.extend(Ajax.Responders, Enumerable);
Ajax.Responders.register({
  onCreate: function() {
    Ajax.activeRequestCount++;
  },
  onComplete: function() {
    Ajax.activeRequestCount--;
  }
});
Ajax.Base = function() {};
Ajax.Base.prototype = {
  setOptions: function(options) {
    this.options = {
      method:       'post',
      asynchronous: true,
      parameters:   ''
    }
    Object.extend(this.options, options || {});
  },
  responseIsSuccess: function() {
    return this.transport.status == undefined
        || this.transport.status == 0
        || (this.transport.status >= 200 && this.transport.status < 300);
  },
  responseIsFailure: function() {
    return !this.responseIsSuccess();
  }
}
Ajax.Request = Class.create();
Ajax.Request.Events =
  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
  initialize: function(url, options) {
   // url=url+"&yyrnd="+Math.random()
    this.transport = Ajax.getTransport();
    this.setOptions(options);
    this.request(url);
	this.url=url
	this.startTime=new Date()
  },
  request: function(url) {
    var parameters = this.options.parameters || '';
    if (parameters.length > 0) parameters += '&_=';
    try {
      this.url = url;
      if (this.options.method == 'get' && parameters.length > 0)
        this.url += (this.url.match(/\?/) ? '&' : '?') + parameters;
      Ajax.Responders.dispatch('onCreate', this, this.transport);
      this.transport.open(this.options.method, this.url,
        this.options.asynchronous);
      if (this.options.asynchronous) {
        this.transport.onreadystatechange = this.onStateChange.bind(this);
        setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10);
      }
      this.setRequestHeaders();
      var body = this.options.postBody ? this.options.postBody : parameters;
      this.transport.send(this.options.method == 'post' ? body : null);
    } catch (e) {
      this.dispatchException(e);
    }
  },
  setRequestHeaders: function() {
    var requestHeaders =
      ['X-Requested-With', 'XMLHttpRequest',
       'X-Prototype-Version', Prototype.Version];
    if (this.options.method == 'post') {
      requestHeaders.push('Content-type',
        'application/x-www-form-urlencoded');
      /* Force "Connection: close" for Mozilla browsers to work around
       * a bug where XMLHttpReqeuest sends an incorrect Content-length
       * header. See Mozilla Bugzilla #246651.
       */
      if (this.transport.overrideMimeType)
        requestHeaders.push('Connection', 'close');
    }
    if (this.options.requestHeaders)
      requestHeaders.push.apply(requestHeaders, this.options.requestHeaders);
    for (var i = 0; i < requestHeaders.length; i += 2)
      this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]);
  },
  onStateChange: function() {
    var readyState = this.transport.readyState;
    if (readyState != 1)
      this.respondToReadyState(this.transport.readyState);
  },
  header: function(name) {
    try {
      return this.transport.getResponseHeader(name);
    } catch (e) {}
  },
  evalJSON: function() {
    try {
      return eval(this.header('X-JSON'));
    } catch (e) {}
  },
  evalResponse: function() {
    try {
      return eval(this.transport.responseText);
    } catch (e) {
      this.dispatchException(e);
    }
  },
  respondToReadyState: function(readyState) {
    var event = Ajax.Request.Events[readyState];
    var transport = this.transport, json = this.evalJSON();
    if (event == 'Complete') {
      try {
        (this.options['on' + this.transport.status]
         || this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')]
         || Prototype.emptyFunction)(transport,this.url,this.startTime,new Date(),json);
      } catch (e) {
        this.dispatchException(e);
      }
      if ((this.header('Content-type') || '').match(/^text\/javascript/i))
        this.evalResponse();
    }
    try {
      (this.options['on' + event] || Prototype.emptyFunction)(transport, json);
      Ajax.Responders.dispatch('on' + event, this, transport, json);
    } catch (e) {
      this.dispatchException(e);
    }
    /* Avoid memory leak in MSIE: clean up the oncomplete event handler */
    if (event == 'Complete')
      this.transport.onreadystatechange = Prototype.emptyFunction;
  },
  dispatchException: function(exception) {
    (this.options.onException || Prototype.emptyFunction)(this, exception);
    Ajax.Responders.dispatch('onException', this, exception);
  }
});
Ajax.Updater = Class.create();
Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {
  initialize: function(container, url, options) {
    this.containers = {
      success: container.success ? $(container.success) : $(container),
      failure: container.failure ? $(container.failure) :
        (container.success ? null : $(container))
    }

    this.transport = Ajax.getTransport();
    this.setOptions(options);
    var onComplete = this.options.onComplete || Prototype.emptyFunction;
    this.options.onComplete = (function(transport, object) {
      this.updateContent();
      onComplete(transport, object);
    }).bind(this);
    this.request(url);
  },
  updateContent: function() {
    var receiver = this.responseIsSuccess() ?
      this.containers.success : this.containers.failure;
    var response = this.transport.responseText;
    if (!this.options.evalScripts)
      response = response.stripScripts();
    if (receiver) {
      if (this.options.insertion) {
        new this.options.insertion(receiver, response);
      } else {
        Element.update(receiver, response);
      }
    }
    if (this.responseIsSuccess()) {
      if (this.onComplete)
        setTimeout(this.onComplete.bind(this), 10);
    }
  }
});
Ajax.PeriodicalUpdater = Class.create();
Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {
  initialize: function(container, url, options) {
    this.setOptions(options);
    this.onComplete = this.options.onComplete;
    this.frequency = (this.options.frequency || 2);
    this.decay = (this.options.decay || 1);
    this.updater = {};
    this.container = container;
    this.url = url;
    this.start();
  },
  start: function() {
    this.options.onComplete = this.updateComplete.bind(this);
    this.onTimerEvent();
  },
  stop: function() {
    this.updater.onComplete = undefined;
    clearTimeout(this.timer);
    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
  },
  updateComplete: function(request) {
    if (this.options.decay) {
      this.decay = (request.responseText == this.lastText ?
        this.decay * this.options.decay : 1);
      this.lastText = request.responseText;
    }
    this.timer = setTimeout(this.onTimerEvent.bind(this),
      this.decay * this.frequency * 1000);
  },
  onTimerEvent: function() {
    this.updater = new Ajax.Updater(this.container, this.url, this.options);
  }
});
document.getElementsByClassName = function(className, parentElement) {
  var children = ($(parentElement) || document.body).getElementsByTagName('*');
  return $A(children).inject([], function(elements, child) {
    if (child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
      elements.push(child);
    return elements;
  });
}
/*--------------------------------------------------------------------------*/
if (!window.Element) {
  var Element = new Object();
}
Object.extend(Element, {
  visible: function(element) {
    return $(element).style.display != 'none';
  },
  toggle: function() {
    for (var i = 0; i < arguments.length; i++) {
      var element = $(arguments[i]);
      Element[Element.visible(element) ? 'hide' : 'show'](element);
    }
  },
  hide: function() {
    for (var i = 0; i < arguments.length; i++) {
      var element = $(arguments[i]);
      element.style.display = 'none';
    }
  },
  show: function() {
    for (var i = 0; i < arguments.length; i++) {
      var element = $(arguments[i]);
      element.style.display = '';
    }
  },
  remove: function(element) {
    element = $(element);
    element.parentNode.removeChild(element);
  },
  update: function(element, html) {
    $(element).innerHTML = html.stripScripts();
    setTimeout(function() {html.evalScripts()}, 10);
  },
  getHeight: function(element) {
    element = $(element);
    return element.offsetHeight;
  },
  classNames: function(element) {
    return new Element.ClassNames(element);
  },
  hasClassName: function(element, className) {
    if (!(element = $(element))) return;
    return Element.classNames(element).include(className);
  },
  addClassName: function(element, className) {
    if (!(element = $(element))) return;
    return Element.classNames(element).add(className);
  },
  removeClassName: function(element, className) {
    if (!(element = $(element))) return;
    return Element.classNames(element).remove(className);
  },
  // removes whitespace-only text node children
  cleanWhitespace: function(element) {
    element = $(element);
    for (var i = 0; i < element.childNodes.length; i++) {
      var node = element.childNodes[i];
      if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
        Element.remove(node);
    }
  },
  empty: function(element) {
    return $(element).innerHTML.match(/^\s*$/);
  },
  scrollTo: function(element) {
    element = $(element);
    var x = element.x ? element.x : element.offsetLeft,
        y = element.y ? element.y : element.offsetTop;
    window.scrollTo(x, y);
  },
  getStyle: function(element, style) {
    element = $(element);
    var value = element.style[style.camelize()];
    if (!value) {
      if (document.defaultView && document.defaultView.getComputedStyle) {
        var css = document.defaultView.getComputedStyle(element, null);
        value = css ? css.getPropertyValue(style) : null;
      } else if (element.currentStyle) {
        value = element.currentStyle[style.camelize()];
      }
    }
    if (window.opera && ['left', 'top', 'right', 'bottom'].include(style))
      if (Element.getStyle(element, 'position') == 'static') value = 'auto';
    return value == 'auto' ? null : value;
  },
  setStyle: function(element, style) {
    element = $(element);
    for (name in style)
      element.style[name.camelize()] = style[name];
  },
  getDimensions: function(element) {
    element = $(element);
    if (Element.getStyle(element, 'display') != 'none')
      return {width: element.offsetWidth, height: element.offsetHeight};
    // All *Width and *Height properties give 0 on elements with display none,
    // so enable the element temporarily
    var els = element.style;
    var originalVisibility = els.visibility;
    var originalPosition = els.position;
    els.visibility = 'hidden';
    els.position = 'absolute';
    els.display = '';
    var originalWidth = element.clientWidth;
    var originalHeight = element.clientHeight;
    els.display = 'none';
    els.position = originalPosition;
    els.visibility = originalVisibility;
    return {width: originalWidth, height: originalHeight};
  },
  makePositioned: function(element) {
    element = $(element);
    var pos = Element.getStyle(element, 'position');
    if (pos == 'static' || !pos) {
      element._madePositioned = true;
      element.style.position = 'relative';
      // Opera returns the offset relative to the positioning context, when an
      // element is position relative but top and left have not been defined
      if (window.opera) {
        element.style.top = 0;
        element.style.left = 0;
      }
    }
  },
  undoPositioned: function(element) {
    element = $(element);
    if (element._madePositioned) {
      element._madePositioned = undefined;
      element.style.position =
        element.style.top =
        element.style.left =
        element.style.bottom =
        element.style.right = '';
    }
  },
  makeClipping: function(element) {
    element = $(element);
    if (element._overflow) return;
    element._overflow = element.style.overflow;
    if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')
      element.style.overflow = 'hidden';
  },
  undoClipping: function(element) {
    element = $(element);
    if (element._overflow) return;
    element.style.overflow = element._overflow;
    element._overflow = undefined;
  }
});
var Toggle = new Object();
Toggle.display = Element.toggle;
/*--------------------------------------------------------------------------*/
Abstract.Insertion = function(adjacency) {
  this.adjacency = adjacency;
}
Abstract.Insertion.prototype = {
  initialize: function(element, content) {
    this.element = $(element);
    this.content = content.stripScripts();
    if (this.adjacency && this.element.insertAdjacentHTML) {
      try {
        this.element.insertAdjacentHTML(this.adjacency, this.content);
      } catch (e) {
        if (this.element.tagName.toLowerCase() == 'tbody') {
          this.insertContent(this.contentFromAnonymousTable());
        } else {
          throw e;
        }
      }
    } else {
      this.range = this.element.ownerDocument.createRange();
      if (this.initializeRange) this.initializeRange();
      this.insertContent([this.range.createContextualFragment(this.content)]);
    }
    setTimeout(function() {content.evalScripts()}, 10);
  },
  contentFromAnonymousTable: function() {
    var div = document.createElement('div');
    div.innerHTML = '<table><tbody>' + this.content + '</tbody></table>';
    return $A(div.childNodes[0].childNodes[0].childNodes);
  }
}
var Insertion = new Object();
Insertion.Before = Class.create();
Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {
  initializeRange: function() {
    this.range.setStartBefore(this.element);
  },
  insertContent: function(fragments) {
    fragments.each((function(fragment) {
      this.element.parentNode.insertBefore(fragment, this.element);
    }).bind(this));
  }
});


/*--------------------------------------------------------------------------*/
var Form = {
  serialize: function(form) {
    var elements = Form.getElements($(form));
    var queryComponents = new Array();
    for (var i = 0; i < elements.length; i++) {

	  var queryComponent = Form.Element.serialize(elements[i]);
      if (queryComponent)
        queryComponents.push(queryComponent);
    }
    return queryComponents.join('&');
  },
  getElements: function(form) {
    form = $(form);
    var elements = new Array();
    for (tagName in Form.Element.Serializers) {
      var tagElements = form.getElementsByTagName(tagName);
      for (var j = 0; j < tagElements.length; j++)
        elements.push(tagElements[j]);
    }
    return elements;
  },
  getInputs: function(form, typeName, name) {
    form = $(form);
    var inputs = form.getElementsByTagName('input');
    if (!typeName && !name)
      return inputs;
    var matchingInputs = new Array();
    for (var i = 0; i < inputs.length; i++) {
      var input = inputs[i];
      if ((typeName && input.type != typeName) ||
          (name && input.name != name))
        continue;
      matchingInputs.push(input);
    }
    return matchingInputs;
  },
  disable: function(form) {
    var elements = Form.getElements(form);
    for (var i = 0; i < elements.length; i++) {
      var element = elements[i];
      element.blur();
      element.disabled = 'true';
    }
  },
  enable: function(form) {
    var elements = Form.getElements(form);
    for (var i = 0; i < elements.length; i++) {
      var element = elements[i];
      element.disabled = '';
    }
  },
  findFirstElement: function(form) {
    return Form.getElements(form).find(function(element) {
      return element.type != 'hidden' && !element.disabled &&
        ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
    });
  },
  focusFirstElement: function(form) {
    Field.activate(Form.findFirstElement(form));
  },
  reset: function(form) {
    $(form).reset();
  }
}
Form.Element = {
  serialize: function(element) {
    element = $(element);
    var method = element.tagName.toLowerCase();
    var parameter = Form.Element.Serializers[method](element);
    if (parameter) {
      var key = encodeURIComponent(parameter[0]);
      if (key.length == 0) return;
      if (parameter[1].constructor != Array)
        parameter[1] = [parameter[1]];
      return parameter[1].map(function(value) {
        return key + '=' + encodeURIComponent(value);
      }).join('&');
    }
  },
  getValue: function(element) {
    element = $(element);
    var method = element.tagName.toLowerCase();
    var parameter = Form.Element.Serializers[method](element);
    if (parameter)
      return parameter[1];
  }

}
Form.Element.Serializers = {
  input: function(element) {
    switch (element.type.toLowerCase()) {
      case 'submit':
      case 'hidden':
      case 'password':
      case 'text':
        return Form.Element.Serializers.textarea(element);
      case 'checkbox':
      case 'radio':
        return Form.Element.Serializers.inputSelector(element);
    }
    return false;
  },
  inputSelector: function(element) {
    if (element.checked)
      return [element.name, element.value];
  },
  textarea: function(element) {
    return [element.name, element.value];
  },
  select: function(element) {
    return Form.Element.Serializers[element.type == 'select-one' ?
      'selectOne' : 'selectMany'](element);
  },
  selectOne: function(element) {
    var value = '', opt, index = element.selectedIndex;
    if (index >= 0) {
      opt = element.options[index];
      value = opt.value;
      if (!value && !('value' in opt))
        value = opt.text;
    }
    return [element.name, value];
  },
  selectMany: function(element) {
    var value = new Array();
    for (var i = 0; i < element.length; i++) {
      var opt = element.options[i];
      if (opt.selected) {
        var optValue = opt.value;
        if (!optValue && !('value' in opt))
          optValue = opt.text;
        value.push(optValue);
      }
    }
    return [element.name, value];
  }
}
/*--------------------------------------------------------------------------*/
var $F = Form.Element.getValue;
/*--------------------------------------------------------------------------*/
Abstract.EventObserver = function() {}
Abstract.EventObserver.prototype = {
  initialize: function(element, callback) {
    this.element  = $(element);
    this.callback = callback;
    this.lastValue = this.getValue();
    if (this.element.tagName.toLowerCase() == 'form')
      this.registerFormCallbacks();
    else
      this.registerCallback(this.element);
  },
  onElementEvent: function() {
    var value = this.getValue();
    if (this.lastValue != value) {
      this.callback(this.element, value);
      this.lastValue = value;
    }
  },
  registerFormCallbacks: function() {
    var elements = Form.getElements(this.element);
    for (var i = 0; i < elements.length; i++)
      this.registerCallback(elements[i]);
  },
  registerCallback: function(element) {
    if (element.type) {
      switch (element.type.toLowerCase()) {
        case 'checkbox':
        case 'radio':
          Event.observe(element, 'click', this.onElementEvent.bind(this));
          break;
        case 'password':
        case 'text':
        case 'textarea':
        case 'select-one':
        case 'select-multiple':
          Event.observe(element, 'change', this.onElementEvent.bind(this));
          break;
      }
    }
  }
}
Form.Element.EventObserver = Class.create();
Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
  getValue: function() {
    return Form.Element.getValue(this.element);
  }
});
Form.EventObserver = Class.create();
Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
  getValue: function() {
    return Form.serialize(this.element);
  }
});
if (!window.Event) {
  var Event = new Object();
}

var G = new Object();
G =
{
	GetDefaultItem: function(ItemObj,ItemValue)
	{
		if(typeof ItemObj != "object") ItemObj = $(ItemObj);
		for(i=0;i<ItemObj.options.length;i++)
		{
			if(ItemObj.options[i].value==ItemValue)
			{
				ItemObj.options[i].selected=true
				break
			}
		}
	},
	ajaxLinks:function(objId,url,pars,met,asyn,success)
	{
		url = url || '/index.php';
		met = met || 'get';
		if(asyn == null) asyn = true;
		var myAjax	= new Ajax.Updater(objId, url, {method: met, parameters: pars,evalScripts: true,asynchronous:asyn,onSuccess:success});
	},

     EventUtil: {
        $ADE: function(oTarget,sEventType,fnHandler){
           Event.observe(oTarget,sEventType,fnHandler,false);

        },
        $RME: function(oTarget,sEventType,fnHandler){
               Event.stopObserving(oTarget,sEventType,fnHandler,false)
        },
        getEvent: function(){
            if(window.event){
                return this.FormatEvent(window.event);//IE¼ʽ¼
            }else{
                return G.EventUtil.getEvent.caller.arguments[0];
            }
        }
     },

	show:function(obj,flag)
	{
		if(typeof obj != "object") obj = document.getElementById(obj);
		var reBool = false;
		switch(flag)
		{
			case 1:	obj.style.display = '';obj.style.visibility = 'visible';reBool=true;break;
			case 2:	obj.style.display = 'none';obj.style.visibility = 'hidden';break;
			default:if(obj.style.display == 'none')
					 {
					 	obj.style.display = '';obj.style.visibility = 'visible';reBool=true;
					 }
					 else
					 {
						obj.style.display = 'none';obj.style.visibility = 'hidden';
					 }
					 break;
		}
		return reBool;
	},
	
	showLayer:function()
	{
		if($('checklogin').value == 0)
		{
			SC.show('blogin',680,520);
			//赋值登陆也注册框
			$('showLoginLayer').value = 1;
			$('showRegLayer').value = 1;
			return false;
		}
		else
			return true;
	},
	//选中radio的值
	radioForChecked:function(obj,value)
	{
		if(typeof obj != "object") obj = document.getElementsByName(obj);
		for(var i = 0;i<obj.length;i++)
		{
			if(obj[i].value == value)
			{
				obj[i].checked = true;
				break;
			}
		}
	},

	//返回选中radio的值
	radioChecked:function(obj)
	{
		if(typeof obj != "object") obj = document.getElementsByName(obj);
		var reValue = '';
		for(var i = 0;i<obj.length;i++)
		{
			if(obj[i].checked)
			{
				reValue = obj[i].value;
				break;
			}
		}
		return reValue;
	},
	isBlank:function(obj)

	{ 

		var strValue 	= obj;

		if(typeof obj != "object")

			obj 		= document.getElementById(obj);

		if((typeof obj == "object") && obj != null)

			strValue	= obj.value;

		if(window.navigator.userAgent.indexOf("MSIE")>=1)

			var reg 		= /^[\s]*$/ig;

		else

			var reg 		= /^[\s]*$/i;

		if(reg.test(strValue) == true) {

			return true;

		}

		return false;

	},

	getXY:function(event,popWidth,popHeight)
	{
		if (parseInt(navigator.appVersion)>3) {
			if (navigator.appName=="Netscape") {
				var width = window.innerWidth;
				var height = window.innerHeight;
			}
			if (navigator.appName.indexOf("Microsoft")!=-1) {
				var width = document.documentElement.clientWidth;
				var height = document.documentElement.clientHeight;
			}
		}
		var reLeft = 0;
		var reTop = 0;
		if(event.clientX+popWidth>width) reLeft = -popWidth;
		if(event.clientY+popHeight>height) reTop = -popHeight;
		reLeft = event.clientX+this.getScrollXY().left + reLeft;
		reTop = event.clientY+this.getScrollXY().top + reTop;
		if(reLeft <= 0) reLeft = 10;
		if(reTop <= 0) reTop = 10;
		return {left:reLeft,top:reTop};
	},

    getScrollXY:  function() //得到浏览器滚动条坐标

    {

	    var scrollY = 0 , scrollX = 0; 

	    if (typeof window.pageYOffset != 'undefined') { 

		    scrollX = window.pageXOffset;

	   	    scrollY = window.pageYOffset; 

	    } 

	    else if (typeof document.compatMode != 'undefined' && document.compatMode != 'BackCompat') { 

		    scrollX = document.documentElement.scrollLeft;		 

	   	    scrollY = document.documentElement.scrollTop; 

	    } 

	    else if (typeof document.body != 'undefined') { 

		    scrollX = document.body.scrollLeft;

	   	    scrollY = document.body.scrollTop; 

	    } 

	    return {left:scrollX,top:scrollY}

    },

	selectCheckboxYn:function(obj, objName,num)
	{
		var objName	 = objName||'choice[]';
		if(typeof obj != 'object')
			obj		= document.getElementById(obj);
		if(obj == null)
			obj 	= document.form;
		else {
			if(obj.tagName.toLowerCase() != 'form')
				obj	= obj.form;
		}
		//检查是否有选择
		var objElement 		= obj.elements;
		var objLen 			= obj.elements.length;
		var i = 0;
		for (var iCount = 0; iCount < objLen; iCount++) {
			if (objElement[iCount].type == "checkbox" && objElement[iCount].name == objName) {
				if(objElement[iCount].checked) i++;
			}
		}
		if(!isNaN(num) && num > 0)
		{
			if(i < num)
			   return false;
			else
			   return true;
		}
		else
		{
			if(i==0)
			{
				alert('没有选择任何操作数据.');
				return false;
			}
		}
		return true;
	}	
}