// Funciones de validacion

function validarbusqueda(f){
	if (Trim(f.parametro.value).length<1){
		alert('Introduzca una cadena.');
		return false;
	}
	return true;
}


function validarForm() { 
	var f = document.formulario;
  var i,p,q,nm,validacion,num,min,max,errors='',args=validarForm.arguments;
  if (args[0]!='Eliminar'){
	  for (i=1; i<(args.length-3); i+=4) { 
	  	var titulo =args[i];
	  	var cmp = args[i+1];
	  	var obj = eval('document.getElementById(\''+cmp+'\')');
	  	var tipo = args[i+2];
	  	var validacion=args[i+3]; 
	  	// comprobar si está vacío 
	  	if (validacion.indexOf('V')>-1){
	 			if (!tieneValor(obj,tipo))
	 				errors = errors + titulo +' - debe ser completado.\n';
	 		}
	  	// comprobar si es fecha 
	  	if (validacion.indexOf('F')>-1)
	  		if (!validarFecha(obj.value))
	  			errors = errors + titulo +' - es una fecha incorrecta\n';
	  	// comprobar si es número
	  	if (validacion.indexOf('N')>-1){
	  		if (isNaN(obj.value.replace(/,/,".")))
	  			errors = errors + titulo +' - es una número incorrecto\n';
	  	}
	  	// comprobar si es número mayor que cero
	  	if (validacion.indexOf('Y')>-1){
	  		if (!(isNaN(obj.value.replace(/,/,".")))){
	  			if (parseInt(obj.value)<=0)
	  				errors = errors + titulo +' - debe ser mayor que 0\n';
	  		}
	  	}
	  	
	  	// comprobar si es entero
	  	if (validacion.indexOf('E')>-1){}
	  	// comprobar si es mail
	  	if (validacion.indexOf('M')>-1){}
	  	// comprobar si es hora
	  	if (validacion.indexOf('H')>-1){}
	  	// comprobar si es un cif o nif
	  	if (validacion.indexOf('C')>-1){
	  		if (!(esValidoNIF(obj.value) || esValidoCIF(obj.value) || esValidoNIE(obj.value) )){
	  			errors = errors + titulo+' - es un número incorrecto\n';
	  		}
	  	}
	  	
	  	// comprobar si el numero esta entre un rango
	  	if (validacion.indexOf('R')>-1){}
	  } 
	}
  
  if (errors) {
		alert('POR FAVOR, REVISE QUE:\n'+errors);
		return false;
  }
  
  return true;
  
}


// Funciones generales 
function Trim(TRIM_VALUE){
	if(TRIM_VALUE.length < 1){
		return"";
	}
	TRIM_VALUE = RTrim(TRIM_VALUE);
	TRIM_VALUE = LTrim(TRIM_VALUE);
	if(TRIM_VALUE=="")
		return "";
	else 
		return TRIM_VALUE;
} //End Function

function RTrim(VALUE){
	var w_space = String.fromCharCode(32);
	var v_length = VALUE.length;
	var strTemp = "";
	if(v_length < 0){
		return"";
	}
	var iTemp = v_length -1;

	while(iTemp > -1){
		if(VALUE.charAt(iTemp) == w_space){
		}else{
			strTemp = VALUE.substring(0,iTemp +1);
			break;
		}
		iTemp = iTemp-1;
	} //End While
return strTemp;

} //End Function

function LTrim(VALUE){
	var w_space = String.fromCharCode(32);
	if(v_length < 1){
		return"";
	}
	var v_length = VALUE.length;
	var strTemp = "";
	
	var iTemp = 0;
	
	while(iTemp < v_length){
		if(VALUE.charAt(iTemp) == w_space){
		}
		else{
			strTemp = VALUE.substring(iTemp,v_length);
		break;
		}
		iTemp = iTemp + 1;
	} //End While
	return strTemp;
} //End Function




