/*EMPEIZA LOCURA DE NEOWIN PARA TRIPEAR!*/

// events_main.js

/****************************************
    attach events to relevant objects
*****************************************/
function attachEvents() {
	if(arguments.callee.done) return;
	arguments.callee.done = true;

	//start the swaperator
	if(typeof(swaperator_attach) == "function")
		swaperator_attach();
  
	//start the neoMenu
	var menu = new NeoMenu("menuprincipal", "expandAll", "collapseAll");

	if(document.getElementById("resetMenu") != undefined){
		alert('resetting');
		document.getElementById("resetMenu").onclick = menu.resetSettings;
	}
 
	loadTogglePrefs();
}


/*****************************************
    load cookie data
******************************************/
function loadTogglePrefs() {
	var cm = new CookieManager();
	cm.read();
	if(cm.getObject("toggle")) {
		//announcestate = Number(cm.getValue("toggle", "announce"));
	}
}

/* for Mozilla */
if (document.addEventListener) {
  document.addEventListener("DOMContentLoaded", attachEvents, null);
}


/* for other browsers */
var oldload = window.onload;
var oldunload = window.onunload;
//attach all events
window.onload = function(e) { attachEvents(e); if(typeof(oldload) == "function") oldload(e);}

//neoMenu_class.js
function NeoMenu(listElem, expandTrigger, collapseTrigger) {
  
  //private variables
  var _me = this;
  var _rootNode;
  //public stuff

  //expose the public stuff
  this.expandAll 	= expandAll;
  this.collapseAll 	= collapseAll;
  this.loadSettings = loadSettings;
  this.saveSettings = saveSettings;
  this.resetSettings= resetSettings;

  //call the constructor
  if(document.getElementById(listElem) != undefined) {
    document.getElementById(expandTrigger) != undefined?expandTrigger = document.getElementById(expandTrigger):expandTrigger = null;
    document.getElementById(collapseTrigger) != undefined?collapseTrigger = document.getElementById(collapseTrigger):collapseTrigger = null;
    neoMenu(document.getElementById(listElem), expandTrigger, collapseTrigger);
  }

  //constructor
  function neoMenu(listElem, expandTrigger, collapseTrigger) {
    _rootNode = listElem;
    
    //find all li elements that are children of the root menu node
    var items = listElem.getElementsByTagName("div");
    //loop thru each one
    for(var i=0; i<items.length; i++) {
      if(items[i].className == "neoMenuToggle") {
        //event handlers
        items[i].onclick = _clickHandler;
        items[i].menuState = 0; //variable to describe state of menuitem
      }
    }
    //attach the expand/collapse all triggers, if required
    if(expandTrigger != null) {
      expandTrigger.onclick = expandAll;
    }
    if(collapseTrigger != null) {
      collapseTrigger.onclick = collapseAll;
    }
	//collapseAll();

    var oldunload = window.onunload;
    window.onunload = function(e){ saveSettings(); if(typeof(oldunload) == "function"){ oldunload(e); } }
    loadSettings();
  }

  //----------------------------------------
  //  Public Methods
  //----------------------------------------
  //load/save data to/from the CookieManager
  function loadSettings() {
    var cm = new CookieManager(false);
    cm.read();
    var menudata = cm.getObject("neomenu");
    for(var item in menudata) {
      if(document.getElementById(item) != "undefined"){
        switch(parseInt(menudata[item])) {
          case 0:
            _collapseItem(document.getElementById(item));
            break;
          case 1:
            _expandItem(document.getElementById(item));
            break;
          default:
            _expandItem(document.getElementById(item));
            break;
        }
      }
    }
  }

  //Save menu state to the cookie
  function saveSettings() {
    var cm = new CookieManager(false);
    cm.createObject("neomenu");
    var nodes = _rootNode.childNodes;
    for(var i=0; i< nodes.length; i++) {
      if(nodes[i].className == "neoMenuToggle" || nodes[i].className == "neoMenuToggleOpen") {
        cm.addParam("neomenu", nodes[i].id);
        cm.setValue("neomenu", nodes[i].id, nodes[i].menuState);
      }
    }
    cm.write();
  }

  //Reset the stored cookie settings
  function resetSettings() {
    var cm = new CookieManager(false);
    cm.createObject("neomenu");
    var nodes = _rootNode.childNodes;
    for(var i=0; i< nodes.length; i++) {
      if(nodes[i].className == "neoMenuToggle") {
        cm.addParam("neomenu", nodes[i].id);
        //write a menu state of 1 (menuState = open)
        cm.setValue("neomenu", nodes[i].id, 1);
        nodes[i].style.display = "block";
        nodes[i].menuState = 1;
        _expandItem(nodes[i]);
      }
    }
    cm.write();
  }

  //collapse all menu items
  function collapseAll() {
    var items = _rootNode.getElementsByTagName("div");
    for(var i=0; i<items.length; i++) {
      if((items[i].className == "neoMenuToggleOpen")  && (items[i].menuState != 2)) {
        _collapseItem(items[i]);
      }
    }
  }

  //expand all menu items
  function expandAll() {
    var items = _rootNode.getElementsByTagName("div");
    for(var i=0; i<items.length; i++) {
      if((items[i].className == "neoMenuToggle") && (items[i].menuState != 2)) {
        _expandItem(items[i]);
      }
    }
  }

  //----------------------------------------
  //  Private Methods
  //----------------------------------------
  //collapse individual item
  function _collapseItem(pelem) {
    //check that the element is a menu item
    if(pelem.className == "neoMenuToggleOpen") {
      //find all child <ul> nodes
      var node = document.getElementById(pelem.id + "_content");
	  if(node.className == "neoMenuOpen"){
       	node.className = "neoMenuClosed";
	  }
	  pelem.className = "neoMenuToggle";
      //change the menu state
      pelem.menuState = 0;
    }
  }

  //expand individual item
  function _expandItem(pelem) {
    //check that the element is a menu item
    if(pelem.className == "neoMenuToggle") {
      //find all child <ul> nodes
      var node = document.getElementById(pelem.id + "_content");
	  if(node.className == "neoMenuClosed")
	  {
        node.className = "neoMenuOpen";
	  }
	  pelem.className = "neoMenuToggleOpen";
	  //change the menu state
      pelem.menuState = 1;
    }
  }

  //----------------------------------------
  //  Events
  //----------------------------------------
  // helper function to get the element involved in an event
  function _elemFromE(e) {
    if(e.target) {
      return e.target;
    } else if (e.srcElement) {
      return e.srcElement;
    } else {
      return false;
    }
  }

  function _clickHandler(e) {
    if(!e) e = window.event;
    e.cancelBubble = true;
    var elem = _elemFromE(e);

    if (e.stopPropagation) e.stopPropagation();
    if(e.layerX) var x = e.layerX;
    if(e.offsetX) var x = e.offsetX;
    if(e.layerY) var y = e.layerY;
    if(e.offsetY) var y = e.offsetY;
		
    if((!elem.noClose) && (x>167) && (x<180) && (y>8) && (y<20)) {
    //if((!elem.noClose) && (x>153) && (x<166) && (y>8) && (y<20)) {
      elem.style.display = "none";
      elem.menuState = 2;
    } else {
      switch(elem.menuState) {
      case 0:
        _expandItem(elem);
        break;
      case 1:
        _collapseItem(elem);
        break;
      }
    }
  }

}

