function validateEmail(email)
{
    var splitted = email.match("^(.+)@(.+)$");
    if(splitted == null) return false;
    if(splitted[1] != null )
    {
      var regexp_user=/^\"?[\w-_\.]*\"?$/;
      if(splitted[1].match(regexp_user) == null) return false;
    }
    if(splitted[2] != null)
    {
      var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
      if(splitted[2].match(regexp_domain) == null) 
      {
	    var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
	    if(splitted[2].match(regexp_ip) == null) return false;
      }// if
      return true;
    }
return false;
}

function isDate(DateToCheck){
	if(DateToCheck=="") return false;
	var m_strDate = FormatDate(DateToCheck);
	if(m_strDate==""){
		return false;
	}
	var m_arrDate = m_strDate.split("/");
	var m_DAY = m_arrDate[0];
	var m_MONTH = m_arrDate[1];
	var m_YEAR = m_arrDate[2];
	if(m_YEAR.length > 4){return false;}
		m_strDate = m_MONTH + "/" + m_DAY + "/" + m_YEAR;
		var testDate=new Date(m_strDate);
		if(testDate.getMonth()+1==m_MONTH){
		return true;
	} 
	else{
		return false;
	}
}

function FormatDate(DateToFormat,FormatAs){
if(DateToFormat==""){return"";}
if(!FormatAs){FormatAs="dd/mm/yyyy";}

var strReturnDate;
FormatAs = FormatAs.toLowerCase();
DateToFormat = DateToFormat.toLowerCase();
var arrDate
var arrMonths = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
var strMONTH;
var Separator;

while(DateToFormat.indexOf("st")>-1){
DateToFormat = DateToFormat.replace("st","");
}

while(DateToFormat.indexOf("nd")>-1){
DateToFormat = DateToFormat.replace("nd","");
}

while(DateToFormat.indexOf("rd")>-1){
DateToFormat = DateToFormat.replace("rd","");
}

while(DateToFormat.indexOf("th")>-1){
DateToFormat = DateToFormat.replace("th","");
}

if(DateToFormat.indexOf(".")>-1){
Separator = ".";
}

if(DateToFormat.indexOf("-")>-1){
Separator = "-";
}


if(DateToFormat.indexOf("/")>-1){
Separator = "/";
}

if(DateToFormat.indexOf(" ")>-1){
Separator = " ";
}

arrDate = DateToFormat.split(Separator);
DateToFormat = "";
	for(var iSD = 0;iSD < arrDate.length;iSD++){
		if(arrDate[iSD]!=""){
		DateToFormat += arrDate[iSD] + Separator;
		}
	}
DateToFormat = DateToFormat.substring(0,DateToFormat.length-1);
arrDate = DateToFormat.split(Separator);

if(arrDate.length < 3){
return "";
}

var DAY = arrDate[0];
var MONTH = arrDate[1];
var YEAR = arrDate[2];

if(parseFloat(arrDate[1]) > 12){
DAY = arrDate[1];
MONTH = arrDate[0];
}

if(parseFloat(DAY) && DAY.toString().length==4){
YEAR = arrDate[0];
DAY = arrDate[2];
MONTH = arrDate[1];
}

for(var iSD = 0;iSD < arrMonths.length;iSD++){
var ShortMonth = arrMonths[iSD].substring(0,3).toLowerCase();
var MonthPosition = DateToFormat.indexOf(ShortMonth);
	if(MonthPosition > -1){
	MONTH = iSD + 1;
		if(MonthPosition == 0){
		DAY = arrDate[1];
		YEAR = arrDate[2];
		}
	break;
	}
}
var strTemp = YEAR.toString();
if(strTemp.length==2){
	if(parseFloat(YEAR)>40){
	YEAR = "19" + YEAR;
	}
	else{
	YEAR = "20" + YEAR;
	}
}
	if(parseInt(MONTH)< 10 && MONTH.toString().length < 2){
	MONTH = "0" + MONTH;
	}
	if(parseInt(DAY)< 10 && DAY.toString().length < 2){
	DAY = "0" + DAY;
	}
	switch (FormatAs){
	case "dd/mm/yyyy":
	return DAY + "/" + MONTH + "/" + YEAR;
	case "mm/dd/yyyy":
	return MONTH + "/" + DAY + "/" + YEAR;
	case "dd/mmm/yyyy":
	return DAY + " " + arrMonths[MONTH -1].substring(0,3) + " " + YEAR;
	case "mmm/dd/yyyy":
	return arrMonths[MONTH -1].substring(0,3) + " " + DAY + " " + YEAR;
	case "dd/mmmm/yyyy":
	return DAY + " " + arrMonths[MONTH -1] + " " + YEAR;	
	case "mmmm/dd/yyyy":
	return arrMonths[MONTH -1] + " " + DAY + " " + YEAR;
	}
return DAY + "/" + strMONTH + "/" + YEAR;;
} //End Function