// SIN CORREGIR
function mensajeErro(form_object, input_object, object_type, error_message) {
	alert(error_message);									
	if (object_type == "RADIO" || object_type == "CHECKBOX") {
		if (input_object[0])
			input_object[0].focus();
		else
			input_object.focus();
	}	else if (!(document.all && document.all["_"+input_object.name+"_editor"])) { 
		input_object.focus();  
	}  
	if (object_type == "TEXT" || object_type == "PASSWORD" || object_type == "TEXTAREA" || object_type == "FILE") {
		if (!(document.all && document.all["_"+input_object.name+"_editor"]))
			input_object.select();
	}
	return false;	
}

function tieneValor(obj, obj_type) {
	if (obj_type == "T")	{
		if (Trim(obj.value).length == 0) 
			return false;
		else 
			return true;
	}	else if (obj_type == "SELECT") {
		if (obj.type != "select-multiple" && obj.selectedIndex == 0)
			return false;
		else if (obj.type == "select-multiple" && obj.selectedIndex == -1)
			return false;
		else
			return true;
	}	else if (obj_type == "RADIO" || obj_type == "CHECKBOX")	{
	  var obj = eval('document.getElementsByName(\''+obj.name+'\')');
		if (obj[0]) {
			for (i=0; i < obj.length; i++) {
				if (obj[i].checked)
					return true;
			}
		} else {
			return (obj.checked);
		}
		return false;	
	}
}


// Date (dd/mm/yyyy)
function validarFecha(object_value) {
	if (object_value.length == 0)
	  return true;
	
	isplit = object_value.indexOf('/');
	
	if (isplit == -1)	{
		isplit = object_value.indexOf('.');
	}
	
	if (isplit == -1 || isplit == object_value.length)
		return false;
	
	sDay = object_value.substring(0, isplit);
	
	monthSplit = isplit + 1;
	
	isplit = object_value.indexOf('/', monthSplit);
	
	if (isplit == -1)	{
		isplit = object_value.indexOf('.', monthSplit);
	}
	
	if (isplit == -1 ||  (isplit + 1 )  == object_value.length)
		return false;
	
	sMonth = object_value.substring((sDay.length + 1), isplit);
	
	isep = object_value.indexOf(' ', isplit + 1); 
	if (isep == -1) {
		sYear = object_value.substring(isplit + 1);
	} else {
		sYear = object_value.substring(isplit + 1, isep);
		sTime = object_value.substring(isep + 1);
		if (!valHora(sTime))
			return false; 
	}
	
	if (!valEntero(sMonth)) 
		return false;
	else if (!valRangoNumero(sMonth, 1, 12)) 
		return false;
	else if (!valEntero(sYear)) 
		return false;
	else if (!valRangoNumero(sYear, 0, null)) 
		return false;
	else if (!valEntero(sDay)) 
		return false;
	else if (!EW_checkday(sYear, sMonth, sDay)) 
		return false;
	else
		return true;
}

function EW_checkday(checkYear, checkMonth, checkDay) {
	maxDay = 31;
	
	if (checkMonth == 4 || checkMonth == 6 ||	checkMonth == 9 || checkMonth == 11) {
		maxDay = 30;
	} else if (checkMonth == 2)	{
		if (checkYear % 4 > 0)
			maxDay =28;
		else if (checkYear % 100 == 0 && checkYear % 400 > 0)
			maxDay = 28;
		else
			maxDay = 29;
	}
	
	return valRangoNumero(checkDay, 1, maxDay); 
}

function valEntero(object_value) {
	if (object_value.length == 0)
		return true;
	
	var decimal_format = ".";
	var check_char;
	
	check_char = object_value.indexOf(decimal_format);
	if (check_char < 1)
		return valNumero(object_value);
	else
		return false;
}

function EW_numberrange(object_value, min_value, max_value) {
	if (min_value != null) {
		if (object_value < min_value)
			return false;
	}
	
	if (max_value != null) {
		if (object_value > max_value)
			return false;
	}
	
	return true;
}

