function nl2br(text){
  return text.replace(/\n/g, "<br>");
}

function addoption(comboid, optvalue, opttext) {
  var combo = document.getElementById(comboid);
  if (!combo) alert('combo '+comboid+' nao encontrada');
  var newopt = document.createElement('option');
  newopt.value = optvalue;
  newopt.appendChild(document.createTextNode(opttext));
  combo.appendChild(newopt);

}

function Stretch(Q, L, c) { var S = Q
 if (c.length>0) while (S.length<L) { S = c+S }
 return S
}

function StrU(X, M, N) { // X>=0.0
 var T, S=new String(Math.round(X*Number("1e"+N)))
 if (S.search && S.search(/\D/)!=-1) { return ''+X }
 with (new String(Stretch(S, M+N, '0')))
 return substring(0, T=(length-N)) + '.' + substring(T)
}

function Sign(X) {
  return X<0 ? '-' : '';
}

function StrS(X, M, N) {
  return Sign(X)+StrU(Math.abs(X), M, N)
}

Number.prototype.toFixed= new Function('n','return StrS(this,1,n)')

function checkdata(field) {
  var i, curpart = 1, curvalue = '', dia = 0, mes = 0, ano = 0;
  if (field.value == '') return false;
  if (field.value.indexOf('/') != -1) return true;
  if (field.value.length != 6 && field.value.length != 8) return false;
  dia = field.value.slice(0, 2);
  mes = field.value.slice(2, 4);
  ano = field.value.slice(4, 8);

  if (ano.length == 2)
    ano = '20' + ano;
  field.value = dia +'/'+ mes +'/'+ ano;
  return true;
}

