/**
   * Assorted Utility JavaScript Functions v1.0
   * Written by Diego Pires Pires Plentz (http://plentz.org)
   * Thanks to Jonas Galvez
   * Licensed under the GPL 2.0
   */

   var nav = navigator.userAgent.toLowerCase();
   var op  = nav.indexOf("opera") !=- 1;
   var ie  = nav.indexOf("msie") !=- 1;
   var ie5 = nav.indexOf("msie 5") !=- 1;
   var ko  = nav.indexOf("konqueror") !=- 1;
   var sa  = nav.indexOf("safari") !=- 1;
   var ca  = nav.indexOf("camino") !=- 1;
   var ge  = nav.indexOf("gecko") !=- 1;

  o = String.prototype;

  o.$_replace = o.replace;
  o.replace = function(a, b) {
    if(a instanceof RegExp) return this.$_replace(a, b);
    else return this.split(a).join(b);
  }

  o.trim = function() {
    return this.replace(/^\s*|\s*$/g,'');
  }

  o.ltrim = function() {
    return this.replace(/^\s*/g,'');
  }

  o.rtrim = function() {
    return this.replace(/\s*$/g,'');
  }

  o.removeSpaces = function() {
    return this.replace(' ','');
  }
   
  o.isEmail = function() {
    return (/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/).test(this);
  }

  o.isDate = function() {
    return (/^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$/).test(this);
  }

  o.isDateGreater = function (dF){
    if(this.substr(6,4) > dF.substr(6,4)) return false;
    else if (this.substr(6,4) == dF.substr(6,4)){
      if(this.substr(3,2) > dF.substr(3,2)) return false;
      else {if(this.substr(3,2) == dF.substr(3,2) && this.substr(0,2) > dF.substr(0,2)) return false;}
    }
  }

  o.isTime = function() {
    return (/^([0-1][0-9]|2[0-3]):[0-5][0-9]$/).test(this);
  }

  o.isCNPJ = function(){
    var d = this.split("");
    var m1 = [d[0]*5,d[1]*4,d[2]*3,d[3]*2,d[4]*9,d[5]*8,d[6]*7,d[7]*6,d[8]*5,d[9]*4,d[10]*3,d[11]*2];
    var s1 = 0;
    for(i in m1){ s1 += m1[i]; }
    var d1 = (s1%11<2)?0:11-(s1%11);
    var m2 = [d[0]*6,d[1]*5,d[2]*4,d[3]*3,d[4]*2,d[5]*9,d[6]*8,d[7]*7,d[8]*6,d[9]*5,d[10]*4,d[11]*3,d1*2];
    var s2 = 0;
    for(i in m2){ s2 += m2[i]; }
    var d2 = (s2%11<2)?0:11-(s2%11);
    return (d1 == d[12] && d2 == d[13])? true: false;
  }
 
  o.isCPF = function(){
    var d = this.split("");
    var m1 = [d[0]*10,d[1]*9,d[2]*8,d[3]*7,d[4]*6,d[5]*5,d[6]*4,d[7]*3,d[8]*2];
    var s1 = 0;
    for(i in m1){ s1 += m1[i]; }
    var d1 = (s1%11<2)?0:11-(s1%11);
    var m2 = [d[0]*11,d[1]*10,d[2]*9,d[3]*8,d[4]*7,d[5]*6,d[6]*5,d[7]*4,d[8]*3,d1*2];
    var s2 = 0;
    for(i in m2){ s2 += m2[i]; }
    var d2 = (s2%11<2)?0:11-(s2%11);
    return (d1 == d[9] && d2 == d[10])? true: false;
  }
  delete o;

  function filterNum(v) {
    var c = String.fromCharCode(event.keyCode);
    event.returnValue = v ? (/[\d,]/).test(c) : (/\d/).test(c);
  }

  function changeColor(object,color){
    object.style.backgroundColor = (object.style.backgroundColor == "")?color: "";
  }

  function disableButtons(func){
    if(func != false){
      if(func() == false){return false};
    }
    var type, isImpr, d = document;
    var inputs = d.getElementsByTagName("input");

    for(var i = 0, len = inputs.length; i < len; i++) {

        type = inputs[i].type.toLowerCase();
        isImpr = inputs[i].value.toLowerCase().indexOf("impr") == -1;

        if((type == "submit" || type == "reset") && !isimpr) {
            inputs[i].disabled = true;
            inputs[i].value = "Aguarde...";
        }

    }
  }

  function addOnSubmit(){
    for (i=0;i<document.forms.length;i++){
      var oldfunc = document.forms[i].onsubmit;
      if (document.forms[i].target.toLowerCase() != "_blank"){
        document.forms[i].onsubmit = (!document.forms[i].onsubmit)?new Function("disableButtons(false)"):new Function("if(disableButtons("+ oldfunc +") == false){return false}");
      }
    }
  }