//////////////////////////////////////////////
// main.js = JavaScript generic functions   //
// ISul Tecnologia - http://www.isul.com.br //
//////////////////////////////////////////////

// x = 12.30230;
// x = Round(x, 2);
// 12.30
// by Diego...
function Round(n, d) {
    d = 10 ^ d;
    return Math.round(n * d) / d;
}

// Rodrigo Carvalho em 23/05/2007
// Mostra ou esconde um objeto da tela
function showHide(obj) {
    if (obj.style.display == 'none')
        obj.style.display = 'block';
    else
        obj.style.display = 'none';
}

// when press ENTER, submit
function enter2Submit(e, obj, btnId) {
	if (window.event) key = event.keyCode;
	else key = e.which;
    if (key == 13) {
		document.getElementById(btnId).click();
		// obj.form.submit();
		if (window.event)
			event.returnValue = true;
		else
			return true;
    }
}

// blockEnter
function blockEnter(e) {
	if (window.event) key = event.keyCode;
	else key = e.which;
	if (key == 13) {
		if (window.event) {
			event.keyCode = 9;
			event.returnValue = true;
		} else {
			e.which = 9;
		}
	}
}

// uso interno
function prepareKey(e, obj) {
	if (window.event) key = event.keyCode;
	else key = e.which;
	if (key == 8) return null;
    if (key == 9 || key == 16) {
		obj.select();
		return null;
    }
    return key;
}

// colore o fundo de um TD
// exemplo de uso:
//      <td onmouseover="setBg(this, '#RGB')" onmouseout="setBg(this, '#RGB')"></td>
function setBg(obj, newColor) {
    // descobre se o browser é opera
    if (typeof(window.opera) == 'undefined' &&
        typeof(obj.getAttribute) != 'undefined') {
        // curColor = obj.getAttribute('bgcolor');
        domDetect = true;
    } else {
        // curColor = obj.style.backgroundColor;
        domDetect = false;
    }
    // seta a nova cor de fundo
    if (domDetect) {
    	obj.style.cursor = 'pointer';
        obj.style.backgroundColor = newColor;
    } else {
        obj.setAttribute('bgcolor', newColor, 0);
    }
}

// openPopup
// abre uma janela de acordo com os parâmetros
// @param url
// @param winName Nome da janela
// @param width
// @param height
// @param scroll "yes" ou "no" (literal)
// @param resizable "yes" ou "no" (literal)
// @return nada
function openPopup(_url,_winName,_width,_height,_scroll,_resize) {
	// show popup on middle of screen
	_y = (screen.height - _height) / 2;
	_x = (screen.width - _width) / 2;
	var win = window.open(_url,_winName,'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars='+_scroll+',resizable='+_resize+',copyhistory=no,top='+_y+',left='+_x+',screenY='+_y+',screenX='+_x+',width='+_width+',height='+_height);
	win.focus();
	return win;
}

