function vCloseWindow()
{
   window.close()
}
function vMaxWindow()
{
	window.moveTo(0,0)
	window.resizeTo(window.screen.width,window.screen.height-60)
}
function vOpenModalWindow(sUrl,sFeature)
{
  sFeature +=  ";status:no"
  return showModalDialog(sUrl,'',sFeature)
}
function vOpenModalWindowWithParm(sUrl,sArgs,sFeature)
{
  return showModalDialog(sUrl,sArgs,sFeature)
}
function vGo(url)
{
	window.location=url
}

function vRefresh()
{
	window.location.reload()
}
function vOpenWindow(sUrl,sFeature)
{
  sFeature ="alwaysRaised,menubar=yes,toolbar=yes,status=no,"+sFeature
  window.open(sUrl,"",sFeature)
}

/* 
取form中的对象
参数: form对象,待取的对象名
*/
function oGetObjectInForm(inForm,objName)
{
	for (i=0;i<inForm.elements.length;i++)
	{
		if (inForm.elements[i].name == objName)	return inForm.elements[i];
	}
	return null
}
function iGetCheckedCountAll(elementName)
{
	for(lj = 0; lj<document.forms.length;lj ++)
	{
		inForm = document.forms[lj]
		for(li=0;li<inForm.elements.length;li++)
		{
			obj = inForm.elements[li];
			if ( ( obj.type=="checkbox" || obj.type=="radio")  && obj.name == elementName && obj.checked==true)
			{
				liCount ++
			}
		}
	}
	return liCount
}

/*
function:检测elementName系列的checkbox被选中几个
说明: elementName的名称可以是 name[] 形式
*/
function iGetCheckedCount(inForm,elementName)
{
	liCount = 0;
	for(li=0;li<inForm.elements.length;li++)
	{
		obj = inForm.elements[li];
	//	alert(obj.name)
		if ( ( obj.type=="checkbox" || obj.type=="radio")  && obj.name == elementName && obj.checked==true)
		{
			liCount ++
		}
	}
	return liCount
}

/*
function:检测elementName系列的checkbox是否有选中
说明: elementName的名称可以是 name[] 形式
*/
function bCheckBoxChecked(inForm,elementName)
{
	abChecked = false;
	liCount = 0;
	for(li=0;li<inForm.elements.length;li++)
	{
		obj = inForm.elements[li];
		if ( ( obj.type=="checkbox" || obj.type=="radio")  && obj.name == elementName && obj.checked==true)
		{
			liCount ++;
			abChecked = true;
			break;
		}
	}
	//return liCount
	return liCount;
}


/* 取一组名为elementName的对象的个数 */
function iGetElementCount(inForm,elementName)
{
	//计算radio控件的个数
	liCount = 0
	for(li=0;li<inForm.elements.length;li++)
	{
		obj = inForm.elements[li]
		if(obj.name == elementName ) liCount ++
	}
	return liCount
}
/**	  取一组radio(n个)中被选中项的index返回 0-(n-1)		**/
function iGetCheckedIndex(inForm,elementName)
{
	index  = -1;
	for( i = 0; i<inForm.elements.length;i++)
	{
		if((inForm.elements[i].type=="radio") || (inForm.elements[i].type=="checkbox") && (inForm.elements[i].name==elementName))
		{
			index ++;
			if (inForm.elements[i].checked==true)	break;
		}
	}
	return index
}
/**	  取一组radio(n个)中被选中项的index的自然index返回 0-(n-1)		**/
function iGetIndexByCheckedIndex(inForm,elementName,checkedIndex)
{
	index  = -1;
	orgIndex = -1
	for( k = 0; k<inForm.elements.length;k++)
	{
		if( ((inForm.elements[k].type=="radio") || (inForm.elements[k].type=="checkbox")) && (inForm.elements[k].name==elementName)  )
		{
			orgIndex++
			if(inForm.elements[k].checked == false) continue;
			index ++;
			if ( index == checkedIndex )	break;
		}
	}
	return orgIndex
}
/*取一组对象中索引为index的项的值
*/
function sGetCheckValueByIndex(inForm,elementName,index)
{
		iIndex = -1;
		for(li=0;li<inForm.elements.length;li++)
		{
			obj = inForm.elements[li];
			if ( obj.name == elementName)
			{
				iIndex ++
				if(iIndex == index)
				{
					return obj.value
				}
			}
		}
}
/********			checkbox数组处理函数组-结束					******/
function vCheckAll(inForm,inElement)
{
	for ( i = 0 ;i < inForm.elements.length; i++)
	{
		//alert(inForm.elements[i].disabled)
		if	((inForm.elements[i].type == "checkbox") &&(inForm.elements[i].name != inElement.name ) && (false==inForm.elements[i].disabled )  )
			inForm.elements[i].checked = inElement.checked
	}
}
/********			checkbox数组处理函数组-结束					******/
function vCheckAll_v1(inForm,inElementName,bChecked)
{
	for ( i = 0 ;i < inForm.elements.length; i++)
	{
		
		//alert(inForm.elements[i].disabled)
		if	((inForm.elements[i].type == "checkbox") &&(inForm.elements[i].name == inElementName ) && (false==inForm.elements[i].disabled )  )
		{
			inForm.elements[i].checked =bChecked
		}
	}
}

