String.prototype.trim = function(){
    return this.replace(/(^\s*)|(\s*$)/g, "");
}
//数值转化为货币格式
function addCommas(v)
{
	var   s=v.toString().split("."),r=new   RegExp("(\\d{"+(3-s[0].length%3)%3+"}),","g")   
	s[0]=s[0].match(/\d{1,3}/g).toString().replace(r,",$1");   
	return   s.join(".");   
}

_PColl=new Object();
//中文：至少2个字，不能包含数字、字母、符号
//英文：名和姓中间用/分割，不能包含数字和其他字符
//中文人名验证规则
_PColl.ChineseNamePattern="^[\u4e00-\u9fa5]{2,20}$";
//检验字符串是否是中文
_PColl.ChinesePattern="^[\u4e00-\u9fa5]+$";
//中文生僻字,例如:王she
_PColl.rareChineseName1="^[\u4e00-\u9fa5]+[A-z]{2,}$";
//中文生僻字,例如:she王
_PColl.rareChineseName2="^[A-z]{2,}[\u4e00-\u9fa5]+$";
//中文生僻字,例如:shewang
_PColl.rareChineseName3="^[A-z]{3,}$";
//英文名
_PColl.EnglishName="^[a-z,A-Z ]{2,}\/[a-z,A-Z ]{2,}$";


function ValidValue(pstr,str)
{
	var patrn=new RegExp(pstr);
	return patrn.test(str);
}