function isNumber(str){ 
if (str.length==0) return false;
numdecs = 0;
numcomma = 0;
numminus = 0;
for (i = 0; i < str.length; i++) 
{
	mychar = str.charAt(i); 
	if ((mychar >= "0" && mychar <= "9") || mychar == "." || mychar == "," || mychar == "-" ){ 
		if (mychar == ".") numdecs++; 
		if (mychar == ",") numcomma++;
                if (mychar == "-") numminus++;
	} else return false; 
} 
if (((numdecs>1) || (numcomma>1) || (numminus>1)) || ((mychar=="." || mychar=="," || mychar=="-")) || ((str.charAt(0)==".") || (str.charAt(0)==","))) return false;
return true; 
}

function isWeek(str){ 
if (str.length==0) return false;
if (str.length>10) return false;
if (str.charAt(0).toUpperCase()=="S"){
	if (str.charAt(1).toUpperCase()=="E"){
		if (str.charAt(2).toUpperCase()=="M"){
			if (str.charAt(3).toUpperCase()=="."){
				if (str.charAt(4).toUpperCase()==" "){
					if ((str.charAt(5).toUpperCase() >= "0") && (str.charAt(5).toUpperCase() <= "5")){
						if ((str.charAt(6).toUpperCase() >= "0") && (str.charAt(6).toUpperCase() <= "9")){
							if (str.charAt(7).toUpperCase()=="-"){
								if ((str.charAt(8).toUpperCase() >= "0") && (str.charAt(8).toUpperCase() <= "9")){
									if ((str.charAt(9).toUpperCase() >= "0") && (str.charAt(9).toUpperCase() <= "9")){
										return true;
									}else return false;
								}else return false;
							}else return false;
						}else return false;
					}else return false;
				}else return false;
			}else return false;
		}else return false;
	}else return false;
}else return false;
}

//*******************************************************************************************************************

