function fcIsValidDate(myCalendar, format, myMessage) {
   dateStr = myCalendar.value; 
   if (dateStr.length == 0) { 
   		return true; 
   } 
   if (format == null) { format = "MDY"; }
   format = format.toUpperCase();
   if (format.length != 3) { format = "MDY"; }
   if ( (format.indexOf("M") == -1) || (format.indexOf("D") == -1) || (format.indexOf("Y") == -1) ) { format = "MDY"; }
   if (format.substring(0, 1) == "Y") { // If the year is first
      var reg1 = /^\d{2}(\-|\/|\.)\d{1,2}\1\d{1,2}$/
      var reg2 = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/
   } else if (format.substring(1, 2) == "Y") { // If the year is second
      var reg1 = /^\d{1,2}(\-|\/|\.)\d{2}\1\d{1,2}$/
      var reg2 = /^\d{1,2}(\-|\/|\.)\d{4}\1\d{1,2}$/
   } else { // The year must be third
      var reg1 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{2}$/
      var reg2 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/
   }
   // If it doesn't conform to the right format (with either a 2 digit year or 4 digit year), fail
   if ( (reg1.test(dateStr) == false) && (reg2.test(dateStr) == false) ) { 
   		alert(myMessage); 
   		return false; 
   }
   var parts = dateStr.split(RegExp.$1); // Split into 3 parts based on what the divider was
   // Check to see if the 3 parts end up making a valid date
   if (format.substring(0, 1) == "M") { var mm = parts[0]; } 
   else 
      if (format.substring(1, 2) == "M") { var mm = parts[1]; } else { var mm = parts[2]; 
   }
   if (format.substring(0, 1) == "D") { var dd = parts[0]; } else
      if (format.substring(1, 2) == "D") { var dd = parts[1]; 
   } else { 
  	var dd = parts[2]; 
   }
   if (format.substring(0, 1) == "Y") { var yy = parts[0]; } 
   else 
      if (format.substring(1, 2) == "Y") { 
	  	var yy = parts[1]; 
	  } else { 
	  	var yy = parts[2]; 
	  }
   if (parseFloat(yy) <= 50) { yy = (parseFloat(yy) + 2000).toString(); }
   if (parseFloat(yy) <= 99) { yy = (parseFloat(yy) + 1900).toString(); }
   var dt = new Date(parseFloat(yy), parseFloat(mm)-1, parseFloat(dd), 0, 0, 0, 0);
   if (parseFloat(dd) != dt.getDate()) { 
   		alert(myMessage); 
   		return false; 
   }
   if (parseFloat(mm)-1 != dt.getMonth()) {  
   		alert(myMessage); 
   		return false; 
   }
   strDay = ("0" + dt.getDate());
   strDay = strDay.substring(strDay.length - 2, strDay.length);
   
   strMonth = ("0" + (dt.getMonth() + 1));
   strMonth = strMonth.substring(strMonth.length - 2, strMonth.length);
   
   intYear = dt.getFullYear();
	   if (intYear >= 100 && intYear <= 1999 && ie4 == false) {
   	intYear=intYear + 1900;
   }
   strYear = intYear.toString();
   
   myCalendar.value = strDay + "/" + strMonth + "/" + strYear;
   return true;
}