// CookieManager.js
//---------------------------------------
//        Cookie Manager
//   ©2006 Mnet Computer Systems
//
// parameters: 
//  - objname: Name of the cookie
//  - regevents: set to true to have the cookie data saved on unload
function CookieManager(regevents) {

  var _objdata = Object();
  var _expiry;

  //expose public methods
  this.createObject  = createObject;
  this.getObject     = getObject;
  this.addParam      = addParam;
  this.setValue      = setValue;
  this.getValue      = getValue;
  this.write         = write;
  this.read          = read;
  this.setExpiryDate = setExpiryDate;

  //call the constructor
  cookieManager(regevents);
  //----------------------------------------
  //  Constructor
  //----------------------------------------
  function cookieManager(regevents) {
    var date = new Date;
    date.setTime(date.getTime() + (7*24*60*60*1000));
    _expiry = date.toGMTString();

    if(regevents) {
		//handle the unload event
      if(typeof(window.unload) == "function") {
        var oldpageunload = window.unload;
        window.onunload = function(e) { write(); oldpageunload(e); }
      } else {
        window.onunload = write;
      }
    }
  }

  //----------------------------------------
  //  Public Methods
  //----------------------------------------
  // create an object
  function createObject(objname) {
    var tmp = Object();
    _objdata[objname] = tmp;
  }

  //Get an individual object
  function getObject(name) {
    if(typeof(_objdata[name]) == "undefined") {
      return false;
    } else {
      return _objdata[name];
    }
  }

  // add a parameter to the cookie string
  function addParam(obj, paramname) {
    if((typeof(_objdata[obj]) == "undefined") || (typeof(paramname) != "string")) { return false; }
    _objdata[obj][paramname] = "";
  }

  // assign a value to a parameter
  function setValue(obj, param, value) {
    //check that parameters are valid
    if((typeof(_objdata[obj]) == "undefined") || (typeof(_objdata[obj][param]) == "undefined")) { return false; }
    _objdata[obj][param] = value;
  }

  // get a parameter's value
  function getValue(obj, param) {
    if((typeof(_objdata[obj]) == "undefined") || (typeof(_objdata[obj][param]) == "undefined")){ return false;}
    return _objdata[obj][param];
  }
  
  function setExpiryDate(days) {
    if(arguments.length>0) {
      var d = new Date;
      d.setTime(d.getTime() + (days*24*60*60*1000));
      _expiry = d.toGMTString();
    }
  }

  function write() {
    //create a string to hold the data
    var cdata = "";
    //get each object individually
    for(obj in _objdata) {
      if(obj != null) {
		  //object has not been deleted
        //add it to the string
        cdata += obj + "=";
        //fetch its parameters
        for(param in _objdata[obj]) {
          if(param != null) {
			  //parameter is not empty
            //add it to the string
            cdata += escape(param + "," +_objdata[obj][param] + "--");
          }
        }
        //remove the last --
        if(cdata.substr(cdata.length-2, 2) == "--") {
          cdata = cdata.substr(0, cdata.length -2);
        }
        //add the rest of the cookie data
        cdata += "; expires="+_expiry +"; path=/";
        document.cookie = cdata;
        cdata = "";
      }
    }
  }

  function read() {
    var cdata = document.cookie;
    var odata = Object();
    var end = 0;
    var offset = 0;
    var objname = "";
    var paramstr = "";
    //find all objects
    while(cdata.length >0) {
      //find the object name
      end = cdata.indexOf("=");
      if(end == -1) { return false; }
      objname = cdata.substring(offset, end);

      //and create the object
      odata[objname] = Object();

      offset = end+1;
      //find the parameters
      end = cdata.indexOf(";", offset);
      if(end == -1) { end = cdata.length; }
      paramstr = unescape(cdata.substring(offset, end));
      //and create an array of name/value pairs
      paramstr = paramstr.split("--");
      //loop through each pair
      for(var i=0; i<paramstr.length; i++) {
        var pair = paramstr[i].split(",");
        //and add them to the object
        odata[objname][pair[0]] = pair[1];
      }

      cdata = cdata.substring(end+2, cdata.length);
      end = 0;
      offset = 0;
    }
    //check that the object has parameters
    var c = 0;
    for(var e in odata) {
      c++;
    }
    //if it does, make it the global object
    if(c>0) { _objdata = odata; }
  }

}


