//**************************************************************
//ComboSync - Uma classe sincrona para a sincronizacao de combos
//**************************************************************

ComboSync=function(comboId, dependentComboId, queryName, valueType){
	this.combo = document.getElementById(comboId);
	this.dependentCombo = document.getElementById(dependentComboId);
	this.request = null;
	this.queryName = queryName;
	this.valueType = valueType;
	this.combo.onchange = this.loadCombo;
	this.combo.ref = this;
	this.ref = this;
}
ComboSync.prototype={
	loadCombo:function(){
		var ref = this.ref;
		var baseValue = ref.combo.value;
  		var url = "getCombo.ajax?query="+escape(ref.queryName)+"&value="+escape(baseValue)+"&valueType="+ref.valueType+"&dummy="+ new Date().getTime();
  		ref.request = createRequest();
  		ref.request.open("GET", url, false);
  		ref.request.send(null);
    	if(ref.request.status == 200){
      		var xmlDoc = ref.request.responseXML;
      		var root = xmlDoc.firstChild;
      		if(root.nodeName == "xml")
        		root = root.nextSibling;
      		clearNodes(ref.dependentCombo);
      		for(var i=0;i<root.childNodes.length;i++){
				var option = document.createElement("option");
				var value = root.childNodes[i].getAttribute("id");
				var text = root.childNodes[i].getAttribute("value");
				option.setAttribute("value",value);
				var textNode = document.createTextNode(text);
				option.appendChild(textNode);
				ref.dependentCombo.appendChild(option);
      		}
      		if(ref.dependentCombo.onchange)
  				ref.dependentCombo.onchange(); 
    	} else {
      		alert(ref.request.statusText);
    	}
	}
}

//**************************************************************
//FormSync - Uma classe para operacoes assincronas com formularios
//**************************************************************

