/* Compactado */
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.left = function(length) {
    return this.substring(0, length);
}

String.prototype.toDate = function() {
    return new Date(this.substring(3, 5) + '/' + this.substring(0, 2) + '/' + this.substring(6, 10));
}

String.prototype.toTime = function() {
    if (this.length == 5) { return new Date("", "", "", this.substring(0, 2), this.substring(3, 5)); }
    else { return new Date("err"); }
}

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) {
    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();
}

Date.prototype.getFullTime = function() {
    return ("0" + (this.getHours())).toString().right(2) + ":" + ("0" + (this.getMinutes())).toString().right(2);
}

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));
        date.setHours(8);
        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;
    }
    return undefined;
}

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, context, tag) {
       return new RHMED.funcao.init(seletor, context, tag);
   };
    RHMED.funcao = RHMED.prototype = {
        init: function(selector, context, tag) {
            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('.', ''), tag, context);
                for (var i in this.context) {
                    this[i] = this.context[i];

                }

                return this;
            }

            this.context = $A((context || document).getElementsByTagName(selector));

            return this;
        }
        ,
        get: function() {
            return this.context;
        },
        addEvent: function(evType, fn, inserirDepois, clear) {

            if (inserirDepois == undefined) {
                inserirDepois = true;
            }
            if (clear == undefined) {
                clear = false;
            }

            if ($.isArray(this.context)) {
                this.context.each(function(obj) {
                    $(obj).addEvent(evType, fn, inserirDepois);
                }
                 );
            } else {


                if (clear) { this.context["on" + evType] = null };
                if (inserirDepois) {
                    var f = this.context["_" + evType] ? this.context["_" + evType] : function() { return true };
                } else {

                    var f = fn;
                    fn = this.context["_" + evType] ? this.context["_" + evType] : function() { return true };
                }

                if (this.context.addEventListener && this.context["_" + evType]) {
                    this.context.removeEventListener(evType, this.context["_" + evType], false);


                }
                else if (this.context.attachEvent && this.context["_" + evType]) {
                    this.context.detachEvent("on" + evType, this.context["_" + evType]);


                }

                this.context["_" + evType] = function(e) {
                    if (f(e) == false) {
                        if (e && e.preventDefault)
                            e.preventDefault(); // DOM style 
                        return false;

                    } else {
                        if (fn(e) == false) {
                            if (e && e.preventDefault)
                                e.preventDefault(); // DOM style 
                            return false;
                        } else {
                            return true;
                        }
                    }
                }



                if (this.context.addEventListener) {

                    this.context.addEventListener(evType, this.context["_" + evType], false);
                    return true;
                }
                else if (this.context.attachEvent) {

                    var r = this.context.attachEvent("on" + evType, this.context["_" + evType]);
                    return r;
                }
                else {
                    return false;
                }
                /*
                this.context["on"+evType] = function(e){
                alert($.getTarget((e || window.event)));
                if(f(e)==false){
                if (e && e.preventDefault)
                e.preventDefault(); // DOM style 
                return false;
                             
                }else{
                if(fn(e)==false){
                if (e && e.preventDefault)
                e.preventDefault(); // DOM style 
                return false;
                }else{
                return true;
                }
                }
                }*/



            }
        },
        isVisible: function() {


            function isVisible_(obj) {

                if (obj == document) return true

                if (!obj) return false
                if (!obj.parentNode) return false
                if (obj.style) {
                    if (obj.style.display == 'none') return false
                    if (obj.style.visibility == 'hidden') return false
                }

                //Try the computed style in a standard way
                if (window.getComputedStyle) {
                    var style = window.getComputedStyle(obj, "")
                    if (style.display == 'none') return false
                    if (style.visibility == 'hidden') return false
                }

                //Or get the computed style using IE's silly proprietary way
                var style = obj.currentStyle
                if (style) {
                    if (style['display'] == 'none') return false
                    if (style['visibility'] == 'hidden') return false
                }

                return isVisible_(obj.parentNode)
            }
            return isVisible_(this.context);
        }
        ,
        dispatchEvent: function(evType) {
            var element = this.context;
            if ("fireEvent" in element && !(RHMED.browser.msie && RHMED.browser.version >= 9)) {
                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 + "&cache=" + encodeURI(Math.random() + "_" + dt.getTime());
    } else { return url + "?cache=" + 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) + "&"
                }
            }
        }
    }
    queryString += form.button ? form.button.name + "=" + form.button.getAttributeNode("value").value + "&" : "";
    return queryString.substring(0, queryString.length - 1);
}
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 e;
    var curleft = 0; var curtop = 0;
    try {
        if (obj.offsetParent) {
            curleft = obj.offsetLeft
            curtop = obj.offsetTop
            while (obj = obj.offsetParent) {
                curleft += obj.offsetLeft
                curtop += obj.offsetTop
            }
        }
    } catch (e) { }
    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;
}
