﻿// JavaScript Document
function id(name){return document.getElementById(name);};
function tag(name,elem){return (elem||document).getElementsByName(name);}
function GetRootPath(){return document.domain=="localhost" ? "/web" : ""};
//-------------------------------------------------------------------------------------
var ua      = navigator.userAgent;
var opera	= /opera [56789]|opera\/[56789]/i.test(ua);
var isIE    = !opera && /msie [56789]/i.test(ua);       // preventing opera to be identified as ie
var isMoz 	= !opera && /mozilla\/[56789]/i.test(ua);   // preventing opera to be identified as mz
var IEVerNum = getIEVerNum();
function getIEVerNum (){
	if (isIE){
		var ver = navigator.appVersion;
		var reg = /MSIE (\d+).(\d+)/;
        var m = ver.match(reg);
        return m[1];
	} else {
		return 99;
	};
};
//-------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------
/*测字符串实际长度*/
String.prototype.Tlength = function(){var arr=this.match(/[^\x00-\xff]/ig);return this.length+(arr==null?0:arr.length);};
/*字符串左取*/
String.prototype.left = function(num,mode){if(!/\d+/.test(num))return(this);var str = this.substr(0,num);if(!mode) return str;var n = str.Tlength() - str.length;num = num - parseInt(n/2);return this.substr(0,num);};
/*字符串右取*/
String.prototype.right = function(num,mode){if(!/\d+/.test(num))return(this);var str = this.substr(this.length-num);if(!mode) return str;var n = str.Tlength() - str.length;num = num - parseInt(n/2);return this.substr(this.length-num);};
/*字符串去除两端空字符*/
String.prototype.Trim = function(){return this.replace(/(^\s*)|(\s*$)/g,"");};
String.prototype.Ltrim = function(){return this.replace(/(^\s*)/g, "");};
String.prototype.Rtrim = function(){return this.replace(/(\s*$)/g, "");};
/*字符串长度(英:1位,汉:2位)*/
String.prototype.Length = function(){return this.replace(/[^x00-xff]/g,"**").length;};
/*字符串大小写处理*/
String.prototype.Ucase = function(){return this.toUpperCase();};
String.prototype.Lcase = function(){return this.toLowerCase();};
//-------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------
function isArray(obj){return (typeof obj=="object")&&(obj.constructor==Array);};
//-------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------
function prev(elem){
	do {
		elem = elem.previousSibling;
	} while(elem&&elem.nodeType!=1);
	return elem;
}
function next(elem){
	do{
		elem = elem.nextSibling;
	} while(elem&&elem.nodeType!=1);
	return elem;
};
function first(elem){
	elem = elem.firstChild;
	return elem&&elem.nodeType!=1 ? next(elem) : elem;
};
function last(elem){
	elem = elem.lastChild;
	return elem&&elem.nodeType!=1 ? prev(elem) : elem;
};
function par(elem,num){
	num = num || 1;
	for(var i=0;i<num;i++) 
		if(elem!=null)
			elem = elem.parentNode;
	return elem;
};


function create(name){
	return document.createElementNS ? 
		document.createElementNS('http://www.w3.org/1999/xhtml',name):
		document.createElement(name);
};

