// javascript functions



function trim(str)

{

	str = '' + str;

	var re = /^ */;

	var res = str.replace(re, '');

	re = / *$/;

	return(res.replace(re, ''));

}



function ShowAlert(sAlertString, hForm, FormElement)

{

	alert(sAlertString);

	if ( (!hForm.elements[FormElement].disabled) && (!hForm.elements[FormElement].length) )

	{

		if (hForm.elements[FormElement].type != 'hidden')

		{

			try{hForm.elements[FormElement].focus();}catch(e){}

		}

		if (!hForm.elements[FormElement].options) // select

			hForm.elements[FormElement].select();

	}

	return false;

}



function parse_int(str)

{

	str = '' + str;

	var re = /^0*/;

	var res = str.replace(re, '');

	return parseInt(res);

}



function GetValue(el)

{

	if ( (el.length) && (!el.options) )

	{

		for (var i=0; i<el.length; i++)

			if (el[i].checked)

				return el[i].value;

		return '';

	}

	else

		return el.value;

}



function is_leap_year(year)

{

	return ( (year%4 == 0) && !( (year%100 == 0) && (year%400 != 0) ) );

}



function isValidEmail(mailstr)

{

  var re = /^ *([a-z0-9_-]+\.)*[a-z0-9_-]+@(([a-z0-9-]+\.)+(com|net|org|mil|edu|gov|arpa|info|biz|inc|name|[a-z]{2})|[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}) *$/;

  return (re.test(mailstr.toLowerCase()));

}



function isValidPhone(phonestr) // only for US

{

	var re = /^\(?[0-9]{3}\)?[\-\. ]*[0-9]{3}[\-\. ]*[0-9]{4}$/;

	return re.test(phonestr);

}



function isValidNumber(num_str) // valid positive float number

{

	var re = /^[0-9]+(\.?[0-9]+)?$/;

	return re.test(num_str);

}



function isValidDate(str)

{

	var re = /^([0-9]{4})\-([0-9]{1,2})\-([0-9]{1,2})$/;

	return re.test(str);

}



function isValidDateTime(str)

{

	var re = /^([0-9]{4})\-([0-9]{1,2})\-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})$/;

	return re.test(str);

}



function getNumberFromString(s)

{

	s = '' + s;

	if (s == '') return s;

	var re = /^0*/;

	s = parseInt(s.replace(re, ''));

	return s;

}



function testDate(str, check_time){

    var ty = 0; var tm = 0; var td = 0;

	var th = 0; var ti = 0; var ts = 0;

	var xd = ''; var xt = ''; var xdt = '';

	var xdt = str.split(' ');

	if (xdt.length>0) {

		var xd = xdt[0].split('-');

		if (xd.length>0) ty = xd[0];

		if (xd.length>1) tm = xd[1];

		if (xd.length>2) td = xd[2];

	}

    var months = new Array();

    months[1] = 31;

    if (is_leap_year(ty)) months[2] = 29; else months[2] = 28;

    months[3] = 31; months[4] = 30; months[5] = 31; months[6] = 30; months[7] = 31; months[8] = 31; months[9] = 30; months[10] = 31; months[11] = 30; months[12] = 31;



	ty = getNumberFromString(ty);

	tm = getNumberFromString(tm);

	td = getNumberFromString(td);



    if ( ty=='' || isNaN(ty) || (ty<1900)) return 'y';

    if ( tm=='' || isNaN(tm) || (tm<1) || (tm>12) ) return 'm';

    if ( td=='' || isNaN(td) || (td<1) || (td>months[parseInt(tm)]) ) return 'd';



    if (check_time != true) {



	    var re = /^([0-9]{4})\-([0-9]{1,2})\-([0-9]{1,2})$/;

	    if (!re.test(str)) return '_';



    	return '';

    }



	if (xdt.length>1) {

		var xt = xdt[1].split(':');

		if (xt.length>0) th = xt[0];

		if (xt.length>1) ti = xt[1];

		if (xt.length>2) ts = xt[2];

	}



	th = getNumberFromString(th);

	ti = getNumberFromString(ti);

	ts = getNumberFromString(ts);



    if ( th=='' || isNaN(th) || (th<0) || (th>23) ) return 'h';

    if ( ti=='' || isNaN(ti) || (ti<0) || (ti>59) ) return 'i';

    if ( ts=='' || isNaN(ts) || (ts<0) || (ts>59) ) return 's';



	var re = /^([0-9]{4})\-([0-9]{1,2})\-([0-9]{1,2}) ([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})$/;

	if (!re.test(str)) return '_';



	return '';

}
