//alert('opi');
function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

var gTabbableTags = new Array("A","BUTTON","TEXTAREA","INPUT","IFRAME");	
var gTabIndexes = new Array();
var lastFocused;
var iColor	= 0;
var color 	= new Array("#FFFFFF", "#F5F5F5");
var ver  	= navigator.appVersion;
var agent	= navigator.userAgent.toLowerCase();
var ie  	= (this.agent.indexOf("msie")>-1);
var dom		= !ie;
var debugDiv;
var alturaTotal, larguraTotal, wAlturaTotal, wLarguraTotal, theBody;

//---------------------- NUMBER
Number.prototype.formatAsMoney = function (){
	return this.valueOf().toFixed(2);
}

// ------------------------ FORM.ELEMENT
Form = {
	obrigatorios : function(elems){
		var focused = false;
		var campos = new Array();
		var j = 0;
		for (var i=0; i < elems.length; i++){
			//alert(elems[i] + ' ' +i);
			if (Form.Element.getValue(elems[i]).trim() == ""){
				if (!focused && Form.Element.getType(elems[i]) != "hidden"){
					elems[i].focus();
					focused = true;
				}
				campos[j++] = elems[i];
			}
		}
		return campos;
	},

	readOnly : function (formu){
		for (var i=0; i < formu.elements.length; i++){
			formu.elements[i].readOnly = true; 
		}
	},

	onlyIntValue : function(fields){
		for (var i=0; i < fields.length; i++){
			Form.Element.onlyIntValue(fields[i]); 
		}
	},
	
	onlyFloatValue : function (fields){
		for (var i=0; i < fields.length; i++){
			Form.Element.onlyFloatValue(fields[i]);
		}
	}
}


