// JavaScript Document

function verificaPreenchidos(campos){
	
	args = verificaPreenchidos.arguments;
	if(args.length > 1)
		texto = args[1] + " ";
	else
		texto = "Falta preecher ";

	for(var i=0;i<campos.length;i++){
		if(campos[i].type == "text" || campos[i].type == "password" || campos[i].type == "textarea"){
			if(trim(campos[i].value).length == 0){
				alert(texto + utf8(campos[i].getAttribute("title")));
				if(!campos[i].disabled)
					campos[i].focus();
				return false;
			}
		}
		else if(campos[i].type == "select-one"){
			if(parseInt(campos[i].value) == -1 || campos[i].selectedIndex == -1 || campos[i].value == "null"){
				alert(texto + utf8(campos[i].getAttribute("title")));
				if(!campos[i].disabled)
					campos[i].focus();
				return false;
			}
		}
		else if(campos[i].type == "checkbox"){
			if(!campos[i].checked){
				alert(texto + utf8(campos[i].getAttribute("title")));
				if(!campos[i].disabled)
					campos[i].focus();
				return false;
			}
		}
		else if(isObject(campos[i])){
			if(campos[i][0].type == "checkbox"){
				p = false;
				for(var j=0;j<campos[i].length;j++){
					p = p || campos[i][j].checked;
				}
				if(!p){
					alert(texto + utf8(campos[i][0].getAttribute("title")));
					campos[i][0].focus();
					return false;
				}
			}
			else if(campos[i][0].type == "radio" && !isChecked(campos[i])){
				alert(texto + utf8(campos[i][0].getAttribute("title")));
				return false;
			}
		}
	}
	return true;
}

function isArray(a) {
    return isObject(a) && a.constructor == Array;
}
function isObject(a) {
    return (a && typeof a == 'object');// || isFunction(a);
}
function utf8(val){
	var enc = "";

    for(var pos=0; pos<val.length; pos++)
    {
        var c=val.charCodeAt(pos);
		if(c<128)
			enc += val.charAt(pos);
		else
			enc += eval("new String('\\u00" + from10toradix(c, 16) +"')").toString();
	}
	return enc;
}

