/****************************************************************************************
				作者：萧 枫
				QQ:77182997
				MSN:xiaofengnet@hotmail.com
				Email:xiaofengnet@163.com
				网址：http://www.xiaofengnet.cn
				请保留版权　　谢谢合作
				版本:V 1.4.1
/*****************************************************************************************
*/
/*========================================================================================
	 框架核心内容--------【基础工具类】
  ========================================================================================
*/
if(!XiaoFeng || typeof XiaoFeng == "undefined")var XiaoFeng = new Object();
/*========================================================================================
【为Object类添加静态方法】
创建于[2008-08-13]
为Object类添加静态方法：extend
*/
Object.extend = function(destination,source){
	for(property in source){
		destination[property] = source[property];
	} 
	return destination;
}
//通过Object类为每个对象添加方法extend
Object.prototype.extend = function(object) { 
	return Object.extend.apply(this, [this, object]); 
}
/*===========================================================================================
【给数组添加属性】
[创建于2008-06-03]
给数组添加Remove属性
移除指定下标元素
*/
Array.prototype.remove = function(N){
    if(isNaN(N)||N>this.length){return false;}
    for(var i=0,n=0;i<this.length;i++){
        if(i!=N)
        	this[n++] = this[i];
    }
    this.length -= 1;
}
Array.prototype.add = function(v){
	for(var i=0;i<this.length;i++){
		if(this[i].toString() == v.toString()) break;	
	}
	this.push(v);
}
/*===========================================================================================
【给字符串添加属性】
[创建于2008-06-03]
给字符串添加Length属性
*/
String.prototype.len = function(){return this.replace(/[^\x00-\xff]/g,"ya").length;}
String.prototype.Length = function(){
    var M = 0;
	for(var i=0;i<this.length;i++){
		if(this.charCodeAt(i) > 255){
			M = M + 2;
		}else{
			M = M + 1;
		}
	}
	return M;
}
/*===========================================================================================
【给字符串添加属性】
[创建于2008-10-09]
获取字符串左边指定个数的字符[汉字为两个字节]
*/
String.prototype.LeftStr = function(M){	
	if(this.Length() > M){	
		var str = "";
		for(var i=0;i<this.length;i++){
			if(this.charCodeAt(i) > 255){
				M -= 2;
			}else{
				M -= 1;	
			}
			str += this.substring(i,i+1);
			if(M <= 0)break;
		}
		return str + "...";
	}else{
		return this;	
	}	
}
/*===========================================================================================
【删除字符串前后的空格】
[创建于2008-10-09]
删除字符串前后的空格
*/
String.prototype.Trim = function(){return this.replace(/(^\s*)|(\s*$)/g,"");}
/*========================================================================================
【获取一个指定ID的结点】
创建于[2005-05-03]
document.getElementById(Id)获取一个指定ID的结点,是这个方法的快捷方式和扩展可以指定多个参
数返回一个对象数组。参数也不一定是ID也可以是对象本身的引用，例如$("id")等价于$($("id"))
*/
var $ = function(){
	var elements = new Array();
	for(var i=0;i<arguments.length;i++){
		var element = arguments[i];
		if (typeof(element) == "string") element = document.getElementById?document.getElementById(element):document.all.element
		if (arguments.length==1) return element;
		elements.push(element);
	}	
	return elements;
}
/*========================================================================================
【获取一个指定ID的结点】
创建于[2005-05-03]
document.getElementsByName(id)获取一个指定ID的名称集,是这个方法的快捷方式和扩展可以指定多个参数返回一个对象数组
*/
var _$ = function(){
	var elements = new Array();
	for(var i=0;i<arguments.length;i++){
		var element=arguments[i];
		if (typeof(element) == "string") element = document.getElementsByName?document.getElementsByName(element):document.all.element;
		if (arguments.length==1) return element;
		elements.push(element);		
	}
	return elements;
}
/*========================================================================================
【获取一个指定TagName的结点】
创建于[2005-05-03]
document.getElementsByTagName(TagName)获取一个指定TagName的名称集,是这个方法的快捷方式和扩展可以指定多个参数返回一个对象数组
*/
var $T = function(){	
	var elements = new Array();
	for(var i=0;i<arguments.length;i++){
		var element = arguments[i];
		if (typeof(element) == "string") element = document.getElementsByTagName(element);
		if (arguments.length==1) return element;
		elements.push(element);		
	}
	return elements;
}
/*========================================================================================
【创建一个元素】
创建于[2008-06-18]
*/
var $C = function(){return document.createElement(arguments[0]);}
/*===========================================================================================
【转换数组】
创建于[2008-08-13]
*/
var $A = function(a){return a?Array.apply(null,a):new Array;}
/*========================================================================================
【为Object类添加事件及卸载事件及鼠标坐标】
创建于[2008-10-09]
为Object类添加事件及卸载事件及鼠标坐标：
*/
Object.extend(Object,{
	addEvent : function (a, b, c, d){
	//添加函数
		if(a.attachEvent) a.attachEvent(b[0], c);
		else a.addEventListener(b[1] || b[0].replace(/^on/, ""), c, d || false);
		return c;
	},	
	delEvent : function (a, b, c, d){
		if(a.detachEvent) a.detachEvent(b[0], c);
		else a.removeEventListener(b[1] || b[0].replace(/^on/, ""), c, d || false);
		return c;
	},	
	Event : function () {
	//获取Event
		return window.event ? window.event : (function (o){
			do{
				o = o.caller;
			} while (o && !/^\[object[ A-Za-z]*Event\]$/.test(o.arguments[0]));
			return o.arguments[0];
		})(this.reEvent);
	},
	Scroll : function(){
		return {
			Left : document.body.scrollLeft==0?document.documentElement.scrollLeft:document.body.scrollLeft,
			Top :document.body.scrollTop==0?document.documentElement.scrollTop:document.body.scrollTop
		};	
	}
});
/*========================================================================================
/*
【鼠标的相对坐标】
[创建于2008-10-06]
*/
var Event = function(){
	var e = Object.Event();
	var o = {x : 0,y : 0};
	switch(arguments[0]){
		case 0 :/*鼠标的相对位置*/
			o.x = e.clientX;
			o.y = e.clientY;
			break;
		case 1 :/*鼠标的绝对位置*/
			o.x = e.clientX + Object.Scroll().Left;
			o.y = e.clientY + Object.Scroll().Top;
			break;
		default:/*鼠标的相对位置*/
			o.x = e.clientX;
			o.y = e.clientY;
			break;
	}
	return o;
}
/*========================================================================================
【Ajax创建类】
创建于[2008-05-30]
更新于[2008-10-09]
var ajax = new AjaxRequest();
ajax.Url = "test.asp";
ajax.JsStr="alert(\"提取中...\");";
ajax.CallBack = function(xmlhttp){
//操作代码
	var XmlDoc=xmlhttp.responseText;	
	var XmlDoc=xmlhttp.responseXML;
	var Roots=XmlDoc.documentElement.childNodes;
	alert(Roots[0].childNodes[2].text);	
}
ajax.Send();
*/
function AjaxRequest(){
	var xmlhttp = false;
	var self = this;
	this.Method = typeof(arguments[0])=="undefined"?"post":typeof(arguments[0].Method)=="undefined"?"post":arguments[0].Method;
	this.Url = typeof(arguments[0])=="undefined"?"":typeof(arguments[0].Url)=="undefined"?"":arguments[0].Url;
	this.Content = typeof(arguments[0])=="undefined"?"":typeof(arguments[0].Query)=="undefined"?"":arguments[0].Query;  
	this.Async = true;
	this.JsStr = typeof(arguments[0])=="undefined"?"":typeof(arguments[0].JsStr)=="undefined"?"":arguments[0].JsStr;
	this.CallBack = function(obj){return;}	  
	this.Create = function(){//创建XMLHttpRequest 
		if(typeof(window.XMLHttpRequest)!="undefined"){
			xmlhttp = new XMLHttpRequest();
			if(xmlhttp.overrideMimeType)xmlhttp.overrideMimeType("text/html");
		}else if(window.ActiveXObject){
			var Versions = ["MSXML2.XMLHttp.5.0","MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp","Microsoft.XMLHttp"];
			for(var i=0;i<Versions.length;i++){
				try{
					var XmlHttp = new ActiveXObject(Versions[i]);
					xmlhttp = XmlHttp;
				}catch(Error){
					if(i == (Versions.length-1)){
						alert("出错:创建服务器对象实例失败.");//浏览器问题//抛出Error.description
					}
				}
			}
		}
		return xmlhttp;
	}
	this.Send = function(){
		if(this.Url == ""){alert("处理地址不能为空!");}
		xmlhttp = this.Create();
		xmlhttp.open(this.Method,this.Url,true);
		if(this.Method == "post")xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		xmlhttp.onreadystatechange = function(){
			if(xmlhttp.readyState == 4){
				if(xmlhttp.status == 200){
					self.CallBack(xmlhttp);
				}else{
					alert("出错:错误代码["+xmlhttp.status+"]");	
					clipboardData.setData("text",self.Url+"?"+self.Content);
				}
			}else{
				if(self.JsStr!="") eval(self.JsStr);	
			}
		}
		if(this.Method.toLowerCase() == "post")
			xmlhttp.send(this.Content);
		else
			xmlhttp.send(null);		
	}
}

