// Adiciona o método trim() à classe String
String.prototype.trim = function()
{ 
	return this.replace(/(^\s*)|(\s*$)/g, "");
}
// Classe wait_display
function wait_display()
{
	this.__wait;
}
wait_display.prototype.create = function ()
{
	if(this.__wait==null)
	{
		this.__wait = document.createElement('SPAN');
		this.__wait.id = '_span_wait';
		this.__wait.style.left = 0;
		this.__wait.style.width = 750;
		this.__wait.style.top = document.body.scrollTop+200;
		this.__wait.style.height = 60;
		this.__wait.style.position = 'absolute';
		this.__wait.style.visibility = 'hidden';
		var inner  = '<table border="0" width="100%" height="60" cellspacing="0" cellpadding="0">\n';
			inner += '	<tr>\n';
			inner += '		<td align="center" valign="middle">\n';
			inner += '			<table id="_table_wait" height="60" border="0" cellspacing="0" cellpadding="0" style="border:outset #FFFFEE 2px;background-color:#FFFFEE;">\n';
			inner += '				<tr>\n';
			inner += '					<td width="60" height="60" align="center" valign="middle">\n';
			inner += '						<img src="'+this.__icon+'" align="absmiddle">\n';
			inner += '					</td>\n';
			inner += '					<td align="center" valign="middle" nowrap>\n';
			inner += '						<font color="#555555" style="font-style:italic">&nbsp;&nbsp;&nbsp;&nbsp;'+this.__title+'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font>\n';
			inner += '					</td>\n';
			inner += '				</tr>\n';
			inner += '			</table>\n';
			inner += '		</td>\n';
			inner += '	</tr>\n';
			inner += '</table>\n';
		this.__wait.innerHTML = inner;
		document.body.appendChild(this.__wait);
		document.body.onscroll = function()
		{
			__wait_display.style.top = document.body.scrollTop+200;
		}
		__wait_display = this.__wait;
		//var drag = new DragDrop();
		//drag.addElement('_table_wait','_span_wait',null,true);
	}
}

wait_display.prototype.show = function()
{	
	var _show = arguments[0];
	if(this.__wait!=null)
	{
		this.__wait.style.visibility = _show?'visible':'hidden';
	}
}

wait_display.prototype.destroy = function()
{
	document.body.removeChild(this.__wait);
	this.__wait = null;
}

// Aplica máscara em controles durante a digitação
var ctrl = false;

function mascara(Campo,mascara) 
{ 
	document.selection.createRange().text = '';
	teclapres = event;
	strtext = Campo.value;
    tamtext = strtext.length; 
    //pegando o tamanho da mascara 
    tammask = mascara.length;
    //criando um array para guardar cada caractere da mscara 
    arrmask = new Array(tammask);     
    //jogando os caracteres para o vetor 
    for (var i=0;i<tammask;i++)
	{ 
        arrmask[i] = mascara.slice(i,i+1); 
    } 
	ctrl = teclapres.ctrlKey; // CTRL
    //inicia a formatacao 
	if (((teclapres.keyCode>=65 && teclapres.keyCode<=90) || // 0 a 9 (tecl. sup.)
		(teclapres.keyCode>=97 && teclapres.keyCode<=122) && (arrmask[tamtext]=='A' || arrmask[tamtext]=='#' || arrmask[tamtext+1]=='A' || arrmask[tamtext+1]=='#')) || // 0 a 9 (tecl. sup.)
		((teclapres.keyCode>=37 && teclapres.keyCode<=40) || // 0 a 9 (tecl. sup.)
		(teclapres.keyCode>=48 && teclapres.keyCode<=57) && (arrmask[tamtext]=='9' || arrmask[tamtext]=='#' || arrmask[tamtext+1]=='9' || arrmask[tamtext+1]=='#')) || // %, &, ', (
//        	(teclapres.keyCode >= 96 && teclapres.keyCode <= 105) || // 0 a 9 (tecl. num.)
		(ctrl && teclapres.keyCode==67) ||  // ctrl + c  
		(ctrl && teclapres.keyCode==99) ||  // ctrl + c     	
		(ctrl && teclapres.keyCode==86) ||  // ctrl + v
		(ctrl && teclapres.keyCode==118) || // ctrl + v      	
		(teclapres.keyCode==8) ||  // backspace
		(teclapres.keyCode==9) ||  // tab
		(teclapres.keyCode==46) || // delete
		(teclapres.keyCode==13))  // Enter
	{
		organize(Campo, arrmask[tamtext], teclapres.keyCode, strtext);
		if ((ctrl && teclapres.keyCode==67) ||  // ctrl + c  
			(ctrl && teclapres.keyCode==99) ||  // ctrl + c     	
			(ctrl && teclapres.keyCode==86) ||  // ctrl + v
			(ctrl && teclapres.keyCode==118))   // ctrl + v                    
			ctrl = false;
	} 
	else 
	{ // ignora outro evento
		event.returnValue = false;
		if (strtext != "") 
		{
			Campo.value = strtext;
		} 
	}
}