function before(parent,before,elem){
	if(elem==null){
		elem = before;
		before = parent;
		parent = before.parentNode;
	};
	
	var elems = checkElem(elem);
	
	for(vari=elems.length-1;i>=0;i--){
		parent.insertBefore(elems[i],before);
	};
};
function append(parent,elem){
	var elems = checkElem(elem);
	for (var i=0;i<elems.length;i++){
		parent.appendChild(elems[i]);
	};
};
function checkElem(a){
	var r = [];
	if (a.constructor!=Array) a = [a];
	for(var i=0;i<a.length;i++){
		if(a[i].constructor==String){
			var div = create("div");
			div.innerHTML = a[i];
			for(var j=0;j<div.childNodes.length;j++)
				r[r.length] = div.childNodes[j];
		} else if(a[i].length){//If it's an array
			for(var j=0;j<a[i].length;j++)
				r[r.length] = a[i][j];
		} else {
			r[r.length] = a[i];
		};
	};
	return r;
};
//获取一个元素文本内容的通用函数。
function text(e){
	var t="";
	e = e.childNodes || e;
	for (var j=0;j<e.length;j++){
		t += e[j].nodeType!=1? e[j].nodeValue : text(e[j].childNodes);
	};
	return t;
};
//检测元素是否有一个指定的特性
function hasAttribute(elem,name){
	return  elem.getAttribute(name)!=null;
};
//获取和设置元素特性的值
function attr(elem,name,value){
	if(!name||name.constructor!=String) return '';
	name = {'for':'htmlFor','class':'className'}[name]||name;
	if(typeof(value)!='undefined'){
		elem[name] = value;
		if(elem.setAttribute) elem.setAttribute(name,value);
	}else if(value=='')
	    elem.removeAttribute(name);
	return elem[name] || elem.getAttribute(name) || '';
	//return elem[name] || elem.getAttribute(name);
};

//删除一个独立的DOM节点
function remove(elem){
	if(elem) elem.parentNode.removeChild(elem);
};
//删除一个Dom元素中的所有子节点。
function empty(elem){
	while(elem.firstChild)
		remove(elem.firstChild);
};
//===================================================================================
//===================================================================================
//===================================================================================		
function ChkFileExit(strFileUrl){
	var xmlHttp = new xmlRequest();
	xmlHttp.open("GET",strFileUrl,false);
	xmlHttp.send();
	if(xmlHttp.readyState==4){   
		if(xmlHttp.status==200) return true; 
		else if(xmlHttp.status==404) return false;
		else return false;
	};
};
//===================================================================================
//===================================================================================
//===================================================================================
function addEvent(element,type,handler){
	//为每一个事件处理函数赋予一个独立的ID
	if(!handler.$$guid) handler.$$guid=addEvent.guid++;
	//为元素建立一个事件类型的散列表
	if(!element.events) element.events = {};
	//为每对元素/事件建立一个事件处理函数的散列表
	var handlers = element.events[type];
	if(!handlers){
		handlers = element.events[type]={};
		//存储已有的事件处理函数（如果已存在一个）
		if(element["on"+type]){
			handlers[0] = element["on"+type];
		}
	};
	//在散列表中存储该事件处理函数
	handlers[handler.$$guid] = handler;
	//赋予一个全局事件处理函数来处理所有工作
	element["on"+type] = handleEvent;
};
//创建独立ID的计数器
addEvent.guid = 1;

function removeEvent(element,type,handler){
	//从散列表中删除事件处理函数
	if (element.events && element.events[type]){
		delete element.events[type][handler.$$guid];
	};
};

function handleEvent(event){
	var returnValue = true;
	//获取事件对象（IE使用全局的事件对象）
	event = event || fixEvent(window.event);
	//获取时间处理函数山列表的引用
	var handlers = this.events[event.type];
	//依次执行每个事件处理函数
	for(var i in handlers){
		this.$$handleEvent = handlers[i];
		if(this.$$handleEvent(event)===false){
			returnValue = false;
		};
	};
	return returnValue;
};

//增加一些IE事件对象缺乏的方法
function fixEvent(event){
	//增加W3C标准事件方法
	event.preventDefault = fixEvent.preventDefault;
	event.stopPropagation = fixEvent.stopPropagation;
	return event;
};
fixEvent.preventDefault = function(){
	this.returnValue = false;
};
fixEvent.stopPropagation = function(){
	this.cancelBubble = true;
};

