// JavaScript Document
/*

Modificado para
CONDOMINIOS

*/

function Validate(objForm) {
	
	
	var arrValidated=new Array();
	
	for (var i=0; i<objForm.elements.length; i++) {
		var element=objForm.elements[i];
		var elName=element.name;
		if ((!elName)||(elName.length == 0)||(arrValidated[elName]))
			continue;
		arrValidated[elName] = true;
		var validationType = element.getAttribute("validate");
		if ((!validationType)||(validationType.length == 0))
			continue;
		var strMessages=element.getAttribute("msg");
		if (!strMessages)
			strMessages = "";
		var arrMessages = strMessages.split("|");
		var arrValidationTypes = validationType.split("|");		
		for (var j=0; j<arrValidationTypes.length; j++) {
			var curValidationType = arrValidationTypes[j];
			var blnValid=true;
			switch (curValidationType) {
				case "not_empty":
					blnValid = ValidateNotEmpty(element);
					texto = '<class id="validation_error">Requerido</class>';
					break;
				case "integer":
					blnValid = ValidateInteger(element);
					texto = '<class id="validation_error">Solo Numeros</class>';
					break;
				case "number":
					blnValid = ValidateNumber(element);
					texto = '<class id="validation_error">Numero no valido</class>';
					break;
					case "moneda":
					blnValid = ValidateMoneda(element);
					texto = '<class id="validation_error">Numero Incorrecto</class>';
					break;
				case "emailEmpty":				    
					blnValid = ValidateEmail_empty(element);
					texto = 'Email valido';
					break;
				case "email":
					blnValid = ValidateEmail(element);
					texto = '<class id="validation_error">e-mail no valido</class>';
					break;
				case "phone":
					blnValid = ValidatePhone(element);
					texto = '<class id="validation_error">Telefono incorrecto</class>';
					break;
				case "imagen":
					blnValid = ValidateImagen(element);
					texto = '<class id="validation_error">Solo se permiten imagenes JPG</class>';
					break;
				
				case "phone_req":
					blnValid = ValidatePhoneReq(element);
					texto = '<class id="validation_error">Telefono requerido</class>';
					break;
				case "caracteres":
					blnValid = ValidateCharacters(element);
					texto = '<class id="validation_error">Se detectaron caracteres no validos</class>';
					break;
				case "pdf":
					blnValid = ValidatePdf(element);
					texto = '<class id="validation_error">Solo PDF</class>';
					break;
				default:
					try {
						blnValid = eval(curValidationType+"(element)");
					}
					catch (ex) {
						blnValid = true;
					}
			}
			if (blnValid == false) {
				var message=" "+texto;
				if ((j < arrMessages.length)&&(arrMessages[j].length > 0))
					message = arrMessages[j];
				InsertError(element, message);
				if ((typeof element.focus == "function")||(element.focus)) {
					element.focus();
				}
				return false;
			}
			else
				ClearError(element);
		}
		
	}
	
	return true;
}

//Empty Validation
function ValidateNotEmpty(objElement) {
	var strValue = GetElementValue(objElement);
	var blnResult = true;
	if(allTrim(strValue) == "") //check for nothing
	{
	blnResult = false;
	}
	return blnResult;
}

//validate email empty
function ValidateEmail_empty(objElement) {
	//  Will check for @, period after @ and text in between
	var strValue = GetElementValue(objElement);
	if (strValue == '')
	{return true;	}
	var in_space = strValue.indexOf(" ");
	if (in_space != -1)
	{ return false;  }
	var len = strValue.length;
	var alpha = strValue.indexOf("@");		
	var last_alpha = strValue.lastIndexOf("@");	
	if (alpha != last_alpha)
	 { return false; }

	// No @, in first position, or name too short
	if (alpha == -1 || alpha == 0 || len<6 )
	 { return false; }

	var last_p = strValue.lastIndexOf(".");
			// Be sure period at least two spaces after @, but not last char.
			
	if (last_p - alpha < 2 || last_p == (len - 1) )
		{ return false; }
	}
	
//validate pdf

function ValidatePdf(objElement) {
	var strValue = GetElementValue(objElement);
	if (strValue == "")
	{
		return true;	
	}
	var last_p1 = strValue.indexOf('.pdf');
	
	if ((last_p1 == -1) )
		{ return false; }
	}


//Integer Validation
function  ValidateInteger(objElement)
   //  check for valid numeric strings	
   {
	   
   var strString = GetElementValue(objElement);
  
   var strValidChars = "0123456789";
   var strChar;
   var blnResult = true;
  
   //  test strString consists of valid characters listed above
   for (i = 0; i < strString.length && blnResult == true; i++)
      {
      strChar = strString.charAt(i);
	    if (strValidChars.indexOf(strChar) == -1)
         {
         blnResult = false;
         }
      }
   return blnResult;
   }

//Number Validation Validando que sea numero solo valido con: "0123456789."
function  ValidateNumber(objElement)

   {
   var strString = GetElementValue(objElement);
   var blnResult = true;

   		  if (isNaN(strString) == true)
			 {
			 blnResult = false;
			 }
   return blnResult;
   }
   
   
   // validando moneda
   //Number Validation