function valNumero(object_value) {
	if (object_value.length == 0)
		return true;
	
	var start_format = " .+-0123456789";
	var number_format = " .0123456789";
	var check_char;
	var decimal = false;
	var trailing_blank = false;
	var digits = false;
	
	check_char = start_format.indexOf(object_value.charAt(0));
	if (check_char == 1)
		decimal = true;
	else if (check_char < 1)
		return false;
	 
	for (var i = 1; i < object_value.length; i++)	{
		check_char = number_format.indexOf(object_value.charAt(i))
		if (check_char < 0) {
			return false;
		} else if (check_char == 1)	{
			if (decimal)
				return false;
			else
				decimal = true;
		} else if (check_char == 0) {
			if (decimal || digits)	
			trailing_blank = true;
		}	else if (trailing_blank) { 
			return false;
		} else {
			digits = true;
		}
	}	
	
	return true;
}

function valRangoNumero(object_value, min_value, max_value) {
	if (object_value.length == 0)
		return true;
	
	if (!valNumero(object_value))
		return false;
	else
		return (EW_numberrange((eval(object_value)), min_value, max_value));	
	
	return true;
}

function valHora(object_value) {
	if (object_value.length == 0)
		return true;
	
	isplit = object_value.indexOf(':');
	
	if (isplit == -1 || isplit == object_value.length)
		return false;
	
	sHour = object_value.substring(0, isplit);
	iminute = object_value.indexOf(':', isplit + 1);
	
	if (iminute == -1 || iminute == object_value.length)
		sMin = object_value.substring((sHour.length + 1));
	else
		sMin = object_value.substring((sHour.length + 1), iminute);
	
	if (!valEntero(sHour))
		return false;
	else if (!valRangoNumero(sHour, 0, 23)) 
		return false;
	
	if (!valEntero(sMin))
		return false;
	else if (!valRangoNumero(sMin, 0, 59))
		return false;
	
	if (iminute != -1) {
		sSec = object_value.substring(iminute + 1);		
		if (!valEntero(sSec))
			return false;
		else if (!valRangoNumero(sSec, 0, 59))
			return false;	
	}
	
	return true;
}


function valEmail(object_value) {
	if (object_value.length == 0)
		return true;
	
	if (!(object_value.indexOf("@") > -1 && object_value.indexOf(".") > -1))
		return false;    
	
	return true;
}





function EW_checkphone(object_value) {
	if (object_value.length == 0)
		return true;
	
	if (object_value.length != 12)
		return false;
	
	if (!valNumero(object_value.substring(0,3)))
		return false;
	else if (!EW_numberrange((eval(object_value.substring(0,3))), 100, 1000))
		return false;
	
	if (object_value.charAt(3) != "-" && object_value.charAt(3) != " ")
		return false
	
	if (!valNumero(object_value.substring(4,7)))
		return false;
	else if (!EW_numberrange((eval(object_value.substring(4,7))), 100, 1000))
		return false;
	
	if (object_value.charAt(7) != "-" && object_value.charAt(7) != " ")
		return false;
	
	if (object_value.charAt(8) == "-" || object_value.charAt(8) == "+")
		return false;
	else
		return (valEntero(object_value.substring(8,12)));
}


function valCP(object_value) {
	if (object_value.length == 0)
		return true;
	
	if (object_value.length != 5)
		return false;
	
	
	if (!valEntero(object_value))
		return false;
	
	return true;
}



	
// GUID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}	
function EW_checkGUID(object_value)	{
	if (object_value.length == 0)
		return true;
	if (object_value.length != 38)
		return false;
	if (object_value.charAt(0)!="{")
		return false;
	if (object_value.charAt(37)!="}")
		return false;	
	
	var hex_format = "0123456789abcdefABCDEF";
	var check_char;	
	
	for (var i = 1; i < 37; i++) {		
		if ((i==9) || (i==14) || (i==19) || (i==24)) {
			if (object_value.charAt(i)!="-")
				return false;
		} else {
			check_char = hex_format.indexOf(object_value.charAt(i));
			if (check_char < 0)
				return false;
		}
	}
	return true;
}
	

// Update a combobox with filter value
// object_value_array format
// object_value_array[n] = option value
// object_value_array[n+1] = option text 1
// object_value_array[n+2] = option text 2
// object_value_array[n+3] = option filter value
function EW_updatecombo(obj, object_value_array, filter_value) {	
	for (var i = obj.length-1; i > 0; i--) {
		obj.options[i] = null;
	}	
	for (var j=0; j<object_value_array.length; j=j+4) {
		if (object_value_array[j+3].toUpperCase() == filter_value.toUpperCase()) {
			EW_newopt(obj, object_value_array[j], object_value_array[j+1], object_value_array[j+2]);			
		}	
	}
}