//===================================================================================
//======= 实现拖放功能相关程序 ==========================================================
//===================================================================================
//获取指定元素（element）的样式属性（name）
function getStyle(elem,name){
	//如果属性存在于style[]中，那么它已经被设置了。
	if (typeof(elem)=="object"){
		if(elem.style[name])
			return elem.style[name];
		//如果没有，尝试使用IE的方法。
		else if(elem.currentStyle)
			return elem.currentStyle[name];
		//或者W3C的方法，如果存在的话。
		else if(document.defaultView && document.defaultView.getComputedStyle){
			//它使用的是通过'text-align'的样式规则而非'textAlign'
			name = name.replace(/([A-Z])/g,"-$1");
			name = name.toLowerCase();
			
			//获取样式对象并获取属性（存在的话）值
			var s = document.defaultView.getComputedStyle(elem," ");
			return s&&s.getPropertyValue(name);
		} else
			return null;
	} else 
		return null;
}

//两个确定元素相对于整个文档的X和Y位置的辅助函数
function pageX(elem){
	return elem.offsetParent?
		elem.offsetLeft + pageX(elem.offsetParent):
		elem.offsetLeft;
}
function pageY(elem){
	return elem.offsetParent?
		elem.offsetTop+pageY(elem.offsetParent):
		elem.offsetTop;
}

//确定元素相对于父亲的位置的两个函数
function parentX(elem){
	return elem.parentNode == elem.offsetParent?
		elem.offsetLeft :
		pageX(elem)-pageX(elem.parentNode);
}
function parentY(elem){
	return elem.parentNode == elem.offsetParent?
		elem.offsetTop :
		pageY(elem)-pageY(elem.parentNode);
}
//元素的左端和顶端位置
function posX(elem){
	return parseInt(getStyle(elem,"left"));
}
function posY(elem){
	return parseInt(getStyle(elem,"top"));
}
//设置元素的左端和顶端位置
function setX(elem,pos){
	elem.style.left = pos + "px";
}
function setY(elem,pos){
	elem.style.top = pos + "px";
}
//调整元素相对于当前位置的距离的一对函数
function addX(elem,pos){
	setX(posX(elem)+pos);
}
function addY(elem,pos){
	setY(posY(elem)+pos);
}
//获取元素当前的高度和宽度
function getHeight(elem){
	return parseInt(getStyle(elem,"height"));
}
function getWidth(elem){
	return parseInt(getStyle(elem,"width"));
}
//获取元素完整的、可能的高度
function fullHeight(elem){
	getHeight();
	if(getStyle(elem,"display")!="none")
		return elem.offsetHeight||getHeight(elem);
	var old = resetCSS(elem,{
					   diaplay:"",
					   visibility:"hidden",
					   position:"absolute"
					   });
	var h = elem.clientHeight || getHeight(elem);
	restoreCSS(elem,old);
	return h;
}
function fullWidth(elem){
	getWidth();
	if(getStyle(elem,"display")!="none")
		return elem.offsetWidth || getWidth(elem);
	var old = resetCSS(elem,{
					   diaplay:"",
					   visibility:"hidden",
					   position:"absolute"
					   });
	var w = elem.clientWidth || getWidth(elem);
	restoreCSS(elem,old);
	return w;
}
function resetCSS(elem,prop){
	var old = {};
	for(var i in prop){
		old[i] = elem.style[i];
		elem.style[i] = prop[i];
	}
	return old;
}
function restoreCSS(elem,prop){
	for (var i in prop)
		elem.style[i] = prop[i];	
}
//确定浏览器视窗的高度和宽度
function windowHeight(){
	var de = document.documentElement;
	return self.innerHeight||(de && de.clientHeight)||document.body.clientHeight;
}
function windowWidth(){
	var de = document.documentElement;
	return self.innerWidth||(de && de.clientWidth)||document.body.clientWidth;
}
//确定当前页面高度和宽度的两个函数
function pageHeight(){
	return document.body.scrollHeight;
}
function pageWidth(){
	return document.body.scrollWidth;
}
//鼠标位置
function getX(e){
	e = e||window.event;
	return e.pageX || e.clientX+document.body.scrollLeft;
}
function getY(e){
	e = e||window.event;
	return e.pageY || e.clientY+document.body.scrollTop;
}
//获取鼠标相对于元素的位置
function getElementX(e){
	return (e&&e.layerX)||window.event.offsetX;
}
function getElementY(e){
	return (e&&e.layerY)||window.event.offsetY;
}
//元素的可见性
function hide(elem){
	var curDisplay = getStyle(elem,"display");
	if(curDisplay!="none")
		elem.$oldDisplay = curDisplay;
	elem.style.display = "none";
}
function show(elem){
	elem.style.display = elem.$oldDisplay || "";
}
function setOpacity(elem,level){
	if(elem.filters){
		elem.style.filter = "alpha(opacity="+level+")";
	}else{
		elem.style.opacity = level/100;
	};
};
//===========================================================
//===========================================================
//===========================================================
function serialize(a){
	var s = [];//串行化结果的集合
	if (a.constructor==Array){//若传入的参数是数组，假定他们是表单元素的数组。
		for (var i=0;i<a.length;i++)//串行化表单元素
			s.push(a[i].name+"="+encodeURIComponent(a[i].value));
	} else {
		for (var j in a)//串行化键值对
			s.push(j+"="+encodeURIComponent(a[j]));
	};
	return s.join("&");
};
//===========================================================
//===========================================================
//===========================================================
function SetCookie(name,value){
	//检测参数
	if(!name || !value){
		//throw new Error("SetCookie(name,value) 参数必须")
	}
	var argv = arguments;
	var argc = arguments.length;

	var nextyear = new Date();
	nextyear.setFullYear(nextyear.getFullYear() + 1);
	var c = name + "=" + value +";path=/;" +"expires=" + nextyear.toGMTString();
		
	document.cookie = c;
};
function GetCookie(name){
	var arg = name + "=";
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;
	while (i < clen) {
		var j = i + alen;
		if (document.cookie.substring(i, j) == arg){
			return getCookieVal (j); 
		};
		i = document.cookie.indexOf("", i) + 1;
		if (i == 0){
			break;
		};
	};
	return null;
};
function getCookieVal(offset){
	var endstr = document.cookie.indexOf (";", offset);
	if (endstr == -1){
		endstr = document.cookie.length;
	}
	return unescape(document.cookie.substring(offset, endstr));
};