var c_validator={
	isEmpty:function(v){
		return v.length==0?false:true;
	},
	isIllegalChar:function(v){//判断是否存在非法字符
		re=new RegExp("[\"\'\<\>\@\#\$\%\^\*\+\=]"); 
		if(re.test(v)){
			return true;
		}
		else{
			return false;
		}
	},
	isEmail:function(v){//判断EMAIL
		RegTest=new RegExp("^(([0-9a-zA-Z]+)|([0-9a-zA-Z]+[_.0-9a-zA-Z-]*[0-9a-zA-Z_]+))@([a-zA-Z0-9-]+[.])+([a-zA-Z]{2,4})$"); 
    	return RegTest.test(mail);
	},
	isValidZipCode:function(v){///*验证是否有效的邮政编码*/
		var reg = new RegExp('^[0-9]{6}$');
		if (v.search(reg) == -1)
			return false;
		return true;
	},	
	isValidEmail:function(s){/*验证是由有效的电子邮件地址*/
		var reg1 = new RegExp('^[a-zA-Z0-9][a-zA-Z0-9@._-]{3,}[a-zA-Z]$');
		var reg2 = new RegExp('[@.]{2}');
		if (s.search(reg1) == -1
				|| s.indexOf('@') == -1
				|| s.lastIndexOf('.') < s.lastIndexOf('@')
				|| s.lastIndexOf('@') != s.indexOf('@')
				|| s.search(reg2) != -1)
			return false;
			
		return true;
	},
	isValidMobile:function(v){/*验证是否有效的移动电话号码*/	
		RegTest = new RegExp("^18[0-9]|^13[0-9]|^15[0-9][0-9]{8}$");
		
		if (v.length != 11 && v.length != 12 )
		{	
			return false;
		}
		
		if (v.length == 12)
		{
			if (v.substr(0,1) == 0)
			{	
				v = v.substr(1,11);
			}
			else
			{	
				return false;
			}
		}
		return RegTest.test(v);		
	},
	
	isValidChinaIDCard:function(sNo){/*验证是否有效的中国身份证号码*/
		sNo = sNo.toString();
		if (sNo.length==18)
		{
			var a,b,c;
			if (!c_validator.isInteger(sNo.substr(0,17)))
			{
				return false;
			}
			a=parseInt(sNo.substr(0,1))*7+parseInt(sNo.substr(1,1))*9+parseInt(sNo.substr(2,1))*10;
			a=a+parseInt(sNo.substr(3,1))*5+parseInt(sNo.substr(4,1))*8+parseInt(sNo.substr(5,1))*4;
			a=a+parseInt(sNo.substr(6,1))*2+parseInt(sNo.substr(7,1))*1+parseInt(sNo.substr(8,1))*6;	
			a=a+parseInt(sNo.substr(9,1))*3+parseInt(sNo.substr(10,1))*7+parseInt(sNo.substr(11,1))*9;	
			a=a+parseInt(sNo.substr(12,1))*10+parseInt(sNo.substr(13,1))*5+parseInt(sNo.substr(14,1))*8;	
			a=a+parseInt(sNo.substr(15,1))*4+parseInt(sNo.substr(16,1))*2;
			b=a%11;
			
			if (b==2)
			{
				c=sNo.substr(17,1).toUpperCase();
			}
			else
			{
				c=parseInt(sNo.substr(17,1));
			}
			
			switch(b)
			{
				case 0: if ( c!=1 ) {return false;}break;
				case 1: if ( c!=0 ) {return false;}break;
				case 2: if ( c!="X") {return false;}break;
				case 3: if ( c!=9 ) {return false;}break;
				case 4: if ( c!=8 ) {return false;}break;
				case 5: if ( c!=7 ) {return false;}break;
				case 6: if ( c!=6 ) {return false;}break;
				case 7: if ( c!=5 ) {return false;}break;
				case 8: if ( c!=4 ) {return false;}break;
				case 9: if ( c!=3 ) {return false;}break;
				case 10: if ( c!=2 ){return false};
			}
		}
		else
		{
			if(sNo.length==15){
				if (isValidDate(sNo.substr(6,2),sNo.substr(8,2),sNo.substr(10,2))) {return true;}
				else{return false;}
			}
			else
			{
				return false;
			}
		}
		switch(sNo.length){
			case 15: if (isValidDate(sNo.substr(6,2),sNo.substr(8,2),sNo.substr(10,2))) {return true;}
			case 18: if (isValidDate(sNo.substr(6,4),sNo.substr(10,2),sNo.substr(12,2))) {return true;}
			}
		return false;
	},
	isInteger:function(v){
		var re = /^[0-9]+.?[0-9]*$/;
		return re.test(v);
	},
	/*
	用途：检查输入字符串是否只由汉字、字母、/组成
	输入：value：字符串
	返回：如果通过验证返回true,否则返回false
	*/
	isValidSpeciallyChar:function(string){
		
		var v=string;
		
		if(ValidValue(_PColl.ChinesePattern,v))
		{
			if(!ValidValue(_PColl.ChineseNamePattern,v))
			{
				return false;
			}		
		}
		else if(ValidValue(_PColl.rareChineseName1,v))
		{
			return true;
		}
		else if(ValidValue(_PColl.rareChineseName2,v))
		{
			return true;
		}
		else if(ValidValue(_PColl.rareChineseName3,v))
		{
			return false;
		}
		else if(ValidValue(_PColl.EnglishName,v))
		{
			return true;
		}
		else
		{
			return false;
		}
	
		return true;
	},
	/*判断是否有效的年月日*/
	isValidDateByYMD:function(iY, iM, iD) 
	{ 
		var undefined									
		if ( iY != undefined && !isNaN(iY) && iY >=0 && iY<=9999 &&						
			iM != undefined && !isNaN(iM) && iM >=1   && iM<=12   &&					
			iD != undefined && !isNaN(iD) && iD >=1   && iD<=31  )  
		{					
			if (iY<50) 
				iY = 2000+iY; 
			else if (iY<100) 
				iY=1900+iY;						
			if (iM == 2  && (isLeapYear(iY)  && iD > 29 || !isLeapYear(iY) && iD>28) ||	
				iD == 31 && (iM<7 && iM%2==0 || iM>7 && iM%2==1) )							
				return false																
			else	
				return true      
		}														
		else  
			return false 
	},
	/*判断是否有效的日期*/
	isValidDate:function(d)
	{
		var iaMonthDays = [31,28,31,30,31,30,31,31,30,31,30,31]
		var iaDate = new Array(3)
		var year, month, day
		if (arguments.length != 1) return false
		iaDate = d.toString().split("-")
		if (iaDate.length != 3) return false
		if (iaDate[1].length > 2 || iaDate[2].length > 2) return false
		year = parseFloat(iaDate[0])
		month = parseFloat(iaDate[1])
		day=parseFloat(iaDate[2])
		if (year < 2008 || year > 2100) return false
		if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) iaMonthDays[1]=29;
		if (month < 1 || month > 12) return false
		if (day < 1 || day > iaMonthDays[month - 1]) return false
		return true
	},
	isNumber:function(str){ 
		if(""==str){ 
			return false; 
		} 
			var reg = /\D/; 
			return str.match(reg)==null; 
	}

};