Form.Element = {
	setLastFocused : function(elem){
		addEvent(elem, "focus", function(e){ lastFocused = elem;} );
	},

	select2Text : function (cSelect, cText){
		cText.value = cSelect.options[cSelect.selectedIndex].value;
	},

	autoNextInputElement : function (targ){
		function nextInput(e){
			if (e.keyCode != 9 && ie){
				if (targ.value.length >= targ.maxLength){
					var inputs 		= document.getElementsByTagName("INPUT");
					var enInputs 	= new Array();
					var j			= 0;
					for (var i=0; i < inputs.length; i++){
						try {
							if (!inputs[i].disabled && !inputs[i].readOnly && inputs[i].type != "hidden"){
								enInputs[j++] = inputs[i];
							}
						} catch (e){}
					}

					for (i=0; i < enInputs.length; i++){
						if ( targ == enInputs[i] && enInputs[i].className != 'stopNextInputElement'){
							if (i+1 < enInputs.length){
								if (enInputs[i+1].value.length > 0){ enInputs[i+1].select(); }
								enInputs[i+1].focus(); break;
							}
						}
					}
				}
			}
		}
		addEvent(targ, "keyup", nextInput);
	},

	forceNextInputElement : function(me, nextInput){
		if (me.value.length >= me.maxLength && ie){
			nextInput.focus();
		}
	},

	blockMaxLength : function(targ, length){
		var lengthMaxLength = new String(length);
		var idCounter = targ.name + 'Counter';
		if (document.getElementById(idCounter)){
			var str = new String(targ.value.length);
			document.getElementById(idCounter).innerHTML = str.pad('0', lengthMaxLength.length, String.PAD_LEFT);
		}

		function xBlock(e){
			if (!e) e = window.event;
			var code = (e.keyCode ? e.keyCode : e.which);
			if (targ.value.length + 1 > length && !(code == 8 || code == 46)){
				targ.value = targ.value.substring(0, length);
				return false;
			}


			if (document.getElementById(idCounter)){
				var str = new String(targ.value.length);
				document.getElementById(idCounter).innerHTML = str.pad('0', lengthMaxLength.length, String.PAD_LEFT);
			}
		}
		if (targ) addEvent(targ, 'keydown', xBlock);
	},

	onlyFloatValue : function (targ){
		function xFloatKey(e){
			if (!e) e = window.event;
			var code = e.keyCode;
			return (
					(code >= 48 && code <= 57)
					|| (code >= 96 && code <= 105)
					|| new Array(46, 8, 9).inArray(e.keyCode)
					|| ( targ.value.indexOf(".") == -1 && (code == 190 || code == 194))
				);
		}
		if (targ) addEvent(targ, 'keydown', xFloatKey);
	},

	onlyIntValue : function(targ){
		function xIntKey(e){
			if (!e) e = window.event;
			return (
					(e.keyCode >= 48 && e.keyCode <= 57)
					|| (e.keyCode >= 96 && e.keyCode <= 105)
					|| new Array(46, 8, 9).inArray(e.keyCode)
				);
		}
		if (targ) addEvent(targ, 'keydown', xIntKey);
	},

	isDate : Form.isDate,

	getValue : function (elem){
		var value = "";
		if (Form.Element.getType(elem) == "radio"){ // radio
			if (elem.length){
				for (var i=0; i < elem.length; i++){
					if (elem[i].checked){
						value = elem[i].value.toString();
					}
				}
			} else {
				if (elem.checked){
					value = elem.value;
				}
			}
		} else if (Form.Element.getType(elem) == "select-one"){ // select-one
			value = elem.options[elem.selectedIndex].value;
		} else if (Form.Element.getType(elem) == "select-multiple"){
			value = new Array();
			var j=0;
			for (var i=0; i < elem.options.length; i++){
				if (elem.options[i].selected){
					value[j++] = elem.options[i].value;
				}
			}
		} else {
			value = elem.value;
		}
		//alert(elem.name + ' ' + value + ' ' + Form.Element.getType(elem));
		return value;
	},

	getType : function (elem){
		var eType = "";
		try {
			if (elem.length){
				if (elem.length > 0){
					if (elem[0].type == "radio"){ // radio
						eType = elem[0].type;
					} else if (elem.type.indexOf("select") != -1){ // select-one
						eType = elem.type;
					}
				} else {
					eType = elem.type;
				}
			} else {
				eType = elem.type;
			}
		} catch (e){
			// continua retornando vazio
		}
		return eType;
	},

	getSelectedIndex : function(elem){
		var index = -1;
		if (Form.Element.getType(elem) == "radio"){ // radio
			for (var i=0; i < elem.length; i++){
				if (elem[i].checked){
					index = i;
				}
			}
		} else  if (Form.Element.getType(elem) == "select-one"){ // select-one
			index = elem.selectedIndex
		} else if (Form.Element.getType(elem) == "select-multiple"){
			index = new Array();
			var j=0;
			for (var i=0; i < elem.options.length; i++){
				if (elem.options[i].selected){
					index[j++] = i;
				}
			}
		}
		return index;
	},

	setInitValue : function (elem, pValue, multiple){
		if (Form.Element.getType(elem) == "radio"){ // radio
			for (var i=0; i < elem.length; i++){
				elem[i].checked = (elem[i].value == pValue);
			}
		} else if (Form.Element.getType(elem).indexOf("select") != -1) {
			//elem.options[0].selected = false;
			for (i=0; i < elem.options.length; i++){
				var selected = (elem.options[i].value == pValue);
				if (!multiple){
					elem.options[i].selected = selected;
				} else {
					if (selected){
						elem.options[i].selected = selected;
					}
				}
			}
		} else {
			if (Form.Element.getType(elem) == "checkbox"){
				elem.checked = (elem.value == pValue);
			} else {
				elem.value = pValue;
			}
		}
	},

	isEmail : function (elem){
		var eValue = elem.value = elem.value.trim();
		var regExp = /^[a-z-_\.]+@.+(\.[a-z]{2,})$/;
		var ret = regExp.test(eValue);
		return ret;
	},

	isURL : function (elem){
		var eValue = elem.value;
		var regExp = /^(http:\/\/).+/;
		return regExp.test(eValue);
	},

	clear : function(elem){
		var eType = Form.Element.getType(elem);
		if (eType == "radio"){ // radio
			if (elem.length > 0){
				for (var i=0; i < elem.length; i++){
					elem[i].checked = false;
				}
				elem[0].checked = true;
			}
		} else if (eType.indexOf("select") != -1) {

			for (var i=0; i < elem.options.length; i++){
				elem.options[i].selected = false;
			}i
		} else {
			if (eType != "checkbox"){
				elem.value = '';
			}
		}
	}
}

