var nbsp = 160;
var node_text = 3;
var emptyString = /^\s*$/;
var glb_vfld;
var proceed = 2;

function trim(str)
{
  return str.replace(/^\s+|\s+$/g, '');
}

function setFocusDelayed()
{
  glb_vfld.focus();
}

function setfocus(vfld)
{
  glb_vfld = vfld;
  setTimeout( 'setFocusDelayed()', 100 );
}

function msg(fld, msgtype, message)
{
  var dispmessage;
  if (emptyString.test(message))
	dispmessage = String.fromCharCode(nbsp);
  else
	dispmessage = message;

  var elem = document.getElementById(fld);
  elem.firstChild.nodeValue = dispmessage;

  elem.className = msgtype;
}

function commonCheck (vfld, ifld, reqd, fld_msg)
{
  if (!document.getElementById)
	return true;
  var elem = document.getElementById(ifld);
  if (!elem.firstChild)
	return true;
  if (elem.firstChild.nodeType != node_text)
	return true;

  if (emptyString.test(vfld.value)) {
	if (reqd) {
	  msg (ifld, "error", "ERROR: " + fld_msg + " field is required");
	  setfocus(vfld);
	  return false;
	}
	else {
	  msg (ifld, "warn", "");
	  return true;
	}
  }
  return proceed;
}

function validatePresent(vfld, ifld, fld_msg)
{
  var stat = commonCheck (vfld, ifld, true, fld_msg);
  if (stat != proceed) return stat;

  msg (ifld, "warn", "");
  return true;
}

function validateEqualPassword (vpass, vpass_confirm, ifld)
{
	fld_msg = 'Both password and password confirmation should be filled.';

	var stat = commonCheck (vpass, ifld, true, fld_msg);
	if (stat != proceed) return stat;

	var stat = commonCheck (vpass_confirm, ifld, true, fld_msg);
	if (stat != proceed) return stat;

	if (trim(vpass.value) != trim(vpass_confirm.value)) {
		msg (ifld, "error", "ERROR: Password and Password Confirmation are not equal");
		setfocus(vpass);
		return false;
	}

	msg (ifld, "warn", "");
	return true;
}

function validateEmail  (vfld, ifld, reqd, fld_msg)
{
  var stat = commonCheck (vfld, ifld, reqd, fld_msg);
  if (stat != proceed) return stat;

  var tfld = trim(vfld.value);
  var email = /^[^@]+@[^@.]+\.[^@]*\w\w$/
  if (!email.test(tfld)) {
	msg (ifld, "error", "ERROR: " + fld_msg + " is not a valid e-mail address");
	setfocus(vfld);
	return false;
  }

  var email2 = /^[A-Za-z][\w.-]+@\w[\w.-]+\.[\w.-]*[A-Za-z][A-Za-z]$/
  if (!email2.test(tfld))
	msg (ifld, "warn", "Unusual e-mail address - check if correct");
  else
	msg (ifld, "warn", "");
  return true;
}

function validateTelnr  (vfld, ifld, reqd, fld_msg)
{
  var stat = commonCheck (vfld, ifld, reqd, fld_msg);
  if (stat != proceed) return stat;

  var tfld = trim(vfld.value);
  var telnr = /^\+?[0-9 ()-]+[0-9]$/
  if (!telnr.test(tfld)) {
	msg (ifld, "error", "ERROR: " + fld_msg + " is not a valid telephone number. Characters permitted are digits, space ()- and leading +");
	setfocus(vfld);
	return false;
  }

  var numdigits = 0;
  for (var j=0; j<tfld.length; j++)
	if (tfld.charAt(j)>='0' && tfld.charAt(j)<='9') numdigits++;

  if (numdigits<6) {
	msg (ifld, "error", "ERROR: " + fld_msg + " has " + numdigits + " digits - too short");
	setfocus(vfld);
	return false;
  }

  if (numdigits>14)
	msg (ifld, "warn", fld_msg + " has " + numdigits + " digits - check if correct");
  else {
	if (numdigits<10)
	  msg (ifld, "warn", fld_msg + " has only " + numdigits + " digits - check if correct");
	else
	  msg (ifld, "warn", "");
  }
  return true;
}

