var mainlayer="content";
var popupzone="popupzone";
var processinglayer="processing";
var layer_sequence=1;
var layer_prefix='popup-';




function initAJAX() {   		     					
		if (window.XMLHttpRequest) {
			
		  // IE7, Mozilla
		  return new XMLHttpRequest();
		}
		else
		{
		  if (window.ActiveXObject) {
		     // IE5.x e IE6.
		     return new ActiveXObject('MSXML2.XMLHTTP.3.0');
		  }
		}		
   	}	
	
	
function AJAXGetPage(ref,location_hash,args,layer,after_load_code) {					
		var query;
		var request;
		var xmlHttp;
		var event,my_layer,el,result,children;
		var new_layer,document_tables,layer_tables;
		
		var popupid=layer_prefix+location_hash+args;
		if (document.getElementById(popupid) && !layer) layer='_self';							
		var url=uri[location_hash];				
		showProcessingLayer();	 					 	
	 		
	 	if (args) { 
	 		if (args.nodeType==1) query=get(args); //is form
	 		else if (document.getElementById(args)) query=get(document.getElementById(args)); //is form id, get form	 				 	
	 		else if (args!='undefined') query=args;								 			 	
	 	}	 									 			 						
	
		if (layer) {
			if (layer=='_self') layer=popupid;	
			el=document.getElementById(layer);
			el.innerHTML="A carregar..."+el.innerHTML;
			
			children = el.getElementsByTagName('*');
			   for (var i = 0; i < children.length; i++) 
			   {
			   children[i].disabled=true;
			   
			   };
		}
	
		//if (!request) return;
		
		if (query) request=url+'?'+query; else request=url;
		xmlHttp=initAJAX();								
		xmlHttp.open("GET",request,true);

					
		xmlHttp.onreadystatechange=function() {
					
			if (xmlHttp.readyState==4) {						
				result=xmlHttp.responseText;
				hideProcessingLayer();								
				if (result=='not-logged') {													
					window.location.href=loginurl;
				}
				else if (result.substr(0,9)=='exception') {
					alert(result.substr(9));
				}
				else {									
					if (layer) {
						if (layer=='_self') layer=popupid;	
						el=document.getElementById(layer);
						if (el) {
						el.innerHTML=result;
						el.setAttribute('location_hash', location_hash);
						el.setAttribute('query', query);
						}																			
					}
					else {					
						el = document.createElement("div");						 												
						my_layer=getLayer(ref);	
						//alert(my_layer);												
						el.setAttribute('id', popupid);
						el.setAttribute('parent_id', my_layer); // I am the parent of the next layer
						el.setAttribute('query', query);
						el.setAttribute('location_hash', location_hash);	
												
						el.onmousedown = function(e)
						{ 
							if (e) event=e; else event=window.event;												
							dragStart(event, this.id);
						}

						el.innerHTML=result;					
						el.style.position="absolute";
						el.style.background="#ffffff"; 						
						el.style.border="2px outset";
						el.style.zIndex=dragObj.zIndex;
						el.style.visibility="hidden";						
						
						new_layer=document.getElementById(popupzone).appendChild(el);
						// Window positions for new popup layer												
						document_tables = document.getElementsByTagName("table");
						layer_tables = new_layer.getElementsByTagName("table");
						new_layer.style.top=document.documentElement.scrollTop+(layer_sequence*5)+"px";						
						if (layer_tables[0].width) { // first table
						// set the layer style																								
							new_layer.style.left=(layer_sequence*5)+((document.body.offsetWidth-document_tables[0].width)/2)+'px';																
							new_layer.style.width=layer_tables[0].width+"px";
						}
						// show the layer		
						new_layer.style.visibility="visible";
																	
						
						
						layer_sequence++;
						dragObj.zIndex++;						
						if (after_load_code) {									
							eval(after_load_code);				 													 
						}													
					}						
				}	
			}		
		};			
		xmlHttp.send(null);			
}
		
		
function AJAXSubmit(ref,method,location_hash,args,ok_fn,fail_fn) {
		if (!ref || !method || !location_hash) {
			alert('AJAXSubmit: wrong function syntax');
			return 0;
			}

		if (location_hash=='_self') {
			if (ref.nodeType==1) var layer=getLayer(ref);	
			if (!layer) {
				alert('AJAXSubmit: wrong reference');
				return 0;
			}
			var el=document.getElementById(layer);				
			var location_hash=el.getAttribute('location_hash');
		}

		var query='';	
		var url=uri[location_hash];	
		if (!url) { alert('AJAXSubmit: invalid location');
			return 0;
		}
		showProcessingLayer(); 	
						
	 	if (args) { 
	 		if (args.nodeType==1) query=get(args); //is form
	 		else if (document.getElementById(args)) query=get(document.getElementById(args)); //is form id, get form	 				 	
	 		else query=args;								 		
	 	}	
				
		
		var xmlHttp=initAJAX();		
		
		xmlHttp.onreadystatechange=function() {			
			if (xmlHttp.readyState==4) {	
				hideProcessingLayer();							
				result=xmlHttp.responseText;	
				if (result=='not-logged') {
					window.location.href=loginurl;
				}
				else if (result.substr(0,9)=='exception') {
					alert(result.substr(9));
				
				}
				else 						
				if (result=='ok')
					eval(ok_fn);  								
				else eval(fail_fn);					
			}
		};
		
		//xmlHttp.onerror=function () {
		//	alert('Error!');
		//}		
		
		if (method=='GET') {					
			xmlHttp.open("GET",url+'?'+query,true);	
			xmlHttp.send(null);				
		}										
		
		
		
		else if (method=='POST') {
			xmlHttp.open("POST",url,true);
			xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      		xmlHttp.setRequestHeader("Content-length", query.length);
			xmlHttp.setRequestHeader("Connection", "close");
			xmlHttp.send(query);				
		}
		else {
			alert('AJAXSubmit: invalid method');
			return 0;
		}
						
	}	
	