// Mtodo utilizado com o formatField
// Organiza o campo de acordo com a mscara
function organize(Campo,arrpos,teclapres_key,strtext)
{ 
    if (((arrpos=='/') || 
    	 (arrpos=='.') || 
    	 (arrpos==',') || 
    	 (arrpos==':') || 
    	 (arrpos==' ') || 
    	 (arrpos=='-')) && 
    	 teclapres_key!=8) // backspace 
	{
        separador = arrpos ;
        masktext = strtext+separador ;
        Campo.value = masktext ;
    }
} 

// Verifica se a tecla pressionada  nmero ou no
function isNumeric(event) {
	var code;
	if (navigator.appName == "Microsoft Internet Explorer") {
		code = event.keyCode;
	} else { // Netscape
		var keyChar = String.fromCharCode(event.which);
		code = keyChar.charCodeAt(0);		
	}
	if (code > 47 && code < 58) { // nmeros
		return true; 
	} else {
		if ((code > 64 && code < 91)  || 	// letras A a Z
			(code > 96 && code < 123) || 	// letras a a z 
			(code == 231) || (code == 199) || //  e 
			(code == 180) || (code == 168) || // '' e ''
			(code > 31 && code < 48)  || 	// pontuaes
			(code > 57 && code < 65)  || 	// pontuaes
			(code > 90 && code < 97)  || 	// pontuaes
			(code > 122 && code < 127))  	// pontuaes
			return false;
		else 
			return true;
	}	
}

// Verifica se  uma data vlida
function isDate(data) { 
	if (data.value != "") {
		dia = (data.value.substring(0,2)); 
        mes = (data.value.substring(3,5)); 
        ano = (data.value.substring(6,10)); 
        situacao = ""; 
        // verifica o dia valido para cada mes 
        if ((dia < 1)||(dia < 1 || dia > 30) && (  mes == 4 || mes == 6 || mes == 9 || mes == 11 ) || dia > 31) { 
            situacao = "falsa"; 
        } 
        // verifica se o mes e valido 
        if (mes < 1 || mes > 12 ) { 
            situacao = "falsa"; 
        } 
        // verifica se e ano bissexto 
        if (mes == 2 && ( dia < 1 || dia > 29 || ( dia > 28 && (parseInt(ano / 4) != ano / 4)))) { 
            situacao = "falsa"; 
        } 
        if (situacao == "falsa") { 
            alert(data.value + ": data invlida!"); 
            data.focus(); 
        } 
	}
} 

// Limita o tamanho de um campo "textarea"
function textareaLimit(field,countfield,maxlimit) {
	if (field.value.length > maxlimit) // if too long...trim it!
		field.value = field.value.substring(0, maxlimit);
	else // otherwise, update 'characters left' counter
	countfield.innerText = maxlimit - field.value.length;
}

// Desabilita todos os campos do formulrio recebido por parmetro
// usage: <form method="POST" onSubmit="submitAndDisable(this)">
function submitAndDisable(theform) {
//if IE 4+ or NS 6+
	if (document.all||document.getElementById) {
		for (i=0;i<theform.length;i++) {
			var tempobj=theform.elements[i];
			if(tempobj.type.toLowerCase()=="submit"||
			tempobj.type.toLowerCase()=="button"||
			tempobj.type.toLowerCase()=="reset")
				tempobj.disabled=true;
		}
	}
	return true;
}

// Foca o primeiro elemento do formulrio
function focusFirst() {
   if (document.forms.length > 0) {
      var TForm = document.forms[0];
      for (i=0;i<TForm.length;i++) {
         if ((TForm.elements[i].type=="text")||
           (TForm.elements[i].type=="textarea")||
           (TForm.elements[i].type.toString().charAt(0)=="s")) {
            document.forms[0].elements[i].focus();
            break;
         }
      }
   }
}

