function ValidateDate(m_strDate, m_strDate2)
{
	var m_arrDate = m_strDate.split("-");
	var m_DAY = m_arrDate[2];
	var m_MONTH = m_arrDate[1];
	var m_YEAR = m_arrDate[0];
	m_strDate =  m_MONTH + "/" + m_DAY + "/" + m_YEAR;
	var testDate1=new Date(m_strDate);
	var m_arrDate = m_strDate2.split("-");
	var m_DAY = m_arrDate[2];
	var m_MONTH = m_arrDate[1];
	var m_YEAR = m_arrDate[0];
	m_strDate = m_MONTH + "/" + m_DAY + "/" + m_YEAR;	
	var testDate2=new Date(m_strDate);
	if(testDate2 > testDate1) return false;
}


function IsInteger(intValue)
{
   var strValidChars = "0123456789";
   var blnReturn = true;
   var intChar;

   for (intCounter = 0; intCounter < intValue.length && blnReturn == true; intCounter++) 
   { 
      intChar = intValue.charAt(intCounter); 
      if (strValidChars.indexOf(intChar) == -1) 
      {
         blnReturn = false;
      }
   }
   return blnReturn;
}

/*
* DHTML email validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
* Changed by soaressf
*/
function CkeckMail(strEmail, strField) 
{
	//var strBackColor="#FC8D40";
	//var strColor="#FFFFFF";
	var chrAt="@"
	var chrDot="."
	var intLat=strEmail.indexOf(chrAt)
	var intLstr=strEmail.length
	//var intLdot=strEmail.indexOf(chrDot)
	var intLdot=strEmail.lastIndexOf(chrDot)
	
	/* If "@" does not exist */
	if (strEmail.indexOf(chrAt) ==-1)
	{
	   //strField.style.background=strBackColor;	
	   //strField.style.color=strColor;
	   //alert(<? echo '"'.$txt_invalidemail.'"';?>)
	   return false
	}
	/* if "@" does not exist, there is no character before "@", there is no character after "@" */
	if (strEmail.indexOf(chrAt) ==-1 || strEmail.indexOf(chrAt) ==0 || strEmail.indexOf(chrAt) ==intLstr)
	{
	   //strField.style.background=strBackColor;
	   //strField.style.color=strColor;		   
	   //alert(<? echo '"'.$txt_invalidemail.'"';?>)
	   return false
	}

	/* if "." does not exist, there is no character before ".", there is no character after "." */
	//if (strEmail.indexOf(chrDot) ==-1 || strEmail.indexOf(chrDot) ==0 || strEmail.indexOf(chrDot) ==intLstr)
	if (strEmail.lastIndexOf(chrDot) ==-1 || strEmail.lastIndexOf(chrDot) ==0 || strEmail.lastIndexOf(chrDot) + 1 ==intLstr)
	{
	   //strField.style.background=strBackColor;			
	   //strField.style.color=strColor;		   
	   //alert(<? echo '"'.$txt_invalidemail.'"';?>)
	   return false
	}

	 /* If exist two "@" */
	 if (strEmail.indexOf(chrAt,(intLat+1)) !=-1)
	 {
	   //strField.style.background=strBackColor;			 
	   //strField.style.color=strColor;		   
	   //alert(<? echo '"'.$txt_invalidemail.'"';?>)
	   return false
	 }

	 /* If exist "." immediately before and after "@" */ 
	 if (strEmail.substring(intLat-1,intLat) ==chrDot || strEmail.substring(intLat+1,intLat+2) ==chrDot)
	 {
	   //strField.style.background=strBackColor;			 
	   //strField.style.color=strColor;		   
	   //alert(<? echo '"'.$txt_invalidemail.'"';?>)
	   return false
	 }

	 /* If exist two consecutive "." after the "@" */
	 if(strEmail.substring(intLdot,intLdot-1) ==chrDot)
	 {
	   //strField.style.background=strBackColor;			 
	   //strField.style.color=strColor;		   
	   //alert(<? echo '"'.$txt_invalidemail.'"';?>)
	   return false
	 }	

	 /* If does not exist at least one characters after "@" */
	 if (strEmail.indexOf(chrDot,(intLat+2)) ==-1)
	 {
	   //strField.style.background=strBackColor;			 
	   //strField.style.color=strColor;		   
	   //alert(<? echo '"'.$txt_invalidemail.'"';?>)
	   return false
	 }
	
	 /* If the e-mail address has spaces*/
	 if (strEmail.indexOf(" ") !=-1)
	 {
	   //strField.style.background=strBackColor;			 
	   //strField.style.color=strColor;		   
	   //alert(<? echo '"'.$txt_invalidemail.'"';?>)
	   return false
	 }

	 return true					
}

