/**********************************************************************
Name: isDate
Description: Checks if the string parameter has a valid date format
**********************************************************************/
function isDate(str){
	//date format: d[d][.-/]m[m][.-/]yyyy
	str = trim(str)
	var ok, re, a
	re = /^(\d{1,2})[\/\.\-](\d{1,2})[\/\.\-](\d{4})$/
	a = re.exec(str)
	ok = false
	if (a)
	{
		ok = true
		var y,m,d
		y = a[3]
		if (y<1800) return false
		m = a[2]
		d = a[1]
		m = m - 1
		var myDate = new Date(y,m,d,1,0,0)
		if ((myDate.getDate()==d) && (myDate.getMonth()==m) && (myDate.getFullYear()==y)) return true
		else return false
	}
	return (ok)
}



/**********************************************************************
Name: isSearchDate
Description: Checks if the string parameter has a valid date format
**********************************************************************/
function isSearchDate(str){
	//date format: [d[d]/]m[m]/yyyy
	str = trim(str)
	var ok, re, a
	re = /^(((\d{1,2})[\/\.\-])?(\d{1,2})\/(\d{4}))$/
	a = re.exec(str)
	ok = false
	if (a)
	{
		ok = true		
		var y,m,d
		y = a[5]
		if (y<1800) return false
		m = a[4]
		if (m=='') m=12
		m = m - 1
		d = a[3]
		if (d=='') d=1
		var myDate = new Date(y,m,d,1,0,0)
		if ((myDate.getDate()==d) && (myDate.getMonth()==m) && (myDate.getFullYear()==y)) return true
		else return false
	}
	return (ok)
}


/***********************************************************************
Name: isNumber
Description: Checks if the string parameter has a valid number format
************************************************************************/
function isNumber(str){
 str = trim(str)
 //if(str=='') return true
 var re = /^(\d+(\.\d+)?)$/
 return re.test(str)
}


/***********************************************************************
Name: isPercent
Description: Checks if the string parameter has a valid percent format
************************************************************************/
function isPercent(str){
//valid percent: x; x.x; x.xx; xx; xx.x; xx.xx; xxx; xxx.x; xxx.xx
//			where  0 <= x <= 9
 str = trim(str)
 if(str=='') return true
 var re = /^((\d{1,3}\.\d{1,2})|(\d{1,3}))$/
 return re.test(str)
}



/***********************************************************************
Name: isEmail
Description: Checks if the string parameter is a valid e-mail address
************************************************************************/
function isEmail(str){
	str = trim(str)
	//var re = /^(\w|[^_]\.|[\-]|[^\s@])+@[^_@\.](([^\s@\.]|[a-z]|\d|\-)+|([^_@\.]\.[^_@\.])*)+\.[a-z]{2,}$/i 
	//var re=/^\w+(\w|[^_]\.|[\-]|[^\s@])+\w+@+\w+(([^\s@\.]|[a-z]|\d|\-)+|([^_@\.]\.[^_@\.])*)+\.[a-z]{2,}$/i
	var re=/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/i
	return re.test(str)
}


/***********************************************************************
Name: isTime
Description: Checks if the string parameter has a valid time format
************************************************************************/
function isTime(str){
//accepta timp in format h[h][:m[m]]
	var ok, re, a
	str = trim(str)
	re = /^((\d{1,2}):(\d{2})|(\d{1,2}))$/
	a = re.exec(str)
	ok = false
	if (a){
		ok = true
		var h,m
		if (a[2]){
			h = a[2]
			m = a[3]
		}
		else{
			h = a[4]
			m = 0
		}
		if ((parseInt(h)<0) || parseInt(h)>23 || parseInt(m)>59 || (parseInt(m)<0)) ok=false
	}
	return (ok)
}


/**********************************************************************
Name: trim
Description: Removes leading and trailing spaces
**********************************************************************/
function trim(str) {
	return (str.replace(/^\s*|\s*$/gi,''))
} 



/**********************************************************************
Name: isNumber1
Description: Checks if the parameter string is a number
**********************************************************************/
function isNumber1(str){
   return ((/\d+/.exec(str))==str)
}



/**********************************************************************
Name: isDigit
Description:	
	on the key press event, allows only digits
	use it like this: 
	onkeypress="if (!isDigit(String.fromCharCode(window.event.keyCode))){return false}"
**********************************************************************/
function isDigit(str){
 return ((/\d/.exec(str))==str)
}


/**********************************************************************
Name: isValidDateInterval
Description: Checks if the parameters make a valid date interval
**********************************************************************/
function isValidDateInterval(strStartDate,strEndDate){
//date format: d[d]/m[m]/yyyy
	strStartDate = trim(strStartDate)
	strEndDate = trim(strEndDate)
	
	var ok, re, a1, a2
	var yi,mi,di,yf,mf,df
	re = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/
	a1 = re.exec(strStartDate)
	a2 = re.exec(strEndDate)
	ok = false
	if (a1 && a2)
	{
		ok = true
		di = a1[1]
		mi = a1[2]
		yi = a1[3]
		df = a2[1]
		mf = a2[2]
		yf = a2[3]
	
		if (parseInt(yi)>parseInt(yf)){
			return false;
		}
		if ((parseInt(yi)==parseInt(yf))&& (parseInt(mi)>parseInt(mf))){
			return false;
		}
		if ((parseInt(yi)==parseInt(yf))&& (parseInt(mi)==parseInt(mf)) && (parseInt(di)>parseInt(df))){
			return false;
		}
	}
	return (ok)
}



/**********************************************************************
Name: isSrcDate
Description: Checks if the string parameter has a valid date format
**********************************************************************/
function isSrcDate(str){
	//date format: [[d[d]/]m[m]/]yyyy
	str = trim(str)
	var ok, re, a
	re = /^(((\d{1,2})[\/\.\-])?(\d{1,2})[\/\.\-])?(\d{4})$/
	a = re.exec(str)
	ok = false
	if (a)
	{
		ok = true		
		var y,m,d
		y = a[5]
		if (y<1800) return false
		m = a[4]
		if (m=='') m=12
		m = m - 1
		d = a[3]
		if (d=='') d=1
		var myDate = new Date(y,m,d,1,0,0)
		if ((myDate.getDate()==d) && (myDate.getMonth()==m) && (myDate.getFullYear()==y)) return true
		else return false
	}
	return (ok)
}