function $validator(t, vv){
	var v = vv.trim();
	switch(t){
		case "Cchar":{return c_validator.isValidSpeciallyChar(v);break;}
		case "passengerno":{return c_validator.isValidChinaIDCard(v);break;}
		case "empty":{return c_validator.isEmpty(v);break;}
		case "Cmobile":{return c_validator.isValidMobile(v);break;}
		case "Ctel":{return c_validator.isInteger(v);break;}
		case "email":{return c_validator.isValidEmail(v);break;}
		case "receiver":{return c_validator.isValidSpeciallyChar(v);break;}
		case "prov":{return c_validator.isEmpty(v);break;}
		case "city":{return c_validator.isEmpty(v);break;}
		case "address":{return c_validator.isEmpty(v);break;}
		case "ticketaddr":{return c_validator.isEmpty(v);break;}
		case "sendday":{return c_validator.isValidDate(v);break;}
		case "userid":{return c_validator.isEmpty(v)?!c_validator.isIllegalChar(v):false;break;}
		case "pwd":{return c_validator.isEmpty(v);break;}
		case "cpwd":{return c_validator.isEmpty(v);break;}
		case "zipcode":{return c_validator.isValidZipCode(v);break;}
		case "number":{return c_validator.isNumber(v);break;}
	}
}
function $st(o) { 
	return($(o).style); 
}
function $Tag(){
  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;
}
function GetobjVertex(sobj, t, sH, sW){
	sH=parseInt(sH);
	sW=parseInt(sW);
	var eT=0,eL=0,p=sobj;
	var sT=document.body.scrollTop;
	var sL=document.body.scrollLeft;
	var eH=sobj.height;
	var eW=sobj.width;
	while(p&&p.tagName!="BODY"){
		eT+=p.offsetTop;
		eL+=p.offsetLeft;
		p=p.offsetParent;
	};
	if(t=="Top"){
		return (document.body.clientHeight-eT-sT-eH>=sH?eT+eH:eT-sH)+sobj.offsetHeight;
	}
	else if(t=="Left"){
		return (document.body.clientWidth-eL-sL>=sW?eL:eL+eW-sW)+2;
	}
}
/*new Marquee(
    "scrollBox2",  //容器ID<br />
    0,  //向上滚动(0向上 1向下 2向左 3向右)<br />
    3,  //滚动的步长<br />
    200,  //容器可视宽度<br />
    64,  //容器可视高度<br />
    50,  //定时器 数值越小，滚动的速度越快(1000=1秒,建议不小于20)<br />
    2000,  //间歇停顿时间(0为不停顿,1000=1秒)<br />
    1000,  //开始时的等待时间(0为不等待,1000=1秒)<br />
    44  //间歇滚动间距(可选)<br />
    );
  };
*/
function Marquee(){
  this.ID=document.getElementById(arguments[0]);
  this.Direction=arguments[1];
  this.Step=arguments[2];
  this.Width=arguments[3];
  this.Height=arguments[4];
  this.Timer=arguments[5];
  this.WaitTime=arguments[6];
  this.StopTime=arguments[7];
  if(arguments[8]){this.ScrollStep=arguments[8];}else{this.ScrollStep=this.Direction>1?this.Width:this.Height;}
  this.CTL=this.StartID=this.Stop=this.MouseOver=0;
  this.ID.style.overflowX=this.ID.style.overflowY="hidden";
  this.ID.noWrap=true;
  this.ID.style.width=this.Width;
  this.ID.style.height=this.Height;
  this.ClientScroll=this.Direction>1?this.ID.scrollWidth:this.ID.scrollHeight;
  this.ID.innerHTML+=this.ID.innerHTML;
  this.Start(this,this.Timer,this.WaitTime,this.StopTime);
  }