function validateAge    (vfld, ifld, reqd, fld_msg)
{
  var stat = commonCheck (vfld, ifld, reqd, fld_msg);
  if (stat != proceed) return stat;

  var tfld = trim(vfld.value);
  var ageRE = /^[0-9]{1,3}$/;
  if (!ageRE.test(tfld)) {
	msg (ifld, "error", "ERROR: " + fld_msg + " doesn't have a valid age");
	setfocus(vfld);
	return false;
  }

  if (tfld>=200) {
	msg (ifld, "error", "ERROR: " + fld_msg + " doesn't have a valid age");
	setfocus(vfld);
	return false;
  }

  if (tfld>110) msg (ifld, "warn", fld_msg + " is older than 110: check correct");
  else {
	if (tfld<7) msg (ifld, "warn", "Bit young for this, aren't you?");
	else        msg (ifld, "warn", "");
  }
  return true;
}

function validateCreditCard(vfld, ifld, reqd, fld_msg)
{
	var stat = commonCheck (vfld, ifld, reqd, fld_msg);
	if (stat != proceed) return stat;

	var tfld = trim(vfld.value);
	var v = "0123456789";
	var w = "";
	for (var i=0; i < tfld.length; i++) {
		x = tfld.charAt(i);
		if (v.indexOf(x,0) != -1)
			w += x;
	}
	var j = w.length / 2;
	if (j < 6.5 || j > 8 || j == 7) {
		msg (ifld, "error", "ERROR: " + fld_msg + " is not a valid Credit Card Number");
		setfocus(vfld);
		return false;
	}
	var k = Math.floor(j);
	var m = Math.ceil(j) - k;
	var c = 0;
	for (var i=0; i<k; i++) {
		a = w.charAt(i*2+m) * 2;
		c += a > 9 ? Math.floor(a/10 + a%10) : a;
	}
	for (var i=0; i<k+m; i++) c += w.charAt(i*2+1-m) * 1;
	if (c%10 == 0) {
		return true;
	} else {
		msg (ifld, "error", "ERROR: " + fld_msg + " is not a valid Credit Card Number");
		setfocus(vfld);
		return false;
	}
}

function validateIsInteger    (vfld, ifld, reqd, fld_msg)
{
  var stat = commonCheck (vfld, ifld, reqd, fld_msg);
  if (stat != proceed) return stat;

  var tfld = trim(vfld.value);

  if (!isInteger(tfld)) {
	msg (ifld, "error", "ERROR: " + fld_msg + " have an invalid number");
	setfocus(vfld);
	return false;
  }
  return true;
}

function unHider(fld)
{
	fld.style.display = 'block';
}
function hider(fld)
{
	fld.style.display = 'none';
}

function checkPw(form) {
	pw1 = form.BOX_Password.value;
	pw2 = form.BOX_Confirm_Password.value;

	if (pw1 != pw2) {
		var msgErr = "ERROR: Password and Confirmation do not match.";
		document.getElementById('frm_error').innerHTML = msgErr;
		document.getElementById('BOX_Confirm_Password').focus();
		return false;
	} else return true;
}

function GoBack(myForm)
{
	if(typeof(myForm) != "undefined"){
		window.location.href= myForm;
	}
	return false;
}

function Next_Form(current, form_name)
{
	eval('document.'+form_name+'.HID_CurrentPage.value = current + 1');
	eval('document.'+form_name+'.submit()');
}

function Prev_Form(current, form_name)
{
	eval('document.'+form_name+'.HID_CurrentPage.value = current - 1');
	eval('document.'+form_name+'.submit()');
}

function GoTo_Form(page_number, form_name)
{
	eval('document.'+form_name+'.HID_CurrentPage.value = page_number');
	eval('document.'+form_name+'.submit()');
}

function isInteger(s){
	var i;
	for (i = 0; i < s.length; i++){
		var c = s.charAt(i);
		if (((c < "0") || (c > "9"))) return false;
	}
	return true;
}

function stripCharsInBag(s, bag){
	var i;
	var returnString = "";

	for (i = 0; i < s.length; i++){
		var c = s.charAt(i);
		if (bag.indexOf(c) == -1) returnString += c;
	}
	return returnString;
}

function daysInFebruary (year){
	return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}

function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31;
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30;}
		if (i==2) {this[i] = 29;}
   }
   return this;
}

function isDate(dtStr, field){
	var dtCh= "/";
	var minYear=1900;
	var maxYear=2100;
	var daysInMonth = DaysArray(12);
	var pos1=dtStr.indexOf(dtCh);
	var pos2=dtStr.indexOf(dtCh,pos1+1);
	var strMonth=dtStr.substring(0,pos1);
	var strDay=dtStr.substring(pos1+1,pos2);
	var strYear=dtStr.substring(pos2+1);
	var strYr=strYear;
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1);
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1);
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1);
	}
	var month=parseInt(strMonth);
	var day=parseInt(strDay);
	var year=parseInt(strYr);
	if (pos1==-1 || pos2==-1){
		alert("The date format should be : mm dd yyyy");
		return false;
	}
	if (strMonth.length<1 || month<1 || month>12){
		alert("Please enter a valid month for "+field);
		return false;
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		alert("Please enter a valid day for "+field);
		return false;
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear+" for "+field);
		return false;
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		alert("Please enter a valid date for ");
		return false;
	}
	return true;
}

