/************************************************************/
/** libreria anunciar.js                                   **/
/** author: jlorenzo (at) idealista (dot) com              **/
/** copyright 2000-2005 idealista.com                      **/
/************************************************************/

var obligatorio = 1;
var numerico = 2;
var telefono = 3;
var mail = 4;
var otro = 5;
var otro_alert = 6;
var listamail = 7;
var telefonoint = 8;
var otro_obligatorio = 9;
var otro_operacion = 10;
var telefono_obligatorio = 11;
var numerico_obligatorio = 12;
var numericoneg = 13;
var otro_nofieldset = 14;
var grupo_obligatorio = 15; 
var edad_adulto = 16;
var coherencia_minmax = 17;
var grupo_checks = 18;
var telefono_it = 19;
var toCheck = new Array();


var contador = 0;

function getObj(divId) {
   return (document.layers ? document.layers[divId] :
   document.getElementById ?  document.getElementById(divId) :
   document.all[divId]);
}

function ltrim(s,c) {
  while (s.substring(0,1) == c) {
    s = s.substring(1,s.length);
  }
  return s;
}

function quitaBlancos(z){
	x = z;
	re = /[\s]/i;
	while (x.match(re))
	{
		x = x.replace(re,"");
	}
	return removeQuote(x);	
}

function isInteger(x) {
	y = new String(parseInt(x,10));
	z = new String(ltrim(x,'0'));
	esEntero = ((x=='') || (x.length==0) || (z.indexOf(y)!=-1))
	return (x=='0' || esEntero);
}