function isValidCreditCardNumber(cardNumber, cardType){
    var isValid = false;
    var ccCheckRegExp = /[^\d ]/;
    isValid = !ccCheckRegExp.test(cardNumber);
    if (isValid){
        var cardNumbersOnly = cardNumber.replace(/ /g,"");
        var cardNumberLength = cardNumbersOnly.length;
        var lengthIsValid = false;
        var prefixIsValid = false;
        var prefixRegExp;
    switch(cardType){
        case "mastercard":
            lengthIsValid = (cardNumberLength == 16);
            prefixRegExp = /^5[1-5]/;
        break;
        case "visa":
            lengthIsValid = (cardNumberLength == 16 || cardNumberLength == 13);
            prefixRegExp = /^4/;
        break;
        case "amex":
            lengthIsValid = (cardNumberLength == 15);
            prefixRegExp = /^3(4|7)/;
        break;
        default:
            prefixRegExp = /^$/;
            alert("Tipo do cartão inválido");
    }

    prefixIsValid = prefixRegExp.test(cardNumbersOnly);
    isValid = prefixIsValid && lengthIsValid;
    }
    if (isValid){
        var numberProduct;
        var numberProductDigitIndex;
        var checkSumTotal = 0;
        for (digitCounter = cardNumberLength - 1; digitCounter >= 0; digitCounter--){
            checkSumTotal += parseInt (cardNumbersOnly.charAt(digitCounter));
            digitCounter--;
            numberProduct = String((cardNumbersOnly.charAt(digitCounter) * 2));
            for (var productDigitCounter = 0; productDigitCounter < numberProduct.length; productDigitCounter++){
                checkSumTotal += parseInt(numberProduct.charAt(productDigitCounter));
            }
        }
        isValid = (checkSumTotal % 10 == 0);
    }

    return isValid;
}


function fcIsValidDateCompare(myCalendar1, myCalendar2, format, myMessage) {
   dateStr = myCalendar1.value; 
   if (dateStr.length == 0) { 
   		return true; 
   } 
   dateStr2 = myCalendar2.value; 
   if (dateStr2.length == 0) { 
   		return true; 
   } 
   
   if (format == null) { format = "MDY"; }
   format = format.toUpperCase();
   if (format.length != 3) { format = "MDY"; }
   if ( (format.indexOf("M") == -1) || (format.indexOf("D") == -1) || (format.indexOf("Y") == -1) ) { format = "MDY"; }
   if (format.substring(0, 1) == "Y") { // If the year is first
      var reg1 = /^\d{2}(\-|\/|\.)\d{1,2}\1\d{1,2}$/
      var reg2 = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/
   } else if (format.substring(1, 2) == "Y") { // If the year is second
      var reg1 = /^\d{1,2}(\-|\/|\.)\d{2}\1\d{1,2}$/
      var reg2 = /^\d{1,2}(\-|\/|\.)\d{4}\1\d{1,2}$/
   } else { // The year must be third
      var reg1 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{2}$/
      var reg2 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/
   }
   // If it doesn't conform to the right format (with either a 2 digit year or 4 digit year), fail
   if ( (reg1.test(dateStr) == false) && (reg2.test(dateStr) == false) ) { 
   		return false; 
   }
   var parts = dateStr.split(RegExp.$1); // Split into 3 parts based on what the divider was
   // Check to see if the 3 parts end up making a valid date
   if (format.substring(0, 1) == "M") { var mm = parts[0]; } 
   else 
      if (format.substring(1, 2) == "M") { var mm = parts[1]; } else { var mm = parts[2]; 
   }
   if (format.substring(0, 1) == "D") { var dd = parts[0]; } else
      if (format.substring(1, 2) == "D") { var dd = parts[1]; 
   } else { 
  	var dd = parts[2]; 
   }
   if (format.substring(0, 1) == "Y") { var yy = parts[0]; } 
   else 
      if (format.substring(1, 2) == "Y") { 
	  	var yy = parts[1]; 
	  } else { 
	  	var yy = parts[2]; 
	  }
   if (parseFloat(yy) <= 50) { yy = (parseFloat(yy) + 2000).toString(); }
   if (parseFloat(yy) <= 99) { yy = (parseFloat(yy) + 1900).toString(); }
   var dt = new Date(parseFloat(yy), parseFloat(mm)-1, parseFloat(dd), 0, 0, 0, 0);

   if ( (reg1.test(dateStr2) == false) && (reg2.test(dateStr2) == false) ) { 
   		return false; 
   }
   parts = dateStr2.split(RegExp.$1); // Split into 3 parts based on what the divider was
   // Check to see if the 3 parts end up making a valid date
   if (format.substring(0, 1) == "M") { mm = parts[0]; } 
   else 
      if (format.substring(1, 2) == "M") { mm = parts[1]; } else { mm = parts[2]; 
   }
   if (format.substring(0, 1) == "D") { dd = parts[0]; } else
      if (format.substring(1, 2) == "D") { dd = parts[1]; 
   } else { 
  	dd = parts[2]; 
   }
   if (format.substring(0, 1) == "Y") { yy = parts[0]; } 
   else 
      if (format.substring(1, 2) == "Y") { 
	  	yy = parts[1]; 
	  } else { 
	  	yy = parts[2]; 
	  }
   if (parseFloat(yy) <= 50) { yy = (parseFloat(yy) + 2000).toString(); }
   if (parseFloat(yy) <= 99) { yy = (parseFloat(yy) + 1900).toString(); }
   var dt2 = new Date(parseFloat(yy), parseFloat(mm)-1, parseFloat(dd), 0, 0, 0, 0);
   
   //alert(dt2 + ' ' + dt);
   if (dt2 < dt) {
	   alert(myMessage);
	   return false;
   }

   return true;
}

