﻿//bliblioteca compartilhada com funçoes comuns ao sistema


/**********************************************************/
//Extende a classe array javascript
//remove o objeto do array que tem o valor passado
Array.prototype.removeByValue = function(value) {
    var rest;
    for (var i = 0; i < this.length; i++) {
        if (this[i] == value)
            return this.remove(i);
    }
    return this;
};

/**********************************************************/
//Extende a classe array javascript
//remove os objetos do range especificado do array 
Array.prototype.remove = function(from, to) {
    var rest = this.slice((to || from) + 1 || this.length);
    this.length = from < 0 ? this.length + from : from;
    return this.push.apply(this, rest);
}

/**********************************************************/
//Usada para validação de datas
//typedate ==1 br date
function validateDate(value, typedate) {

    var RegExPattern
    if (typedate != "1")
	    //ddmmyyyy
	    RegExPattern = /^((((0?[1-9]|[12]\d|3[01])[\.\-\/](0?[13578]|1[02])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\.\-\/](0?[13456789]|1[012])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|(29[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))|(((0[1-9]|[12]\d|3[01])(0[13578]|1[02])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|[12]\d|30)(0[13456789]|1[012])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|1\d|2[0-8])02((1[6-9]|[2-9]\d)?\d{2}))|(2902((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00))))$/;
    else
	    //mmddyyyy
	    RegExPattern = /^(?=\d)(?:(?:(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2}))($|\ (?=\d)))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/;

    if ((value.match(RegExPattern)) && (value != '')) {
        return true;
    } else {
        return false;
    }
   }

   function setMaxLength() {
   	var x = document.getElementsByTagName('textarea');
   	var counter = document.createElement('div');
   	counter.className = 'counter';
   	for (var i = 0; i < x.length; i++) {
   		if (x[i].getAttribute('maxlength') || x[i].getAttribute('maxlen')) {
   			//var counterClone = counter.cloneNode(true);
   			//counterClone.relatedElement = x[i];
   			//counterClone.innerHTML = 'Caracteres inseridos: <span>0</span> de ' + x[i].getAttribute('maxlength');
   			//x[i].parentNode.insertBefore(counterClone, x[i].nextSibling);
   			//x[i].relatedElement = counterClone.getElementsByTagName('span')[0];

   			x[i].onkeyup = x[i].onchange = checkMaxLength;
   			x[i].onkeyup();
   		}
   	}
   }

   function checkMaxLength() {

   	var maxLength = (this.getAttribute('maxlength') == null || this.getAttribute('maxlength') == "") ? this.getAttribute('maxlen') : this.getAttribute('maxlength');
//  	alert(maxLength);
//   	alert(this.value.length);
//  	alert(lineBreakCount(this.value));
   	var lnCount = lineBreakCount(this.value);
   	
   	var currentLength = this.value.length;
   	maxLength = maxLength - lnCount;
   	if (currentLength > maxLength) {
   		//this.relatedElement.className = 'toomuch';
   	    this.value = this.value.substring(0, maxLength)
//   	    alert(this.value.length);
   	}
   	//else
   		//this.relatedElement.className = '';
   	//this.relatedElement.firstChild.nodeValue = currentLength;
   }

   /***************************************************************************
   **Esta função tira os espaços em brancos de todos os campos input e textarea
   ****************************************************************************/
   function preparefields() {

       $("input, textarea").change(function() {
           this.value = $.trim(this.value);
           this.value = stripHTML(this.value);
       });

//   	$("input, textarea").keyup(function() {
//   		
//   		this.value = stripHTML(this.value);
//   	});
//   	

//   	$("input, textarea").keyup(function() {
//   		this.value = $.trim(this.value);
//   		this.value = stripHTML(this.value);
//   	});
   	
   }
   /**************************************************************************/

   $(document).ready(function() {
   	    //validando o tamanho dos textareas
   	    setMaxLength();

   	    preparefields();

        /* submenu */
   	    $('#nav li').hover(
            function () {
                //show its submenu
                $('ul', this).slideDown(100);

            },
            function () {
                //hide its submenu
                $('ul', this).slideUp(100);
            }
        );
   });

   function stripHTML(html) {
   	var BodyContents = /([\s\S]*\<body[^\>]*\>)([\s\S]*)(\<\/body\>[\s\S]*)/i;
   	
       var h = html.match(BodyContents);
       if (h != null && h[2]) {
           html = h[2];
       }
       html = html.replace(/\/\/--\>/gi, "");
       html = html.replace(/(<\/|\\|\<|\>|\&#)/gi, "");
       //html = html.replace(/(\n)/gi, "");
       //html = html.replace(/(\r)/gi, "");
       html = html.replace(/<br\/?>/gi, "\n");
       html = html.replace(/(<\/h.>|<\/p>|<\/div>)/gi, "$1\n\n");
       html = html.replace(/<[^>]+>/g, "");
       html = html.replace(/&lt;/g, "<");
       html = html.replace(/&gt;/g, ">");
       html = html.replace(/&nbsp;/g, "");
       return html;

   }

   //Pega valor de uma CheckBox
   jQuery.fn.isChecked = function() {
       this.each(function() {
           isChecked = this.checked;
       });

       return isChecked;
   }

   function lineBreakCount(str) {
       /* counts \n */
       try {
           return ((str.match(/[^\n]*\n[^\n]*/gi).length));
       } catch (e) {
           return 0;
       }
   }

   //Para contornar o bug do Firefox/Thickbox que não consegue verificar se o iframe está carregado - para arrendodar os botões
   //20.04.2010 -> começou a dar o erro nos outros browsers também
   //22.06.2010 -> voltei a restringir o baca para o Firefox
   function tb_show_ff(caption, url, imageGroup) {

       //chama a função original do Thickbox
       tb_show(caption, url, imageGroup);

       if ($.browser.mozilla) {
           $('iframe#TB_iframeContent').load(function() {
               $('iframe#TB_iframeContent').contents().find('.btn').uncorner();
               $('iframe#TB_iframeContent').contents().find('.btn').corner("5px");
           });
       }
   }
    /***************************************/
   //Implementação do trim para javascript
   //note que foi bem otimizado o código
   /****************************************/
   String.prototype.trim = function() {
       var str = this.replace(/^\s\s*/, ''),
		ws = /\s/,
		i = str.length;
       while (ws.test(str.charAt(--i)));
       return str.slice(0, i + 1);
   }

   /************************************************************
   **Esta é a melhor maneira de testar se uma string está vazia
   **Por favor use essa função
   *************************************************************/
   function stringIsNotEmpty(str) {
        var ret = false;
        try
        {
            ret = (str && str.trim().length > 0);
        }
        catch(err)
        {
        }
       return ret;
   }

   function stringIsEmpty(str) {
       return !stringIsNotEmpty(str);
   }


   function encode_utf8(s) {
       return unescape(encodeURIComponent(s));
   }

   function decode_utf8(s) {
       return decodeURIComponent(escape(s));
   }

   function OpenLogin() {
       tb_show_ff('LoginModal', '/Login.aspx?width=550&height=360&modal=true&TB_iframe=true', 'thickbox');
   }

   function OpenLostPassword() {
       tb_show_ff('LostPassword', '/LostPassword.aspx?height=250&width=550&modal=true&TB_iframe=true', 'thickbox');
   }
