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;
}