function from10toradix(value,radix){
    var retval = '';
    var ConvArray = new initArray(0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F');
    var intnum;
    var tmpnum;
    var i = 0;

    intnum = parseInt(value,10);
    if (isNaN(intnum)){
        retval = 'NaN';
    }else{
        while (intnum > 0.9){
            i++;
            tmpnum = intnum;
            // cancatinate return string with new digit:
            retval = ConvArray[tmpnum % radix] + retval;  
            intnum = Math.floor(tmpnum / radix);
            if (i > 100){
                // break infinite loops
                retval = 'NaN';
                break;
            }
        }
    }
    return retval;
}
function initArray() {
    this.length = initArray.arguments.length;
    for (var i = 0; i < this.length; i++)
        this[i] = initArray.arguments[i];
}

function GetDecimalDelimiter(nCountryCode)
{

       var sRet='';

       switch (nCountryCode)
       {
            case 3:   
                           sRet = '#';
                           break;
            case 2:   
                           sRet = ',';
                           break;
            default:
                           sRet = '.';
                           break;
        }

      return sRet;

}

function GetCommaDelimiter(nCountryCode)
{

       var sRet='';
       switch (nCountryCode)
       {
            case 3:   
                           sRet = '*';
                           break;
            case 2:   
                           sRet = '.';
                           break;
            default:
                           sRet = ',';
                           break;
      }
      return sRet;

}

function FormatClean(num)
{
     var sVal='';
     var nVal = num.length;
     var sChar='';
     
   try
   {
       for(i=0;i<nVal;i++)
      {
         sChar = num.charAt(i);
         nChar = sChar.charCodeAt(0);
         if ((nChar >=48) && (nChar <=57))  { sVal += num.charAt(i);   }
      }
   }
    catch (exception) { AlertError("Format Clean",e); }
    return sVal;
}
 

function FormatCurrency(num,nCountryCode)
{       
        var sVal='';
        var minus='';
        var Decimal='';
        Decimal = GetDecimalDelimiter(nCountryCode);
//		alert("menos: " + num.lastIndexOf("-"));
        if (num.lastIndexOf("-") == 0) { minus='-'; }
        if (num.lastIndexOf(Decimal) < 0) { num = num + '00'; }
        num = FormatClean(num);
        sVal = minus + FormatDollar(num,GetCommaDelimiter(nCountryCode)) + GetDecimalDelimiter(nCountryCode) + FormatCents(num); 
        return sVal;
}

function FormatNumber(num,nCountryCode)
{       
        var sVal='';
        var minus='';
        var CommaDelimiter='';

        try {
           CommaDelimiter = GetCommaDelimiter(nCountryCode);
           if (num.lastIndexOf("-") == 0) { minus='-'; }
           num = FormatClean(num);
           num = parseInt(num);
           var samount = new String(num);
           for (var i = 0; i < Math.floor((samount.length-(1+i))/3); i++)
          {
             samount = samount.substring(0,samount.length-(4*i+3)) + CommaDelimiter + samount.substring(samount.length-(4*i+3));
           }
        }
         catch (exception) { AlertError("Format Number",e); }
        return minus + samount;
}

function FormatCents(amount)
{
     var cents = '';
      try
      {
           amount = parseInt(amount);
           var samount = new String(amount);

			if (samount.length == 0) { return '00'; }
           if (samount.length == 1) { return '0' + samount; }
           if (samount.length == 2) { return samount; }
         
           cents =  samount.substring(samount.length -2,samount.length);
      }
      catch (exception) { AlertError("Format Cents",e); }
      return cents;
}

function FormatDollar(amount,CommaDelimiter)
{
   try 
   {
        amount = parseInt(amount);

        var samount = new String(amount);

        if (samount.length < 3) { return 0; }  
        samount =  samount.substring(0,samount.length -2);
        for (var i = 0; i < Math.floor((samount.length-(1+i))/3); i++)
        {
           samount = samount.substring(0,samount.length-(4*i+3)) + CommaDelimiter + samount.substring(samount.length-(4*i+3));
         }

   }
    catch (exception) { AlertError("Format Comma",e); }
    return samount;
}

 function AlertError(MethodName,e)
 {
            if (e.description == null) { alert(MethodName + " Exception: " + e.message); }
            else {  alert(MethodName + " Exception: " + e.description); }
 }

function toMonetario(campo){

	var valTemp = toNumero(campo.value);
	if(!isNaN(parseFloat(valTemp))){
		var minus = "";
		var samount = new String(valTemp);
        if(samount.lastIndexOf("-") == 0) { 
			minus='-'; 
			samount = samount.substr(1);
		}
		if((pos = samount.lastIndexOf(".")) != -1 && pos < samount.length){
			centimos = samount.substr(pos+1);
			if(centimos.length > 2)
				centimos = centimos.substring(0, 2);
			samount = samount.substring(0, pos);
		}
		else{
			centimos = "00";	
		}
        for (var i = 0; i < Math.floor((samount.length-(1+i))/3); i++){
			samount = samount.substring(0,samount.length-(4*i+3)) + "." + samount.substring(samount.length-(4*i+3));
		}
		campo.value = minus + samount + "," + centimos;
	}
}

function toNumero(valor){

	var num = valor;

	if(num.indexOf(",") == -1){	//O valor já é um valor numérico
		return num;
	}

	var sVal = "";
	for(i=0;i<num.length;i++){
		sChar = num.charAt(i);
		nChar = sChar.charCodeAt(0);
		if ((nChar >=48 && nChar <=57) || (nChar >= 44 && nChar <= 45)){ 
			if(nChar == 44)
				sVal += ".";
			else
				sVal += num.charAt(i);   
		}
	}
	return sVal;
}

function selectAll(chk, ligado){
	if(isObject(chk[0])){
		for(i=0;i<chk.length;i++){
			if(!chk[i].disabled)
				chk[i].checked = ligado;
		}
	}
	else
		if(!chk.disabled)
			chk.checked = ligado;
}

function isChecked(chk){
	for(var i=0;i<chk.length;i++)
		if(chk[i].type == "checkbox" && chk[i].checked)
			return true;
		else if(chk[i].type != "checkbox")
			return true;

	return false;
}


function limparCombo(cmb){
	while (cmb.length> 0)
		cmb.remove(0);		
}

//poe uma combobox seleccionada no valor
function selectCombo(cmb, valor){
	for(i=0;i<cmb.options.length;i++){
		if(cmb.options[i].value == valor){
			cmb.selectedIndex = i;
			break;
		}
	}
}

function camposInterligados(slave, master, operacao){
	var masters = master.split("+");
	var m2 = "";
	var frmName = slave.form.name;
	var obj, masterMonetario = false;
	
	if(slave.getAttribute("tipo") == "monetario"){
		slave.value = toNumero(slave.value);
//		alert(slave.value);
	}
	//alert(slave.value);
	if(isNaN(slave.value) || slave.value.length == 0)
		return true;
	if(master.length == 0)
		return true;
	
	//alert(1);
	
	if(masters.length > 1){
		for(var i=0;i<masters.length;i++){
			m2 += "document." + frmName + "." + masters[i] + ".value + ";
			obj = eval("document." + frmName + "." + masters[i]);
			if(!obj || isNaN(obj.value) || obj.value.length == 0)
				return true;
			obj.value = FormatClean(obj.value);
		}
		m2 = m2.substr(0, m2.length-3);
		titulo2 = m2;
	}
	else if(isNaN(master)){ //MASTER é um campo
		m2 = "parseFloat(document." + frmName + "." + master + ".value)";
		obj = eval("document." + frmName + "." + master);
		titulo2 = obj.getAttribute("titulo");
		if(!obj)
			return true;
		if(obj.getAttribute("tipo") == "monetario"){
			obj.value = toNumero(obj.value);
			masterMonetario = true;
		}		
		if(isNaN(obj.value) || obj.value.length == 0)
			return true;

	}
	else{ //MASTER é um valor numerico
		m2 = master;
		titulo2 = m2;
	}
	if(operacao == "=")
		operacao = "==";
	var str = "parseFloat(document." + frmName + "." + slave.name + ".value) " + operacao + " " + m2;
//	alert(str);
	if(!eval(str)){
		alert("O campo " + slave.getAttribute("titulo") + " tem de ser " + operacao + " que " + titulo2 + "!");
		//slave.focus();
		if(masterMonetario)
			toMonetario(eval("document." + frmName + "." + master));
		return false;
	}
	if(masterMonetario)
		toMonetario(eval("document." + frmName + "." + master));
	if(slave.getAttribute("tipo") == "monetario")
		toMonetario(slave);
	return true;
	
}
	
function isNumberKey(evt){
	var charCode = (evt.which) ? evt.which : evt.keyCode;
	
	return (charCode >= 44 && charCode <= 46) || (charCode >= 48 && charCode <= 57) || charCode < 32;
	
}

function trim(str){
	return str.replace(/^\s*|\s*$/g,"");
}