/*function vCheckAllNot(inForm,inElement){
	for(i = 0; i < inForm.elements.length; i++){
		inForm.elements[i].checked = inElement.checked
	}
}*/

function trim(str)
{
	if(str=="") return ""
	str1=""
	lbAtHeader=true
	spaceCount=0
	for(i=0;i<str.length;i++)
	{
		//ch=str.substring(i,i+1)
		ch=str.charAt(i)
		if(ch==' ')
		{
			if(true==lbAtHeader)	continue;
			spaceCount++
			str1+=ch
		}
		else
		{
			lbAtHeader=false
			spaceCount=0
			str1+=ch
		}
	}
	str1=str1.substring(0,str1.length-spaceCount)
	return str1
}

function bIsNumber(str){
	if(str==null || str.length<1) return false;

	var i;
	var len = str.length;
	var chkStr = "1234567890.";
	if (len == 1) {
		if (chkStr.indexOf(str.charAt(i)) < 0) {return false;}
	}else{		
		if ((chkStr.indexOf(str.charAt(0)) < 0)) {
			return false;
		}
		 for (i = 1; i < len; i++) {
			if (chkStr.indexOf(str.charAt(i)) < 0) {
				return false;
			}
		}
	}
	return true
}

function is_digit(c)
{
	return c >= '0' && c <= '9';
}


/*********************************************
  JavaScript Functions for Date Validation
*/