function fcPopUpGeneric(page, tg, w, h){
   newwindow = window.open(page, tg,'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no,WIDTH=' + w + ',HEIGHT=' + h + ',top=0,left=0');
   newwindow.focus();
}

function fcPopupPic(sPicURL) { 
	if (sPicURL == '') {
		alert('Por favor, selecione um arquivo.');
	} else {
		window.open(GetIncludePath() + "imagepopup.asp?img="+sPicURL, "PopPic", "resizable=1,HEIGHT=200,WIDTH=200");
	} 
}

function fcFileExtension(myFile, myExtensions, myMessage) {
	var myReturn = true;
	objFileExtension = myFile.value.substr(myFile.value.lastIndexOf(".")+1);
	if (objFileExtension!='') {
		myReturn = false;
		for (i=0;i<myExtensions.length;i++) {
			if(objFileExtension.toLowerCase()==myExtensions[i].toLowerCase()) {
				myReturn = true;
			}
		}
	}
	if (!myReturn) {
		alert(myMessage);
		myFile.select();
	}
	return myReturn;
}

function fcTextAreaMaxLength(myTextArea, myForm, myMaxLength, myMessage, myShowCounter) {
	objTextArea = eval('myForm.' + myTextArea);
	if (myShowCounter) {
		objTextAreaCounter = eval('myForm.' + myTextArea + '_counter');
	}
	if (objTextArea.value.length > myMaxLength) {
		alert(myMessage);
		objTextArea.value = objTextArea.value.substring(0, myMaxLength);
		objTextArea.focus();
	}
	if (myShowCounter) {
		objTextAreaCounter.value = objTextArea.value.length;
	}
}

function fcTextIsNumeric(sText) {
   var ValidChars = "0123456789.";
   var IsNumber=true;
   var Char;
   for (i = 0; i < sText.length && IsNumber == true; i++) { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) { 
         IsNumber = false;
		}
	}
   return IsNumber;
}

//Valida se caractere é numérico Inteiro
function ValidaNum(campo) {
	var codCar = event.keyCode;
	//alert(codCar);
	var validity = true;
	if ((codCar < 48 || codCar > 57) && codCar != 9 && codCar != 13 && codCar != 8){
		alert ("Este campo aceita somente caracteres numéricos.");
		validity = false;
		campo.focus;
	}
	return validity;
}

//Valida se caractere é numérico Decimal
function ValidaDecimal(campo) {
	myval = campo.value; 
	if(window.event)//IE 
	keycode = window.event.keyCode; 
	else if (e) //FIREFOX e outros. É ' else if ' mesmo, senão não dá pra botar argumentos... 
	keycode = e.which;

   var ValidChars = "0123456789.";
   var Char;
   var myval = "";
   for (i = 0; i < campo.value.length; i++) { 
      Char = campo.value.charAt(i); 
      if (ValidChars.indexOf(Char) >= 0) { 
         myval += Char;
		}
	}

	campo.value = myval; 
	campo.focus(); 
}


