var Message = {
    RequiredPlural: "Os campos <<field>> são obrigatórios.",
    RequiredSingular: "O campo <<field>> é obrigatório.",
    join: "e",
    DateInvalid: "Data inválida."
}


String.prototype.trim = function() {
    return this.replace(/^\s*|\s*$/g, "");
}
String.prototype.empty = function() {
    return this == '';
}
String.prototype.right = function(length) {
    return this.substring(this.length - length, this.length);
}


String.prototype.toDate = function() {
    return new Date(this.substring(3, 5) + '/' + this.substring(0, 2) + '/' + this.substring(6, 10));
}

Array.prototype.each = function(fun) {
    if (typeof fun != "function") { return; }
    for (var i = 0; i < this.length; i++) {
        if (i in this) fun(this[i]);
    }
   
}

Array.prototype.has = function(search, childs) {
    var childs = childs || false;
    var k;
    if (!childs) {
        for (k in this)
            if (this[k] == search)
            return k;
        return -1;
    }
    else {

        for (k in this) {
            if ($.isArray(this[k])) {

                if (this[k].has(search, true) != -1) {
                    return k;
                }
            } else {
                if (this[k] == search)
                    return k;
            }
        }
        return -1;
    }
}

Date.prototype.getDateBr = function() {
return ("0" + (this.getDate())).toString().right(2) + "/" + ("0" + (this.getMonth() + 1)).toString().right(2) + "/" + this.getFullYear();
}

String.prototype.dateAdd = function(type, number) {
    if (this.length == 10) {
        date = new Date(this.substring(3, 5) + '/' + this.substring(0, 2) + '/' + this.substring(6, 10));

        number = Number(number);

        if (type == "day") { type = "d"; }
        if (type == "month") { type = "m"; }
        if (type == "year") { type = "y"; }

        if (type == "m" || (type == "d" && number % 30 == 0)) {
            if ((type == "d" && number % 30 == 0)) { number = number / 30; }
            if (date.getMonth() + number == 1 && date.getDate() > 28) { date.setMonth(date.getMonth() + number, 28); }
            else {
                if ((date.getMonth() == 1 && date.getDate() == 28) || date.getDate() == 31) { date.setMonth(date.getMonth() + number, 30); }
                else { date.setMonth(date.getMonth() + number, date.getDate()); }
            }
        }
        else {
            if (type == "d") {
                date.setDate(date.getDate() + number);
            }
            if (type == "y") {
                date.setFullYear(date.getFullYear() + number);
            }
        }
        var day = date.getDate();
        if (String(day).length == 1) { day = String("0" + day); }
        var month = date.getMonth() + 1;
        if (String(month).length == 1) { month = String("0" + month); }
        date = day + "/" + month + "/" + date.getFullYear();
        return date;
    }
}  

function $$(id) { return document.getElementById(id); }
function $A(iterable) { 
    if (!iterable) return [];
    if ('toArray' in Object(iterable)) return iterable.toArray();
    var length = iterable.length || 0, results = new Array(length);
    while (length--) results[length] = iterable[length];
    return results;
}


(function() {

    var window = this,
   RHMED = window.RHMED = window.$ = function(seletor) {
       return new RHMED.funcao.init(seletor);
   };
    RHMED.funcao = RHMED.prototype = {
        init: function(selector, context) {
           selector = selector || document;

            if (typeof selector == "object") {
                this[0] = selector;
                this.length = 1;
                this.context = selector;


                return this;
            }
            if (/^#/.test(selector)) {
                this.context = document.getElementById(selector.replace('#', ''));
                this[0] = this.context

                return this;
            }
            if (/^./.test(selector)) {
                this.context = RHMED.funcao.getElementsByClass(selector.replace('.', ''), context);
                for (var i in this.context) {
                    this[i] = this.context[i];

                }
                return this;
            }

            this.context = document.getElementsByTagName(selector);

            return this;
        }
        ,
        get: function() {
            return this.context;
        },
        addEvent: function(evType, fn) {
            if (this.context.addEventListener) {
                this.context.addEventListener(evType, fn, false);
                return true;
            }
            else if (this.context.attachEvent) {
                var r = this.context.attachEvent("on" + evType, fn);
                return r;
            }
            else {
                return false;
            }
        }
        ,
        dispatchEvent: function(evType) {
          var element = this.context;
            if ("fireEvent" in element){
                element.fireEvent("on" + evType);
            } 
            else {
                var evt = document.createEvent("HTMLEvents");
                evt.initEvent(evType, false, true);
                element.dispatchEvent(evt);
             }
        }
        ,
        getDimensions: function() {
            element = this.context;
            var display = element.style.display;
            if (display != 'none' && display != null) // Safari bug
                return { width: element.offsetWidth, height: element.offsetHeight };

            // All *Width and *Height properties give 0 on elements with display none,
            // so enable the element temporarily
            var els = element.style;
            var originalVisibility = els.visibility;
            var originalPosition = els.position;
            var originalDisplay = els.display;
            els.visibility = 'hidden';
            els.position = 'absolute';
            els.display = 'block';
            var originalWidth = element.clientWidth;
            var originalHeight = element.clientHeight;
            els.display = originalDisplay;
            els.position = originalPosition;
            els.visibility = originalVisibility;
            return { width: originalWidth, height: originalHeight };
        }

        ,
        getStyle: function(styleProp) {


            var x = this.context;
            if (x.currentStyle)
                var y = x.currentStyle[styleProp];
            else if (window.getComputedStyle)
                var y = document.defaultView.getComputedStyle(x, null).getPropertyValue(styleProp);
            return y;
        }

        ,

        getElementsByClass: function(searchClass, tag, pnode) {
            var classElements = new Array();
            var node = pnode || this.context || document;
            if (tag == null)
                tag = '*';

            var els = node.getElementsByTagName(tag);

            var elsLen = els.length;
            var pattern = new RegExp("(^|\\s)" + searchClass + "(\\s|$)");
            for (i = 0, j = 0; i < elsLen; i++) {
                if (pattern.test(els[i].className)) {
                    classElements[j] = els[i];
                    j++;
                }
            }
            return classElements;
        }
       ,
        selectAll: function() {
            if (this.context.multiple) {
                for (var i = 0; i < this.context.length; i++)
                    this.context.options[i].selected = true;

            }
        }
    }

})();