/**
  * Get last day of month taking into account leap years.
  * @param month [0..11]
  * @param year  (4 digits)
*/
  function getLastDay(month, year) {

    switch(month) {
      case 0:
      case 2:
      case 4:
      case 6:
      case 7:
      case 9:
      case 11:
        return 31;
      case 3:
      case 5:
      case 8:
      case 10:
        return 30;
      case 1:
	return ( (year%400==0) || ((year%4==0) && (year%100!=0)) ) ? 29 : 28;
    } // end switch()
    return 0;
  } // getLastDay()
  
  // ----------------------------------------------------------
  

  function isValidDateTime(s){
	    var n = s.length;
	    if (n > 19) {
	        return false;
	    }
	    var count;
	    var i;
	    var t;
	    // year
	    count = 0;
	    for (i = 0; i < n; ++i) {
	        if (!is_digit(s.charAt(i)))
	            break;
	        ++count;
	    }
	    if (count == 0 || count > 4 || i == n)
	        return false;
	    // -
	    if (s.charAt(i) != '-')
	        return false;
	    ++i;
	    // month
	    count = 0;
	    for ( ; i < n; ++i) {
	        if (!is_digit(s.charAt(i)))
	            break;
	        ++count;
	    }
	    if (count == 0 || count > 2 || i == n)
	        return false;
	    // -
	    if (s.charAt(i) != '-')
	        return false;
	    ++i;
	    // day
	    count = 0;
	    for ( ; i < n; ++i) {
	        if (!is_digit(s.charAt(i)))
	            break;
	        ++count;
	    }
	    if (count == 0 || count > 2 || i == n)
	        return false;
	    // <space>
	    if (s.charAt(i) != ' ')
	        return false;
	    ++i;
	    while (s.charAt(i) == ' ')
	        ++i;
	    // hour
	    count = 0;
	    for ( ; i < n; ++i) {
	        if (!is_digit(s.charAt(i)))
	            break;
	        ++count;
	    }
	    if (count == 0 || count > 2 || i == n)
	        return false;
	    t = s.substring(i-count, i);
	    if (t > 23)
	        return false;
	    // :
	    if (s.charAt(i) != ':')
	        return false;
	    ++i;
	    // minute
	    count = 0;
	    for ( ; i < n; ++i) {
	        if (!is_digit(s.charAt(i)))
	            break;
	        ++count;
	    }
	    if (count == 0 || count > 2 || i == n)
	        return false;
	    t = s.substring(i-count, i);
	    if (t > 59)
	        return false;
	    ++i;
	    // second
	    count = 0;
	    for ( ; i < n; ++i) {
	        if (!is_digit(s.charAt(i)))
	            break;
	        ++count;
	    }
	    if (count == 0 || count > 2 || i != n)
	        return false;
	    t = s.substring(i-count, i);
	    if (t > 59)
	        return false;

		return true;

  }

  function isValidDate(s){
	  return isDate(s,"d");
  }
  /**
    * Verify that a string represents a valid date
    * @param Input string
    * @param Date format. Currently only "d" is supoported as
    *        a format identifier, corresponding to "YYYY-MM-DD"
  */
  function isDate (dtexpr, dtformat) {
    var exp = new RegExp("[0-9]{4}-[0-9]{2}-[0-9]{2}");
    var exp1 = new RegExp("[0-9]{2}/[0-9]{2}/[0-9]{4}");
    var ser;
    var ret;
    var yy;
    var mm;
    var dd;

    if (dtformat=="d") {
      if (exp.test(dtexpr)) {
		ser = dtexpr.split("-");
        yy = parseInt(ser[0],10);
        mm = parseInt(ser[1],10)-1;
        dd = parseInt(ser[2],10);
      
        if (mm<0 || mm>12) {
          ret = false;
        }
        else if (dd>getLastDay(mm,yy)) {
          ret = false;
        }
        else
          ret = true;                
      }
	  else if(exp1.test(dtexpr)) {
			ser = dtexpr.split("/");
			yy = parseInt(ser[2],10);
			mm = parseInt(ser[0],10)-1;
			dd = parseInt(ser[1],10);
		  
			if (mm<0 || mm>12) {
			  ret = false;
			}
			else if (dd>getLastDay(mm,yy)) {
			  ret = false;
			}
			else
			  ret = true;                
		}
      else {
        ret = false;
      }
    }
    else {
      ret = false;
    }
    
    return ret;
  } // isDate()
  
  // ----------------------------------------------------------
  
  /**
    * Get a Date object from a string
  */
  function parseDate(dtexpr, dtformat) {
    var d;
    var exp = new RegExp("[0-9]{4}-[0-9]{2}-[0-9]{2}");
    var exp1 = new RegExp("[0-9]{2}/[0-9]{2}/[0-9]{4}");

    if (dtexpr.length==0) return null;
    
    if ("d"==dtformat) {
	  if(exp.test(dtexpr))
		{
	      d = dtexpr.split("-");
	      return new Date(parseInt(d[0],10), parseInt(d[1],10)-1, parseInt(d[2],10));
		}
	  else if(exp1.test(dtexpr))
		{
		  d = dtexpr.split("/");
	      return new Date(parseInt(d[2],10),parseInt(d[0],10)-1,parseInt(d[1],10));
		}
	  else
		  return null;
    }
    else
      return null;
  } // parseDate

/**
	convert date from 'mm/dd/yyyy' format to 'yyyy-mm-dd' format
*/
  function sConvertDateFormat(dtexpr)
  {
	  if(dtexpr.length<=0) return '';
	objDate=parseDate(dtexpr, 'd')
	return formatDate(objDate);
  }
  // ----------------------------------------------------------

/*
	get a "yyyy-mm-dd" formated string form a date object 
*/
function formatDate(objDate)
{
	if(objDate!=null)
	{
		iMonth=objDate.getMonth()+1;
		iDay=objDate.getDate();
		
		return objDate.getFullYear()+"-"+(iMonth<10?"0"+iMonth:iMonth)+"-"+(iDay<10?"0"+iDay:iDay) ;
	}
	return null;	
}
//函数说明，从字符串末尾开始查找子串
//fanlb,2005/08/25
//参数：s1-源字符串,s2-子串
//返回：找到的index,-1,未找到
function rIndexOf(s1,s2)
{
	if(s1.length < s2.length) return -1
	for( i=s1.length;  s1.length > s2.length ;)
	{
		sTmp = s1.substring(s1.length - s2.length , s1.length)
		s1 = s1.substring(0,s1.length - s2.length)
		if(sTmp == s2 ) 
		{
			return s1.length
		}
	}

	return -1
}