// CookieManager.js
//---------------------------------------
//        Cookie Manager
//   ©2006 Mnet Computer Systems
//
// parameters: 
//  - objname: Name of the cookie
//  - regevents: set to true to have the cookie data saved on unload
function CookieManager(regevents) {

  var _objdata = Object();
  var _expiry;

  //expose public methods
  this.createObject  = createObject;
  this.getObject     = getObject;
  this.addParam      = addParam;
  this.setValue      = setValue;
  this.getValue      = getValue;
  this.write         = write;
  this.read          = read;
  this.setExpiryDate = setExpiryDate;

  //call the constructor
  cookieManager(regevents);
  //----------------------------------------
  //  Constructor
  //----------------------------------------
  function cookieManager(regevents) {
    var date = new Date;
    date.setTime(date.getTime() + (7*24*60*60*1000));
    _expiry = date.toGMTString();

    if(regevents) {
		//handle the unload event
      if(typeof(window.unload) == "function") {
        var oldpageunload = window.unload;
        window.onunload = function(e) { write(); oldpageunload(e); }
      } else {
        window.onunload = write;
      }
    }
  }

  //----------------------------------------
  //  Public Methods
  //----------------------------------------
  // create an object
  function createObject(objname) {
    var tmp = Object();
    _objdata[objname] = tmp;
  }

  //Get an individual object
  function getObject(name) {
    if(typeof(_objdata[name]) == "undefined") {
      return false;
    } else {
      return _objdata[name];
    }
  }

  // add a parameter to the cookie string
  function addParam(obj, paramname) {
    if((typeof(_objdata[obj]) == "undefined") || (typeof(paramname) != "string")) { return false; }
    _objdata[obj][paramname] = "";
  }

  // assign a value to a parameter
  function setValue(obj, param, value) {
    //check that parameters are valid
    if((typeof(_objdata[obj]) == "undefined") || (typeof(_objdata[obj][param]) == "undefined")) { return false; }
    _objdata[obj][param] = value;
  }

  // get a parameter's value
  function getValue(obj, param) {
    if((typeof(_objdata[obj]) == "undefined") || (typeof(_objdata[obj][param]) == "undefined")){ return false;}
    return _objdata[obj][param];
  }
  
  function setExpiryDate(days) {
    if(arguments.length>0) {
      var d = new Date;
      d.setTime(d.getTime() + (days*24*60*60*1000));
      _expiry = d.toGMTString();
    }
  }

  function write() {
    //create a string to hold the data
    var cdata = "";
    //get each object individually
    for(obj in _objdata) {
      if(obj != null) {
		  //object has not been deleted
        //add it to the string
        cdata += obj + "=";
        //fetch its parameters
        for(param in _objdata[obj]) {
          if(param != null) {
			  //parameter is not empty
            //add it to the string
            cdata += escape(param + "," +_objdata[obj][param] + "--");
          }
        }
        //remove the last --
        if(cdata.substr(cdata.length-2, 2) == "--") {
          cdata = cdata.substr(0, cdata.length -2);
        }
        //add the rest of the cookie data
        cdata += "; expires="+_expiry +"; path=/";
        document.cookie = cdata;
        cdata = "";
      }
    }
  }

  function read() {
    var cdata = document.cookie;
    var odata = Object();
    var end = 0;
    var offset = 0;
    var objname = "";
    var paramstr = "";
    //find all objects
    while(cdata.length >0) {
      //find the object name
      end = cdata.indexOf("=");
      if(end == -1) { return false; }
      objname = cdata.substring(offset, end);

      //and create the object
      odata[objname] = Object();

      offset = end+1;
      //find the parameters
      end = cdata.indexOf(";", offset);
      if(end == -1) { end = cdata.length; }
      paramstr = unescape(cdata.substring(offset, end));
      //and create an array of name/value pairs
      paramstr = paramstr.split("--");
      //loop through each pair
      for(var i=0; i<paramstr.length; i++) {
        var pair = paramstr[i].split(",");
        //and add them to the object
        odata[objname][pair[0]] = pair[1];
      }

      cdata = cdata.substring(end+2, cdata.length);
      end = 0;
      offset = 0;
    }
    //check that the object has parameters
    var c = 0;
    for(var e in odata) {
      c++;
    }
    //if it does, make it the global object
    if(c>0) { _objdata = odata; }
  }

}