function ValidateDate(prefijo, field){
	var dt = "";
	var str_month = 'BOX_' + prefijo + 'Month';
	var str_day = 'BOX_' + prefijo + 'Day';
	var str_year = 'BOX_' + prefijo + 'Year';

	dt+= eval ('document.form.'+str_month+'.value')+ '/' +
			 eval('document.form.'+str_day+'.value') + '/' +
			 eval('document.form.'+str_year+'.value');

	return isDate(dt, field);
}

function DateComparison(prefijo1, operator, prefijo2 ){
	var str_month1 = 'BOX_' + prefijo1 + 'Month';
	var str_day1 = 'BOX_' + prefijo1 + 'Day';
	var str_year1 = 'BOX_' + prefijo1 + 'Year';
	var str_month2 = 'BOX_' + prefijo2 + 'Month';
	var str_day2 = 'BOX_' + prefijo2 + 'Day';
	var str_year2 = 'BOX_' + prefijo2 + 'Year';

	var month1 = eval ('document.form.'+str_month1+'.value');
	var day1 = eval ('document.form.'+str_day1+'.value');
	var year1 = eval ('document.form.'+str_year1+'.value');
	var month2 = eval ('document.form.'+str_month2+'.value');
	var day2 = eval ('document.form.'+str_day2+'.value');
	var year2 = eval ('document.form.'+str_year2+'.value');

	switch(operator){
		case '=':
			if(day1 == day2 && month1 == month2 && year1 == year2)
				 return true;
			else
				return false;
			break;
		case '<':
			if(year1 < year2 ||
				year1 == year2 && month1 < month2 ||
				year1 == year2 && month1 == month2 && day1 < day2)
				return true;
			else
				return false;
			break;
		case '>':
			if(year1 > year2 ||
				year1 == year2 && month1 > month2 ||
				year1 == year2 && month1 == month2 && day1 > day2)
				return true;
			else
				return false;
			break;
		case '=<':
		case '<=':
			if( DateComparison(prefijo1,'<', prefijo2) ||
				DateComparison(prefijo1,'=',prefijo2) )
				return true;
			 else
				return false;
			 break;
		case '=>':
		case '>=':
			if( DateComparison(prefijo1,'>', prefijo2) ||
				DateComparison(prefijo1,'=',prefijo2) )
				return true;
			 else
				return false;
			 break;
		default:
			alert('Invalid Comparison Operator');
			return false;
		break;

	}
	return false;
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr;
  for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++)
	  x.src=x.oSrc;
}

function MM_preloadImages()
{
	var d=document;
	if(d.images)
	{
		if(!d.MM_p) d.MM_p=new Array();
		var i,j=d.MM_p.length,a=MM_preloadImages.arguments;
		for(i=0; i<a.length; i++) {
			if (a[i].indexOf("#")!=0){
				d.MM_p[j]=new Image;
				d.MM_p[j++].src=a[i];
			}
		}
	}
}

