/*
**************************************
* Funções Gerais                     *
* Author: Élison Gomes               *
* Contact: elison@fievel.com.br      *
**************************************
*/

function $() {
	var lElements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var lElement = arguments[i];
		if (typeof lElement == 'string') {
			lElement = document.getElementById(lElement);
		}
	    if (arguments.length == 1) {
			return lElement;
		}
		lElements.push(lElement);
	}
	return lElements;
}

function openWin(pUrl,pName,pWidth,pHeight) {
	var lLeft = (screen.width/2) - (pWidth/2);
	var lTop = (screen.height/2) - (pHeight/2) - 24;
	var lFeatures = (arguments.length > 4) ? ',' + arguments[4] : '';
	var lWin = window.open(pUrl,pName,"width="+pWidth+",height="+pHeight+",Top="+lTop+",Left="+lLeft+",status=no"+lFeatures);
	lWin.focus();
	return lWin;
}

function goLink(pUrl) {
	location.href = pUrl;
}

function ShowHideLayer(pId) {
	var lLayer = $(pId);
	if (lLayer.style.display == 'none') {
		lLayer.style.display = '';
	} else {
		lLayer.style.display = 'none';
	}
}

function setFocus() {
  if (document.forms.length > 0) {
    var field = document.forms[0];
    for (i=0; i<field.length; i++) {
      if ( (field.elements[i].type != "image") && 
           (field.elements[i].type != "hidden") && 	  
           (field.elements[i].type != "reset") && 
           (field.elements[i].type != "submit") ) {

		try { document.forms[0].elements[i].focus(); } catch (ex) {}

        if ( (field.elements[i].type == "text") || 
             (field.elements[i].type == "password") )
          document.forms[0].elements[i].select();
        
        break;
      }
    }
  }
}

function centerDiv(pDiv, pWidth, pHeight) {
	$(pDiv).style.left = ((document.documentElement.clientWidth/2)-(pWidth/2))+'px';
	$(pDiv).style.top = ((document.documentElement.clientHeight/2)-(pHeight/2))+'px';
}

function doLoading() {
	lDiv = $('loading');
	if (arguments.length > 0) {
		if (lDiv != null) {
			lDiv.style.display = "none";
		}
	} else {
		lDiv = $('loading');
		if (lDiv == null) {
			lDiv = document.createElement("div");
			lDiv.id = "loading";
			document.body.appendChild(lDiv);
		}
		lDiv.innerHTML = 'Carregando...';
		lDiv.style.display = "block";
		centerDiv('loading', 130, 50);
	}
}