function IsCookie(){
	var now_time = new Date().getTime().toString();
	SetCookie(now_time,now_time);
	if(GetCookie(now_time) == now_time){
		SetCookie(now_time,"");
		return true;
	}
	return false;
};
//===========================================================
function EnterDownToDo(obj,strFunName){
    obj.onkeydown = function(e){
        if(isIE){
            if(getkeyCode(event) == 13){
                eval(strFunName);
		        document.body.focus();
		        return false;
            }
        } else {
            if(getkeyCode(e) == 13){
                eval(strFunName);
		        document.body.focus();
		        return false;
            }
        }
    } 
}
function getkeyCode(e){
    var keynum = "";
    if(isIE) // window.event IE
    {
        keynum = e.keyCode;
    }
    else // Netscape/Firefox/Opera
    {
        keynum = e.which;
    }
    return keynum;
}
//===========================================================
/******************************
* String对象增强JS
*******************************/
/*这符串是否为空*/
String.prototype.IsEmpty = function(){
	if(this.valueOf()=="") return true;
		return false;
};
/*比较两字符串是否相等*/
String.prototype.Compare = function(str){
	return (this.valueOf()==str);
};
/*字符串是否是电话号码格式*/
String.prototype.IsPhone = function(){
	//var re = /^((\(\d{3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}$/;
	var re = /^(\d{6,16}|\d{3,4}-\d{6,8}|\d{3,4}-\d{6,8}-\d{1,4}|\d{6,8}-\d{1,4})$/;
	return re.test( this.valueOf() );
};
/*字符串是否是Email*/
String.prototype.IsEmail = function(){
	var re = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
	return re.test( this.valueOf() );
};
/*从此实例中的指定位置开始删除指定数目的字符*/
String.prototype.Remove = function(startIndex,count){
	val = this.valueOf().substr(startIndex,count);
	return this.valueOf().replace( val,"" );
};
/*验证钱格式*/
String.prototype.isMoney == function(){ 
	var s = this.valueOf();
	if (s=="0.0") return true;
	if (s!="0"){
		var patrn=/(^[0-9]*[1-9][0-9]*\.?[0-9]{0,}$)/; 
		if (!patrn.exec(s)) 
			return false; 
		else
			return true;
	}
	return true;
};
/*檢查日期格式是否正確 yyyy-mm-dd; yyyy-m-d;*/
String.prototype.DateCheck = function(){
	var value = this.valueOf();
	var pattern=/^([\d]{4})-([\d]{1,2})-([\d]{1,2})$/;
	if(value.length >= 6 && value.length <= 10){
		var ymd = value;
		var strY = "";
		var y = 0;
		var m = 0;
		var d = 0;
		if(!pattern.test(value)) return false;		//时间格式不对
		strY = RegExp.$1;
		y = eval(RegExp.$1);			
		m = eval(RegExp.$2);
		d = eval(RegExp.$3);
		if((y == 0 || m > 12 || m == 0 || d == 0) || 
				((m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12) && d > 31) || 
				((m==4 || m==6 || m==9 || m==11) && d > 30) || 
				(m==2 && y%4==0 && d > 29) || (m==2 && y%4 != 0 && d > 28)){
			return false;
		};
		if (y>=100 && y<1000){
			return false;
		};
	}
	else if (value.length > 0){
		return false;	
	};
	return true;
};
/* 检查手机号 */
String.prototype.IsMobile = function(){ 	
	var patrn=/^((\(\d{3}\))|(\d{3}\-))?(13|15)\d{9}$/;	
	if (!patrn.exec(this.valueOf())) 
		return false; 
	else
		return true; 	 
};