// Create combobox option 
function EW_newopt(obj, value, text1, text2) {
	var text = text1;
	if (text2 != "")
		text += ", " + text2;
	var optionName = new Option(text, value, false, false)
	var length = obj.length;
	obj.options[length] = optionName;
}

// Select combobox option
function selOpcionCombo(obj, value) {
	for (var i = obj.length-1; i>=0; i--) {
		if (obj.options[i].value.toUpperCase() == value.toUpperCase()) {
			obj.selectedIndex = i;
			break;
		}
	}
}

// Get image width/height
function EW_getimagesize(file_object, width_object, height_object) {
	if (navigator.appVersion.indexOf("MSIE") != -1)	{
		myimage = new Image();
		myimage.onload = function () {
			width_object.value = myimage.width; height_object.value = myimage.height;
		}		
		myimage.src = file_object.value;
	}
}

function EW_checkcreditcard(object_value) {
	var white_space = " -";
	var creditcard_string = "";
	var check_char;
	
	if (object_value.length == 0)
		return true;
	
	for (var i = 0; i < object_value.length; i++) {
		check_char = white_space.indexOf(object_value.charAt(i));
		if (check_char < 0)
			creditcard_string += object_value.substring(i, (i + 1));
	}	
	
	if (creditcard_string.length == 0)
		return false;	 
	
	if (creditcard_string.charAt(0) == "+")
		return false;
	
	if (!valEntero(creditcard_string))
		return false;
	
	var doubledigit = creditcard_string.length % 2 == 1 ? false : true;
	var checkdigit = 0;
	var tempdigit;
	
	for (var i = 0; i < creditcard_string.length; i++) {
		tempdigit = eval(creditcard_string.charAt(i));		
		if (doubledigit) {
			tempdigit *= 2;
			checkdigit += (tempdigit % 10);			
			if ((tempdigit / 10) >= 1.0)
				checkdigit++;			
			doubledigit = false;
		}	else {
			checkdigit += tempdigit;
			doubledigit = true;
		}
	}
		
	return (checkdigit % 10) == 0 ? true : false;
}


function EW_checkssc(object_value) {
	var white_space = " -+.";
	var ssc_string="";
	var check_char;
	
	if (object_value.length == 0)
		return true;
	
	if (object_value.length != 11)
		return false;
	
	if (object_value.charAt(3) != "-" && object_value.charAt(3) != " ")
		return false;
	
	if (object_value.charAt(6) != "-" && object_value.charAt(6) != " ")
		return false;
	
	for (var i = 0; i < object_value.length; i++) {
		check_char = white_space.indexOf(object_value.charAt(i));
		if (check_char < 0)
			ssc_string += object_value.substring(i, (i + 1));
	}	
	
	if (ssc_string.length != 9)
		return false;	 
	
	if (!valEntero(ssc_string))
		return false;
	
	return true;
}
	

// FUNCIONES PARA VALIDAR EN LA ENTRADA DE DATOS

function preEsEntero(ev) {
	var charCode;
	if (navigator.appName == "Netscape") // me fijo
		charCode = ev.which; // leo la tecla en ASCII que ingreso
	else
		charCode = ev.keyCode; // leo la tecla en ASCII que ingreso
	if (charCode > 31 && (charCode < 48 || charCode > 57)) {
		//alert('Sólo se aceptan números');
		return false;
	}
	return true;
}

function preEsReal(obj,ev) {
	var charCode;
	if (navigator.appName == "Netscape") // me fijo
		charCode = ev.which; // leo la tecla en ASCII que ingreso
	else
		charCode = ev.keyCode; // leo la tecla en ASCII que ingreso
	if (charCode > 31 && (charCode < 48 || charCode > 57) && (charCode != 46) && (charCode != 44)) {
		//alert("Sólo se aceptan números y '.'");
		return false;
	}
	if (charCode == 46 || charCode == 44){
		if (obj.value.indexOf(',') > -1)
			return false;
	}
	if (charCode == 46){
		cadena = obj.value + '\x2C';
		obj.value = cadena
		return false;
	}
	return true;
}