// isDate
// verifica se a data está em formato (dd/mm/yyyy)
// @param testa a data
// @return boolean
function isDate(data) {
    // formato dd/mm/yyyy
    if ((data != null) && (data.length > 0)) {
        reg = new RegExp("^([0-9]{2})+/([0-9]{2})+/([0-9]{4})+$", "g");
        if (reg.test(data)) {
            // quebra a data
            s = data.split("/");
            
            // faz assim devido a um erro do parseInt com 08 e 09
            if (s[0] == '08') s[0] = '8';
            if (s[0] == '09') s[0] = '9';
            if (s[1] == '08') s[1] = '8';
            if (s[1] == '09') s[1] = '9';
            
            dia = parseInt(s[0]);
            mes = parseInt(s[1]);
            ano = parseInt(s[2]);
            
            // verifica se o mês está entre 1 e 12
            if (mes < 1 || mes > 12) return false;
            
        	// verifica se o dia está de acordo com o mês
            if (mes == 1 || mes == 3 || mes == 5 || mes == 7 || mes == 8 || mes == 10 || mes == 12)
        		if (dia < 1 || dia > 31) return false;
        	if (mes == 2) {
        		if (isLeapYear(ano)) {
        			if (dia < 1 || dia > 29) return false;
        		} else {
        			if (dia < 1 || dia > 28) return false;
        		}
        	}
        	if (mes == 4 || mes == 6 || mes == 9 || mes == 11)
            	if (dia < 1 || dia > 30) return false;
            
            // se chegou até aqui, é pq tá ok
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}

// isLeapYear
// verifica se o ano é um ano bissexto
// @param testa o ano
// @return boolean
function isLeapYear(ano) {
    if ((ano != null) && (ano.length > 0))
    	if (ano % 4 == 0 && (ano % 100 != 0 || ano % 400 == 0 )) return true;
	// se chegou até aqui é pq não é
	return false;
}

// isPhone
// verifica se o telefone está no formato brasileiro
// formato 9999-9999
// @param telefone
// @return true ou false
function isPhone(phone) {
    // formato 9999-9999
    if ((phone != null) && (phone.length > 0)) {
        reg = new RegExp("^([0-9]{3,4})+(-[0-9]{4})+$", "g");
        return reg.test(phone);
    } else {
        return false;
    }
}

// isZipCode
// verifica se é um cep válido
// formato 99999-999
// @param cep
// @return boolean
function isZipCode(zipcode) {
    // formato 99999-999
    if ((zipcode != null) && (zipcode.length > 0)) {
        reg = new RegExp("^([0-9]+)+(-[0-9]{3})+$", "g");
        return reg.test(zipcode);
    } else {
        return false;
    }
}

// isNumber
// verifica se é um número válido
// formato 9 ou 999,99 ou 9999,n
// @param número
// @return boolean
function isNumber(num, decimals) {
    // formato 9999,n
    if ((decimals == null) || (decimals < 0))
        decimals = 0;
    if ((num != null) && (num.length > 0)) {
        reg = new RegExp("^([0-9]+)+([\.,]{1})?([0-9]{" + decimals + "})?$", "g");
        return reg.test(num);
    } else {
        return false;
    }
}

// isTime
// Verifica se a o valor está em formato hh:mm ou hh:mm:ss
// @param texto contendo a hora
// @return boolean
function isTime(hora) {
    if ((hora != null) && (hora.length > 0)) {
        reg = new RegExp("^([0-9]{2})+:([0-9]{2})+(:[0-9]{2})?$", "g");
        if (reg.test(hora)) {
            s = hora.split(":");
            // hora
            sTime = parseInt(s[0]);
            // minuto
            sMin = parseInt(s[1]);
            // segundo
            sSec = 0;
            if (s.length == 3)
                sSec = parseInt(s[2]);
            // testa para ver se é valida
        	if ((sTime < 0) || (sTime > 23) ||
                (sMin < 0) || (sMin > 59) ||
                (sSec < 0) || (sSec > 59)) return false;
            return true;
        }
    } else {
        return false;
    }
}

// isEMail
// verifica se é um email válido
// @param email
// @return boolean
function isEmail(email) {
    if ((email != null) && (email.length > 0)) {
        reg = new RegExp("^[_a-zA-Z0-9\-\.]+@[_a-zA-Z0-9\-]+(\.[_a-zA-Z0-9\-]+)+$", "g");
        return reg.test(email);
    } else {
        return false;
    }
}

// isCNPJ
// verifica se é um cnpj válido
// @param cnpj
// @return boolean
function isCNPJ(cnpj) {
    if ((cnpj != null) && (cnpj.length > 0)) {
        reg = new RegExp("^([0-9]{2})+\.([0-9]{3})+\.([0-9]{3})+\/([0-9]{4})+\-([0-9]{2})+$", "g");
        return reg.test(cnpj);
    } else {
        return false;
    }
}

// isCPF
// verifica se é um cpf válido
// @param cpf
// @return boolean
function isCPF(cpf) {
    if ((cpf != null) && (cpf.length > 0)) {
        reg = new RegExp("^([0-9]{3})+\.([0-9]{3})+\.([0-9]{3})+\-([0-9]{2})+$", "g");
        return reg.test(cpf);
    } else {
        return false;
    }
}

// toISO
// transforma o texto passado em ISO-8859-1
// @param texto
// @return texto alterado
function toISO(value) {
    if ((value != null) && (value.length > 0)) {
        value = value.toUpperCase();
    	var accents   = "ÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÔÖÚÙÛÜÝŸÇ";
    	var noAccents = "AAAAAEEEEIIIIOOOOOUUUUYYC";
    	var retval = "";
    	for (i = 0; i < value.length; i++) {
    		s = value.charAt(i);
    		pos = accents.indexOf(s);
    		if (pos > -1)
    			retval += noAccents.charAt(pos);
    		else  
    			retval += s;
    	}
    	return retval;
    } else {
        return value;
    }
}

// formatISO
// formata o valor do objeto input em ISO
// @param objeto input onde está o valor a ser formatado
// @return nada
function formatISO(obj) {
    obj.value = toISO(obj.value);
}

// stripSpecialChars
// retira os caracteres especiais
// @param valor
// @return o valor tratado
function stripSpecialChars(value) {
    value = value.replace(/,/g, "");
    value = value.replace(/\¦/g, "");
    value = value.replace(/|/g, "");
    value = value.replace(/\./g, "");
    value = value.replace(/;/g, "");
    value = value.replace(/\//g, "");
    value = value.replace(/\\/g, "");
    value = value.replace(/|/g, "");
    value = value.replace(/</g, "");
    value = value.replace(/>/g, "");
    value = value.replace(/:/g, "");
    value = value.replace(/\?/g, "");
    value = value.replace(/\"/g, "");
    value = value.replace(/'/g, "");
    value = value.replace(/!/g, "");
    value = value.replace(/@/g, "");
    value = value.replace(/#/g, "");
    value = value.replace(/$/g, "");
    value = value.replace(/%/g, "");
    value = value.replace(/\¨/g, "");
    value = value.replace(/&/g, "");
    value = value.replace(/\*/g, "");
    value = value.replace(/\(/g, "");
    value = value.replace(/\)/g, "");
    value = value.replace(/-/g, "");
    value = value.replace(/_/g, "");
    value = value.replace(/\+/g, "");
    value = value.replace(/=/g, "");
    value = value.replace(/\§/g, "");
    value = value.replace(/\ª/g, "");
    value = value.replace(/\º/g, "");
    value = value.replace(/\´/g, "");
    value = value.replace(/\`/g, "");
    value = value.replace(/\[/g, "");
    value = value.replace(/\{/g, "");
    value = value.replace(/\]/g, "");
    value = value.replace(/\}/g, "");
    value = value.replace(/^/g, "");
    value = value.replace(/~/g, "");
    value = value.replace(/\¹/g, "");
    value = value.replace(/\²/g, "");
    value = value.replace(/\³/g, "");
    value = value.replace(/\£/g, "");
    value = value.replace(/\¢/g, "");
    value = value.replace(/\¬/g, "");
    value = value.replace(/\./g, "");
    return value;
}

// ltrim
// retira os espaços à esquerda do texto
// @param texto
// @return texto alterado
function ltrim(s){
    if ((s != null) && (s.length > 0))
    	return s.replace(/^\s*/, '');
}
	
// rtrim
// retira os espaços à direita do texto
// @param texto
// @return texto alterado
function rtrim(s){
    if ((s != null) && (s.length > 0))
    	return s.replace(/\s*$/, '');
}

// trim
// retira os espaços dos dois lados do texto
// @param texto
// @return texto alterado
function trim(s){
    if ((s != null) && (s.length > 0))
    	return rtrim(ltrim(s));
}

// lpad
function lpad(s, len, c) {
	for (i = s.length + 1; i <= len; i++) {
		s = c + s;
	}
	return s;
}

// rpad
function rpad(s, len, c) {
	for (i = s.length + 1; i <= len; i++) {
		s += c;
	}
	return s;
}

// changeImage
// troca a imagem informada pela imagem informada
// @param nome do objeto imagem
// @param nova imagem
// @return nada
function changeImage2(imgName, img) {
	document.images[imgName].src = img;
}

// with object
function changeImage(obj, src) {
	obj.src = src;
}
	
// browser
// como se fosse uma classe
// @return o objeto
function browser() {
	this.ver = navigator.appVersion;
	this.agent = navigator.userAgent;
	this.dom = document.getElementById ? 1 : 0;
	this.ie5 = (this.ver.indexOf("MSIE 5") > -1 && this.dom) ? 1 : 0;
	this.ie6 = (this.ver.indexOf("MSIE 6") > -1 && this.dom) ? 1 : 0;
	this.ie7 = (this.ver.indexOf("MSIE 7") > -1 && this.dom) ? 1 : 0;
	this.ie4 = (document.all && !this.dom) ? 1 : 0;
	this.ie = this.ie4 || this.ie5 || this.ie6 || this.ie7;
	this.mac = this.agent.indexOf("Mac") > -1;
	this.opera = this.agent.indexOf("Opera") > -1;
	this.opera5 = this.agent.indexOf("Opera 5") >- 1;
	this.ns6 = (this.dom && parseInt(this.ver) >= 5) ? 1 : 0;
	this.ns4 = (document.layers && !this.dom)? 1 : 0;
	this.ne = this.ns6 || this.ns4;
	return this;
}

// Mouse
/*
document.onmousemove = getMouseXY;
var MouseX = 0
var MouseY = 0
function getMouseXY(e) {
	if (!e) var e = window.event;
	if (e.pageX || e.pageY) {
		MouseX = e.pageX;
		MouseY = e.pageY;
	} else if (e.clientX || e.clientY) {
		MouseX = e.clientX + document.body.scrollLeft
			+ document.documentElement.scrollLeft;
		MouseY = e.clientY + document.body.scrollTop
			+ document.documentElement.scrollTop;
	}
}
*/
