var openTimerID = new Array()
var closeTimerID = new Array()
var objHeight = new Array()
var TimerID = new Array()
var startTime = new Array()
var exitTimerID = null
var lastLnk = null
var lastSrc = null
var gegt = {
  name: "ge",
  ajax_msg: '<img src="imgs/loading.gif" id="geload" />',
  ajax_cache: true,
  openTimer: 500, 
  closeTimer: 300,
  AnimationLen: 500, // não pode ser maior que openTimer
  timeAniLen: 1,
  beforeURL: 'guia-empresas-categorias,',
  afterURL: '.html',  

  start: function(){
    var countLnk = document.getElementById(gegt.name).getElementsByTagName("a")	  
    for (var i=1;i<=countLnk.length;i++)
	  gegt.init(gegt.name+'_'+i)
  },
  
  init: function(lnkObjID){
    var lnkObj = document.getElementById(lnkObjID)
    var srcObj = document.getElementById(lnkObj.getAttribute("rel"))
	
	objHeight[lnkObj.id] = parseInt(srcObj.style.height)

    lnkObj.onmouseover = function(){
      gegt.show(lnkObj.id, srcObj.id)
    }
    lnkObj.onmouseout = function(){
	  gegt.exit(lnkObj.id, srcObj.id)
    }
  },
  
  show: function(lnkObjID, srcObjID){ 
  
    document.getElementById(srcObjID).onmouseover = function(){
      gegt.cancel(srcObjID)
	}
	
    document.getElementById(srcObjID).onmouseout = function(){
      gegt.exit(lnkObjID, srcObjID)
	}	
	
	clearTimeout(exitTimerID)
    clearTimeout(closeTimerID[srcObjID])
    openTimerID[srcObjID] = setTimeout( function(){

      if (lnkObjID == lastLnk)
	    return
		  
      if (lastSrc != '' && lastSrc != null && srcObjID != lastSrc){
		gegt.hide(lastLnk, lastSrc)
	  }
												 
      var countLI = document.getElementById(gegt.name).getElementsByTagName("a")
      for (var i=0; i < countLI.length; i++)
        countLI[i].className = ""
		
      document.getElementById(lnkObjID).className = "selected"
	  if (lastSrc != srcObjID){
        gegt.moving(lnkObjID, srcObjID, "down")
	  } else {
        gegt.loadContent(lnkObjID, srcObjID)	  
        lastLnk = lnkObjID		
	  }
    }, gegt.openTimer);
  }, 

  cancel: function(srcObjID){
    clearTimeout(exitTimerID)	  
    clearTimeout(openTimerID[srcObjID])
  },

  hide: function(lnkObjID, srcObjID){
    clearTimeout(openTimerID[srcObjID])	  
    document.getElementById(srcObjID).innerHTML = ''
	gegt.moving(lnkObjID, srcObjID, "up")
  },
  
  exit: function(lnkObjID, srcObjID){
    clearTimeout(openTimerID[srcObjID])	  
    exitTimerID = setTimeout(function(){								  
      var countLI = document.getElementById(gegt.name).getElementsByTagName("a")
      for (var i=0; i < countLI.length; i++)
        countLI[i].className = ""
      document.getElementById(srcObjID).innerHTML = ''
      if (lastSrc != lastLnk)
        gegt.moving(lastLnk, lastSrc, "up")	  
	  else
        gegt.moving(lnkObjID, srcObjID, "up")
      lastLnk = ''
      lastSrc = ''		
    }, gegt.closeTimer*2)
  },  
  
  moving: function(lnkObjID, srcObjID, dirObj){
	startTime[lnkObjID] = (new Date()).getTime()
	if (dirObj == 'down'){
      lastLnk = lnkObjID		
      lastSrc = srcObjID
      document.getElementById(srcObjID).style.height = '1px'		
      document.getElementById(srcObjID).style.display = 'block'  		
    }
    document.getElementById(srcObjID).innerHTML = ''	
    document.getElementById(srcObjID).style.fontSize = '1%'		
    TimerID[lnkObjID] = setInterval(function(){
      var elapsed = (new Date()).getTime() - startTime[lnkObjID];											 
      if (elapsed > gegt.AnimationLen)
        gegt.endMoving(lnkObjID, srcObjID, dirObj)
      else {
        var d = Math.round(elapsed / gegt.AnimationLen * objHeight[lnkObjID]);
        if(dirObj == "up")
          d = objHeight[lnkObjID] - d;  
        document.getElementById(srcObjID).style.height = d + "px";
      }
    }, gegt.timeAniLen)
  },
	
  endMoving: function(lnkObjID, srcObjID, dirObj){
   clearInterval(TimerID[lnkObjID])
   if (dirObj == 'down'){
      document.getElementById(srcObjID).style.fontSize = ''	 	   
      gegt.loadContent(lnkObjID, srcObjID)  	  
	} else if (dirObj == 'up'){
      clearTimeout(closeTimerID[srcObjID])	  		
      document.getElementById(srcObjID).style.display = 'none'  	
      document.getElementById(srcObjID).style.innerHTML = ''		  	  
	}	
  },

  loadContent: function(lnkObjID, srcObjID){     
    var lnkAjax = gegt.beforeURL + document.getElementById(lnkObjID).getAttribute("rev") + gegt.afterURL
    if (lnkAjax != null && lnkAjax != ""){
      gegt.ajaxConnect(lnkAjax, srcObjID)
    }
  },

  ajaxConnect: function(pageurl, divId){
    var page_request = false
	var bustcacheparameter = ""
	if (window.XMLHttpRequest)
	  page_request = new XMLHttpRequest()
	else if (window.ActiveXObject){
	  try {
		page_request = new ActiveXObject("Msxml2.XMLHTTP")
	  } catch (e){
		try {
		  page_request = new ActiveXObject("Microsoft.XMLHTTP")
		}	catch (e){}
	  }
	} else
      return false
	document.getElementById(divId).innerHTML = gegt.ajax_msg
	page_request.onreadystatechange=function(){ gegt.loadPage( page_request, divId )}
	if (gegt.ajax_cache)
	  bustcacheparameter = (pageurl.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime()
    page_request.open('GET', pageurl + bustcacheparameter, true)
    page_request.send(null)
  },
  
  loadPage: function(page_request, divId){
    if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1)){
	  document.getElementById(divId).innerHTML = page_request.responseText
	}
  }  
}