function fcTextLength (myText, myMessage) {
	if (myText.value.length == 0) { 
		alert(myMessage);
		if (myText.type != "hidden") {
			myText.focus();
		} 
		return false;
	} else {
		return true;
	}
}

function fcTextIsEmail(myText, myMessage) {
	checkEmail = myText.value;
	if ((checkEmail.indexOf('@') < 0) || ((checkEmail.charAt(checkEmail.length-4) != '.') && (checkEmail.charAt(checkEmail.length-3) != '.'))) {
		alert(myMessage);
		myText.select();
		return false;
	} else {
		return true; 
	} 
} 



function fcSelect(mySelect, myMessage) {
	count = false;
	for (i=0;i<mySelect.options.length;i++) {
		if (mySelect.options[i].selected) {			
			if (i > 0) {
				count = true;
			}
		}
	}
	return count;
}

function fcRadio(myRadio, myMessage) {
	count = false;
	for(i=0;i<myRadio.length;i++) {
		if (myRadio[i].checked) {
			count = true;
		}
	}
	if (!count) {
		alert(myMessage);
		myRadio[0].focus();
	}
	return count;
}

function fcCheckBoxSelectAll(myCheckBox, myForm, myChecked) {
	for(i=0;i<myForm.elements.length;i++) {
		if (myForm.elements[i].name == myCheckBox) {
			myForm.elements[i].checked = myChecked;
		}

	}
}

function fcCheckBoxMax(myCheckBox, myForm, myNumber, myMessage) {
	count = 0;
	for(i=0;i<myForm.elements.length;i++) {
		if (myForm.elements[i].name == myCheckBox) {
			if (myForm.elements[i].checked) {
				count++;
			}
		}
	}
	if (count > myNumber) {
		alert(myMessage);
		return false;
	} else {
		return true;
	}
}

function fcCheckBoxMin(myCheckBox, myForm, myNumber, myMessage) {
	count = 0;
	for(i=0;i<myForm.elements.length;i++) {
		if (myForm.elements[i].name == myCheckBox) {
			if (myForm.elements[i].checked) {
				count++;
			}
		}

	}
	if (count < myNumber) {
		alert(myMessage);
		return false;
	} else {
		return true;
	}
}


function fcSelectMax(mySelect, myNumber, myMessage) {
	count = 0;
	for(i=0;i<mySelect.options.length;i++) {

		if (mySelect.options[i].selected) {
				count++;
		}
	}
	if (count > myNumber) {
		alert(myMessage);
		return false;
	} else {
		return true;
	}
}

function fcSelectMin(mySelect, myNumber, myMessage) {
	count = 0;
	for(i=0;i<mySelect.options.length;i++) {

		if (mySelect.options[i].selected) {
				count++;
		}
	}
	if (count < myNumber) {
		alert(myMessage);
		return false;
	} else {
		return true;
	}
}

function fcTextClean(S){
// Deixa so' os digitos no numero
var Digitos = "0123456789";
var temp = "";
var digito = "";
    for (var i=0; i<S.length; i++){
      digito = S.charAt(i);
      if (Digitos.indexOf(digito)>=0){temp=temp+digito}
    }
    return temp
}