function preEsCIFNIF(ev){
	var charCode;
	if (navigator.appName == "Netscape") // me fijo
		charCode = ev.which; // leo la tecla en ASCII que ingreso
	else
		charCode = ev.keyCode; // leo la tecla en ASCII que ingreso
	if (!( charCode<31 || (charCode >47 && charCode<58) || (charCode > 64 && charCode < 91) || (charCode > 96 && charCode < 123) )){
		return false;
	}
	return true;
}

function preFecha(obj,ev) {
	var charCode;
	if (navigator.appName == "Netscape") // me fijo
		charCode = ev.which; // leo la tecla en ASCII que ingreso
	else
		charCode = ev.keyCode; // leo la tecla en ASCII que ingreso
	if (charCode > 31 && (charCode < 48 || charCode > 57) && (charCode != 47)) {
		//alert("Sólo se aceptan números y '.'");
		return false;
	}
	if (charCode == 47){
		cadena = obj.value + '\x2F';
		obj.value = cadena
		return false;
	}
	return true;
}

/* valida el NIF */
function esValidoNIF(nif){
	nif = nif.toUpperCase();
  txtError = "";
  ok = true;

	letras = new Array();
  letras[0]  = "T";
  letras[1]  = "R";
  letras[2]  = "W";
  letras[3]  = "A";
  letras[4]  = "G";
  letras[5]  = "M";
  letras[6]  = "Y";
  letras[7]  = "F";
  letras[8]  = "P";
  letras[9]  = "D";
  letras[10] = "X";
  letras[11] = "B";
  letras[12] = "N";
  letras[13] = "J";
  letras[14] = "Z";
  letras[15] = "S";
  letras[16] = "Q";
  letras[17] = "V";
  letras[18] = "H";
  letras[19] = "L";
  letras[20] = "C";
  letras[21] = "K";
  letras[22] = "E";
  
  dni=nif.substring(0,nif.length-1);
  while (dni.charAt(0)=='0'){
  	dni = dni.substring(1,dni.length);
  }
  dni=parseInt(dni);
  letra=nif.charAt(nif.length-1);
  letraCorrecta = letras[ dni % 23];
  if (dni > 99999999){ 
    ok = false;
  } else if(letra<"A" || letra>"Z"){
    ok = false;
  } else if(letra!=letraCorrecta) {
    ok = false;
  }

  if (ok) {
    return true;
  }else{
    //alert(txtError);
    return false;
  }
}

// La función recibe el CIF completo: A58818501
function esValidoCIF(obj) 
{
  var temp = obj.toUpperCase(); // pasar a mayúsculas
  if (!/^[A-Za-z0-9]{9}$/.test(temp))  // Son 9 dígitos? 
		return false
  else if (!/^[ABCDEFGHKLMNPQS]/.test(temp)) // Es una letra de las admitidas ?
		return false
	
	var letras = new Array("J","A","B","C","D","E","F","G","H","I")
  var v1 = new Array(0,2,4,6,8,1,3,5,7,9); 
  var temp = 0; 
  var temp1;

  
  for( i = 2; i <= 6; i += 2 ) 
    {
      temp = temp + v1[ parseInt(obj.substr(i-1,1)) ];
      temp = temp + parseInt(obj.substr(i,1));
    };

  temp = temp + v1[ parseInt(obj.substr(7,1)) ];

  temp = (10 - ( temp % 10));

  if( temp == 10 )
  	temp = 0

  var ult = obj.substr(8,1);
  if ( isNaN (parseInt(ult))){
  	if (ult != letras[temp])
  		return false;
  } else {
  	if (ult != temp)
  		return false;
  }
  
  return true;
}

// Validar el NIE

function esValidoNIE(obj) {
	obj = obj.toUpperCase();
	letra = obj.substr(0,1);
	dni = obj.substr(1,9);
	if ((letra!='X') || !esValidoNIF(dni)){
		return false;
	}
	return true;
}