function validateData(strValidateStr,objValue,strError) 
{ 
    var epos = strValidateStr.search("="); 
    var  command  = ""; 
    var  cmdvalue = ""; 
    if(epos >= 0) 
    { 
     command  = strValidateStr.substring(0,epos); 
     cmdvalue = strValidateStr.substr(epos+1); 
    } 
    else 
    { 
     command = strValidateStr; 
    } 

    switch(command) 
    { 
        case "req": 
        case "required": 
         		{ 
				  if(eval(objValue.value.length) == 0) 
				    { 
			          if(!strError || strError.length ==0) 
   			            { 
		                  strError = objValue.name + " : O campo não pode ter um valor em branco!"; 
	                    }
		              alert(strError);
		              return false; 
		            }
		         break;             
		         } 
        case "maxlength": 
        case "maxlen": 
                 { 
                   if(eval(objValue.value.length) >  eval(cmdvalue)) 
                     { 
                       if(!strError || strError.length ==0) 
                         { 
                           strError = objValue.name + " : "+cmdvalue+" Máximo de Caracteres!"; 
                         }
					   alert(strError + "\n[Tamanho Actual = " + objValue.value.length + "]"); 
					   return false; 
                     }
                  break; 
                  } 
        case "minlength": 
        case "minlen": 
           { 
             if(eval(objValue.value.length) <  eval(cmdvalue)) 
             { 
               if(!strError || strError.length ==0) 
               { 
                 strError = objValue.name + " : " + cmdvalue + " Mínimo de Caracteres!"; 
               }//if               
               alert(strError + "\n[Tamanho Actual = " + objValue.value.length + "]"); 
               return false;                 
             }
             break; 
            } 
        case "alnum": 
        case "alphanumeric": 
           { 
              var charpos = objValue.value.search("[^A-Za-z0-9]"); 
              if(objValue.value.length > 0 &&  charpos >= 0) 
              { 
               if(!strError || strError.length ==0) 
                { 
                  strError = objValue.name+": Apenas Caracteres Alpha-Numéricos são permitidos!"; 
                }//if 
                alert(strError + "\n [Erro no Caracter na posição " + eval(charpos+1)+"]");
                return false; 
              }
              break; 
           }//case alphanumeric 
        case "num": 
        case "numeric": 
           { 
              var charpos = objValue.value.search("[^0-9]"); 
              if(objValue.value.length > 0 &&  charpos >= 0) 
              { 
                if(!strError || strError.length ==0) 
                { 
                  strError = objValue.name+": Apenas valores númericos são permitidos!"; 
                }//if               
                alert(strError + "\n [Erro no Caracter na posição " + eval(charpos+1)+"]"); 
                return false; 
              }
              break;               
           }//numeric
         case "float":
		   {
			   var charpos = objValue.value.search("[^0-9,.]");
			   if (!isNumber(objValue.value))
			   { 
                 if(!strError || strError.length ==0) 
                 { 
                  strError = objValue.name+": Apenas valores numéricos são permitidos!"; 
                 }//if               
                alert(strError + "\n [Erro no Caracter na posição " + eval(charpos+1)+"]"); 
                return false; 
              }
              break; 
        }//float
        case "currency":
		   {
			   var charpos = objValue.value.search("[^0-9,.]");
			   if (!isNumber(objValue.value))
			   { 
                 if(!strError || strError.length ==0) 
                 { 
                  strError = objValue.name+": Apenas valores numerários são permitidos!"; 
                 }//if               
                alert(strError + "\n [Erro no Caracter na posição " + eval(charpos+1)+"]"); 
                return false; 
              }
              break; 
		   }//currency
        case "alphabetic": 
        case "alpha": 
           { 
              var charpos = objValue.value.search("[^A-Za-z]"); 
              if(objValue.value.length > 0 &&  charpos >= 0) 
              { 
                  if(!strError || strError.length ==0) 
                { 
                  strError = objValue.name+": Apenas caracteres alfabéticos permitidos!"; 
                }//if                             
                alert(strError + "\n [Erro no Caracter na posição " + eval(charpos+1)+"]"); 
                return false; 
              }
              break; 
           }//alpha 
        case "email": 
          { 
               if(!validateEmail(objValue.value)) 
               { 
                 if(!strError || strError.length ==0) 
                 { 
                    strError = objValue.name+": Introduza um endereço válido de Email!"; 
                 }//if                                               
                 alert(strError);
                 return false; 
               }
           break; 
          }//case email 
        case "lt": 
        case "lessthan": 
         { 
            if(isNaN(objValue.value)) 
            { 
              alert(objValue.name+": Tem de ser um valor numérico!");
              return false; 
            }
            if(eval(objValue.value) >=  eval(cmdvalue)) 
            { 
              if(!strError || strError.length ==0) 
              { 
                strError = objValue.name + " : O Valor tem de ser menor que "+ cmdvalue; 
              }//if               
              alert(strError);
              return false;                 
             }
            break; 
         }//case lessthan 
        case "gt": 
        case "greaterthan": 
         { 
            if(isNaN(objValue.value)) 
            { 
              alert(objValue.name+": Tem de ser um valor numérico!"); 
              return false; 
            }
             if(eval(objValue.value) <=  eval(cmdvalue)) 
             { 
               if(!strError || strError.length ==0) 
               { 
                 strError = objValue.name + " : O Valor tem de ser maior que "+ cmdvalue; 
               }//if               
               alert(strError);
               return false;                 
             }
            break; 
         }//case greaterthan 
        case "regexp": 
         { 
            if(!objValue.value.match(cmdvalue)) 
            { 
              if(!strError || strError.length ==0) 
              { 
                strError = objValue.name+": Caracteres Inválidos Encontrados!"; 
              }//if                                                               
              alert(strError);
              return false;                   
            }
           break; 
         }//case regexp 
        case "dontselect": 
         { 
            if(objValue.selectedIndex == null || objValue.selectedIndex==0)
            { 
              alert("Por favor selecione um valor!"); 
              return false; 
            }
            if(objValue.selectedIndex == eval(cmdvalue)) 
            {
                    
             if(!strError || strError.length ==0 || objValue.selectedIndex==0) 
              { 
              strError = objValue.name+": Por favor selecione um valor!"; 
              }//if                                                               
              alert(strError); 
              return false;                                   
             } 
             break; 
         }//case dontselect 
	case "date":
	  {
	    if (!isDate(objValue.value)){
				alert('Data Inválida, Formato da data [aaaa/mm/dd]');
				return false;
			}
			break;
          }//case date
        case "seemail": 
          { 
               if(objValue.value.length > 0){
                       if(!validateEmail(objValue.value)) 
                       { 
                         if(!strError || strError.length ==0) 
                         { 
                            strError = objValue.name+": Introduza um endereço válido de Email!"; 
                         }//if                                               
                         alert(strError);
                         return false; 
                       }
               }
           break; 
          }//case email   
        case "sedate":{
	      if(objValue.value.length > 0){
                      if (!isDate(objValue.value)){
                              alert('Data Inválida, Formato da data [aaaa/mm/dd]');
                              return false;
                      }
              }
              break;
        }//case sedate
        case "dateorweek":{
	      if(objValue.value.length > 0){
                      if ((isDate(objValue.value)) || (isWeek(objValue.value))){
                      } else {
                              alert('Data Inválida, Formato da data [aaaa/mm/dd] ou [Sem. nn-aa]');
                              return false;
                      }
              }
              break;
        }
        case "senumeric":{ 
        var charpos = objValue.value.search("[^0-9]");
                if(objValue.value.length > 0){
                        if(charpos >= 0){ 
                                if(!strError || strError.length ==0){ 
                                        strError = objValue.name+": Apenas valores númericos são permitidos!";
                                }
                                alert(strError + "\n [Erro no Caracter na posição " + eval(charpos+1)+"]");
                                return false;
                        }
                }
                break;               
        }//senumeric
        case "sefloat":{
        var charpos = objValue.value.search("[^0-9,.-]");
                if(objValue.value.length > 0){
		        if (!isNumber(objValue.value)){ 
                                if(!strError || strError.length ==0){ 
                                        strError = objValue.name+": Apenas valores numéricos são permitidos!";
                                }
                                alert(strError + "\n [Erro no Caracter na posição " + eval(charpos+1)+"]");
                                return false;
                        }
                }
                break; 
        }//sefloat
        case "securrency":{
        var charpos = objValue.value.search("[^0-9,.]");
                if(objValue.value.length > 0){
                        if (!isNumber(objValue.value)){ 
                                if(!strError || strError.length ==0){ 
                                        strError = objValue.name+": Apenas valores numerários são permitidos!";
                                }
                                alert(strError + "\n [Erro no Caracter na posição " + eval(charpos+1)+"]");
                                return false; 
                        }
                }
                break; 
        }//securrency
    }//switch 
    return true; 
}

function validateForm(objFrm,arrObjDesc) 
{ 
 for(var itrobj=0; itrobj < arrObjDesc.length; itrobj++) 
 { 
   if(objFrm.elements.length <= itrobj) 
   { 
        alert("Error: Objecto Inválido"); 
        return false; 
   }//if 
   for(var itrdesc=0; itrdesc < arrObjDesc[itrobj].length ;itrdesc++) 
   { 
      if(validateData(arrObjDesc[itrobj][itrdesc][0],objFrm[itrobj],arrObjDesc[itrobj][itrdesc][1]) == false) 
       { 
	     objFrm[itrobj].style.backgroundColor="#FFFFBB";
	     objFrm[itrobj].focus();
		return false; 
	
       } else objFrm[itrobj].style.backgroundColor="#FFFFFF";
   }//for 
 }//for
 return true;
}

function getImageWidth(myImage) {
	var x, obj;
	if (document.layers) {
		var img = getImage(myImage);
		return img.width;
	} else {
		return getElementWidth(myImage);
	}
	return -1;
}

function getImageHeight(myImage) {
	var y, obj;
	if (document.layers) {
		var img = getImage(myImage);
		return img.height;
	} else {
		return getElementHeight(myImage);
	}
	return -1;
}
