
function validateIP(what) {
	if (what.search(/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) != -1) {
		var myArray = what.split(/\./);
		if (myArray[0] > 255 || myArray[1] > 255 || myArray[2] > 255 || myArray[3] > 255)
			return false;
		if (myArray[0] == 0 && myArray[1] == 0 && myArray[2] == 0 && myArray[3] == 0)
			return false;
		return true;
	}
	else
		return false;
}


function ValidateInteger(pEnteroStr) {
	// Si esta nulo, tenemos un error
	if (pEnteroStr == null || pEnteroStr == "") {
		return false;
	}

	var regexp = /^[0-9]+$/gi;	
	return pEnteroStr.match(regexp); 	
}


function checkEmail(emailStr) {
	
	if (emailStr.length == 0) {
		return true;
	}
	var emailPat=/^(.+)@(.+)$/;
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
	var validChars="\[^\\s" + specialChars + "\]";
	var quotedUser="(\"[^\"]*\")";
	var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
	var atom=validChars + '+';
	var word="(" + atom + "|" + quotedUser + ")";
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
	var matchArray=emailStr.match(emailPat);
	if (matchArray == null) {
		return false;
	}
	var user=matchArray[1];
	var domain=matchArray[2];
	if (user.match(userPat) == null) {
		return false;
	}
	var IPArray = domain.match(ipDomainPat);
	if (IPArray != null) {
		for (var i = 1; i <= 4; i++) {
			if (IPArray[i] > 255) {
				return false;
			}
		}
		return true;
	}
	var domainArray=domain.match(domainPat);
	if (domainArray == null) {
		return false;
	}
	var atomPat=new RegExp(atom,"g");
	var domArr=domain.match(atomPat);
	var len=domArr.length;
	if ((domArr[domArr.length-1].length < 2) ||
	(domArr[domArr.length-1].length > 3)) {
		return false;
	}
	if (len < 2) {
		return false;
	}
	return true;
}


function validateURL(s) {
	var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
	return regexp.test(s);
}


function isURL(urlStr) {

	if(urlStr.indexOf(" ") != -1) {
		alert("Spaces are not allowed in a URL");
		return false;
	}
	
	if(urlStr == "" || urlStr == null) {
		return false;
	}

	urlStr = urlStr.toLowerCase();
	var specialChars = "\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
	var validChars = "\[^\\s" + specialChars + "\]";
	var atom = validChars + '+';
	var urlPat = /^http:\/\/(\w*)\.([\-\+a-z0-9]*)\.(\w*)/;
	var matchArray = urlStr.match(urlPat);

	if(matchArray == null){
		alert("The URL seems incorrect \ncheck it begins with http://\n and it has 2 .'s");
		return false;
	}

	var user = matchArray[2];
	var domain = matchArray[3];
	for(i=0; i < user.length; i++) {
		if(user.charCodeAt(i) > 127) {
			alert("This domain contains invalid characters.");
			return false;
		}
	}

	for(i=0; i < domain.length; i++) {
		if(domain.charCodeAt(i) > 127) {
			alert("This domain name contains invalid characters.");
			return false;
		}
	}

	var atomPat = new RegExp("^" + atom + "$");
	var domArr = domain.split(".");
	var len = domArr.length;

	for(i=0; i < len; i++) {
		if(domArr[i].search(atomPat) == -1) {
			alert("The domain name does not seem to be valid.");
			return false;
		}
	}

	/*
	if(domArr[domArr.length-1].length != 2 && domArr[domArr.length-1].search(knownDomsPat) == -1) {
		alert("The address must end in a well-known domain or two letter " + "country.");
		return false;
	}
	*/
	
	return true;
}


// Valida fechas (formato dd/mm/yyyy)
function ValidacionFecha(pFechaStr){
	var dia = pFechaStr.substring(0,2);
	var mes = pFechaStr.substring(3,5);
	var ano = pFechaStr.substring(6,10);
	
	if (pFechaStr.length != 10){
		return 'Invalid format (correct format is dd/mm/aaaa)';
	}
	
	if (pFechaStr.charAt(2) != "/" || pFechaStr.charAt(5) != "/") {
		return 'Invalid format (correct format is dd/mm/aaaa)';
	}
	
	var iDia = Number(pFechaStr.substring(0,2));
	var iMes = Number(pFechaStr.substring(3,5));
	var iAnio = Number(pFechaStr.substring(6,10));
	
			
	if ((ano < 1) || (ano > 9999) || isNaN(iAnio)){
		return 'Incorrect year (between 1 and 9999)';
	}
	
	if ((mes > 12) || (mes < 1) || isNaN(iMes)){
		return 'Incorrect month (between 1 and 12)';
	}
	
	if ((mes == 1) || (mes == 3) || (mes == 5) || (mes == 7) || (mes == 8) || (mes == 10) || (mes == 12) || isNaN(iDia)){
		if ((dia > 31) || (dia < 1)){
			return 'Incorrect day (between 1 and 31)';
		}
	} else if ((mes == 4) || (mes == 6) || (mes == 9) || (mes == 11) || isNaN(iDia)) {
		if ((dia > 30) || (dia < 1)){
			return 'Incorrect day (between 1 and 30)';
		} 
	} else {
		if ((dia > 29) || (dia < 1) || isNaN(iDia)){
			return 'Incorrect day (between 1 and 29)';
		}
	}
	
	
	if (!FechaCorrecta(iAnio,iMes,iDia)){
		return 'Invalid date (dd/mm/aaaa)';
	}
	
			
	return null	
}

function FechaCorrecta(iAnio, iMes, iDia){
	var fecha = new Date(iAnio, iMes-1, iDia);	 

	if (! isNaN(fecha)) {		// Fecha valida
		if (iDia==fecha.getDate()&&iMes==(fecha.getMonth()+1)&&iAnio==fecha.getFullYear()) {	
			return true
		}
	}
	return false
}
			
function ValidateAmount(pMontoStr) {

	// Si esta nulo, tenemos un error
	if (pMontoStr == null || pMontoStr == "") {
		return false;
	}

	// Validamos que sean numeros y tengan una sola coma a lo sumo. 
	var idxcoma1 = pMontoStr.indexOf(".");
	if (idxcoma1 == 0 || idxcoma1 == pMontoStr.length - 1){
		return false;
	}
	
	var idxcoma2 = pMontoStr.lastIndexOf(".");
	
	// Tiene mas de una coma en distintos lugares
	if (idxcoma1 != -1 && idxcoma2 != -1 && idxcoma1 != idxcoma2) {
		return false;
	}

	// Asumimos que esta mal
	var status = false;
	var regexp = /^[0-9]+$/;
	
	// Verificamos si tiene o no coma
	var tieneComa = idxcoma1 != -1;
	if (tieneComa) {
		// Verificamos que sean todos numeros
		// Si despues de la coma hay 2 numero o mas, antes no puede haber mas de 13
		// Si despues de la coma hay un numero, entonces antes tiene que haber como maximo 14
		var intpart = pMontoStr.substring(0, idxcoma1);
		var decpart = pMontoStr.substring(idxcoma1 + 1);

		// Verificamos que sean todos numeros
		status = intpart.match(regexp);
		
		if (decpart != null && decpart != ""){
			if (decpart.length == 1) {
				status = decpart.match(regexp) && intpart.length <= 14;
			} else if (decpart.length > 1) {
				status = decpart.match(regexp) && intpart.length <= 13;
			}
		}
	} else { 
		// Verificamos que sean todos numeros, y con largo a lo sumo 15
		status = pMontoStr.match(regexp) && pMontoStr.length <= 15; 
	}
	
	return status;
}