function DisplayMessage(strMessage)
{
	alert(strMessage);	
}

/* Return the appropriate message */
function ErrorMessage(intError)
{
	var strMessage;
	switch(intError)
	{
		case 1:
		  strMessage = "Os campos assinalados são de preenchimento obrigatório!"
		  break;
		case 2:
		  strMessage = "Por favor, introduza um endereço válido!";
		  break;
		case 3:
		  strMessage = "Por favor, introduza apenas algarismos!";
		  break;
		case 4:
		  strMessage = "Data inválida!";
		  break;
		default:
		  strMessage = ""
	}
	return strMessage;
}

/* Reset all colors and then change the color of invalid fields */
function ChangeColor(strForm, strAllFields, objInvalidFields, strBackAlertColor, strBackNormalColor, strTextAlertColor, strTextNormalColor)
{
	var objMandatoryFields = new Array();
	objMandatoryFields = strAllFields.split(',');
	
	for (var intCounter = 0; intCounter < objMandatoryFields.length; intCounter++) 
	{
		var objElement = strForm.elements[objMandatoryFields[intCounter]];
		if(objElement != null && objElement.type != "checkbox")
		{
			objElement.style.backgroundColor = strBackNormalColor;
			objElement.style.color = strTextNormalColor;
		}
	}	
	
	for (objElements in objInvalidFields) 
	{ 
		var objElement = strForm.elements[objInvalidFields[objElements]];
		
		if(objElement.type != "checkbox")
		{
			objElement.style.backgroundColor = strBackAlertColor;
			objElement.style.color = strTextAlertColor;
		}
	}
}

/* Check if element is in the list of mandatory fields */
function ElementToCheck(objElementName, objMandatoryFields)
{
	for (var intCounter = 0; intCounter < objMandatoryFields.length; intCounter++) 
	{
		if(objElementName == objMandatoryFields[intCounter]) return true;
	}
}

function CheckFieldsData(strForm)
{
	var blnReturn = true;
	var intNumberOfElements = strForm.length;
	if(document.getElementById("data1") != null) var dteToday = document.getElementById("data1").value;
	var objFieldsToCheck = new Array();
	objResult = new Object();
	objResult.objMandatoryFields = new Array(); 
	
	for (var intCounter = 0; intCounter < intNumberOfElements; intCounter++) 
	{
		var objElement = strForm.elements[intCounter];
		var objElementType = objElement.type;
		var objElementName = objElement.name;
		var objElementValue = objElement.value;
		var objElementToCheck = false;

		// Check Código Postal...
		if ((objElementName == "codpos1" || objElementName == "tel" || objElementName == "fax" || objElementName == "telemovel" || objElementName == "intTaxPayerNumber" || objElementName == "intNIB") && objElementValue.length != 0 && IsInteger(objElementValue) == false) 
		{
			if(blnReturn == true)
			{
				objResult.objMandatoryFields.push(objElementName);
				objResult.objMessage = ErrorMessage(3);
			}
			blnReturn = false;
			return objResult;//blnValid = false;
		}
		
		if((objElementName == "email" || objElementName == "m_mail" || objElementName == "m_email" || objElementName == "m_email2" || objElementName == "email3") && CkeckMail(objElementValue, objElementName) == false)
		{
			if(blnReturn == true)
			{
				objResult.objMandatoryFields.push(objElementName);
				objResult.objMessage = ErrorMessage(2);
			}
			blnReturn = false;
			return objResult;		
		}
		
		if(objElementName == "data2" && ValidateDate(dteToday, objElementValue) == false)
		{
			if(blnReturn == true)
			{
				objResult.objMandatoryFields.push(objElementName);
				objResult.objMessage = ErrorMessage(4);
			}
			blnReturn = false;
			return objResult;		
		}		
	}

	return blnReturn;
}

