// 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 '';
}
function check_date(type,name)
{
	var d_arr = [ '',31,28,31,30,31,30,31,31,30,31,30,31];
	var m = document.getElementById(name + '1');
	var m_sel = m.options[m.selectedIndex].value;
	var d = document.getElementById(name + '2');
	var d_sel = parseInt(d.options[d.selectedIndex].value);
	var y = document.getElementById(name + '3');
	var y_sel = y.options[y.selectedIndex].value;
	var ind = 1;
	if (is_leap_year(y_sel) && m_sel == '2')
		ind = 2;
	if (((type=='year') && (m_sel == '2'))||(type=='month'))
	{
		d.innerHTML = "";
		for(var i = 1; i < d_arr[m_sel] + ind; i++){ 
			var option = create("option", { value:i}, i+'' );
			d.appendChild(option);
		}
		if (d_sel < d_arr[m_sel] + ind)
			d.selectedIndex = d_sel - 1;
		else
			d.selectedIndex = 0;
	}
}
	
function create( name, attributes ) {
  var el = document.createElement( name );
  if ( typeof attributes == 'object' ) {
    for ( var i in attributes ) {
      el.setAttribute( i, attributes[i] );
      if ( i.toLowerCase() == 'class' ) {
        el.className = attributes[i];  // for IE compatibility

      } else if ( i.toLowerCase() == 'style' ) {
        el.style.cssText = attributes[i]; // for IE compatibility
      }
    }
  }
  for ( var i = 2; i<arguments.length; i++ ) {
    var val = arguments[i];
    if ( typeof val == 'string' ) { val = document.createTextNode( val ) };
    el.appendChild( val );
  }
  return el;
}