function checktime(field) {
  var i, curpart = 1, curvalue = '', hora = 0, mins = 0;
  if (field.value == '') return false;
  field.value = field.value.replace(' ', ':');
  field.value = field.value.replace('.', ':');
  if (field.value.length == 4) {
    field.value = field.value.slice(0, 2) + ':' + field.value.slice(2, 4);
  }
  if (field.value.indexOf(':') == -1) {
    field.value = field.value.slice(0, 4);
    if (field.value.length == 1)
      field.value = '0'+field.value;
    if (field.value.length == 2)
      field.value = field.value +':00';
    if (field.value.length == 3)
      field.value = field.value.slice(0, 2) + ':' + field.value.slice(2, 3) +'0';
    if (field.value.length == 4)
      field.value = field.value.slice(0, 2) + ':' + field.value.slice(2, 4);
    return true;
  } else
  if (field.value.length != 5) {
    hora = field.value.slice(0, field.value.indexOf(':'));
    if (hora.length > 2) return false;
    mins = field.value.slice(field.value.indexOf(':'), field.value.indexOf(':') +2);
    if (hora.length != 2)
      hora = '0' + hora;
    if (mins.length != 2)
      mins = '0' + mins;
    field.value = hora + ':' + mins;
    return true;
  }
}

  function isNumeroContribuinte(s) {
  	if (s.length!=9 || !isPositiveInteger(s)) {
	  	return false;
  	}
  	var soma, resto, digi;
    var nif = new Array(9);
  	for (var i=0;i<9;i++) {
    	nif[i] = Number(s.substring(i,i+1));
  	}
  	for (var i=0,soma=0;i<8;i++) {
    	soma += nif[i]*(9-i);
  	}
  	resto = soma%11;
  	digi = 11-resto;
  	if (digi>9) digi=0;
  	return (digi==nif[8]);
  }

  function isInteger(s){
  	var i;
      for (i = 0; i < s.length; i++){
          // Check that current character is number.
          var c = s.charAt(i);
          if (((c < "0") || (c > "9"))) return false;
      }
      // All characters are numbers.
      return true;
  }

  function stripCharsInBag(s, bag){
  	var i;
      var returnString = "";
      // Search through string's characters one by one.
      // If character is not in bag, append to returnString.
      for (i = 0; i < s.length; i++){
          var c = s.charAt(i);
          if (bag.indexOf(c) == -1) returnString += c;
      }
      return returnString;
  }

  function daysInFebruary (year){
  	// February has 29 days in any year evenly divisible by four,
      // EXCEPT for centurial years which are not also divisible by 400.
      return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
  }
  function DaysArray(n) {
  	for (var i = 1; i <= n; i++) {
  		this[i] = 31
  		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
  		if (i==2) {this[i] = 29}
     }
     return this
  }

  function isValidDate(dtStr){
    var dtCh= "/";
    var minYear=1900;
    var maxYear=2100;

  	var daysInMonth = DaysArray(12)
  	var pos1=dtStr.indexOf(dtCh)
  	var pos2=dtStr.indexOf(dtCh,pos1+1)
  	var strDay=dtStr.substring(0,pos1)
  	var strMonth=dtStr.substring(pos1+1,pos2)
  	var strYear=dtStr.substring(pos2+1)
  	strYr=strYear
  	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
  	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
  	for (var i = 1; i <= 3; i++) {
  		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
  	}
  	month=parseInt(strMonth)
  	day=parseInt(strDay)
  	year=parseInt(strYr)
  	if (pos1==-1 || pos2==-1){
  		alert("A data tem ser introduzina no formato dia/mes/ano (dd/mm/aaaa)")
  		return false
  	}
  	if (strMonth.length<1 || month<1 || month>12){
  		alert("Introduza um mês válido")
  		return false
  	}
  	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
  		alert("Introduza um dia válido")
  		return false
  	}
  	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
  		alert("Introduza um ano válido de quatro digitos")
  		return false
  	}
  	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
  		alert("Introduza uma data válida")
  		return false
  	}
    return true
  }

  function getgotviewdetail(formname) {
    return  "    if (xmlHttp"+formname+"_viewdetail.readyState==4 || xmlHttp"+formname+"_viewdetail.readyState=='complete') {"+
            "      response = xmlHttp"+formname+"_viewdetail.responseText;"+
            "      codigo = response.slice(0, response.indexOf(';'));"+
            "      if (!document.getElementById('detail"+formname+"'+codigo))"+
            "        throw('detail"+formname+"'+codigo+' não existe');"+
            "      document.getElementById('detail"+formname+"'+codigo).innerHTML=response.substr(response.indexOf(';') +1);"+
            "    }";
  }
  function viewdetail(formname, classe, codigo) {
    eval("if (document.getElementById('rowdetail"+formname+"'+codigo).style.display) {"+
         "  var url='ajax_get.php?page=getdetail&classname="+classe+"&codigo="+codigo+"&sid='+Math.random();"+
         "  xmlHttp"+formname+"_viewdetail=GetXmlHttpObject("+
         "    Function (\""+getgotviewdetail(formname)+"\")"+
         "  );"+
         "  xmlHttp"+formname+"_viewdetail.open('GET', url , true);"+
         "  xmlHttp"+formname+"_viewdetail.send(null);"+
         "  document.getElementById('rowdetail"+formname+"'+codigo).style.display = '';"+
         "  document.getElementById('detail"+formname+"'+codigo).innerHTML='a carregar...';"+
         "  document.getElementById('btninfo"+formname+"'+codigo).src = 'imgs/close.gif';"+
         "} else {"+
         "   document.getElementById('btninfo"+formname+"'+codigo).src = 'imgs/zoom.gif';"+
         "   document.getElementById('rowdetail"+formname+"'+codigo).style.display = 'none';"+
         "}");
  }

  function setElementValue(elementname, value) {
    if (value != '' && isNaN(value * 1) && language != 'PT') {
      /*console.log("setElementValue translating "+elementname+"\n"+value);*/
      document.getElementById(elementname).value = "";
      $.translate(value, language, { complete: function() { document.getElementById(elementname).value = this.translation; } });
      return true;
    }
    if (document.getElementById(elementname))
      return document.getElementById(elementname).value = value;
    else
      return false;
  }
  function setElementEnabled(elementname, enabled) {
    if (document.getElementById(elementname))
      return document.getElementById(elementname).disabled = !enabled;
    else
      return false;
  }
  function setElementVisible(elementname, visible) {
    if (document.getElementById(elementname))
      return document.getElementById(elementname).style.display = visible ? '' : 'none';
    else
      return false;
  }
  function getElementVisible(elementname) {
    if (document.getElementById(elementname))
      return document.getElementById(elementname).style.display == '';
    else
      return false;
  }
  function setElementInnerHTML(elementname, html, oncomplete) {
    if (html != '' && isNaN(html * 1) && language != 'PT') {
      /*console.log("setElementInnerHTML translating '"+elementname+"'\n"+html);*/
      document.getElementById(elementname).innerHTML = "";
      $.translate(html, language, { complete: function() { document.getElementById(elementname).innerHTML = this.translation; if(oncomplete) oncomplete(); /*console.log("setElementInnerHTML translated result "+elementname+"\n"+this.translation)*/} });
      return true;
    }
    if (document.getElementById(elementname)) {
      document.getElementById(elementname).innerHTML = html;
      if(oncomplete) oncomplete();
      return true;
    } else
      return false;
  }
  function showalertmsg(msg, language, oncomplete) {
    if (language == 'PT') {
      alert(msg);
      if(oncomplete) oncomplete();
    } else {
      $.translate(msg, language, {complete: function() {alert(this.translation); if(oncomplete) oncomplete(); } });
    }
  }
  function showconfirmmsg(msg, language, onconfirm, oncancel) {
    if (language == 'PT') {
      if (confirm(msg)) {
        if(onconfirm) onconfirm();
      } else {
        if(oncancel) oncancel();
      }
    } else {
      $.translate(msg, language, {complete: function() {if(confirm(this.translation)) { if(onconfirm) onconfirm(); } else { if(oncancel) oncancel(); } } });
    }
  }

  function getElementInnerHTML(elementname) {
    if (document.getElementById(elementname))
      return document.getElementById(elementname).innerHTML;
    else
      return null;
  }
  function getElementValue(elementname) {
    if (document.getElementById(elementname)) {
      switch (getElement(elementname).type) {
        case 'checkbox':
          return document.getElementById(elementname).checked;
        default:
          return document.getElementById(elementname).value;
      }
    } else
      return null;
  }
  function getElement(elementname) {
    if (document.getElementById(elementname))
      return document.getElementById(elementname);
    else {
      //alert("Elemento não encontrado "+elementname);
      return null;
    }
  }

  function fadeInWaitBox(opacity) {
    getElement('waitbox').style.filter = "alpha(opacity=" + opacity *100 + ")";
    getElement('waitbox').style.opacity = opacity;
    getElement('waitboxinner').style.filter = "alpha(opacity=" + opacity *200 + ")";
    getElement('waitboxinner').style.opacity = opacity *2;
    if (opacity < 0.5)
      setTimeout("fadeInWaitBox("+opacity+" + 0.1)", 4);
  }
  function fadeOutWaitBox(opacity) {
    getElement('waitbox').style.filter = "alpha(opacity=" + opacity *100 + ")";
    getElement('waitbox').style.opacity = opacity;
    getElement('waitboxinner').style.opacity = opacity *2;
    getElement('waitboxinner').style.filter = "alpha(opacity=" + opacity *200 + ")";
    if (opacity > 0)
      setTimeout("fadeOutWaitBox("+opacity+" - 0.1)", 4);
    else {
      setElementVisible('waitbox', false);
      setElementVisible('waitboxinner', false);
    }
  }
  function showWaitBox(msg) {
    //$("table").fadeTo('fast', 0.4);

    if (msg) {
      msg = "<br>"+msg+"<br><br>";
    } else
      msg = "";
    setElementInnerHTML('waitboxinnermsg', msg);

    $("#waitboxinner").fadeIn('slow');
    $("#waitbox").fadeIn('fast');

    setElementVisible('waitbox', true);
//    setElementVisible('waitboxinner', true);
//    getElement('waitbox').top = 0;
//    fadeInWaitBox(0);
  }
  function hideWaitBox() {
    //$("table").fadeTo('slow', 1);
    $("#waitbox").fadeOut('fast');
//    setElementVisible('waitbox', false);
    $("#waitboxinner").fadeOut('slow');
//    fadeOutWaitBox(0.5);
  }

