// Title: Tigra Menu
// Description: Free JavaScript Menu Navigation
// URL: http://www.javascript-menu.com/
// Version: 2.1 (commented source)
// Date: 06/26/2007
// Tech. Support: http://www.softcomplex.com/forum/forumdisplay_29/
// Notes: This script is free. Visit official site for further details.

// --------------------------------------------------------------------------------
// global collection containing all menus on current page
var A_MENUS = [];

var numHijos=0;
var o=0;
var altura;
// --------------------------------------------------------------------------------
// menu class
function menu (a_items, a_tpl) {

	// browser check
	if (!document.body || !document.body.style)
		return;

	// store items structure
	this.a_config = a_items;

	// store template structure
	this.a_tpl = a_tpl;

	// get menu id
	this.n_id = A_MENUS.length;

	// declare collections
	this.a_index = [];
	this.a_children = [];

	// assigh methods and event handlers
	this.expand      = menu_expand;
	this.collapse    = menu_collapse;

	this.onclick     = menu_onclick;
	this.onmouseout  = menu_onmouseout;
	this.onmouseover = menu_onmouseover;
	this.onmousedown = menu_onmousedown;

	// default level scope description structure 
	this.a_tpl_def = {
		'block_top'  : 16,
		'block_left' : 16,
		'top'        : 20,
		'left'       : 4,
		//'width'      : 120,
		'height'     : 22,
		'hide_delay' : 0,
		'expd_delay' : 0,
		'css'        : {
			'inner' : '',
			'outer' : '',
			'innerflecha' : '',
			'outerflecha' : '',
			'innerSin' : '',
			'outerSin' : ''
		}
	};
	
	// assign methods and properties required to imulate parent item
	this.getprop = function (s_key) {
		return this.a_tpl_def[s_key];
	};

	this.o_root = this;
	this.n_depth = -1;
	this.n_x = 0;
	this.n_y = 0;
	
	document.write ('<td><table id="tabla_menu" border="0"><tr>');

	// 	init items recursively
	for (n_order = 0; n_order < a_items.length; n_order++){
		new menu_item(this, n_order, 0);
		
	}

	// register self in global collection
	A_MENUS[this.n_id] = this;

	// make root level visible
	for (var n_order = 1; n_order < this.a_children.length; n_order++){
		//this.a_children[n_order].e_oelement.style.visibility = 'visible';
		this.a_children[n_order].e_oelement.style.display = '';	
	
		if(n_order==0 || n_order==1){
			//alert('hola entra' + n_order);
			//this.a_children[n_order].e_ielement.className = 'm0l0ioutSin';
			//this.a_children[n_order].e_oelement.className = 'm0l0ooutSin';
			//alert('hola sale' + this.a_children[n_order].e_oelement.className);
			
		}
	}
		
	document.write ('</tr></table></td>');
	
}

// --------------------------------------------------------------------------------
function menu_collapse (n_id) {
	// cancel item open delay
	clearTimeout(this.o_showtimer);

	// by default collapse to root level
	var n_tolevel = (n_id ? this.a_index[n_id].n_depth : 0);
	
	// hide all items over the level specified
	for (n_id = 0; n_id < this.a_index.length; n_id++) {
		var o_curritem = this.a_index[n_id];
		if (o_curritem.n_depth > n_tolevel && o_curritem.b_visible) {
			//o_curritem.e_oelement.style.visibility = 'hidden';
			o_curritem.e_oelement.style.display = 'none';
			o_curritem.b_visible = false;
		}
	}

	// reset current item if mouse has gone out of items
	if (!n_id)
		this.o_current = null;
}

// --------------------------------------------------------------------------------
function menu_expand (n_id) {

	// expand only when mouse is over some menu item
	if (this.o_hidetimer)
		return;

	// lookup current item
	var o_item = this.a_index[n_id];

	// close previously opened items
	if (this.o_current && this.o_current.n_depth >= o_item.n_depth)
		this.collapse(o_item.n_id);
	this.o_current = o_item;

	// exit if there are no children to open
	if (!o_item.a_children)
		return;

	// show direct child items
	for (var n_order = 0; n_order < o_item.a_children.length; n_order++) {
		var o_curritem = o_item.a_children[n_order];
		//if(o_curritem!=null && o_curritem.e_oelement!=null){
			
			//alert(o_curritem.style.position);
			//o_curritem.e_oelement.style.visibility = 'visible';
			o_curritem.e_oelement.style.display = '';
			if(o_curritem.n_depth==2){
				//alert('level 2');
				o_curritem.className = 'm0l2oover';
			}else{
				o_curritem.className = 'm0l1oover';
			}
			
			o_curritem.b_visible = true;
		//}
	}
}