function CheckEmptyFields (strForm, strAllFields)
{
	var intNumberOfElements = strForm.length;
	var blnValid = true;
	var radio_selected = false;
	var intError;
	var objMandatoryFields = new Array();
	var objFieldsToCheck = new Array();
	objResult = new Object();
	objResult.objMandatoryFields = new Array(); 
	
	objMandatoryFields = strAllFields.split(',');
	
	for (var intCounter = 0; intCounter < intNumberOfElements; intCounter++) 
	{
		var objElement = strForm.elements[intCounter];
		var objElementType = objElement.type;
		var objElementName = objElement.name;
		var objElementValue = objElement.value;
		var objElementToCheck = false;
		objElementToCheck = ElementToCheck(objElementName, objMandatoryFields);
		// Check Text boxes ...
		if (objElementType == "text" && objElementToCheck == true) 
		{
			//if (objElementValue.length == 0 || objElementValue == objElement.defaultValue)
			if (objElementValue.length == 0)
			{
				objResult.objMandatoryFields.push(objElementName);
				objResult.objMessage = ErrorMessage(1);
				blnValid = false;
			}
		}
		
		// Check Passwords...
		if (objElementType == "password" && objElementToCheck == true) 
		//if (objElementType == "password") 
		{
			if (objElementValue.length == 0 || objElementValue == objElement.defaultValue)
			{
				objResult.objMandatoryFields.push(objElementName);
				objResult.objMessage = ErrorMessage(1);
				blnValid = false;
			} 
		}

		if (objElementType == "textarea") 
		{
			if (objElementValue.length == 0)
			{
				objResult.objMandatoryFields.push(objElementName);
				objResult.objMessage = ErrorMessage(1);
				blnValid = false;
			} 
		}

		// Check Checkboxes ...
		if (objElementType == "checkbox" && objElementToCheck == true) 
		{
			if (objElement.checked == false)
			{
				objResult.objMandatoryFields.push(objElementName);
				objResult.objMessage = ErrorMessage(1);
				blnValid = false;
			} 
		}
	}
	/* NÃO APAGAR!!
	strMessage = ErrorMessage(intError);
	if(blnValid == false) return [objFieldsToCheck, strMessage];
	else return blnValid;
	*/
	if(blnValid == false) return objResult;
	else return blnValid;
}

function ValidateForm(strForm, strFieldsToCheck, strBackAlertColor, strBackNormalColor, strTextAlertColor, strTextNormalColor)
{
	var objInvalidFields;
	var strFieldsDataToCheck = ("codpos1,email,m_mail,m_email,m_email2,email3,data1,data2,tel,fax,telemovel,intTaxPayerNumber,intNIB");
	
	/* NÃO APAGAR!!
	objInvalidFields = CheckEmptyFields (strForm, strAllFields)[0];
	strMessage = CheckEmptyFields (strForm, strAllFields)[1];
	*/
	objInvalidFields = CheckEmptyFields (strForm, strFieldsToCheck);
	ChangeColor(strForm, strFieldsToCheck, objInvalidFields.objMandatoryFields, strBackAlertColor, strBackNormalColor, strTextAlertColor, strTextNormalColor);
	if(objInvalidFields.objMessage != null)	DisplayMessage(objInvalidFields.objMessage);
	if(objInvalidFields == true) blnReturn = true;
	else return false;
	
	objInvalidFields = CheckFieldsData (strForm);
	ChangeColor(strForm, strFieldsDataToCheck, objInvalidFields.objMandatoryFields, strBackAlertColor, strBackNormalColor, strTextAlertColor, strTextNormalColor);
	if(objInvalidFields.objMessage != null) DisplayMessage(objInvalidFields.objMessage);
	if(objInvalidFields == true) blnReturn = true;
	else return false;
	
	return blnReturn;
}