function fcTextCPF(cpf) 
  { 
  var numeros, digitos, soma, i, resultado, digitos_iguais; 
  digitos_iguais = 1; 
  if (cpf.length < 11) 
		return false; 
  for (i = 0; i < cpf.length - 1; i++) 
		if (cpf.charAt(i) != cpf.charAt(i + 1)) 
			  { 
			  digitos_iguais = 0; 
			  break; 
			  } 
  if (!digitos_iguais) 
		{ 
		numeros = cpf.substring(0,9); 
		digitos = cpf.substring(9); 
		soma = 0; 
		for (i = 10; i > 1; i--) 
			  soma += numeros.charAt(10 - i) * i; 
		resultado = soma % 11 < 2 ? 0 : 11 - soma % 11; 
		if (resultado != digitos.charAt(0)) 
			  return false; 
		numeros = cpf.substring(0,10); 
		soma = 0; 
		for (i = 11; i > 1; i--) 
			  soma += numeros.charAt(11 - i) * i; 
		resultado = soma % 11 < 2 ? 0 : 11 - soma % 11; 
		if (resultado != digitos.charAt(1)) 
			  return false; 
		return true; 
		} 
  else 
		return false; 
}	
function fcTextCGC(s)
{
	var i;
	s = fcTextClean(s);
	var c = s.substr(0,12);
	var dv = s.substr(12,2);
	var d1 = 0;
	if (s.length < 14) 
		return false; 
	for (i = 0; i < 12; i++)
	{
		d1 += c.charAt(11-i)*(2+(i % 8));
	}
        if (d1 == 0) return false;
        d1 = 11 - (d1 % 11);
	if (d1 > 9) d1 = 0;
	if (dv.charAt(0) != d1)
	{
		return false;
	}

	d1 *= 2;
	for (i = 0; i < 12; i++)
	{
		d1 += c.charAt(11-i)*(2+((i+1) % 8));
	}
	d1 = 11 - (d1 % 11);
	if (d1 > 9) d1 = 0;
	if (dv.charAt(1) != d1)
	{
		return false;
	}
        return true;
}

// esta funcao repoe caracteres. Usado para repor virgulas por pontos no preco.
function fcTextReplaceAll ( theSource, toFind, replaceWith ) {
	 if (null == theSource ) return "";

	 li_pos = theSource.indexOf( toFind );
 
	 while (li_pos != -1)
	 {
		if (li_pos < theSource.length -1 )
	   theSource = theSource.substring(0, li_pos ) + replaceWith +
				  theSource.substring(li_pos+1, theSource.length);
		else
	   theSource = theSource.substring(0, li_pos );

	   li_pos = theSource.indexOf( toFind, li_pos + replaceWith.length ); 
	 }
	 return theSource;
}

// esta funcao procura textos em array.
function fcSearchJS(Name, frmName) {
	txtSearch = eval('document.' + frmName + '.txtSearch_' + Name);
	txtCommandText = eval('document.' + frmName + '.txtCommandText_' + Name);
	txtFieldID = eval('document.' + frmName + '.txtFieldID_' + Name);
	txtFieldValue = eval('document.' + frmName + '.txtFieldValue_' + Name);
	if (txtSearch.value.length > 0) {
		searchUrl = GetIncludePath() + 'search.asp?formname=' + frmName + '&txtSearch=' + 'txtSearch_' + Name + '&txtSearchText=' + escape(txtSearch.value) + '&txtSearchID=' + Name + '&txtCommandText=' + escape(txtCommandText.value) + '&txtFieldID=' + escape(txtFieldID.value) + '&txtFieldValue=' + escape(txtFieldValue.value);
		eval('document.all.frmSearch_' + Name+ '.src=searchUrl');
	} else {
		alert('Digite o texto que deseja procurar');
		txtSearch.focus();
	}
}

// esta funcao procura textos em array.
function fcLayerTextCacheJS(Name, Text) {
	if (navigator.appName == 'Microsoft Internet Explorer') {
		eval('document.all["' + Name + '"].innerHTML = "' + Text + '"');
	} else {
		eval('document.layers["' + Name + '"].document.open()');
		eval('document.layers["' + Name + '"].document.write("' + Text + '")');
		eval('document.layers["' + Name + '"].document.close()');
	}
}