// --------------------------------------------------------------------------------
function menu_onclick (n_id) {
	var o_item = this.a_index[n_id];
	var s_link = o_item.a_config[1];
	if (!s_link)
		return true;
	if (String(s_link).toLowerCase().indexOf('javascript:') == 0){
		return eval(s_link);
	}if (o_item.a_config[2] && o_item.a_config[2]['tw'])
		window.open(s_link, o_item.a_config[2]['tw']);
	else
		window.location = s_link;
	return true;
}

// --------------------------------------------------------------------------------
function menu_onmouseout (n_id) {

	// lookup new item's object	
	var o_item = this.a_index[n_id];

	// apply rollout
	
	if (o_item.e_ielement.className=='m0l0ioverSin'){
		o_item.e_oelement.className = 'm0l0ooutSin';
		o_item.e_ielement.className = 'm0l0ioutSin';
		
	}else if (o_item.e_ielement.className=='m0l1ioverflecha'){
		//alert('con hijos');
		o_item.e_oelement.className = o_item.getstyle(2, 0);
		o_item.e_ielement.className = o_item.getstyle(3, 0);
	}else{
		
		if(o_item.n_depth==2){
			o_item.className = 'm0l2oout';
			o_item.e_oelement.className = 'm0l2oout';
			o_item.e_ielement.className = 'm0l2iout';
		}else{
			o_item.e_oelement.className = o_item.getstyle(0, 0);
			o_item.e_ielement.className = o_item.getstyle(1, 0);
		}
	}
	
	// update status line	
	o_item.upstatus(7);

	// run mouseover timer
	this.o_hidetimer = setTimeout('A_MENUS['+ this.n_id +'].collapse();',
		o_item.getprop('hide_delay'));
}

// --------------------------------------------------------------------------------
function menu_onmouseover (n_id) {

	// cancel mouseoute menu close and item open delay
	clearTimeout(this.o_hidetimer);
	this.o_hidetimer = null;
	clearTimeout(this.o_showtimer);

	// lookup new item's object	
	var o_item = this.a_index[n_id];

	// update status line	
	o_item.upstatus();

	// apply rollover
	if (o_item.e_oelement.className=='m0l0ooutSin'){
		
		o_item.e_oelement.className = 'm0l0ooverSin';
		o_item.e_ielement.className = 'm0l0ioverSin';
	
	}else if (o_item.e_oelement.className=='m0l1ooutflecha'){
		//alert('con hijos');
		o_item.e_oelement.className = o_item.getstyle(2, 1);
		o_item.e_ielement.className = o_item.getstyle(3, 1);
	}else{
	
		if(o_item.n_depth==2){
			o_item.e_oelement.className = 'm0l2oover';
			o_item.e_ielement.className = 'm0l2iover';
		}else{
			o_item.e_oelement.className = o_item.getstyle(0, 1);
			o_item.e_ielement.className = o_item.getstyle(1, 1);
		}
		
	}
	
	// if onclick open is set then no more actions required
	if (o_item.getprop('expd_delay') < 0)
		return;

	// run expand timer
	this.o_showtimer = setTimeout('A_MENUS['+ this.n_id +'].expand(' + n_id + ');',
		o_item.getprop('expd_delay'));

}

// --------------------------------------------------------------------------------
// called when mouse button is pressed on menu item
// --------------------------------------------------------------------------------
function menu_onmousedown (n_id) {
	
	// lookup new item's object	
	var o_item = this.a_index[n_id];

	// apply mouse down style
	
	if(o_item.e_ielement.className=='m0l0ioverSin'){
		o_item.e_oelement.className = 'm0l0ooverSin';
		o_item.e_ielement.className = 'm0l0ioverSin';
		
	}else if(o_item.e_ielement.className=='m0l1ooverflecha'){
		//alert('con hijos');
		o_item.e_oelement.className = o_item.getstyle(2, 2);
		o_item.e_ielement.className = o_item.getstyle(3, 2);
	}else{
		o_item.e_oelement.className = o_item.getstyle(0, 2);
		o_item.e_ielement.className = o_item.getstyle(1, 2);
	}
	
	this.expand(n_id);
}