// Aplica máscara em controles após perder o foco
function maskonblur(obj,mask)
{
	var text = obj.value;
	var chm;
	var chr;
	var buffer = '';
	for(var i=0;i<text.length;i++)
	{
		chr = text.substr(i,1);
		if(i<mask.length)
			chm = mask.substr(i,1);
		else
			chm = '';
		alert(chr+' : '+chm);
		if(chm=='9' && (chr>='0' && chr<='9'))
			buffer += chr;
		if(chm=='#' && ((chr>='A' && chr<='Z') || (chr>='a' && chr<='z')))
			buffer += chr;
		if(chm!='')
			buffer += chr;
	}
	obj.value = buffer;
	
	return true;
}

// Excessão nas teclas de atalho
function key_exceptions(objeto)
{
	if(event.srcElement.type=='text'||
		event.srcElement.type=='select-one'||
		event.srcElement.type=='textarea'||
		event.srcElement.type=='file'||
		event.srcElement.type=='checkbox')
		return false;
	else
		return true;
	
}

// Controla o display de espera
var dragapproved=false;
var z,x,y;
function wait_move()
{
	if(event.button==1 && dragapproved)
	{
		z.style.pixelLeft=temp1+event.clientX-x;
		z.style.pixelTop=temp2+event.clientY-y;
		return false;
	}
}
function wait_drags()
{
	dragapproved=true;
	z=event.srcElement;
	temp1=z.style.pixelLeft;
	temp2=z.style.pixelTop;
	x=event.clientX;
	y=event.clientY;
	document.onmousemove=wait_move;
}

// Classe CallBack
var _xmlhttp_obj = null;
var _http_response_func = null;
var _element_cold = null;
// Constructor - chamada da classe
function CallBack(url)
{
	var i = null;
	this.params = new Array();
	this.http_url = url;
	this.http_response = null;
	return this;
}
// setURL(String) - indica para a classe qual a url a ser chamada
CallBack.prototype.setURL = function()
{
	this.http_url = arguments[0];
}
// setParameters(Array[2], Array[2],...) - indica os parâmetros httprequest a serem enviados
CallBack.prototype.setParameters = function()
{
	var param = new Array();
	for(i=0;i<arguments.length;i++)
	{
		param[i] = arguments[i]
	}
	this.params = param;
}
// addParameters(String,String) - adiciona um parâmetro (chave,valor) httprequest individualmente
CallBack.prototype.addParameters = function()
{
	if(arguments.length==2)
	{
		this.params[this.params.length] = new Array(arguments[0],arguments[1]);
	}
}
// setTargetResponse(Object) - indica o objeto function a ser executado ao retornar o resultado
CallBack.prototype.setTargetResponse = function ()
{
	_http_response_func = arguments[0];
}
// sendRequest - envia a requisição
CallBack.prototype.sendRequest = function()
{
	_xmlhttp_obj = new ActiveXObject('Microsoft.XMLHTTP');
	if(_xmlhttp_obj)
	{
		_xmlhttp_obj.onReadyStateChange = this._getResponse;
		_xmlhttp_obj.open(this.http_url.indexOf('?')==-1?'POST':'GET',this.http_url,true);
		if(this.http_url.indexOf('?')==-1)
		{
			_xmlhttp_obj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
			var strpost = '';
			var charspc = '';
			for(i=0;i<this.params.length;i++)
			{
				charspc = this.params[i][1].toString();
				if(charspc.indexOf('&')>-1)
					charspc = charspc.replace('&','%26');
				strpost += this.params[i][0]+'='+escape(charspc)+'&';
			}
			strpost = strpost.substr(0,strpost.length-1);
		}
		else
			var strpost = null;
		if(_element_cold!=null) _element_cold.disabled = true;
		_xmlhttp_obj.send(strpost);
	}
}
// coldElement - Desabilita um elemento enquanto o sendRequest está rodando
CallBack.prototype.coldElement = function(obj)
{
	_element_cold = obj;
}
// _getResponse - função interna que trata o retorno e executa a função indicada em setTargetResponse
CallBack.prototype._getResponse = function()
{
	if(_xmlhttp_obj.readyState==4)
	{
		if(_xmlhttp_obj.status==200)
		{
			var text = _xmlhttp_obj.responseText;
			text = text.replace(/\+/g,' ');
			text = unescape(text);
			_http_response_func(text);
			if(_element_cold!=null)
			{
				_element_cold.disabled = false;
				_element_cold = null;
			}
		}
	}
}