function getPageSize(){
	
	var xScroll, yScroll;
	
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else {
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	var windowWidth, windowHeight;
	if (self.innerHeight) {
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) {
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) {
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}

	if(xScroll < windowWidth){	
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}

	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return arrayPageSize;
}

function bgBlock() {
	lDiv = $('bgBlock');
	if (lDiv == null) {
		lDiv = document.createElement("div");
		lDiv.id = "bgBlock";
		lDiv.style.position = "absolute";
		lDiv.style.left = "0";
		lDiv.style.top = "0";
		document.body.appendChild(lDiv);
	}
	lDiv.style.display = "none";

	var lWidth = (document.body.clientWidth*1);
	var lHeight = (document.body.clientHeight*1);
	lPageSize = getPageSize();

	lDiv.style.width = lPageSize[0]+'px';
	lDiv.style.height = lPageSize[1]+'px';
	lDiv.style.zIndex = 102;
	lDiv.style.display = "block";
}
function bgUnBlock() {
	lDiv = $('bgBlock');
	lDiv.style.display = "none";
}
//Funções auxiliares
function splitDate(pDate) {
	lArrDate = pDate.split("/");
	lDay = 0;
	lMonth = 0;
	lYear = 0;
	if (lArrDate.length == 3) {
		lDay = parseFloat(lArrDate[0]);
		lMonth = parseFloat(lArrDate[1]);
		lYear = parseFloat(lArrDate[2]);
	}
	return {d:lDay, m:lMonth, y:lYear};
}

function isDate(pDate) {
	if (pDate.length < 6)  { return false; }
	lDate = splitDate(pDate);
	lDay = lDate.d;
	lMonth = lDate.m;
	lYear = lDate.y;
	if (lDay == 0 || lMonth ==0 || lYear == 0) { return false; }
	if (lYear < 1900) return false;
	if ((lMonth==2)&&(lDay>(lYear%4==0?29:28))) return false;
	else if ((lDay>30)&&((lMonth==4)||(lMonth==6)||(lMonth==9)||(lMonth==11))) return false;
	else if (lDay>31) return false;
	else if (lMonth>12) return false;
	if ((isNaN(lDay))||(isNaN(lMonth))||(isNaN(lYear))) return false;
	return true;
}

function validateDate() {
	lDate = (arguments.length > 0) ? arguments[0] : '';
	lObject = (arguments.length > 1) ? arguments[1] : null;
	if ( (lDate.length > 0) & (!isDate(lDate)) ) {
		alert('A data informada é inválida.');
		if (lObject != null) {
			lObject.value = '';
			lObject.focus();
		}
	}
}

function addClass(o, c) {
	if (hasClass(o, c)) { return false; }
	return o.className = ((o.className) ? o.className : '') +' '+ c;
}

function hasClass(o, c) {
	var i, at=o.className.split(' ');
	for (i=at.length; i--; ) { if(at[i]==c) { return true; } }
	return false;
}

function remClass(o, c) {
	if(!o.className) { return ''; }
	var i, ar=[], at=o.className.split(' ');
  	for(l=at.length, i=0; i<l; i++) { if(at[i]!=c) { ar[ar.length]=at[i]; } }
	return o.className = (ar.length ? ar.join(' ') : '');
}

//Prototype

String.prototype.trim = function () {
	var s = this.replaceall(/^\s*/, "");
	return s.replaceall(/\s*$/, "");
}

String.prototype.replaceall = function(pattern, replacement) {
	return this.split(pattern).join(replacement);
}

String.prototype.isCPF = function(){
	var c = this;
	if((c = c.replace(/[^\d]/g,"").split("")).length != 11) return false;
	if(new RegExp("^" + c[0] + "{11}$").test(c.join(""))) return false;
	for(var s = 10, n = 0, i = 0; s >= 2; n += c[i++] * s--);
	if(c[9] != (((n %= 11) < 2) ? 0 : 11 - n)) return false;
	for(var s = 11, n = 0, i = 0; s >= 2; n += c[i++] * s--);
	if(c[10] != (((n %= 11) < 2) ? 0 : 11 - n)) return false;
	return true;
};

String.prototype.isCNPJ = function(){
	var b = [6,5,4,3,2,9,8,7,6,5,4,3,2], c = this;
	if((c = c.replace(/[^\d]/g,"").split("")).length != 14) return false;
	for(var i = 0, n = 0; i < 12; n += c[i] * b[++i]);
	if(c[12] != (((n %= 11) < 2) ? 0 : 11 - n)) return false;
	for(var i = 0, n = 0; i <= 12; n += c[i] * b[i++]);
	if(c[13] != (((n %= 11) < 2) ? 0 : 11 - n)) return false;
	return true;
};

//Mascaras

function maskDate(pObject, pEvent) {
	var lKeyCode = pEvent.keyCode ? pEvent.keyCode : pEvent.which ? pEvent.which : pEvent.charCode;
	//backspace, fix para o firefox
	if (lKeyCode != 8) {
		lLen = pObject.value.length;
		if (lLen == 10) {
			try {
				pEvent.preventDefault( function() {;} );
			} catch (e) {}
			try {
				pEvent.keyCode = 0;
			} catch (e) {}
		} else {
			if ((lLen == 2) || (lLen == 5)) {
				pObject.value = pObject.value + '/';
			}
		}
	}
	maskInteger(pEvent);
}

function maskCEP(pObject, pEvent) {
	var lKeyCode = pEvent.keyCode ? pEvent.keyCode : pEvent.which ? pEvent.which : pEvent.charCode;
	//backspace, fix para o firefox
	if (lKeyCode != 8) {
		lLen = pObject.value.length;
		if (lLen == 9) {
			try {
				pEvent.preventDefault( function() {;} );
			} catch (e) {}
			try {
				pEvent.keyCode = 0;
			} catch (e) {}
		} else {
			if (lLen == 5) {
				pObject.value = pObject.value + '-';
			}
		}
	}
	maskInteger(pEvent);
}

function maskTEL(pObject, pEvent) {
	var lKeyCode = pEvent.keyCode ? pEvent.keyCode : pEvent.which ? pEvent.which : pEvent.charCode;
	//backspace, fix para o firefox
	if (lKeyCode != 8) {
		lLen = pObject.value.length;
		if (lLen == 14) {
			try {
				pEvent.preventDefault( function() {;} );
			} catch (e) {}
			try {
				pEvent.keyCode = 0;
			} catch (e) {}
		} else if (lLen == 1) {
				pObject.value = '(' + pObject.value;
		} else if (lLen == 3) {
				pObject.value = pObject.value + ') ';
		} else if (lLen == 4) {
				pObject.value = pObject.value + ' ';
		} else if (lLen == 9) {
				pObject.value = pObject.value + '-';
		}
	}
	maskInteger(pEvent);
}

function maskMoney(pObject, pEvent) {
	var lMilSep = '.';
	var lDecSep = ',';
	var i = j = 0;
	var lMaxLength = null;
	if (arguments.length > 2) lMaxLength = arguments[2];
	var lMaximo = false;
	var lStrFilter = '0123456789';
	var lKeyCode = pEvent.keyCode ? pEvent.keyCode : pEvent.which ? pEvent.which : pEvent.charCode;

	//backspace, fix para o firefox
	if (lKeyCode != 8) {
		lChar = String.fromCharCode(lKeyCode);
		if (lStrFilter.indexOf(lChar) != -1) {
			lLen = pObject.value.length;
			for(i = 0; i < lLen; i++) if ((pObject.value.charAt(i) != '0') && (pObject.value.charAt(i) != lDecSep)) break;
			lStr = '';
			for(; i < lLen; i++) if (!isNaN(pObject.value.charAt(i))) lStr += pObject.value.charAt(i);
			lStr += lChar; lLen = lStr.length;

			if ((lMaxLength != null) & (lMaxLength < lLen)) {
				lMaximo = true;
			}
			if (lLen == 0) pObject.value = '';
			else if (lLen == 1) pObject.value = '0' + lDecSep + '0' + lStr;
			else if (lLen == 2) pObject.value = '0' + lDecSep + lStr;
			else if (!lMaximo) {
				lStrDec = lStr.substr(lLen-2,lLen); lStrVal = lStr.substr(0,lLen-2);
				lStrAux = '';
				for(j=0, i = lStrVal.length - 1; i >= 0; i--) {
					if (j == 3) {
						lStrAux += lMilSep; j = 0;
					}
					lStrAux += lStrVal.charAt(i); j++;
				}
				//reverter a string
				lLen = lStrAux.length; pObject.value = '';
				for(i = lLen; i >= 0; i--) pObject.value += lStrAux.charAt(i);
				pObject.value += lDecSep + lStrDec;
			}
		}
		try {
			pEvent.preventDefault( function() {;} );
		} catch (e) {}
		try {
			pEvent.keyCode = 0;
		} catch (e) {}
	}
}

function maskCPF(pObject, pEvent) {
	var lKeyCode = pEvent.keyCode ? pEvent.keyCode : pEvent.which ? pEvent.which : pEvent.charCode;
	//backspace, fix para o firefox
	if (lKeyCode != 8) {
		lLen = pObject.value.length;
		if (lLen == 14) {
			try {
				pEvent.preventDefault( function() {;} );
			} catch (e) {}
			try {
				pEvent.keyCode = 0;
			} catch (e) {}
		} else {
			if ((lLen == 3) || (lLen == 7)) {
				pObject.value = pObject.value + '.';
			} else if (lLen == 11) {
				pObject.value = pObject.value + '-';
			}
		}
	}
	maskInteger(pEvent);
}

function maskCNPJ(pObject, pEvent) {
	var lKeyCode = pEvent.keyCode ? pEvent.keyCode : pEvent.which ? pEvent.which : pEvent.charCode;
	//backspace, fix para o firefox
	if (lKeyCode != 8) {
		lLen = pObject.value.length;
		if (lLen == 18) {
			try {
				pEvent.preventDefault( function() {;} );
			} catch (e) {}
			try {
				pEvent.keyCode = 0;
			} catch (e) {}
		} else {
			if ((lLen == 2) || (lLen == 6)) {
				pObject.value = pObject.value + '.';
			} else if (lLen == 10) {
				pObject.value = pObject.value + '/';
			} else if (lLen == 15) {
				pObject.value = pObject.value + '-';
			}
		}
	}
	maskInteger(pEvent);
}

function maskInteger(pEvent) {
	var lKeyCode = pEvent.keyCode ? pEvent.keyCode : pEvent.which ? pEvent.which : pEvent.charCode;
	if ((lKeyCode > 57 || lKeyCode < 48) && lKeyCode != 13 && lKeyCode != 8) {
		try {
			pEvent.preventDefault( function() {;} );
		} catch (e) {}
		try {
			pEvent.keyCode = 0;
		} catch (e) {}
	}
}

// AJAX
function getXmlHttpRequest() {
	var httpRequest = null;
	try {
		httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
		try {
			httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (e) {
			httpRequest = null;
		}
	}
	if (!httpRequest && typeof XMLHttpRequest != "undefined") {
		httpRequest = new XMLHttpRequest();
	}
	return httpRequest;
}

function  fillCombo(pUrl, pCombo, pSelected) {
	if (arguments.length < 4) {
		var xmlHttpReq = getXmlHttpRequest();
		if (!xmlHttpReq) return;
		xmlHttpReq.onreadystatechange = function() { fillCombo(pUrl, pCombo, pSelected, xmlHttpReq); };
		xmlHttpReq.open("GET", pUrl, true);
		xmlHttpReq.send(null);
	} else {
		var xmlHttpReq = arguments[3];
		if (xmlHttpReq.readyState == 4 && xmlHttpReq.status == 200) {
			var lArrXml = getParentNode(xmlHttpReq, 'option');
			$(pCombo).innerHTML  = '';
			for(var i = 0 ; i < lArrXml.length ; i++) {
				lOption = lArrXml[i];
				lCode = getNodeValue(lOption, 'code');
				lDescription = getNodeValue(lOption, 'description');
				
				objOption = document.createElement("option");
				objOption.value = lCode;
				objOption.text = lDescription;
				if (pSelected == lCode) {
					objOption.setAttribute("selected", "selected");
				}
				$(pCombo).options.add(objOption);
			}
			$(pCombo).disabled = false;
			try {
				eval("afterFillCombo"+pCombo.toUpperCase()+"()");
			} catch (e) {}
		}
	}
}

function getUrl(url, async, handleStateChange) {
	var xmlHttpReq = getXmlHttpRequest();
	if (!xmlHttpReq) return;
	if (handleStateChange) {
		xmlHttpReq.onreadystatechange = function() { handleStateChange(xmlHttpReq); };
	} else {
		xmlHttpReq.onreadystatechange = function() {;}
	}
	xmlHttpReq.open("GET", url, async);
	xmlHttpReq.send(null);
}

function postUrl(url, data, async, stateChangeCallback) {
	var xmlHttpReq = getXmlHttpRequest(); 
	if (!xmlHttpReq) return;
	xmlHttpReq.open("POST", url, async);
	xmlHttpReq.onreadystatechange = function() { stateChangeCallback(xmlHttpReq); };
	xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	xmlHttpReq.send(data);
}

function execOnSuccess(stateChangeCallback) {
	//Criando variaveis de argumentos dinamica..
	var a = arguments;
	if (a.length > 1) {
		for (i=1; i < a.length; i++) {
			eval("var lArg"+i+" = a[i];");
		}
	}
	return function(xmlHttpReq) {
			if (xmlHttpReq.readyState == 4 && xmlHttpReq.status == 200) {
				if (a.length > 1) { // se tiver argumentos
					lArgs = "";
					for (i=1; i < a.length; i++) {
						if (lArgs != "") { lArgs += ", "; }
						lArgs = "lArg"+i;
					}
					eval("stateChangeCallback(xmlHttpReq, "+lArgs+");");
				} else {
					stateChangeCallback(xmlHttpReq);
				}
			}
		};
}

function urlEncodeDict(d) {
	var r = "";
	for (var i=0; i<d.length; i++) { r += "&" + encodeURIComponent(d[i].name) + "=" + encodeURIComponent(d[i].value); } return r;
}

function postFormByForm(form, async, successCallback) {
	var formVars = new Array();
	for (var i = 0; i < form.elements.length; i++) {
		var formElement = form.elements[i];
		
		// Special handling for checkboxes (we need an array of selected checkboxes..)!
		if (formElement.type=='checkbox' && !formElement.checked) {
			continue;
		} 
		var v=new Object;
		v.name=formElement.name;
		v.value=formElement.value;
		formVars.push(v);		
	} 
	postUrl(form.action, urlEncodeDict(formVars), async, execOnSuccess(successCallback));
}

function postForm(formName, async, successCallback) {
	// postFormByName
	var form = document.forms[formName];
	return postFormByForm(form, async, successCallback);
}

function getRootNode(xmlHttpReq) {
	return xmlHttpReq.responseXML.getElementsByTagName('root')[0];
}
function getParentNode(xmlHttpReq, pNode) {
	return xmlHttpReq.responseXML.getElementsByTagName(pNode);
}
function getNodeValue(obj,tag) {
	node = obj.getElementsByTagName(tag);
	if(node!=null && node.length>0) {
		return node[0].firstChild.nodeValue;
	} else {
		return null;
	}
}

//Eventos
addEvent = function(o, e, f, s){
	var r = o[r = "_" + (e = "on" + e)] = o[r] || (o[e] ? [[o[e], o]] : []), a, c, d;
	r[r.length] = [f, s || o], o[e] = function(e){
		try{
			(e = e || event).preventDefault || (e.preventDefault = function(){e.returnValue = false;});
			e.stopPropagation || (e.stopPropagation = function(){e.cancelBubble = true;});
			e.target || (e.target = e.srcElement || null);
			e.key = (e.which + 1 || e.keyCode + 1) - 1 || 0;
		}catch(f){}
		for(d = 1, f = r.length; f; r[--f] && (a = r[f][0], o = r[f][1], a.call ? c = a.call(o, e) : (o._ = a, c = o._(e), o._ = null), d &= c !== false));
		return e = null, !!d;
    }
};

removeEvent = function(o, e, f, s){
	for(var i = (e = o["_on" + e] || []).length; i;)
		if(e[--i] && e[i][0] == f && (s || o) == e[i][1])
			return delete e[i];
	return false;
};

//Add Object to Array
addOtA = function() { this.a = new Array(); }
addOtA.prototype.add = function(n, v) { var o = new Object(); o.name = n; o.value = v; this.a.push(o); }
addOtA.prototype.get = function() { return this.a; }
//-->

function popImg(pImg) {

	var lWin = openWin('about:blank', '_blank', 100,100,'resizable=yes');
	lWin.document.open();
	lWin.document.writeln('<html><head><title>'+pImg+'</title>');
	lWin.document.writeln('<script language="JavaScript">');
	lWin.document.writeln('<!-- ');
	lWin.document.writeln('var NS = (navigator.appName=="Netscape")?true:false;');
	lWin.document.writeln('function redim() { ');
	lWin.document.writeln('var vWidth = document.images.figura.width - ((NS)?window.innerWidth:document.body.clientWidth); ');
	lWin.document.writeln('var vHeight = document.images.figura.height - ((NS)?window.innerHeight:document.body.clientHeight) - 1; ');
	lWin.document.writeln('var vLeft = (screen.width-vWidth)/2; ');
	lWin.document.writeln('var vTop = (screen.height-vHeight)/2; ');
	lWin.document.writeln('window.resizeBy(vWidth,vHeight); ');
	lWin.document.writeln('window.moveTo(vLeft,vTop); ');
	lWin.document.writeln('document.getElementById("divLoading").style.display = "none";');
	lWin.document.writeln('document.getElementById("divImg").style.visibility = "visible";');
	lWin.document.writeln('} ');
	lWin.document.writeln('//-->');
	lWin.document.writeln('</script> ');
	lWin.document.writeln('</head> ');
	lWin.document.writeln('<body bgcolor="#FFFFFF" leftmargin="0" topmargin="0" rightmargin="0" marginwidth="0" marginheight="0" onload="redim()">');
	lWin.document.writeln('<div id="divLoading" style="padding: 0px; height:100%; background-image:url(\'imgs/ico_loading.gif\'); background-repeat: no-repeat; background-position: center;"></div>');
	lWin.document.writeln('<div id="divImg" style="visibility:hidden;"><a href="javascript:;" onclick="self.close();"><img src="'+pImg+'" name="figura" title="Clique na imagem para fechar a janela" border="0"></a></div>');
	lWin.document.writeln('</body></html> ');
	lWin.document.close();
}

function formSubmit() {
	bgBlock(); doLoading();
	document.forms[0].submit();
}