/**** VALIDAR DATA *************************************************************************************************************/
function isDate(dateStr) {
	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
	var matchArray = dateStr.match(datePat); // is the format ok?
	
	if (dateStr != '') {
		if (matchArray == null) {
			alert("Data inválida.");    
			return false;
		}
		
		day = matchArray[1]; // parse date into variables
		month = matchArray[3];
		year = matchArray[5];
	
		if (month < 1 || month > 12) { // check month range
			alert("Data inválida.");
			return false;
		}
		
		if (day < 1 || day > 31) {
			alert("Data inválida.");
			return false;
		}
		
		if ((month==4 || month==6 || month==9 || month==11) && day==31) {
			alert("Data inválida.")
			return false;
		}
		
		if (month == 2) { // check for february 29th
			var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
			if (day > 29 || (day==29 && !isleap)) {
				alert("Data inválida.");
				return false;
			}
		}
	}
	return true; // date is valid
}

/*** IMPLEMENTAÇÃO AJAX ********************************************************************************************************/
/*** COMO UTILIZAR **************************************************************************************************************
var oAjax = new AjaxObject(); //Instanciando o objeto
oAjax.url = [página que se deseja executar no server];
oAjax.tagid_repositorio = [ID do objeto onde se deseja visualizar o resultado];
oAjax.tipo_retorno = [Enumeração: 
											- oAjax.eTipoRetorno.BODY (retorna todo o conteúdo da tag BODY)
											- oAjax.eTipoRetorno.PAGINA (retorna todo o conteúdo da página)
											- oAjax.eTipoRetorno.TAGID (retorna todo o conteúdo da tag com o ID informado em tagid_retorno)
										 ];
oAjax.tagid_retorno = [ID do objeto que se deseja retornar do servidor];
oAjax.assincrono = [indica se o envio será assíncrono. Se sim, a página que enviou não aguarda o retorno da página enviada];
oAjax.executar(); //Envia a página ao servidor com os parâmetros especificados e obtem o retorno
oAjax.retornoHTML(); //Retorna o HTML processado da página enviada ao servidor (Obs.: não esqueça dos parenteses)
********************************************************************************************************************************/
function AjaxObject() {
	/* DECLARAÇÃO DE ENUMS LOCAIS */
	var _eSituacao = {
		NAO_INICIAL: 0, //A solicitação não foi inicializada ainda
		EM_CONFIG  : 1, //A solicitação está sendo configurada
		ENVIANDO   : 2, //A solicitação está sendo enviada
		EM_PROCESS : 3, //A solicitação está em processo
		COMPLETA   : 4  //A solicitação foi completada
	};
	var _eTipoRetorno = {
		PAGINA: 0, //Retorna a página inteira (não recomendado pois pode embutir a tag BODY na tag BODY)
		BODY  : 1, //Retorna exatamente o conteúdo da tag BODY (recomendado)
		TAGID : 2  //Retorna um objeto específico de acordo com sua tag e id (obrigatório o uso da propriedade TagIDRetorno)
	};
	
	/* DECLARAÇÃO DE VARIAVEIS LOCAIS */
	var _prompt_titulo = "AJAX Erro:\n";
	var _url = "";
	var _tagid_repositorio = "";
	var _tipo_retorno = _eTipoRetorno.BODY;
	var _tagid_retorno = "";
	var _status = _eSituacao.EM_PROCESS;
	var _assincrono = true;
	var _retornoHTML = "";
	
	/* DECLARAÇÃO DE PROPRIEDADES */
	this.eSituacao = _eSituacao;
	this.eTipoRetorno = _eTipoRetorno;
	this.url = "";
	this.tagid_repositorio = "";
	this.tipo_retorno = _eTipoRetorno.BODY;
	this.tagid_retorno = "";
	this.assincrono = _assincrono;
	this.retornoHTML = function(){
		return _retornoHTML;
	}

	/* DECLARAÇÃO DE MÉTODOS: procedimentos e/ou funções, públicas e/ou privadas*/
	//Trata o retorno do servidor
	var tratarRetorno = function(strRetorno){
		switch (_tipo_retorno){
			case _eTipoRetorno.PAGINA:
				break;
			case _eTipoRetorno.BODY:
				var tag_body_open_pos1 = strRetorno.search(/<body/i);
				var tag_body_open_pos2 = strRetorno.indexOf(">",tag_body_open_pos1)+1;
				var tag_body_close = strRetorno.search(/<\/body>/i)-1;
				strRetorno = strRetorno.substring(tag_body_open_pos2,tag_body_close);
				break;
			case _eTipoRetorno.TAGID:
				break;
		}
		return strRetorno;
	}
	
	//"Roda" a página no servidor e retorna o resultado
	var run = function(){
		var r = false;
		
		try{
			// Firefox, Opera 8.0+, Safari
			var oXmlHttp = new XMLHttpRequest();
		}catch (e){
			// Internet Explorer
			try{
				var oXmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
			}catch (e){
				try{
					var oXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
				}catch (e){
					alert(_prompt_titulo+"Seu browser não suporta esta tecnologia!");
					var oXmlHttp = null;
				}
			}
		}
		
		if(oXmlHttp){
			oXmlHttp.onreadystatechange=function(){
				if(oXmlHttp.readyState==_eSituacao.COMPLETA){
					_retornoHTML = tratarRetorno(oXmlHttp.responseText);
					if(_tagid_repositorio != ""){
						document.getElementById(_tagid_repositorio).innerHTML = _retornoHTML;
					}
					_status = _eSituacao.COMPLETA;
					r = true;
				}
			}
			oXmlHttp.open("GET",_url,_assincrono);
			oXmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso-8859-1")
			oXmlHttp.send(null);
		}
		return r;
	}
	
	this.executar = function(){
		try{
			_url = this.url;
			_tagid_repositorio = this.tagid_repositorio;
			_tipo_retorno = this.tipo_retorno;
			_tagid_retorno = this.tagid_retorno;
			_assincrono = this.assincrono;
			
			if(_tagid_repositorio != ""){
				document.getElementById(_tagid_repositorio).innerHTML = '<img src="/atendimento/images/ajax-loader.gif" width="16" height="16" />';
			}
			
			if(_url==""){
				alert(_prompt_titulo+"Não existe página para processar!");
			}else{
				if(_url.search(/\?/i)==-1){
					_url += "?";
				}else{
					_url += "&";
				}
				var d = new Date();
				_url += "t="+d.getHours()+d.getMinutes()+d.getSeconds()+d.getMilliseconds();
				return run();
			}
		}catch(err){
			alert(_prompt_titulo+"\n"+err.description);
			return null;
		}
	}
}
/*******************************************************************************************************************************/