Marquee.prototype.Start=function(msobj,timer,waittime,stoptime){
  msobj.StartID=function(){msobj.Scroll();}
  msobj.Continue=function(){
    if(msobj.MouseOver==1){setTimeout(msobj.Continue,waittime);}
    else{clearInterval(msobj.TimerID); msobj.CTL=msobj.Stop=0; msobj.TimerID=setInterval(msobj.StartID,timer);}
    }
  msobj.Pause=function(){msobj.Stop=1; clearInterval(msobj.TimerID); setTimeout(msobj.Continue,waittime);}
  msobj.Begin=function(){
    msobj.TimerID=setInterval(msobj.StartID,timer);
    msobj.ID.onmouseover=function(){msobj.MouseOver=1; clearInterval(msobj.TimerID);}
    msobj.ID.onmouseout=function(){msobj.MouseOver=0; if(msobj.Stop==0){clearInterval(msobj.TimerID); msobj.TimerID=setInterval(msobj.StartID,timer);}}
    }
  setTimeout(msobj.Begin,stoptime);
  }
Marquee.prototype.Scroll=function(){
  switch(this.Direction){
    case 0:
      this.CTL+=this.Step;
      if(this.CTL>=this.ScrollStep&&this.WaitTime>0){this.ID.scrollTop+=this.ScrollStep+this.Step-this.CTL; this.Pause(); return;}
      else{if(this.ID.scrollTop>=this.ClientScroll) this.ID.scrollTop-=this.ClientScroll; this.ID.scrollTop+=this.Step;}
      break;
    case 1:
      this.CTL+=this.Step;
      if(this.CTL>=this.ScrollStep&&this.WaitTime>0){this.ID.scrollTop-=this.ScrollStep+this.Step-this.CTL; this.Pause(); return;}
      else{if(this.ID.scrollTop<=0) this.ID.scrollTop+=this.ClientScroll; this.ID.scrollTop-=this.Step;}
      break;
    case 2:
      this.CTL+=this.Step;
      if(this.CTL>=this.ScrollStep&&this.WaitTime>0){this.ID.scrollLeft+=this.ScrollStep+this.Step-this.CTL; this.Pause(); return;}
      else{if(this.ID.scrollLeft>=this.ClientScroll) this.ID.scrollLeft-=this.ClientScroll; this.ID.scrollLeft+=this.Step;}
      break;
    case 3:
      this.CTL+=this.Step;
      if(this.CTL>=this.ScrollStep&&this.WaitTime>0){this.ID.scrollLeft-=this.ScrollStep+this.Step-this.CTL; this.Pause(); return;}
      else{if(this.ID.scrollLeft<=0) this.ID.scrollLeft+=this.ClientScroll; this.ID.scrollLeft-=this.Step;}
      break;
    }
  }


function DateDiff(sDate1, sDate2){
    var aDate, oDate1, oDate2, iDays; 
    aDate = sDate1.split("-");   
	oDate1 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]);
    aDate = sDate2.split("-");
    oDate2 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]);
    iDays = parseInt(Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 /24);
    return iDays;
}


function getL(id){ 
var e=id;
var l=e.offsetLeft; 
while(e=e.offsetParent){ 
l+=e.offsetLeft; 
} 
return l 
} 

function getT(id){ 
var e=id;
var t=e.offsetTop; 
while(e=e.offsetParent){ 
t+=e.offsetTop; 
} 
return t 
} 