function get(obj) {
      var getstr = ""; //Add "?" for GET request
	  var i,i2;	
      
      for (i=0; i < obj.elements.length; i++) {
         if (obj.elements[i].tagName == "INPUT") {
         	if (obj.elements[i].type == "hidden" || obj.elements[i].type == "text"  || obj.elements[i].type == "password") {
               getstr += obj.elements[i].name + "=" + obj.elements[i].value + "&";
            }            
            if (obj.elements[i].type == "checkbox") {
               if (obj.elements[i].checked) {
                  getstr += obj.elements[i].name + "=" + obj.elements[i].value + "&";
               } else {
                  getstr += obj.elements[i].name + "=&";
               }
            }
            if (obj.elements[i].type == "radio") {
               if (obj.elements[i].checked) {
                  getstr += obj.elements[i].name + "=" + obj.elements[i].value + "&";
               }
            }
         }
         if (obj.elements[i].tagName == "TEXTAREA") {
         	getstr += obj.elements[i].name + "=" + obj.elements[i].value + "&";
         } 
         if (obj.elements[i].tagName == "SELECT") {
            var sel = obj.elements[i];

			if (sel.name && sel.length>0) {
  				if (sel.multiple) {	
		            for (i2=0;i2<sel.length; i2++) {
		            	getstr += sel.name + "=" + sel.options[i2].value + "&";						
					}					
				}			
            	else getstr += sel.name + "=" + sel.options[sel.selectedIndex].value + "&";
            }         
         }
         
      }
     return(getstr);
   }
  
// layer processing

function showProcessingLayer() {	
	var winY = document.documentElement.scrollTop;
		winY = winY + 100 + 'px';	
	p_layer=document.getElementById(processinglayer);	
	p_layer.style.top=winY;	
	p_layer.style.visibility='visible';
	p_layer.style.zIndex=dragObj.zIndex+1;		
}

function hideProcessingLayer() {
	document.getElementById(processinglayer).style.visibility='hidden';
}
    	
function getLayer(ref) {
	do {

		if (ref.nodeType==1) //check that the node is a tag, not text (type=3)
			if (String(ref.nodeName)=="DIV") {
				if (ref.id.substr(0,6)==layer_prefix) return ref.id;
				if (ref.id==mainlayer) return ref.id;
				}		
				
			if (String(ref.nodeName)=="BODY")
				break;		
		}
	while (ref = ref.parentNode);
	return null;	
}

function killLayer(ref,all) {
	id=getLayer(ref);
	layer_sequence--;	
	var removed;
	var main = document.getElementById(popupzone);
	var child = document.getElementById(id);
	
	for (i=0;i<main.childNodes.length;i++)
		if (main.childNodes[i].id==id) { 
			main.removeChild(child);
		}								
}

function refreshAll() {
var layers = document.getElementsByTagName('div');

for (var i=0; i < layers.length; i++) {
	var layer = layers[i];	
	if (layer.id.substr(0,6)==layer_prefix || layer.id==mainlayer) refresh(layer.id);
	
}

}

function refresh(ref,args) {	
	if (ref.nodeType==1) layer=getLayer(ref);
	else if (document.getElementById(ref)) layer=ref;			
		
	if (layer) {	
		el=document.getElementById(layer);	
		if (el) {	
		location_hash=el.getAttribute('location_hash');
		if (!args) query=el.getAttribute('query');
		else { 
			if (args.nodeType==1) query=get(args); //is form
	 		else if (document.getElementById(args)) query=get(document.getElementById(args)); //is form id, get form	 				 	
	 		else query=args;
			if (layer==mainlayer) {
				current_hash='#location='+location_hash+'&'+query;
				window.location.hash=current_hash;
			}
		}		
					
		AJAXGetPage(el,location_hash,query,layer);
		}
	}	
}

function printVersion(ref) {
	if (ref.nodeType==1) layer=getLayer(ref);
	else if (document.getElementById(ref)) layer=ref;
	
	if (layer) {	
		el=document.getElementById(layer);		
		location_hash=el.getAttribute('location_hash');
		query=el.getAttribute('query');	
		url=uri[location_hash];
		window.open(url+'?printversion=1&'+query,null,"width=1000,status=no,toolbar=no,menubar=yes,location=no,scrollbars=yes");										
	}	
}