//Localiza um apóstrofo e substitui por ´
function SubstituiApostrofo() {
   try { 
		if (allRTEs) {
					var vRTEs = allRTEs.split(";");
					for (var i = 0; i < vRTEs.length; i++) {
									if (document.all) {
										oRTE = frames[vRTEs[i]];
									} else {
										oRTE = document.getElementById(rte).contentWindow;
									}
									oRTE.document.body.innerHTML = oRTE.document.body.innerHTML.replace("'", "´"); 
				  }
		}
	} catch(err) {}

	var form = null;
	var regexp = /'/g;
	var texto = '';
	
	for (var intfrmCount=0; intfrmCount <window.document.forms.length; intfrmCount++) {
		form = window.document.forms[intfrmCount];
		for (var i=0; i < form.elements.length; i++) {
			if (form.elements[i].type == "text" || form.elements[i].type == "textarea") {
				if (form.elements[i].value != "" && form.elements[i].name!="jsValidator"){
					texto = form.elements[i].value;
					texto = texto.replace(regexp, "´");
					form.elements[i].value = texto;
				}
			}
		}
	}
}

//Line Display
function ffLineDisplay(strID, strDisplay) {
	if (strDisplay == 'block') {
		strDisplay = '';
	}
	
	try { 
		getElement('ffTableRow_' + strID).style.display = strDisplay;
	} catch(err) {}
	try { 
		getElement('ffTableRow_' + strID + '_Wap').style.display = strDisplay;
	} catch(err) {}
}

//Label Display
function ffLabelDisplay(strID, strDisplay) {
	if (strDisplay == 'block') {
		strDisplay = '';
	}
	
	try { 
		getElement('ffLabel_' + strID).style.display = strDisplay;
	} catch(err) {}
	try { 
		getElement('ffLabel_' + strID + '_Wap').style.display = strDisplay;
	} catch(err) {}
}

//Label Get
function ffGetLabel(strID) {
	return getElement('ffLabel_' + strID);
}

function FormatNumber(originalNumber, placesToLimitTo){
 originalNumber = originalNumber.toString();
 var decimalIndex = originalNumber.search(/\./);

 if (decimalIndex > -1) {
   var limitedToTwoDecimal = originalNumber.substring(0, decimalIndex + 1 + placesToLimitTo);
 }
 else{
   var limitedToTwoDecimal = originalNumber;
 }

 return(limitedToTwoDecimal);
}

function FormataReais(fld, milSep, decSep) { 
var sep = 0; 

var key = ''; 

var i = j = 0; 

var len = len2 = 0; 

var strCheck = '0123456789'; 

var aux = aux2 = ''; 

var whichCode = (window.Event) ? event.which : event.keyCode; 

if (whichCode == 13) return true; 

if (whichCode == 9) return true; 

if (whichCode == 8) return true; 

if (whichCode == 46) return true; 

key = String.fromCharCode(whichCode);// Valor para o código da Chave 

if (strCheck.indexOf(key) == -1) return false; // Chave inválida 

len = fld.value.length; 

for(i = 0; i < len; i++) 

if ((fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep)) break; 

aux = ''; 

for(; i < len; i++) 

if (strCheck.indexOf(fld.value.charAt(i))!=-1) aux += fld.value.charAt(i); 

aux += key; 

len = aux.length; 

if (len == 0) fld.value = ''; 

if (len == 1) fld.value = '0'+ decSep + '0' + aux; 

if (len == 2) fld.value = '0'+ decSep + aux; 

if (len > 2) { 

aux2 = ''; 

for (j = 0, i = len - 3; i >= 0; i--) { 

if (j == 3) { 

aux2 += milSep; 

j = 0; 

} 

aux2 += aux.charAt(i); 

j++; 

} 

fld.value = ''; 

len2 = aux2.length; 

for (i = len2 - 1; i >= 0; i--) 

fld.value += aux2.charAt(i); 

fld.value += decSep + aux.substr(len - 2, len); 

} 

return true; 

} 