function MM_findObj(n, d) {
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
	d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() {
  var i,j=0,x,a=MM_swapImage.arguments;
  document.MM_sr=new Array;
  for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}



function show_div(id)
{
	if(document.getElementById(id)){
		document.getElementById(id).style.display ="block";
	}
}

function hide_div(id)
{
	if(document.getElementById(id)){
		document.getElementById(id).style.display ="none";
	}
}


function show_hide_div(id)
{
	if(document.getElementById(id)){
		if(document.getElementById(id).style.display =="none") {
			document.getElementById(id).style.display ="block";
		} else { 
			document.getElementById(id).style.display ="none";
		}
	}
}


function show_table(id)
{	
	if(dojo.byId(id)){
		dojo.removeClass(id, 'hide_table');
		dojo.addClass(id, 'show_table');
	}
	//dojo.style(dojo.byId(id), 'display', 'inline-block');
	//dojo.style(dojo.byId(id), 'display', 'show_table');
	/*
	if(document.getElementById(id)){
		document.getElementById(id).style.display ="table-cell";
	}
	*/
}

function hide_table(id)
{
	if(dojo.byId(id)){
		dojo.removeClass(id, 'show_table');
		dojo.addClass(id, 'hide_table');
	}
	
	//dojo.style(dojo.byId(id), 'display', 'none');
	//dojo.attr(id, 'class','show_table');
	/*
	if(document.getElementById(id)){
		document.getElementById(id).style.display ="none";
	}*/
}


function show_hide_table(id)
{
	
	//dojo.attr(id, 'class', 'hide_table');
	//dojo.byId(id).attr('display','none');
/*
	if(document.getElementById(id)){
		if(document.getElementById(id).style.display =="none") {
			document.getElementById(id).style.display ="inline-block";
		} else { 
			document.getElementById(id).style.display ="none";
		}
	}
	*/
}




function loadData(form_name, id_name, _url)
{
	if(_url=="undefined"){
		var _url = "secure_page_low.php";
	}

	//alert(id_name+"::"+dojo.byId(id_name));
	//document.getElementById(id_name).innerHTML = "cargando ... ";
	var kw = {
		url: _url,
		sync: true,
		load: function(data){
				//alert("LOAD "+id_name+" :: "+data);
				if(trim(data)!=""){
					document.getElementById(id_name).innerHTML = data;
					//alert("contenido:"+document.getElementById(id_name).innerHTML);
				}
		},
		error: function(data){
				console.debug("A ocurrido un error: ", data);
		},
		timeout: 2500,
		form: form_name
	};
	dojo.xhrGet(kw);
}

function appendData(form_name, id_name, _url)
{
	if(_url=="undefined"){
		var _url = "secure_page_low.php";
	}

	//alert(id_name+"::"+dojo.byId(id_name));
	//document.getElementById(id_name).innerHTML = "cargando ... ";
	var kw = {
		url: _url,
		sync: true,
		load: function(data){
				//alert("LOAD "+id_name+" :: "+data);
				if(trim(data)!=""){
					document.getElementById(id_name).innerHTML = document.getElementById(id_name).innerHTML + data;
					//alert("contenido:"+document.getElementById(id_name).innerHTML);
				}
		},
		error: function(data){
				console.debug("A ocurrido un error: ", data);
		},
		timeout: 2500,
		form: form_name
	};
	dojo.xhrGet(kw);
}


function loadValue(form_name, id_name, _url)
{
	if(_url=="undefined"){
		var _url = "secure_page_low.php";
	}

	//alert(id_name+"::"+dojo.byId(id_name));
	//document.getElementById(id_name).innerHTML = "cargando ... ";
	var kw = {
		url: _url,
		sync: true,
		load: function(data){
				//alert("LOAD "+id_name+" :: "+data);
				if(trim(data)!=""){
					document.getElementById(id_name).value = data;
					//alert("contenido:"+document.getElementById(id_name).innerHTML);
				}
		},
		error: function(data){
				console.debug("A ocurrido un error: ", data);
		},
		timeout: 2500,
		form: form_name
	};
	dojo.xhrPost(kw);
}

function loadData2(form_name, id_name, _url)
{
	if(_url=="undefined"){
		var _url = "secure_page_low.php";
	}

	//alert(id_name+"::"+dojo.byId(id_name));
	//document.getElementById(id_name).innerHTML = "cargando ... ";
	var kw = {
		url: _url,
		sync: true,
		load: function(data){
				//alert("LOAD "+id_name+" :: "+data);
				if(trim(data)!=""){
					document.getElementById(id_name).value = data;
					//alert("contenido:"+document.getElementById(id_name).innerHTML);
				}
		},
		error: function(data){
				console.debug("A ocurrido un error: ", data);
		},
		timeout: 2500,
		form: form_name
	};
	dojo.xhrGet(kw);
} 
 
 /******************************************************************************************/
 // Registro de Usuarios Logueados
 // Verifica si el usuario envio un pulso en el ultimo minuto para sabe si esta logueado
 function CheckUserLogued(user_id)
 {
 	var _url = 'include/common/user_log_check.php';
 	loadData2('formLoguedUserCheck', 'HID_LoguedUserResultCheck', _url );
 	var result = dojo.byId('HID_LoguedUserResultCheck').value;
 	document.getElementById('user_status_'+user_id).innerHTML = result;
 	if(result == "Si"){
 		return true;
 	} 
 	return false;
 }
 
 // Registra una vez por minuto que esta logueado
 function LoguedUserPulse()
 {
 	var _url = 'include/common/user_log_pulse.php';
 	loadData2('formLoguedUser', 'HID_LoguedUserResult', _url );
 	var result = dojo.byId('HID_LoguedUserResult').value;
 }
 
 
 