// --------------------------------------------------------------------------------

function getWinSize(){
	var size = new Object();
	size.w = document.documentElement.clientWidth;
	size.h = document.documentElement.clientHeight;
	return size;
}


function buscarPropiedad(selector,propi) {
  
    
   var numHojas = document.styleSheets.length;
   
   for(j=0;j<numHojas;j++){
  
	  if (document.all){
	   miRegla = document.styleSheets[j].rules;
	  }else{
	    miRegla = document.styleSheets[j].cssRules;
	  }
	  for (i=0; reg=miRegla[i]; i++){
	    if (reg.selectorText.toLowerCase() == selector.toLowerCase() ){
	      return reg.style[propi];
	    }
	  }
   }
}

//----------------------------------------------------------------------------

// menu item Class
function menu_item (o_parent, n_order, left) {

	// store parameters passed to the constructor
	this.n_depth  = o_parent.n_depth + 1;
	this.a_config = o_parent.a_config[n_order + (this.n_depth ? 3 : 0)];

	// return if required parameters are missing
	if (!this.a_config) return;

	// store info from parent item
	this.o_root    = o_parent.o_root;
	this.o_parent  = o_parent;
	this.n_order   = n_order;

	// register in global and parent's collections
	this.n_id = this.o_root.a_index.length;
	this.o_root.a_index[this.n_id] = this;
	o_parent.a_children[n_order] = this;

	// calculate item's coordinates
	var o_root = this.o_root,
		a_tpl  = this.o_root.a_tpl;

	// assign methods
	this.getprop  = mitem_getprop;
	this.getstyle = mitem_getstyle;
	this.upstatus = mitem_upstatus;

	altura = buscarPropiedad('.m0l0ooversin','top');
	
	var x;
	if (this.n_depth==0 && !navegador.match("Explorer")) {
		

		
		if(navegador.match("Opera")){
			this.n_x = n_order
				? o_parent.a_children[n_order - 1].n_x + this.getprop('left')
				: o_parent.n_x + this.getprop('block_left_firefox');
		
			this.n_y = n_order
				? o_parent.a_children[n_order - 1].n_y + this.getprop('top')
				: o_parent.n_y + this.getprop('block_top_Opera');
		
		}else if (navegador.match("Safari")){
			this.n_x = n_order
				? o_parent.a_children[n_order - 1].n_x + this.getprop('left')
				: o_parent.n_x + this.getprop('block_left_Safari');
			
			this.n_y = n_order
				? o_parent.a_children[n_order - 1].n_y + this.getprop('top')
				: o_parent.n_y + this.getprop('block_top_Safari');
		
		}else{ //Firefox
			this.n_x = n_order
				? o_parent.a_children[n_order - 1].n_x + this.getprop('left')
				: o_parent.n_x + this.getprop('block_left_firefox');
		
			this.n_y = n_order
				? o_parent.a_children[n_order - 1].n_y + this.getprop('top')
				: o_parent.n_y + this.getprop('block_top_firefox');
		}	
		x = this.getprop('block_left_firefox');
	}else{
		//Si estamos en los 2 últimos menús y en los de 3º nivel se ponen a la izquierda del menu padre
		if (this.n_depth==2 && left==1){
			//alert(n_order);
			this.n_x = n_order
				? o_parent.a_children[n_order - 1].n_x + this.getprop('left')
				: o_parent.n_x - this.getprop('block_left');
		}else{

			this.n_x = n_order
				? o_parent.a_children[n_order - 1].n_x + this.getprop('left')
				: o_parent.n_x + this.getprop('block_left');
		
		}

		
		if(altura=='' || altura==null){
		
			this.n_y = n_order
				? o_parent.a_children[n_order - 1].n_y + this.getprop('top')
				: o_parent.n_y + this.getprop('block_top');
				
		
		}else{
			if(this.n_depth==2){

				this.n_y = n_order
					? o_parent.a_children[n_order - 1].n_y + this.getprop('top')
					//: parseInt(altura.substring(0,altura.length-2)) +  parseInt(this.getprop('height')+5);
					:o_parent.n_y + this.getprop('block_top');

			}else{

				this.n_y = n_order
					? o_parent.a_children[n_order - 1].n_y + this.getprop('top')
					: parseInt(altura.substring(0,altura.length-2)) +  parseInt(this.getprop('block_top'));
					//o_parent.n_y + this.getprop('block_top');

			}
		}
		
		x = this.getprop('block_left');
		
		
	}
	
	
	var ancho=130;
	if (!isNaN(this.a_config[2]) && this.a_config[2]!=null){
			//alert(this.a_config[2]);
			ancho=this.a_config[2];
			if(this.n_order==1){
				this.n_x = o_parent.a_children[n_order - 1].n_x + o_parent.a_children[n_order - 1].a_config[2]-30;
			}else{
				this.n_x = o_parent.a_children[n_order - 1].n_x + o_parent.a_children[n_order - 1].a_config[2]+5;
			}
	}
	
	if (this.n_depth==0){
	
		document.write ('<td >');
	
		if (n_order==0){
				
							//alert(eval('tabla_menu').offsetLeft);
							//var posTabla = findPos(eval('tabla_menu'));
							//this.n_x = posTabla;
						
							
							var anchoPantalla = screen.width;
							//var size = getWinSize();
							//var anchoVentana = size.w;
							var anchoVentana = document.body.offsetWidth;
							//alert(anchoVentana);
							
							/*if(anchoPantalla>1280){
								if (anchoVentana<849){
									this.n_x = (anchoPantalla - 1280) + x - (anchoPantalla - 885);
								}else{
									this.n_x = (anchoPantalla - 1280) + x - (anchoPantalla - anchoVentana);
								}
							}else if(anchoPantalla==1280){
								if (anchoVentana<849){
									this.n_x = x - (anchoPantalla - 845);
								}else{
									this.n_x = x - (anchoPantalla - anchoVentana);
								}
								
							}else{
														
								if (anchoVentana<849){
									this.n_x = x - (1280 - anchoPantalla)- (anchoPantalla - 845);
								}else{
									this.n_x = x - (1280 - anchoPantalla) - (anchoPantalla - anchoVentana);
								}
								
							
							}*/this.n_x = 230;
							
		}
		
		if(altura=='' || altura==null){
		
			document.write ('<td ><div id="e', o_root.n_id, '_',	this.n_id, 'o" class="', this.getstyle(0, 0), '"', 
						(this.a_config[2] && this.a_config[2]['tt'] ? ' title="' + this.a_config[2]['tt'] + '"' : ''),
						' style="position:absolute;top: ', this.n_y, 'px;left:', this.n_x, 'px;width:',
						ancho, 'px;height:18px;display:none;',
						' z-index: ', this.n_depth, ';cursor:', (this.a_config[1] ? 'pointer' : 'default'), '" ',
						'onclick="return A_MENUS[', o_root.n_id, '].onclick(', this.n_id,
						');" onmouseout="A_MENUS[', o_root.n_id, '].onmouseout(', this.n_id,
						');" onmouseover="A_MENUS[', o_root.n_id, '].onmouseover(',
						this.n_id, ');" onmousedown="A_MENUS[', o_root.n_id, '].onmousedown(',
						this.n_id, ');"><div id="e', o_root.n_id, '_',
						this.n_id, 'i" class="' ,this.getstyle(1, 0), '">',
						this.a_config[0], "</div></div><span  style='white-space:nowrap;font-size: 12pt;visibility:hidden'>",this.a_config[0],"&nbsp;&nbsp;</span> </td>"
			);

		
		}else{
			//alert(this.a_config[0]);
			//alert(this.getstyle(1, 0));
			if (n_order==1){
		
				
				
				document.write ('<td ><div id="e', o_root.n_id, '_',	this.n_id, 'o" class="m0l0ooutsin"', 
						(this.a_config[2] && this.a_config[2]['tt'] ? ' title="' + this.a_config[2]['tt'] + '"' : ''),
						' style="position:absolute;left:', this.n_x, 'px;width:',
						ancho, 'px;height:18px;display:none;',
						' z-index: ', this.n_depth, ';cursor:', (this.a_config[1] ? 'pointer' : 'default'), '" ',
						'onclick="return A_MENUS[', o_root.n_id, '].onclick(', this.n_id,
						');" onmouseout="A_MENUS[0].onmouseout(2);this.className=\'m0l0ooutsin\';" onmouseover="A_MENUS[0].onmouseover(2);this.className=\'m0l0ooversin\'" onmousedown="A_MENUS[0].onmousedown(2);">',
						'<div id="e', o_root.n_id, '_',
						this.n_id, 'i" class="m0l0ioutsin" onmouseover="this.className=\'m0l0ioversin\'" onmouseout="this.className=\'m0l0ioutsin\';">',
						this.a_config[0], "</div></div><span  style='white-space:nowrap;font-size: 12pt;visibility:hidden'>",this.a_config[0],"&nbsp;&nbsp;</span> "
					);
				}
				else{

				document.write ('<td ><div id="e', o_root.n_id, '_',	this.n_id, 'o" class="', this.getstyle(0, 0), '"', 
							(this.a_config[2] && this.a_config[2]['tt'] ? ' title="' + this.a_config[2]['tt'] + '"' : ''),
							' style="position:absolute;left:', this.n_x, 'px;width:',
							ancho, 'px;height:18px;display:none;',
							' z-index: ', this.n_depth, ';cursor:', (this.a_config[1] ? 'pointer' : 'default'), '" ',
							'onclick="return A_MENUS[', o_root.n_id, '].onclick(', this.n_id,
							');" onmouseout="A_MENUS[', o_root.n_id, '].onmouseout(', this.n_id,
							');" onmouseover="A_MENUS[', o_root.n_id, '].onmouseover(',
							this.n_id, ');" onmousedown="A_MENUS[', o_root.n_id, '].onmousedown(',
							this.n_id, ');"><div id="e', o_root.n_id, '_',
							this.n_id, 'i" class="' ,this.getstyle(1, 0), '">',
							this.a_config[0], "</div></div><span  style='white-space:nowrap;font-size: 12pt;visibility:hidden'>",this.a_config[0],"&nbsp;&nbsp;</span> "
				);
			}
		}
			
	
		
		
		
	}else{

		var ancho2 = this.a_config[0].length*10;
		if (ancho2< this.getprop('width')){
			ancho2=this.getprop('width');
		}
		
		
		// generate item's HMTL
		document.write (
			'<div id="e', o_root.n_id, '_',	this.n_id, 'o" class="', this.getstyle(0, 0), '"', 
			(this.a_config[2] && this.a_config[2]['tt'] ? ' title="' + this.a_config[2]['tt'] + '"' : ''),
			' style="position:absolute;top: ', this.n_y, 'px;left:', this.n_x, 'px;width:',
			ancho2, 'px;height:', this.getprop('height'), 'px;display:none;',
			' z-index: ', this.n_depth, ';cursor:', (this.a_config[1] ? 'pointer' : 'default'), '" ',
			'onclick="return A_MENUS[', o_root.n_id, '].onclick(', this.n_id,
			');" onmouseout="A_MENUS[', o_root.n_id, '].onmouseout(', this.n_id,
			');" onmouseover="A_MENUS[', o_root.n_id, '].onmouseover(',
			this.n_id, ');" onmousedown="A_MENUS[', o_root.n_id, '].onmousedown(',
			this.n_id, ');"><div id="e', o_root.n_id, '_',
			this.n_id, 'i" class="' ,this.getstyle(1, 0), '">',
			this.a_config[0], "</div></div></td> "
		);
	
	}
	
	
	
	if (this.n_depth==0){
		document.write ('</td>');
	}
	
	this.ancho=ancho;
	
	
	this.e_ielement = document.getElementById('e' + o_root.n_id + '_' + this.n_id + 'i');
	this.e_oelement = document.getElementById('e' + o_root.n_id + '_' + this.n_id + 'o');
	
	//alert( document.getElementById('e' + o_root.n_id + '_' + this.n_id + 'o').id);

	//alert(document.getElementById('e' + o_root.n_id + '_' + this.n_id + 'o'));

	this.b_visible = !this.n_depth;

	// no more initialization if leaf
	if (this.a_config.length < 4)
		return;

	// node specific methods and properties
	this.a_children = [];

	/////////
	var a_css = this.getprop('css');
	/////////
	var anchoMax=210;

	// init downline recursively
	for (var n_order1 = 0; n_order1 < this.a_config.length - 3; n_order1++){
		
		var hijo;
		
		if(this.n_depth==1 && o_parent.n_order > (o_root.a_config.length-5)){
			//alert(o_root.a_config.length);
			hijo = new menu_item(this, n_order1, 1);
		}else
			hijo = new menu_item(this, n_order1, 0);
		var anchoHijo=0;
		
		
		///////////////
		//if(hijo.a_config[0]!=null && !isNaN(hijo.a_config[0])){
		//	anchoHijo = hijo.a_config[0].length*11;
		//}
		
		
		anchoHijo=0;
		if(hijo.a_config!=null && hijo.a_config[0]!=null){
			anchoHijo = hijo.a_config[0].length * 10;
			//alert('entra:'+anchoHijo);
		}
			
		if(anchoMax<anchoHijo){
			anchoMax = anchoHijo;
		}
		//alert('anchoMax='+anchoMax+' anchoHijo='+anchoHijo);
		
		if (hijo.a_children!=null && hijo.a_children[0]!=null){
			//alert(hijo.a_config[0] + ' tiene hijos ' + hijo.a_children);
			
			//alert(a_css['outerflecha']);
			//hijo.className = 'outerflecha';
			//hijo.className = a_css['outerflecha'];
			if(hijo.e_oelement!=null && hijo.e_ielement!=null){
				hijo.e_oelement.className = hijo.getstyle(2, 0);
				hijo.e_ielement.className = hijo.getstyle(3, 0);
			}
		}
	}
	
	//alert('numHijos'+this.a_children.length);
	var n_order2;
	for (n_order2 = 0; n_order2 < this.a_children.length; n_order2++){
		if(this.a_children[n_order2]!=null && this.a_children[n_order2].e_oelement!=null){
			//alert('cambiamos tamaño de '+this.a_children[n_order2].e_oelement.style.width + ' a'+anchoMax );
			this.a_children[n_order2].e_oelement.style.width = anchoMax + 'px';
		}
	}
	//Dejamos una línea en blanco en el último elemento del menu
	if(this.a_children[n_order2 - 1]!=null && this.a_children[n_order2-1].e_oelement!=null)
		this.a_children[n_order2 - 1].e_oelement.style.height = (this.getprop('height') + (this.getprop('height')/4) + 'px');
	

}