FormSync=function(formId, className){
	this.formId = formId;
	this.className = className;
	this.request = null;
	this.formSync = this;
}
FormSync.prototype ={
	loadData:function(id){
 		var url = "getObj.ajax?type="+escape(this.className)+"&id="+escape(id)+"&dummy="+ new Date().getTime();
  		this.request = createRequest();
		this.request.open("GET", url, true);
		var loader = this;
		this.request.onreadystatechange = function(){
			loader.putObjOnScreen.call(loader);
		}
		this.request.send(null);
	},
	putObjOnScreen:function(){
  		if(this.request.readyState == 4){
    		if(this.request.status == 200){
      			var xmlDoc = this.request.responseXML;
      			var root = xmlDoc.firstChild;
      			if(root.nodeName == "xml")
          			root = root.nextSibling;
      			setNodeValues("domain", root);
    		} else {
      			alert(this.request.status);
    		}
  		}
	},
	resetForm:function(){
  		this.resetMessages();
  		var form = document.getElementById(this.formId);
  		for(var i = 0; i < form.elements.length; i++){
  	  		if(form.elements[i].nodeName == "INPUT"){
  	  			if(form.elements[i].type != "button" &&
  	  	   		   form.elements[i].type != "reset" &&
  	  	   		   form.elements[i].type != "submit" &&
  	  	   		   form.elements[i].type != "image")
        			form.elements[i].value = "";
      		}
      		if(form.elements[i].nodeName == "SELECT"){
        		form.elements[i].selectedIndex = 0;
        		if(form.elements[i].onchange)
  					form.elements[i].onchange();
      		}
  		}
	},
	submit:function(callAfter, objectToCall){
	  	form = document.getElementById(this.formId);
	  	this.callAfter = callAfter;
	  	this.objectToCall = objectToCall;
  		this.resetMessages();
  		var url = form.action;
  		this.createPostContent();
  		this.request = createRequest();
  		this.request.open("POST", url, true);
  		var loader = this;
  		this.request.onreadystatechange = function(){
			loader.setMessages.call(loader);
		}
  		this.request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  		this.request.send(this.postContent);
	},
	createPostContent:function(){
		form = document.getElementById(this.formId);
		var postContent = "";
  		for(var i = 0; i < form.elements.length; i++){
      		var name = form.elements[i].name;
      		if(name == "")
	        	name = form.elements[i].id;
    		if(name == "")
	        	continue;
  	  		if(i != 0){
  	    		postContent = postContent + "&";
  	  		}
  	  		if(form.elements[i].nodeName == "INPUT" || form.elements[i].nodeName == "TEXTAREA"){
        		postContent = postContent + escape(name) + "=" + escape(form.elements[i].value);
      		}
      		if(form.elements[i].nodeName == "SELECT"){
        		var value = form.elements[i].options[form.elements[i].selectedIndex].value;
        		postContent = postContent + escape(name) + "=" + escape(value);
      		}
      	
  		}
  		this.postContent = postContent;
	},
	resetMessages:function(){
  		var form = document.getElementById(this.formId);
  		var message = document.getElementById("message");
  		if(message != null)
    		clearNodes(message);
  		var errorMessage = document.getElementById("errorMessage");
  		if(errorMessage != null)
    		clearNodes(errorMessage);
  		hideDiv("messageBox");
  
  		for(var i = 0; i < form.elements.length; i++){
  	  		var fieldName = form.elements[i].id;
  	  		if(fieldName == "")
  	    		fieldName = form.elements[i].name;
  	  		if(fieldName != null){
  	    		var errorMsg = document.getElementById(fieldName + ".error");
  	    		if(errorMsg != null)
  	      			clearNodes(errorMsg);
  	  		}
  		}
	},
	setMessages:function(){
  		if(this.request.readyState == 4){
    		if(this.request.status == 200){
      			var xmlDoc = this.request.responseXML;
      			var root = xmlDoc.firstChild;
      			if(root.nodeName == "xml")
          			root = root.nextSibling;
      			for(var i=0;i<root.childNodes.length;i++){
					var node = root.childNodes[i];
					if(node.nodeName == "message"){
						showDiv("messageBox");
						var messageNode = document.getElementById("message");
						if(messageNode != null){
			  				var text = node.firstChild.nodeValue;
			  				var textNode = document.createTextNode(text);
			  				messageNode.appendChild(textNode);
						}
					}
					if(node.nodeName == "errorMessage"){
						showDiv("messageBox");
						var messageNode = document.getElementById("errorMessage");
						if(messageNode != null){
			  				var text = node.firstChild.nodeValue;
			  				var textNode = document.createTextNode(text);
			  				messageNode.appendChild(textNode);
						}
					}
					if(node.nodeName == "fieldError"){
		    			var fieldName = node.getAttribute("fieldName");
						var messageNode = document.getElementById(fieldName+".error");
						if(messageNode != null){
			 				var image = document.createElement("img");
			  				image.setAttribute("src","imagens/im_erro.gif");
			  				image.setAttribute("alt","ERRO");
			  				image.setAttribute("title",node.firstChild.nodeValue);
			  				messageNode.appendChild(image);
						}
					}
      			}
      			if(this.callAfter)
      				if(this.objectToCall)
      					this.callAfter.call(this.objectToCall);
      				else	
      					this.callAfter.call();	
    		} else {
      			alert(this.request.statusText);
    		}
  		}
	},
	submitToDiv:function(divId){
  		form = document.getElementById(this.formId);
  		var url = form.action;
  		this.destinyDiv = document.getElementById(divId);
  		this.createPostContent();
  		this.request = createRequest();
  		this.request.open("POST", url, true);
  		var loader = this;
  		this.request.onreadystatechange = function(){
			loader.putResultOnDiv.call(loader);
		}
  		this.request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  		this.request.send(this.postContent);
	},
	putResultOnDiv:function(){
  		if(this.request.readyState == 4){
    		if(this.request.status == 200){
      			var result = this.request.responseText;
      			result = unescape(result);
      			result = result.replace(/\+/g," ");
	  			this.destinyDiv.innerHTML = result;
	  			var inicio = result.indexOf("<script>");
	  			var fim = result.indexOf("</script>");
	  			if(inicio >= 0)
	  				eval(result.substring(inicio + 8,fim));
			} else {
      			alert(this.request.statusText);
    		}
  		}
	},
	deleteObj:function(id, callAfter, objectToCall){
  		var url = "delete.ajax?type="+escape(this.className)+"&id="+escape(id)+"&dummy="+ new Date().getTime();
  		this.callAfter = callAfter;
  		this.objectToCall = objectToCall;
  		this.request = createRequest();
  		this.request.open("GET", url, true);
  		var loader = this;
  		this.request.onreadystatechange = function(){
			loader.afterDelete.call(loader);
		}
  		this.request.send(null);
	},
	afterDelete:function(){
  		if(this.request.readyState == 4){
    		if(this.request.status == 200){
      			var text = this.request.responseText;
      			if(text == "OK"){
        			if(this.callAfter)
      					if(this.objectToCall)
      						this.callAfter.call(this.objectToCall);
      					else	
      						this.callAfter.call();
        			alert("Os dados foram excluidos com sucesso!");
      			}else{
	  				alert("Houve um erro ao excluir o objeto!");
	  			}	
    		} else {
      			alert(this.request.statusText);
    		}
  		}
	}
}