function resetList(list)
{
	if(list.type=='select-one')
		while(list.options.length>0)
			list.options.remove(0);
}

// Classe DragDrop
// Constructor - chamada da classe
function DragDrop()
{
	this.objSelecionado = null;
	this.mouseOffset = null;
	this.actualBorderColor = null;
	this.dragBorder = true;
}
// mouseCooords(ev) - Retorna um objeto com as coordenadas x e y do mouse
DragDrop.prototype.mouseCoords = function(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};
}
// getPosition(e,ev) = Retorna um objeto com as coordenadas x e y do objeto selecionado
DragDrop.prototype.getPosition = function(e,ev)
{
	e = document.getElementById(e);
	var left = 0;
	var top  = 0;
	var coords = this.mouseCoords(ev);
	while (e.offsetParent)
	{
		left += e.offsetLeft;
		top  += e.offsetTop;
		e     = e.offsetParent;
	}
	left += e.offsetLeft;
	top  += e.offsetTop;
	return {x: coords.x - left, y: coords.y - top};
}
// addElement(local_click,caixa_movida) - Adiciona os objetos que serão afetados pela classe
DragDrop.prototype.addElement = function(local_click,caixa_movida,dragStopFn)
{
	document.getElementById(local_click).style.cursor = 'move';
	document.getElementById(local_click).style.position = 'absolute';
	addEvent(local_click, 'mousedown', function(ev)
		{
			this.actualBorderColor = document.getElementById(local_click).style.borderColor;
			if(ev.srcElement.tagName!='IMG')
			{
				document.getElementById(local_click).style.borderColor = 'red';
				this.objSelecionado = caixa_movida;
				this.mouseOffset = DragDrop.prototype.getPosition(this.objSelecionado, ev);
			}
		}
	);
	addEvent(document,'mouseup',function(ev)
		{
			if(this.actualBorderColor)
				document.getElementById(local_click).style.borderColor = this.actualBorderColor;
			this.objSelecionado = null;
			if(dragStopFn!=null)
				eval(dragStopFn);
		}
	);
	addEvent(caixa_movida,'mousemove',function(ev)
		{
			var ev = ev || window.event;
			var mousePos = DragDrop.prototype.mouseCoords(ev);
			if(this.objSelecionado)
			{
				document.getElementById(this.objSelecionado).style.left = mousePos.x - this.mouseOffset.x + 'px';
				document.getElementById(this.objSelecionado).style.top = mousePos.y - this.mouseOffset.y + 'px';
				document.getElementById(this.objSelecionado).style.margin = '0px';
				return false;
			}
		}
	);
}
// Função addEvent - Anexa uma função a um evento de qualquer objeto
function addEvent(obj,evType,fn)
{
	if(typeof(obj)=='string')
	{
		if(null==(obj = document.getElementById(obj)))
		{
   			throw new Error('Elemento HTML não encontrado. Não foi possível adicionar o evento.');
		}
	}
	if(obj.attachEvent)
	{
		return obj.attachEvent(('on'+evType),fn);
	} 
	else 
	{
		if(obj.addEventListener)
		{
  			return obj.addEventListener(evType, fn, true);
		}
		else
		{
 			throw new Error('Seu browser não suporta adição de eventos.');
		}
	}
}
// Função refreshTimer - Ajusta o tempo de execução no rodapé do sistema
function Timer()
{
	this.time = null;
}
Timer.prototype.start = function ()
{
	var date = new Date();
	this.init = date.getSeconds()+
					(date.getMinutes()*60)+
					(date.getHours()*3600);
}
Timer.prototype.showTimer = function (object)
{
	try
	{
		var date = new Date();
		var finish = date.getSeconds()+
						(date.getMinutes()*60)+
						(date.getHours()*3600);
		this.time = finish-this.init;
		
		var hrs = parseInt(this.time/3600);
		var mnt = parseInt((this.time-(hrs*3600))/60);
		var sec = this.time-(mnt*60);
		
		var hh = ('00'+hrs.toString()).substr(hrs.toString().trim().length);
		var mm = ('00'+mnt.toString()).substr(mnt.toString().trim().length);
		var ss = ('00'+sec.toString()).substr(sec.toString().trim().length);
		
		object.innerText = hh+':'+mm+':'+ss;
	}
	catch (e)
	{
		alert(e.message);
	}
}
Timer.prototype.reset = function ()
{
	this.init = null;
	this.time = null;
}