// --------------------------------------------------------------------------------
// reads property from template file, inherits from parent level if not found
// ------------------------------------------------------------------------------------------
function mitem_getprop (s_key) {

	// check if value is defined for current level
	var s_value = null,
		a_level = this.o_root.a_tpl[this.n_depth];

	// return value if explicitly defined
	if (a_level)
		s_value = a_level[s_key];

	// request recursively from parent levels if not defined
	return (s_value == null ? this.o_parent.getprop(s_key) : s_value);
}
// --------------------------------------------------------------------------------
// reads property from template file, inherits from parent level if not found
// ------------------------------------------------------------------------------------------
function mitem_getstyle (n_pos, n_state) {

	var a_css = this.getprop('css');
	
	var a_oclass ;
	
	if (n_pos==0){
		a_oclass = a_css['outer'];
	}else if(n_pos==1){
		a_oclass = a_css['inner'];
	}else if(n_pos==2){
		a_oclass = a_css['outerflecha'];
	}else if(n_pos==3){
		a_oclass = a_css['innerflecha'];
	}else if(n_pos==4){
		a_oclass = a_css['outerSin'];
	}else if(n_pos==5){
		a_oclass = a_css['innerSin'];
	}
	
	// same class for all states	
	if (typeof(a_oclass) == 'string')
		return a_oclass;

	// inherit class from previous state if not explicitly defined
	for (var n_currst = n_state; n_currst >= 0; n_currst--)
		if (a_oclass[n_currst])
			return a_oclass[n_currst];
}

// ------------------------------------------------------------------------------------------
// updates status bar message of the browser
// ------------------------------------------------------------------------------------------
function mitem_upstatus (b_clear) {
	window.setTimeout("window.status=unescape('" + (b_clear	? '': (this.a_config[2] && this.a_config[2]['sb']? escape(this.a_config[2]['sb']): escape(this.a_config[0]))) + "')", 10);
}

// --------------------------------------------------------------------------------
// that's all folks

