//TODO: delete
/*added shokeld - helper to debug js*/
function debug(a,b,c,d)
{
	window.a = a;
	window.b = b;
	window.c = c;
	window.d = d;
	return true;
}
// javascript functions

function trim(str)
{
	str = '' + str;
	var re = /^ */;
	var res = str.replace(re, '');
	re = / *$/;
	return(res.replace(re, ''));
}
function getErrorEvent(sAlertString)
{
	if (!window.errorEvent)
	{
		var ErrorEvent = function(sAlertString){
			this.sAlertString = sAlertString;
			this.addEvents({'error':true});
		};
		Ext.extend(ErrorEvent,Ext.util.Observable);
		window.errorEvent = new ErrorEvent(sAlertString);
	}
	else
	{
		window.errorEvent.sAlertString = sAlertString;
	}
	return window.errorEvent;
}
function getConfirmEvent()
{
	if (!window.confirmEvent)
	{
		var ConfirmEvent = function(){
			this.addEvents({'confirmation':true});
		};
		Ext.extend(ConfirmEvent,Ext.util.Observable);
		window.confirmEvent = new ConfirmEvent();
	}
	return window.confirmEvent;
}

function ShowAlert(sAlertString, hForm, FormElement, skipFocus)
{
	/*generate and firing an errorEvent*/
	var er = getErrorEvent(sAlertString);
	er.fireEvent('error');

	var f =	function()
	{
		if ((!hForm.elements[FormElement].disabled) && (!hForm.elements[FormElement].length))
		{
			if (hForm.elements[FormElement].markInvalid)
			{
				hForm.elements[FormElement].markInvalid(sAlertString);
			}
			if (!skipFocus)
			{
				if ('hidden' != hForm.elements[FormElement].type)
				{
					try
					{
						hForm.elements[FormElement].focus();
					}
					catch(e)
					{
					}
				}
				else
				{
						if (hForm.elements[FormElement].ext && hForm.elements[FormElement].ext.focus)
						{
							hForm.elements[FormElement].ext.focus();
						}
				}
			}

			if (!skipFocus && !hForm.elements[FormElement].options) // select
			{
				hForm.elements[FormElement].select();
			}
		}
	};

	if (!hForm.elements[FormElement].markInvalid)
	{
		Ext.MessageBox.alert('Alert', sAlertString, f);
	}
	else
	{
		f();
	}

	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-]+\.)+(biz|com|edu|gov|info|int|mil|name|net|org|arpa|root|aero|cat|coop|jobs|museum|pro|travel|[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 disableFormAutocomplete(formName)
{
	var f;
	var attr;
	if( f = document.forms[formName])
	{
		try
		{
			f.setAttribute('autocomplete','off');
			/*
			alert(f.getAttribute("autocomplete"));
			attr = document.createAttribute('autocomplete');
			attr.value = 'off';
			f.setAttributeNode(attr)
			*/
		}
		catch(e){}
	}
}