Form.Element.Select = {

	whosSelected : function(elem){
		var iSelected = new Array();
		var j=0;
		for (var i=0; i < elem.options.length; i++){
			if (elem.options[i].selected){
				iSelected[j++] = i;
			}
		}
		return iSelected;
	}
}

String.PAD_LEFT  = 0;
String.PAD_RIGHT = 1;
String.PAD_BOTH  = 2;
String.prototype.pad = function(caracter, tamanho, strpad){
	var texto = this.toString();
	for (var i = texto.length; i < tamanho; i++){
		texto = ( strpad == String.PAD_RIGHT ? texto + caracter : caracter + texto );
	}
	return texto;
};

function newWindow(pagina, nome, param){
	var tmp = window.open(pagina, nome, param + ",scrollbars=1, resizable=1, status=1, titlebar=1");
	winToCenter(tmp);
	return tmp;
}

function newModalWindow(pagina, nome, param){
	var win = newWindow(pagina, nome, param);
	var winFocus = function(){ win.focus(); }
	addEvent(win, "blur", winFocus);
}

function closeWindow(reload){
	var win = window;	
	if (window.opener){
		win = window.opener;
	} else if(parent.hidePopWin){
		win = parent.window;
	}

	if (reload){
		var urlAtual = win.location.href;
		var pos = urlAtual.indexOf("#");
		if (pos != -1){ urlAtual = urlAtual.substring(0, pos); }

		if (urlAtual.indexOf("reloaded") == -1){
			win.location.href = urlAtual + (urlAtual.indexOf("?") == -1 ? "?" : "&") + "reloaded=1";
		} else {
			win.location.href = urlAtual;
		}
	}

	if (window.opener){
		window.close();
	} else if(parent.hidePopWin){
		parent.hidePopWin(false);
	}
	
}


//----------------------------------- ARRAY
Array.prototype.inArray = function (search){
	var ret = false;
	for (i=0; i < this.length; i++){
		if (this[i] == search){
			ret = true;
			break;
		}
	}
	return ret;
}

// ----------------------------------- STRING
String.prototype.isCpf = function (){
	this.calcDigito = function(base){
		soma		= 0;							// guarda a soma
		length		= base.length;				// tamanho da base informada
		maxDigito 	= length + 1;			// maximo multiplicador
		for (var i=0; i < length; i++){
			soma += base.charAt(i) * maxDigito--;
		}
		resto = soma % 11;
		return ((resto == 0 || resto == 1) ? 0 : 11 - resto);
	}

	return (
			this.toString().length == 11 &&
			this.toString().substr(9) == this.calcDigito(this.toString().substring(0,9)) + '' + this.calcDigito(this.toString().substring(0,10))
		);	
}

String.prototype.isCnpj = function(){
	this.calcDigito1 = function (){
		base	= this.toString().substring(0,12);
		fator	= new Array(5,4,3,2,9,8,7,6,5,4,3,2);
		soma	= 0;
      	for (var i=0; i < base.length; i++){
			soma += base.charAt(i) * fator[i];
		}
		d1 = soma % 11;
		d1 = d1 < 2 ? 0 : 11 - d1;
		return d1;
	}

	this.calcDigito2 = function (){
		base	= this.toString().substring(0,13);
		fator	= new Array(6,5,4,3,2,9,8,7,6,5,4,3,2);

		soma	= 0;
      	for (var i=0; i < base.length; i++){
			soma += base.charAt(i) * fator[i];
		}
		d2 = soma % 11;
		d2 = (d2 < 2 ? 0 : 11 - d2);

		return d2;
	}
	
	return (
		this.toString().length == 14 &&
		this.toString().substr(12) == this.calcDigito1() + '' + this.calcDigito2()
		);
}