/* 检验邮政编码 */
String.prototype.IsPostCode = function(){ 
	var patrn=/(^[0-9]{6,6}$)/; 
	if (!patrn.exec(this.valueOf()))
		return false 
	return true; 
};
/* 中文限制,全中文true */
String.prototype.IsChinese = function(){
	var str = this.valueOf();
	str = str.replace(" ", "");
	for (i=0;i<str.length;i++){ 
		if (str.charCodeAt(i)< 255){
			return false;
		}
	};
	return true;
};

/*	中文限制	*/
String.prototype.IsCode = function(){
	var str = this.valueOf();
	str = str.replace(" ", "");
	for (i=0;i<str.length;i++){ 
		if (str.charCodeAt(i) >= 255){
			return false;
			break;
		};
	};
	return true;
};

/* Url校验 */
String.prototype.IsURL = function(){
	var url = this.valueOf();
	var urlPattern = /^(?:(?:ftp|https?):\/\/)?(?:[a-z0-9](?:[-a-z0-9]*[a-z0-9])?\.)+(?:com|edu|biz|org|gov|int|info|mil|net|name|museum|coop|aero|[a-z][a-z])\b(?:\d+)?(?:\/[^;"'<>()\[\]{}\s\x7f-\xff]*(?:[.,?]+[^;"'<>()\[\]{}\s\x7f-\xff]+)*)?/;
	return urlPattern.test(url.toLowerCase());
};

function IsNumeric(fData){
    if (IsEmpty(fData))
        return true
    if (isNaN(fData))
        return false
    return true    
}
function IsEmpty(fData){
    return ((fData==null) || (fData.length==0))
}