//**************************************************************
//TableSync - Uma classe para operacoes assincronas com tabela
//**************************************************************

TableSync=function(tableId){
	this.tableId = tableId
	this.request = null;
}
TableSync.prototype ={
	loadCompleteList:function(type){
  		this.type = type;
  		var url = "getList.ajax?type="+escape(type)+"&tableId="+escape(this.tableId);
  		if(document.getElementById(this.tableId +".url") != null){
  			document.getElementById(this.tableId +".url").value = url;
  		}
  		this.url = url;
  		this.loadList();
  	},
  	loadList:function(){
  		var tableId = this.tableId;
  		if(document.getElementById(tableId+".url") != null 
  	  	   && document.getElementById(tableId+".url").value != null
           && document.getElementById(tableId+".url").value != ""
           && document.getElementById(tableId+".url").value != "null"){
  			url = document.getElementById(tableId+".url").value;
  		} else {
    		url = this.url;
  		}
  		url = url + "&dummy="+ new Date().getTime();
  		if(document.getElementById(tableId+".orderBy") != null 
  	       && document.getElementById(tableId+".orderBy").value != null
           && document.getElementById(tableId+".orderBy").value != ""
           && document.getElementById(tableId+".orderBy").value != "null"){
  			url = url + "&orderBy=" + document.getElementById(tableId+".orderBy").value;
  		}
 		if(document.getElementById(tableId+".ascendente") != null 
  	       && document.getElementById(tableId+".ascendente").value != null
  	       && document.getElementById(tableId+".ascendente").value != ""
           && document.getElementById(tableId+".ascendente").value != "null"){
    		url = url + "&ascendente=" + document.getElementById(tableId+".ascendente").value;
  		}
  		if(document.getElementById(tableId+".page") != null 
  	  	   && document.getElementById(tableId+".page").value != null
  	  	   && document.getElementById(tableId+".page").value != ""
      	   && document.getElementById(tableId+".page").value != "null"){
    		url = url + "&page=" + document.getElementById(tableId+".page").value;
  		}
  		this.request = createRequest();
  		this.request.open("GET", url, true);
  		var loader = this;
  		this.request.onreadystatechange = function(){
			loader.loadTable.call(loader);
		}
  		this.request.send(null);
	},
	loadTable:function(){
  		if(this.request.readyState == 4){
    		if(this.request.status == 200){
      			var table = this.request.responseText;
	  			var tableDiv = document.getElementById(this.tableId);
	  			tableDiv.innerHTML = table;
			} else {
      			alert(this.request.statusText);
    		}
  		}
	},
	orderList:function(property, ascendente){
  		if(document.getElementById(this.tableId+".orderBy") != null){
  			document.getElementById(this.tableId+".orderBy").value = property;
  		}
  		if(document.getElementById(this.tableId+".ascendente") != null){
    		document.getElementById(this.tableId+".ascendente").value = ascendente;
  		}
  		this.loadList();
	},
	pageList:function(page){
  		if(document.getElementById(this.tableId+".page") != null)
    		document.getElementById(this.tableId+".page").value = page;
  		this.loadList();
	},
	submitList:function(formId){
  		form = document.getElementById(formId);
  		var url = form.action;
  		var postContent = "";
  		for(var i = 0; i < form.elements.length; i++){
      		var name = form.elements[i].name;
      		if(name == "")
        		name = form.elements[i].id;
      		if(name == "")
        		continue;
  	  		postContent = postContent + "&";
  	  		if(form.elements[i].nodeName == "INPUT"){
        		postContent = postContent + escape(name) + "=" + escape(form.elements[i].value);
      		}
      		if(form.elements[i].nodeName == "SELECT"){
        		var value = form.elements[i].options[form.elements[i].selectedIndex].value;
        		postContent = postContent + escape(name) + "=" + escape(value);
      		}
      		if(form.elements[i].nodeName == "TEXTAREA"){
        		var value = form.elements[i].firstChild.nodeValue;
        		postContent = postContent + escape(name) + "=" + escape(value);
      		}
  		}
  		url = url + "?tableId="+escape(this.tableId) + postContent;
  		if(document.getElementById(this.tableId+".url") != null){
  			document.getElementById(this.tableId+".url").value = url;
  		}
  		this.url = url;
  		this.loadList();
	}
}