function getParent(ref) {
	layer=getLayer(ref);
	parent_layer_id=document.getElementById(layer).getAttribute('parent_id');
	return document.getElementById(parent_layer_id);	
}

function refreshParent(ref) {	
	layer=getLayer(ref);
	
	
	if (!layer) return;
	else {		
		if (document.getElementById(layer)) { 
			parent_layer_id=document.getElementById(layer).getAttribute('parent_id');		
		}
		else { 						
			parent_layer_id=mainlayer;		 
		}
		parent_layer=document.getElementById(parent_layer_id);							
		location_hash=parent_layer.getAttribute('location_hash');		
		query=parent_layer.getAttribute('query');	
		AJAXGetPage(parent_layer,location_hash,query,parent_layer_id);
			
		
	}	
}

// Determine browser and version.

function Browser() {

  var ua, s, i;

  this.isIE    = false;
  this.isNS    = false;
  this.version = null;

  ua = navigator.userAgent;

  s = "MSIE";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isIE = true;
    return;
  }

  s = "Netscape6/";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    return;
  }

  // Treat any other "Gecko" browser as NS 6.1.

  s = "Gecko";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    return;
  }
}

var browser = new Browser();

// Global object to hold drag information.

var dragObj = new Object();
dragObj.zIndex = layer_sequence;

function dragStart(event, id) {
	

  var el;
  var x, y;
  
  dragObj.elNode = document.getElementById(id);

  // Get cursor position with respect to the page.

  if (browser.isIE) {
  	target=event.srcElement;
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  }
  if (browser.isNS) {
  	target=event.target;
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }
  // ---
   nodename=target.nodeName;
  
  
  
  
   if (nodename=='INPUT' || nodename=='SELECT' || nodename=='TEXTAREA' || nodename=='OPTION') return;
   target.focus();	

  // Save starting positions of cursor and element.

  dragObj.cursorStartX = x;
  dragObj.cursorStartY = y;
  dragObj.elStartLeft  = parseInt(dragObj.elNode.style.left, 10);
  dragObj.elStartTop   = parseInt(dragObj.elNode.style.top,  10);

  if (isNaN(dragObj.elStartLeft)) dragObj.elStartLeft = 0;
  if (isNaN(dragObj.elStartTop))  dragObj.elStartTop  = 0;

  // Update element's z-index.  
  dragObj.elNode.style.zIndex = ++dragObj.zIndex;

  // Capture mousemove and mouseup events on the page.

  if (browser.isIE) {
    document.attachEvent("onmousemove", dragGo);
    document.attachEvent("onmouseup",   dragStop);
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  if (browser.isNS) {
    document.addEventListener("mousemove", dragGo,   true);
    document.addEventListener("mouseup",   dragStop, true);
    event.preventDefault();
  }
}

function dragGo(event) {

  var x, y;

  // Get cursor position with respect to the page.

  if (browser.isIE) {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  }
  if (browser.isNS) {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }

  // Move drag element by the same amount the cursor has moved.

  dragObj.elNode.style.left = (dragObj.elStartLeft + x - dragObj.cursorStartX) + "px";
  dragObj.elNode.style.top  = (dragObj.elStartTop  + y - dragObj.cursorStartY) + "px";

  if (browser.isIE) {
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  if (browser.isNS)
    event.preventDefault();
}

function dragStop(event) {
  // Stop capturing mousemove and mouseup events.

  if (browser.isIE) {
    document.detachEvent("onmousemove", dragGo);
    document.detachEvent("onmouseup",   dragStop);
  }
  if (browser.isNS) {
    document.removeEventListener("mousemove", dragGo,   true);
    document.removeEventListener("mouseup",   dragStop, true);
  }
}

// Location hash processing

function PageQuery(q,s) {
	var _q,_keyValuePairs;
	
	if(q.length > 1) 
		_q = q.substring(1, q.length);
		else _q = null;
	
	_keyValuePairs = new Array();
	
	if(q) {
		for(var i=0; i < _q.split("&").length; i++) {
		_keyValuePairs[i] = _q.split("&")[i];
		}
	}
		
	if (s) {
		for(var j=0; j < _keyValuePairs.length; j++) {
			if(_keyValuePairs[j].split("=")[0] == s)
			return _keyValuePairs[j].split("=")[1];
			}
			return false;
		}
}

function queryHashString(key){	
	return unescape(PageQuery(window.location.hash,key));
}	  
  
  
function checkHash(ref) {	
	hash=window.location.hash;			
	
	//if (!hash) window.location.hash=current_hash=hash='location=home';
						
	if (current_hash!=hash) {						
		current_hash=hash;
		location_name=queryHashString('location'); 												
		if (uri[location_name]) {
			if (hash.substr(0,1)=='#') hash=hash.substr(1); 
			
			AJAXGetPage(ref,location_name,hash,mainlayer);												
		}
	}
}
				
function delayedCheckHash() {
	window.setTimeout('checkHash()', 50);
} 