function  ValidateMoneda(objElement)
   //  check for valid numeric strings	
   {
   var strString = GetElementValue(objElement);
   var blnResult = true;
   var temp_string = strString;
  
// eliminando todas las comas posibles  
  for (i = 0; i < strString.length && blnResult == true; i++)
      {
		  temp_string = temp_string.replace(/,/,"");
      }

		  if (isNaN(temp_string) == true)
			 {
			 blnResult = false;
			 return blnResult;
			 }

	objElement.value = temp_string; 
  	return blnResult;
   }
   //fin
   
   function  ValidateCharacters(objElement)
   //  check for valid numeric strings	
   {
   var strString = GetElementValue(objElement);
   var strValidChars = "@0123456789abcdefghijklmnopqrstuvwxyz#_-.ABCDEFGHIJKLMNOPQRSTUVWXYZ, "; //caracteres validos
   var strChar;
   var blnResult = true;

   //  test strString consists of valid characters listed above
   for (i = 0; i < strString.length && blnResult == true; i++)
      {
      strChar = strString.charAt(i);
      if (strValidChars.indexOf(strChar) == -1)
         {
	         blnResult = false;
         }
      }
   return blnResult;
   }
   
   //Email Validation
   function ValidateEmail(objElement) {
	//  Will check for @, period after @ and text in between
	var strValue = GetElementValue(objElement);
	var in_space = strValue.indexOf(" ");
	if (in_space != -1)
	{ return false;  }
	var len = strValue.length;
	var alpha = strValue.indexOf("@");
	var last_alpha = strValue.lastIndexOf("@");
	if (alpha != last_alpha)
	 { return false; }

	// No @, in first position, or name too short
	if (alpha == -1 || alpha == 0 || len<6 )
	 { return false; }

	var last_p = strValue.lastIndexOf(".");
			// Be sure period at least two spaces after @, but not last char.
			
	if (last_p - alpha < 2 || last_p == (len - 1) )
		{ return false; }
	}
	
	function ValidateImagen(objElement) {
	var strValue = GetElementValue(objElement);
	if (strValue == "")
	{
		return true;	
	}
	var last_p1 = strValue.indexOf('.jpg');
	var last_p2 = strValue.lastIndexOf('.jpeg');
	var last_p3 = strValue.indexOf('.JPG');
	var last_p4 = strValue.lastIndexOf('.JPEG');
	if ((last_p1 == -1 && last_p2 == -1)&&(last_p3 == -1 && last_p4 == -1) )
		{ return false; }
	}


	function ValidatePhone(objElement) {
	var strValue = GetElementValue(objElement);
	var minDigitsInIPhoneNumber = 10;
	if (ValidateInteger(objElement) && strValue.length >= minDigitsInIPhoneNumber || strValue.length == 0)
		{
			return true;	
		}
	else
		{
			return false;	
		}
	}

	function ValidatePhoneReq(objElement) {
	var minDigitsInIPhoneNumber = 10;
	var strValue = GetElementValue(objElement);
	if (ValidateInteger(objElement) && strValue.length >= minDigitsInIPhoneNumber)
		{
			return true;	
		}
	else
		{
			return false;	
		}
	}


function GetElementValue(objElement) {
	var result="";
	switch (objElement.type) {
		case "text":
		case "hidden":
		case "textarea":
		case "file":
		case "password":
			result = objElement.value;
			break;
		case "select-one":
		case "select":
			if (objElement.selectedIndex >= 0)
				result = objElement.options[objElement.selectedIndex].value;
			break;
		case "radio":
		case "checkbox":
			for (var i=0; i<objElement.form.elements.length; i++) {
				if (objElement.form.elements[i].name == objElement.name) {
					if (objElement.form.elements[i].checked)
						result += objElement.form.elements[i].value+",";
				}
			}
			break;
	}
	return result;
}

function InsertError(element, strMessage) {
	if ((element.form.getAttribute("show_alert")) && (element.form.getAttribute("show_alert") != "0")) {
		alert(strMessage);
		return;
	}
	
	var strSpanID = element.name+"_val_error";
	var objSpan = document.getElementById(strSpanID);
	if (!objSpan) {
		if ((element.type == "radio")||(element.type == "checkbox")) {
			for (var i=0; i<element.form.elements.length; i++) {
				if (element.form.elements[i].name == element.name) {
					element = element.form.elements[i];
				}
			}
		}
		objSpan = document.createElement("span");
		objSpan.id = strSpanID;
		objSpan.className = "validation_error";
		var nodeAfter=0;
		var nodeParent = element.parentNode;
		for (var i=0; i<nodeParent.childNodes.length; i++) {
			if (nodeParent.childNodes[i] == element) {
				if (i < (nodeParent.childNodes.length-1))
					nodeAfter = nodeParent.childNodes[i+1];
				break;
			}
		}
		if ((!nodeAfter)&&(nodeParent.parentNode)) {
			nodeParent = nodeParent.parentNode;
			for (var i=0; i<nodeParent.childNodes.length; i++) {
				if (nodeParent.childNodes[i] == element.parentNode) {
					if (i < (nodeParent.childNodes.length-1))
						nodeAfter = nodeParent.childNodes[i+1];
					break;
				}
			}
		}
		if (nodeAfter)
			nodeParent.insertBefore(objSpan, nodeAfter);
		else
			document.body.appendChild(objSpan);
	}
	objSpan.innerHTML = strMessage;
}

function ClearError(element) {
	var strSpanID = element.name+"_val_error";
	var objSpan = document.getElementById(strSpanID);
	if (objSpan) {
		objSpan.innerHTML = "";
	}
}

function allTrim(cValue){
 var lDone=false;
 while (lDone==false){
  if (cValue.length==0) {return cValue;}
  if (cValue.indexOf(' ')==0){cValue=cValue.substring(1);lDone=false; continue;}
  else {lDone=true;}
  if (cValue.lastIndexOf(' ')==cValue.length-1){cValue=cValue.substring(0, cValue.length-1);lDone=false;continue;}
  else {lDone=true;}
 }
 return cValue;
}

function stripCharsInBag(s, bag)
{   var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
	}
	return returnString;
}

