function isInteger(sValue){
	var sZeroTrimmed=lTrim(sValue,"0");
	var iValue=parseInt(sZeroTrimmed);
	//alert("iValue=" + iValue + "\nsTrimmed=" + sZeroTrimmed);
	if ((sZeroTrimmed==iValue) && (isNaN(iValue)==false)){
		return true;
	}
	return false;
}

function isZeroNatural(sValue){
	if (!isInteger(sValue)) return false;
	var sZeroTrimmed=lTrim(sValue,"0");
	var iValue=parseInt(sZeroTrimmed);
	if (iValue>0) return true 
	else return false
}

function isNumeric(sValue){
	var fValue=parseFloat(sValue);
	if ((sValue==fValue) && (isNaN(fValue)==false))
		return true;
	else
		return false;
}

function isEmail(str) {
  // are regular expressions supported?
  var supported = 0;
  if (window.RegExp)
  {
    var tempStr = "a";
    var tempReg = new RegExp(tempStr);
    if (tempReg.test(tempStr)) supported = 1;
  }
  if (!supported) 
    return (str.indexOf(".") > 2) && (str.indexOf("@") > 0);
  var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
  var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
  return (!r1.test(str) && r2.test(str));
}


function mid(){
	var sValue;
	var nStart;
	var nLen=0;
	
	switch(arguments.length){
		case 0:	
		case 1:
			alert('No enough arguments passed to mid function');
			return;
		case 3:
			nLen=arguments[2];
		case 2:
			sValue=arguments[0];
			nStart=parseInt(arguments[1])-1;
			break;
		default:
			alert('Too many arguments passed to mid function');
			return;
	}
	if (nLen==0)
		return sValue.substring(nStart);
	else
		return sValue.substring(nStart,nStart+nLen);
}


function lTrim(){
	var sValue;
	var sChar=" ";
	switch(arguments.length){
		case 2:
			sChar=arguments[1];
		case 1:
			sValue=arguments[0];
			break;
		default:
			alert('Wrong number of arguments passed to lTrim function');
			return;
	}
	
	var nVal=sValue.length;
	var nPos=-1;
	for (i=1;i<=nVal && nPos<0;i++){
		if (mid(sValue,i,1)!=sChar){
			nPos=i;
		}
	}
	if (nPos<0){
		return sValue;
	}

	return mid(sValue,nPos);
}

	
function rTrim(){
	var sValue;
	var sChar=" ";
	switch(arguments.length){
		case 2:
			sChar=arguments[1];
		case 1:
			sValue=arguments[0];
			break;
		default:
			alert('Wrong number of arguments passed to lTrim function');
			return;
	}
	
	var nVal=sValue.length;
	var nPos=-1;
	for (i=nVal;i>=1 && nPos<0;i--){
		if (mid(sValue,i,1)!=sChar){
			nPos=i;
		}
	}
	
	if (nPos<0){
		return sValue;
	}

	return mid(sValue,1,nPos);
}

function isEmptyString(s){
	for (i=0;i<s.length;i++){
		if (s.charAt(i)!=" ")
			return false
	} 
	return true;
}

function isZipCode(s){
	var temp=s.replace("-","");
	temp=temp.replace("-","");
	if (!isInteger(temp)){
		return false;
	}
	if (temp.length==9){
		if (s.charAt(5)=="-"){
			return true;
		}
		return false;
	}
	if(s.length==5){
		return true;
	}
	//alert(s.length);
	return false;
}

function isUSDate(sDate,n){
	var sDateParts=sDate.split("/");
	if (sDateParts.length!=3){
		//alert("format");
		return false;
	}
	//Check the Year
	sDateParts[2]=lTrim(sDateParts[2],"0")
	if (!isYear(sDateParts[2],n)){
		//alert("year");
		return false;
	}
	//Check the month
	sDateParts[0]=lTrim(sDateParts[0],"0")
	if (!isMonth(sDateParts[0])){
		//alert("month");
		return false;
	}
	//Check the day
	sDateParts[1]=lTrim(sDateParts[1],"0")
	if (!isDay(sDateParts[1],sDateParts[0],sDateParts[2])){
		//alert("day");
		return false;
	}
	else
		return true;
}
	
function isDay(sDay,sMonth,sYear){
	var max_day;
	if (!isInteger(sDay))
		return false;
	if (!isMonth(sMonth))
		return false;
	if (!isInteger(sYear))
		return false;
	switch (sMonth){
		case '2':
			max_day=28*1+leapYear(sYear);
			break;
		case '4':
		case '6':
		case '9':
		case '11':
			max_day=30;
			break;
		default:
			max_day=31;
	}
	return isIntegerRange(sDay,1,max_day);
}

function isMonth(s){
	return isIntegerRange(s,1,12);
}

function isYear(s,n){
	if (!isInteger(s))
		return false;
	if (s.length!=n)
		return false;
	else
		return true;
}

function isIntegerRange(s,min_val,max_val){
	var iTemp=parseInt(s);
	if (!isInteger(s))
		return false;
	if (iTemp > max_val || iTemp < min_val)
		return false;
	else
		return true;
}
	

function leapYear(sYear){
	if (!isInteger)
		return 0;
	else{
		var nTemp=sYear/4;
		var sTemp=nTemp.toString();
		if (isInteger(sTemp))
			return 1;
		else
			return 0;
	}
}

function COraDate(USDate, n){
	if (!isUSDate(USDate,n)) return USDate
	var sDateParts=USDate.split("/");
	var aMonths=new Array("Jan","Feb","Mar","Apr","May","Jun",
					      "Jul","Aug","Sep","Oct","Nov","Dec");
	var sOraDate=sDateParts[1] + "-" + 
				 aMonths[sDateParts[0]-1] + "-" +
				 sDateParts[2];
	return sOraDate;
}