//****************************************************
// Metodos Auxiliares
//****************************************************

var ctx = new Object();

function createRequest(){
  	var request = null;
  	try{
    	request = new XMLHttpRequest();
  	} catch (trymicrosoft){
     	try{
       		request = new ActiveXObject("Msxml2.XMLHTTP");
     	} catch(othermicrosoft){
       		try{
         		request = new ActiveXObject("Microsoft.XMLHTTP");
       		} catch(failed){
         		request = null;
       		}
     	}
  	}
  	if(request == null){
    	alert("Falha na cria??o da requisi??o ao servidor!");
  	} else {
    	return request;
  	}
}

function clearNodes(node){
  	if(node != null){
    	if(node.childNodes){
      		var tamanho = node.childNodes.length
      		for(var i=0; i < tamanho; i++){
        		var childNode = node.childNodes[0];
        		node.removeChild(childNode);
      		}
    	}
  	}
}

function setValue(node, value){
  	if(node.nodeName == "INPUT"){
   	 	node.value = value;
  	}
  	if(node.nodeName == "SELECT"){
    	for(var i = 0;i<node.options.length;i++){
      		if(node.options[i].value == value){
        		node.options[i].selected = true;
        		if (node.onchange)
  		  			node.onchange(); 
      		}
    	}
  	}
  	if(node.nodeName == "SPAN" || node.nodeName == "DIV"){
    	clearNodes(node)
    	var textNode = document.createTextNode(value);
    	node.appendChild(textNode);
  	}
}

function setNodeValues(nameRef, root){
  	for(var i=0;i<root.childNodes.length;i++){
    	var node = root.childNodes[i];
    	if(node.firstChild != null){
      		if(node.firstChild.nodeValue != null){
        		var docNode = document.getElementById(nameRef+"."+node.nodeName);
        		if(docNode != null){
          			setValue(docNode, node.firstChild.nodeValue);
        		}
      		}else{
        	setNodeValues(nameRef+"."+node.nodeName, node);
      		}
    	}else{
      		var docNode = document.getElementById(nameRef+"."+node.nodeName);
      		if(docNode != null)
        		setValue(docNode, "");
    	}
  	}
}

function showDiv(divid) {
   if (document.layers) document.layers[divid].visibility="show";
   else{ 
      document.getElementById(divid).style.visibility="visible";
      document.getElementById(divid).style.width="100%";
   }
}

function hideDiv(divid) {
   if (document.layers) document.layers[divid].visibility="hide";
   else{
      document.getElementById(divid).style.visibility="hidden";
      document.getElementById(divid).style.width="0";
   }
}

//Fun??es para abrir em AJAX em outro DIV

var requestGenericSubmit = null;
var destinyDivId = null;

function openInDiv(url, divId){
  destinyDivId = divId;
  requestGenericSubmit = createRequest();
  requestGenericSubmit.open("GET", url, true);
  requestGenericSubmit.onreadystatechange = putResultOnDiv;
  requestGenericSubmit.send(null);
}

function putResultOnDiv(){
  if(requestGenericSubmit.readyState == 4){
    if(requestGenericSubmit.status == 200){
      var result = requestGenericSubmit.responseText;
	  var resultDiv = document.getElementById(destinyDivId);
	  result = unescape(result);
      result = result.replace(/\+/g," ");
      resultDiv.innerHTML = result;
	  var inicio = result.indexOf("<script>");
	  var fim = result.indexOf("</script>");
	  if(inicio >= 0)
	  	eval(result.substring(inicio + 8,fim));	  
	} else {
      alert(requestGenericSubmit.statusText);
    }
  }
}


function open_janela(festa)
{
	window.open("fotos_visualizar.php?festa="+festa, "titulo", 'height=1000 width=698 scrollbars=no'); 
}