function removeQuote(x) {
	return x.replace(/\'/g,"?"); 
}

function addCheckId(field, fieldname, tipo, alpha, texto, id) {	
	removeCheck(id);
	newfield = new Array();
	newfield[0] = field;
	newfield[1] = fieldname;
	newfield[2] = tipo;
	newfield[3] = alpha;
	newfield[4] = texto;
	newfield[5] = id;
	toCheck[toCheck.length] = newfield;	
}

function addCheckOtherId(otherField, fieldname, tipo, alpha, texto, id,field) {	
	removeCheck(id);
	newfield = new Array();
	newfield[0] = otherField;
	newfield[1] = fieldname;
	newfield[2] = tipo;
	newfield[3] = alpha;
	newfield[4] = texto;
	newfield[5] = id;
	newfield[6] = field;
	toCheck[toCheck.length] = newfield;	
}

function addCheck(field, fieldname, tipo, alpha, texto) {
	var id = field + '-' + tipo + '-' + contador + '-id';
	contador++;
	addCheckId(field, fieldname, tipo, alpha, texto, id);
}

function removeCheck(id) {
	index_value = -1;
	encontrado = false;
	while (!encontrado && (index_value < (toCheck.length-1))) {
		index_value++;
		encontrado = (id == toCheck[index_value][5]);
	}
	while (index_value < (toCheck.length-1)) {
		index_value++;
		toCheck[(index_value-1)] = toCheck[index_value];
	}
	if (encontrado) {
		toCheck.length = toCheck.length - 1;
	}
}

function checkEmail(mail) {
  var email = /^[^@]+@[^@.]+\.[^@]*\w\w$/;
  var email2 = /^[A-Za-z0-9][\w.-]+@\w[\w.-]+\.[\w.-]*[A-Za-z][A-Za-z]$/;
  if (!email.test(mail) || !email2.test(mail)) {
	  return false;
  }
  return true;
}

function addMsg(field) {
	if(field[1]=="" && field[4]=="")
		return "";
	else
		return "" + field[1] + " " + field[4] + "\n";
}

function check(form) {
	if (checkBoolean(form))	{
		form.submit();
		return true;
	}
	return false;
}

function checkBoolean(form) {
	var msg = "";
	for (var i=0; i<toCheck.length; i++) {
		field = toCheck[i];
		tipo = field[2];
		// only checks fields inside this form
		// only checks fields inside this form
		var formName = (typeof field[0][0]=="object") ? field[0][0].form.name : field[0].form.name;
		if (formName != form.name) {
			tipo = -1;
		}
		switch (tipo) {
			case obligatorio: {
				valor = quitaBlancos(field[0].value);
				msg += ((valor=="") ? addMsg(field) : ""); break; 
			}
			case numerico: { 
				valor = field[0].value;
				if (valor!="") {
					msg += ((isInteger(valor) && (valor>-1)) ? "" : addMsg(field)); 
				};
				break; 
			}
			case telefono: {
				valor = field[0].value;
				if (valor!="") {
					msg += ((isInteger(valor) && valor>0 && (valor.length>8 && valor.length<10)) ? "" : addMsg(field));
				};
				break;
			}
			case telefono_it: {
				valor = field[0].value;
				if (valor!="") {
					msg += ((isInteger(valor) && valor>0 && (valor.length>8 && valor.length<12)) ? "" : addMsg(field));
				};
				break;
			}
			case mail: {
				valor = field[0].value;
				msg += ((!checkEmail(valor)) ? addMsg(field) : ""); break; 
			}
			case otro: {
				if (field[0].value!="") {
					alpha = field[3];
					x = eval(alpha);
					msg += (!x ? addMsg(field) : ""); 
				};
				break;
			}
			case numericoneg: {
				valor = field[0].value;
				if (valor!="") {
					msg += (isInteger(valor) ? "" : addMsg(field)); 
				};
				break; 
			}
			case listamail: {
				valor = field[0].value;
				if (valor!="") {
					var mal = "";
					x = new String(valor);
					x = x.replace(/\n/g,'');
					field[0].value = x;
					mails = x.split(',');
					var bien = new Array();
					for (ii=0; ii<mails.length; ii++) {
						currmail = trim(mails[ii]);
						if (currmail.length>0) {
							bien = bien.concat(new Array(currmail));
							if (!checkEmail(currmail)) {
								mal += "  - " + currmail + "\n";
							}
						}
					}
					field[0].value = bien.join(',');
					if (mal!="") {
						msg += addMsg(field) + "\n" + mal;
					}
				};
				break; 
			}
			case telefonoint: {
				valor = quitaBlancos(field[0].value);
				if (valor!="") {
					if (document.location.host.indexOf('.it') >= 0){
						tlfint = /^\+?[0-9]{5,19}$/;
					} else {
						tlfint = /^\+?[0-9]{9,19}$/;
					}
					msg += (tlfint.test(valor) ? "" : addMsg(field));
				}
				break;
			}
			case grupo_checks: {
				var bOk = false;
				for (var j= 0; j< field[0].length; j++){
					if (field[0][j].checked){
						bOk = true;
					}
				}
				if (!bOk){
					msg += addMsg(field);
				}
			}
		}
	}
    if (msg!="") {
		alert(msg)
    }
	return (msg=="");
}

/** ejemplo de uso **/
/* esto se anade en la pagina a evaluar
function doCheck() {
	inForm = document.xxx;
	toCheck = new Array();
	addCheck(inForm.campox, nombre_campox, obligatorio, null, texto);
	addCheck(inForm.campox, nombre_campox, mail, null, texto);
	addCheck(inForm.campoy, nombre_campoy, obligatorio, null, texto);
	addCheck(inForm.campoy, nombre_campoy, otro, 'nombre_funcion', texto_de_la_funcion);
	check(inForm);
} */

function format(x) {
	nStr = x.value;
	var rgx = /\./;
	while (rgx.test(nStr)) {
		nStr = nStr.replace(rgx, '');
	}
	var rgx = /\,/;
	while (rgx.test(nStr)) {
		nStr = nStr.replace(rgx, '.');
	}
	var dpos = nStr.indexOf('.');
	var nStrEnd = '';
	if (dpos != -1) {
		nStrEnd = ',' + nStr.substring(dpos + 1, nStr.length);
		nStr = nStr.substring(0, dpos);
	}
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(nStr)) {
		nStr = nStr.replace(rgx, '$1' + '.' + '$2');
	}
	x.value = nStr;
}

function unFormat(x) {
	nStr = x.value;
	var rgx = /\./;
	while (rgx.test(nStr)) {
		nStr = nStr.replace(rgx, '');
	}
	var rgx = /,/;
	while (rgx.test(nStr)) {
		nStr = nStr.replace(rgx, '.');
	}
	x.value = nStr;
}

function unFormatEvent(x) {
	var code = (document.layers) ? event.which : event.keyCode;
	if (code>=48 && code<=57) {
		unFormat(x);
	}
}

function limit(field, idlabel, max) {
	if (field.value.length >= max) {
		field.value = field.value.substr(0,max);
	}
	getObj(idlabel).innerHTML = max - field.value.length;
}

// setted originally in libjs/libNavegador.js
function checkEnter(event,action) { 	
	var code = 0;
	// es NS4
	if (document.layers) code = event.which;
	else code = event.keyCode;
	if (code==13) return eval(action);
	return code;
}