RHMED.funcao.init.prototype = RHMED.funcao;

var userAgent = navigator.userAgent.toLowerCase();
RHMED.browser = {
    version: (userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [0, '0'])[1],
    safari: /webkit/.test(userAgent),
    opera: /opera/.test(userAgent),
    msie: /msie/.test(userAgent) && !/opera/.test(userAgent),
    mozilla: /mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent)
};

 RHMED.urlGerenciador=function() {
    var url = location.protocol + "//" + window.location.hostname + "/"
    var urlSub = location.href.substring(url.length, location.href.length);
    url = url + urlSub.substring(0, urlSub.indexOf("/"));
    return url;
}
RHMED.antiCache= function(url) {
    var dt = new Date();
    if (url.indexOf("?") >= 0) {
        return url + "&" + encodeURI(Math.random() + "_" + dt.getTime());
    } else { return url + "?" + encodeURI(Math.random() + "_" + dt.getTime()); }
}

RHMED.extend = function(source) {
var destination = RHMED.funcao.init.prototype;
    for (var property in source)
      destination[property] = source[property];
    
    return destination;
  }

  RHMED.buildQueryString = function(form, e) {


      var queryString = "";
      var i = 0;
      for (i = 0; i < form.length; i++) {
          if ((form[i].type != "button" && !form[i].disabled && form[i].type != "submit") ) {
              if (form[i].type == "checkbox" || form[i].type == "radio") {
                  if (form[i].checked == true) {
                      queryString += form[i].name + "=" + form[i].value + "&";
                  }

              } else {
                  if (form[i].type == "select-multiple") {
                      for (var j = 0; j < form[i].options.length; j++) {
                          queryString += form[i].name + "=" + form[i].options[j].value + "&";
                      }

                  } else {
                      queryString += form[i].name + "=" + URLencode(form[i].value) + "&"
                  }
              }
          }
      }

      return queryString;
  }
  function URLencode(sStr) {
      return escape(sStr).
             replace(/\+/g, '%2B').
                replace(/%20/g,'+');
  }

  function mouseCoords(ev) {
      if (ev.pageX || ev.pageY) {
          return { x: ev.pageX, y: ev.pageY };
      }
      return {
          x: ev.clientX + document.body.scrollLeft - document.body.clientLeft,
          y: ev.clientY + document.body.scrollTop - document.body.clientTop
      };
  }
  function getPosition(pObj) {
      var obj = pObj;
      var curleft = 0; var curtop = 0;
      if (obj.offsetParent) {
          curleft = obj.offsetLeft
          curtop = obj.offsetTop
          while (obj = obj.offsetParent) {
              curleft += obj.offsetLeft
              curtop += obj.offsetTop
          }
      }
      return { x: curleft, y: curtop };
  }


  RHMED.findContentWindow = function(objTarget) {

      while (objTarget.parentNode) {
          objTarget = objTarget.parentNode;
      }
      return objTarget;
  }

  RHMED.getIndex = function(input) {
      var index = -1, i = 0, found = false;
      while (i < input.form.length && index == -1)
          if (input.form[i] == input) { index = i; }
      else { i++; }
      return index;
  }
  RHMED.isArray = function(object) {
      return object != null && typeof object == "object" &&
      'splice' in object && 'join' in object;
  }
  RHMED.isFunction = function(object) {
      return typeof object == "function";
  } 
  RHMED.getTarget = function(e) {
    return RHMED.browser.msie ? window.event.srcElement : e.target;
}
RHMED.clearOptions= function(selectObj){
    var selectParentNode = selectObj.parentNode;
    var newSelectObj = selectObj.cloneNode(false); 
    selectParentNode.replaceChild(newSelectObj, selectObj);
    return newSelectObj;
}