/*========================================================================================
【创建XML对象类】
[创建于2008-04-09]
var Http_Request=false;
*/
function CreateAjax(){
	var Ajax_Obj;
	if(typeof(window.XMLHttpRequest) != "undefined"){
		Ajax_Obj = new XMLHttpRequest();
		if(Ajax_Obj.overrideMimeType){
			Ajax_Obj.overrideMimeType("text/html");
		}
	}else if(window.ActiveXObject){
		var Versions = ["MSXML2.XMLHttp.5.0","MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp","Microsoft.XMLHttp"];
		for(var i=0;i<Versions.length;i++){
			try{
				var XmlHttp=new ActiveXObject(Versions[i]);
				Ajax_Obj = XmlHttp;
			}catch(Error){
				if(i == (Versions.length-1)){
					alert("出错:创建服务器对象实例失败[浏览器问题].");//浏览器问题//抛出Error.description
				}
			}
		}
	}
	return Ajax_Obj;
}
/*========================================================================================
【加载XML操作类】
[创建于2008-06-28]
*/
function LoadXml(Path){
	var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
	xmlhttp.Open("GET",Path,false);  
	try{
		xmlhttp.Send();
		var result = xmlhttp.status; 
		if(result == 200){
			var XmlDoc = new ActiveXObject("Microsoft.XMLDOM");
			XmlDoc.async = false;
			XmlDoc.load(Path);
			Roots = XmlDoc.documentElement.childNodes;
			return Roots;
		}else{
			xmlhttp = null; 
		}
	}catch(e){
		return e.description;
	}
}
/*========================================================================================
【Cookies操作类】
[创建于2008-04-09]
*/
var Cookies = {
	GetVal:function(offset){//获得Cookie解码后的值
		var endstr = document.cookie.indexOf(";", offset);
		if (endstr == -1)
			endstr = document.cookie.length;
		return unescape(document.cookie.substring(offset, endstr));
	},
	Add:function(name,value,hours){//设定Cookie值  
		var expire = "";
		if(hours != null){
			expire = new Date((new Date()).getTime() + hours * 3600000);
			expire = "; expires=" + expire.toGMTString();
		}
		document.cookie = name + "=" + escape(value) + expire;
	},
	Del:function(name){//删除Cookie
		var exp = new Date();
		exp.setTime(exp.getTime() - 1);
		var cval = GetCookie (name);
		document.cookie = name + "=" + cval + "; expires="+ exp.toGMTString();
	},
	Get:function(name){//获得Cookie的原始值 
		var cookieValue = "";
		var search = name + "=";
		if(document.cookie.length > 0){ 
			offset = document.cookie.indexOf(search);
			if (offset != -1){ 
				offset += search.length;
				end = document.cookie.indexOf(";", offset);
				if (end == -1) end = document.cookie.length;
				cookieValue = unescape(document.cookie.substring(offset, end))
			}
		}
		return cookieValue;
	},
	get:function(name){/*获取Cookie的原始值 注 在这里主要是对应C#里面的Cookies数组*/
		var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
		var r = Cookies.Get("HTGL").match(reg);
		if (r!=null) return unescape(r[2]); 
		return null;	
	}
}
/*//======================================================================================
//【获得对象实际坐标】
[创建于2008-04-09]
*/
function GetDim(e){   
	var rd = {x:0,y:0};   
	do{
		rd.x += e.offsetLeft;
		rd.y += e.offsetTop;
		e = e.offsetParent;
	}while(e)
	return rd;
}
/*//======================================================================================
//【获得对象实际四角坐标】
[创建于2008-10-09]
*/
function GetInfo(o){//取得坐标
	var to = new Object();
	to.left = to.right=to.top=to.bottom=0;
	var twidth  = o.offsetWidth;
	var theight = o.offsetHeight;
	do{		
		to.left += o.offsetLeft;
		to.top += o.offsetTop;		
		o = o.offsetParent;			
	}while(o != document.body)
	to.right = to.left + twidth;

	to.bottom = to.top + theight;
	return to;
}
/*//======================================================================================
//【获得对象与指定字符匹配的对象】
[创建于2008-10-09]
*/
function GetObj(o,s){
	f = false;
	while(o != document.body){		
		if(o.id.toLowerCase().indexOf(s) != -1){
			f = true;			
			break;
		}
		o = o.offsetParent;
	}
	return f;
}
/*========================================================================================
【获得参数值】
[创建于2008-04-09]
*/
function GetQuery(name){
	var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
	var r = window.location.search.substr(1).match(reg);
	if (r!=null) return unescape(r[2]); 
	return null;
}
/*========================================================================================
【拖动函数】
创建于[2008-04-09]
*/
function Drag(o){
	var x,y;
	x = GetDim(o).x;
	y = GetDim(o).y;
	var deltaX = event.clientX - x;
	var deltaY=event.clientY - y;
	var drag = true;
	o.style.filter = "Alpha(Opacity=60)";
	o.onmousemove = function(){			
		if(drag){
			o.style.left=(event.clientX - deltaX) + "px";
			o.style.top=(event.clientY - deltaY) + "px";
			o.setCapture();
		}
	}
	o.onmouseup=function(){
		o.style.filter = "Alpha(Opacity=100)";
		drag = false;
		o.releaseCapture();
	}	
}
/*========================================================================================
【字符转换类】
创建于[2008-04-09]
更新于[2008-06-02]
*/
var StrToHtml = {
	sTh:function(s){
		s = s.replace(/&lt;/gi,"<");
		s = s.replace(/&gt;/gi,">");
		s = s.replace(/&quot;/gi,"\"");
		s = s.replace(/&amp;/gi,"&");
		s = s.replace(/&nbsp;/gi," ");
		return s;
	},
	hTs:function(s){
		s = s.replace(/</gi,"&lt;");
		s = s.replace(/>/gi,"&gt;");
		s = s.replace(/\\/gi,"&quot;");
		s = s.replace(/&/gi,"&amp;");
		s = s.replace(/ /gi,"&nbsp;");
		return s;
	},
	bTy:function(s){
		s = s.replace(/\[/gi,"<");
		s = s.replace(/\]/gi,">");
		return s;
	},
	yTb:function(s){
		s = s.replace(/</gi,"[");
		s = s.replace(/&lt;/gi,"[");
		s = s.replace(/>/gi,"]");
		s = s.replace(/&gt;/gi,"]");
		s = s.replace(/&nbsp;/gi," ");
		return s;
	}
}
/*===========================================================================================
【获得窗体的宽高】
主要是一些系统方法
*/
XiaoFeng.System = {
	Event : function(){
		var e = Object.Event();
		var o = {x : 0,y : 0};
		switch(arguments[0]){
			case 0 :/*鼠标的相对位置*/
				o.x = e.clientX;
				o.y = e.clientY;
				break;
			case 1 :/*鼠标的绝对位置*/
				o.x = e.clientX + Object.Scroll().Left;
				o.y = e.clientY + Object.Scroll().Top;
				break;
			default:/*鼠标的相对位置*/
				o.x = e.clientX;
				o.y = e.clientY;
				break;
		}
		return o;
	},
	Size : function(){//【获得窗体的宽高】
		var s = {x : 0,y : 0};		
		var theWidth,theHeight;
		if(window.innerWidth){ 
			s.x = window.innerWidth;
			s.y = window.innerHeight;
		}else if(document.compatMode=='CSS1Compat'){ 			
			if(arguments[0] == 1){
				s.x = document.body.clientWidth;
				s.y = document.body.clientHeight;				
			}else if(arguments[0] == 2){
				s.x = document.documentElement.clientWidth + document.documentElement.scrollLeft;
				s.y = document.documentElement.clientHeight + document.documentElement.scrollTop;
			}else{
				s.x = document.documentElement.clientWidth;
				s.y = document.documentElement.clientHeight;
			}			
		}else if(document.body){			
			if(arguments[0] == 1){
				s.x = document.body.scrollWidth;
				s.y = document.body.scrollHeight
			}else if(arguments[0] == 2){
				s.x = document.body.clientWidth + document.body.scrollLeft;
				s.y = document.body.clientHeight + document.body.scrollTop;
			}else{
				s.x = document.body.clientWidth;
				s.y = document.body.clientHeight;
			}			
		}		
		return s;
	},
	getRnd : function(){return Math.floor(Math.random()*1000000);}
}
/*===========================================================================================
【系统错误信息集】
*/
XiaoFeng.Error = {	
	Code:function(CodeNum){
		var _code = "";
		switch(CodeNum){
			case "errc10001":
				_code = "参数为空";
				break;
			case "errc10002":
				_code = "参数不合法"
				break;
			case "errc10003":
				_code = "参数失效";
				break;
			case "errc10004":
				_code = "参数出错";
				break;
			case "errc20001":
				_code = "权限不够";
				break;
			case "errc20002":
				_code = "权限非法";
				break;
			case "errc30001":
				_code = "登录超时或未登录";
				break;
			case "errc30002":
				_code = "非法登录";
				break;
			case "errc40001":
				_code = "操作有误";				
				break;
			case "errc40002":
				_code = "非法操作";				
				break;
			case "errc50001":
				_code = "找不到相关页面";
				break;
			case "errc50002":
				_code = "内部错误";
				break;

			default:
				_code = "错误不详";
				break;
		}
		return _code;
	},
	ErrInfo:function(){
		var Err = [];		
	}	
}