//判断s2是否包含在s1中
function bInString(s1,s2)
{
	var idx
	if(trim(s1)=="")
	{
		if( trim(s2) == "") return true
		else return false
	}

	idx = s1.indexOf(s2)
	if(idx == -1) return false
	return true
}


//函数说明，从字符串s1中删除字符串s2
function sDeleteStr(s1,s2)
{
	var newStr,idx
	idx = s1.indexOf(s2)
	if(idx == -1 ) return s1
	newStr = s1.substring(0,idx)+s1.substring(idx + s2.length,s1.length)
	return newStr
}

// 数组对象元素删除方法
// 参数:数组下标
// 调用方法: aArray.remove(下标)
Array.prototype.remove = function(dx)
{
	if(isNaN(dx)||dx>this.length){return false;}
	this.splice(dx,1);
}


//克隆函数 - Begin , 经测试，有问题，不稳定，需再测试
function Object.prototype.clone(){
	 var newObj = new Object();
	 for(elements in this){
	  newObj[elements] = this[elements];
	 }
	 return newObj;
}

function Object.prototype.cloneAll(){
	 function clonePrototype(){}
	 clonePrototype.prototype = this;
	 var obj = new clonePrototype();
	 for(var ele in obj){
	  if(typeof(obj[ele])=="object") obj[ele] = obj[ele].cloneAll();
	 }
	 return obj;
}
//克隆函数 - End

//copy a1 to a new array
//数组拷贝,将传入的二维数组拷贝为一个新的二维数组
function arrayCopy(a1)
{
	var i,j
	var a2 = Array()
	for(i=0;i<a1.length;i++)
	{
		a2[i] = Array()
		for(j=0;j<a1[i].length;j++)
		{
			a2[i][j] = a1[i][j]
		}
	}
	return a2
}


//change mouse cursor to HourClass
function setPointer() {
    if (document.all)
        for (var i=0;i < document.all.length; i++)
		{
			if(i>200) break;
             document.all(i).style.cursor = 'wait';
		}
}
//change mouse cursor to Pointer
function resetPointer() {
    if (document.all)
        for (var i=0;i < document.all.length; i++)
		{
			if(i>200) break;
             document.all(i).style.cursor = 'default';
		}
}




/***********************************************************
Function formatnumber(value,num)
Written by zergling
javascript版本的FormatNumber函数，用法与VBScript相同，第一个参数是待格式化的数值，第二个是保留小数位数
注意：返回的是字符串类型
第一个函数需要调用第二个函数，所以第二个不能去掉
***********************************************************/
function adv_format(value,num) //四舍五入
{
	var a_str = formatnumber(value,num);
	var a_int = parseFloat(a_str);
	if (value.toString().length>a_str.length)
	{
		var b_str = value.toString().substring(a_str.length,a_str.length+1)
		var b_int = parseFloat(b_str);
		if (b_int<5)
		{
			return a_str
		}
		else
		{
			var bonus_str,bonus_int;
			if (num==0)
			{
				bonus_int = 1;
			}
			else
			{
				bonus_str = "0."
				for (var i=1; i<num; i++)
					bonus_str+="0";
				bonus_str+="1";
				bonus_int = parseFloat(bonus_str);
			}
			a_str = formatnumber(a_int + bonus_int, num)
		}
	}
	return a_str
}

function formatnumber(value,num) //直接去尾
{
	var a,b,c,i
	a = value.toString();
	b = a.indexOf(".");
	c = a.length;
	if (num==0)
	{
		if (b!=-1)
		a = a.substring(0,b);
	}
	else
	{
		if (b==-1)
		{
			a = a + ".";
			for (i=1;i<=num;i++)
				a = a + "0";
		}
		else
		{
			a = a.substring(0,b+num+1);
			for (i=c;i<=b+num;i++)
				a = a + "0";
		}
	}
	return a
}