String.prototype.lTrim = function(){
	var sString = this.toString();
	while (sString.substring(0,1) == ' '){
		sString = sString.substring(1, sString.length);
	}
	return sString;
}

String.prototype.rTrim = function(){
	var sString = this.toString();
	while (sString.substring(sString.length-1, sString.length) == ' '){
		sString = sString.substring(0,sString.length-1);
	}
	return sString;
}

String.prototype.trim = function(){
	var sString = this.toString();	
	return sString.rTrim().lTrim();
}

Date.prototype.parse = function(strDate){
	var ano = strDate.substr(0,4);
	var mes = parseFloat(strDate.substr(4,2))-1;
	var dia = strDate.substr(6,2);
	var hora = strDate.substr(8,2);
	var minuto = strDate.substr(10,2);
	var segundo = strDate.substr(12,2);
	this.setFullYear(ano, mes, dia);
	this.setHours(hora, minuto, segundo);
}

//----------------------------------- WINDOW

var mousePersuit = function(targ){
	function xMousePersuit(e){
		if (!e) e = window.event;
		try {
			var posX 			= (e.clientX ? e.clientX : e.pageX);
			var posY			= (e.clientY ? e.clientY : e.pageY);
			targ.style.left 	= (posX + 20) + 'px';
			targ.style.top 		= posY + 'px';
		} catch (e){}
	}
	addEvent(theBody, 'mousemove', xMousePersuit);
}

function addEvent(obj, evType, fn){
	if (obj.addEventListener){ obj.addEventListener(evType, fn, false); return true;
	} else if (obj.attachEvent){ var r = obj.attachEvent("on"+evType, fn); return r;
	} else { return false; }
}

function removeEvent(obj, evType, fn, useCapture){
	if (obj.removeEventListener){ obj.removeEventListener(evType, fn, useCapture); return true;
	} else if (obj.detachEvent){ var r = obj.detachEvent("on"+evType, fn); return r; 
	} else { }
}

var autoNextInputElement = function (targ){
	function nextInput(e){
		if (e.keyCode != 9 && ie){
			if (targ.value.length == targ.maxLength){
				var inputs 		= document.getElementsByTagName("INPUT");	
				var enInputs 	= new Array();
				var j			= 0;
				for (var i=0; i < inputs.length; i++){
					if (!inputs[i].disabled && !inputs[i].readOnly && inputs[i].name != "" && inputs[i].type != "hidden" ){ enInputs[j++] = inputs[i]; }
				}

				for (i=0; i < enInputs.length; i++){
					if (targ.name == enInputs[i].name){
						if (i+1 < enInputs.length){ 
						if (enInputs[i+1].value.length > 0){ enInputs[i+1].select(); }
						enInputs[i+1].focus(); break; 
						}
					}
				}
			}
		}
	}
	addEvent(targ, "keyup", nextInput);
}

function asLink(targ, tipo){
	var oldClassName 	= targ.className;
	var over			= function(){theBody.style.cursor = "pointer"; targ.className += ' over'};
	var out				= function(){theBody.style.cursor = "auto"; targ.className = oldClassName;};

	if (tipo == "add"){
		addEvent(targ, "mouseover", over);
		addEvent(targ, "mouseout", out);
	} else {
		targ.onmouseover = over;
		targ.onmouseout = out;
	}
	addEvent(targ, "click", out);
}

XMLNode = {
	getValue : function (node){
		var ret = false;
		if (node.firstChild){
			ret = node.firstChild.nodeValue;
		}
		return ret;
	}
}

$(function(){ 
	theBody = document.getElementsByTagName("BODY")[0];
});
