/*By Martin de Bustos  martindebustos@hotmail.com*/
nItems=0; //Contador usado para determinar el id de cada nodo
nHeightLetter=37; // Alto de un nodo
sDefaultOutTxtColor="Black"; // Color por defecto de la letra del nodo
sDefaultOverTxtColor="#1327F7"; // Color por defecto de la letra del nodo
sDefaultOutBG="#F3F3F3"; // Color de fondo de un item
sDefaultOverBG="#F3F3F3"; // Color de fondo de un item
sDefaultText="node"+nItems; //En caso de no tener texto se le asigna este valor
nDefaultBorder=0;//ancho de borde por defecto
sDefaultBorderColor="#ffffff";//Color de borde por defecto
sDefaultImageRightOff="images/trans1.gif";//imagen
sDefaultImageDownOff="images/trans1.gif";
sDefaultImageRightOn="images/trans1.gif";
sDefaultImageDownOn="images/trans1.gif";
bDefaultIsVertical=true;
nWidthImageRight=15;
nWidthImageLeft=38;
nWidthOption=0; 
// si esta opcion es 0 se toma el ancho de la cadena de la opcion en caso contrario 
// todos las opciones tienen el mismo ancho
sDefaultImgLeft="images/trans1.gif"; // imagen por defecto a la izquierda
sImgCornerLefDown = "images/corner_left_down.gif";
sImgCornerRightDown = "images/corner_right_down.gif";
sImgCornerRightTop = "images/corner_right_up.gif";
sImgBGSubMenu = "images/pixel_bg_grey.gif";



function Node(text,sLink,bMenuIsVertical,sMenuOutTxtColor,sMenuOverTxtColor,sMenuOutBG,sMenuOverBG,nMenuBorder,sMenuBorderColor,sImgOutLeft,sImgOverLeft){
	this.father=null;	
	this.nId="I"+nItems++;
	this.text=(text==null)?sDefaultText:text;
	this.sLink=(sLink==null)?"#":sLink;
	this.bMenuIsVertical=(bMenuIsVertical==null)?bDefaultIsVertical:bMenuIsVertical;	
	this.sMenuOutBG=(sMenuOutBG==null)?sDefaultOutBG:sMenuOutBG;
	this.sMenuOverBG=(sMenuOverBG==null)?sDefaultOverBG:sMenuOverBG;
	this.nMenuBorder=(nMenuBorder==null)?nDefaultBorder:nMenuBorder;	
	this.sMenuBorderColor=(sMenuBorderColor==null)?sDefaultBorderColor:sMenuBorderColor;	
	this.sMenuOutTxtColor=(sMenuOutTxtColor==null)?sDefaultOutTxtColor:sMenuOutTxtColor;
	this.sMenuOverTxtColor=(sMenuOverTxtColor==null)?sDefaultOverTxtColor:sMenuOverTxtColor;
	this.sImgOutLeft=(sImgOutLeft==null)?sDefaultImgLeft:sImgOutLeft;
	this.sImgOverLeft=(sImgOverLeft==null)?sDefaultImgLeft:sImgOverLeft;

	/*-------Metodos------------------*/
	this.GetWidth=NodeGetWidth;	
	this.GetIndex=NodeGetIndex;
	this.GetTop=NodeGetTop;
	this.GetLeft=NodeGetLeft;	
	this.AddChild=NodeAddChild;		
	this.GetOptionStyle=NodeGetOptionStyle;	
	this.GetOptionEvent=NodeGetOptionEvent;	
}

function NodeGetWidth()
{
	if (nWidthOption==0) return StringGetWidth(this.text)+nWidthImageRight+nWidthImageLeft;
	else return nWidthOption;
}

function NodeGetIndex(){
		var nIndex=0;
		if(this.father!=null)			
			for (var i=0;i<this.father.child.length;i++)		
				if (this.father.child[i]==this) return i;
		return nIndex;	
}

function NodeGetTop(){
	var nTop=0;	
	if((this.father!=null)&&(this.father.bMenuIsVertical)){
		nTop=this.GetIndex()*nHeightLetter+(father.nMenuBorder*2);
	}
	return (nTop);
}

function NodeGetLeft(){
	var nLeft=0;	
	if(this.father!=null){
		if (!this.father.bMenuIsVertical){
			for (var i=0;i<this.father.child.length;i++){
				if (this.father.child[i]==this) break;
				nLeft+=this.father.child[i].GetWidth();
			}
		}
		else nLeft=this.father.GetMenuWidth();
	}
	return nLeft;
}

function NodeAddChild(text,sLink,sImgOutLeft,sImgOverLeft,bMenuIsVertical,sMenuOutTxtColor,sMenuOverTxtColor,sMenuOutBG,sMenuOverBG,nMenuBorder,sMenuBorderColor){
	nNode=new Node(text,sLink,bMenuIsVertical,sMenuOutTxtColor,sMenuOverTxtColor,sMenuOutBG,sMenuOverBG,nMenuBorder,sMenuBorderColor,sImgOutLeft,sImgOverLeft);
	nNode.father=this;
	if (this.child==null) this.child=new Array();	
	this.child[this.child.length]=nNode;
	
//	-------New  Metodos
	if(this.bMenuIsVertical){ nNode.GetOption=NodeGetTr;}
	else{ nNode.GetOption=NodeGetTd;}
	this.GetMenu=NodeGetTable;	
	this.GetMenuStyle=NodeGetMenuStyle;
	this.GetMenuEvent=NodeGetMenuEvent;
	this.GetMenuTop=NodeGetMenuTop;	
	this.GetMenuLeft=NodeGetMenuLeft;					
	this.GetMenuWidth=NodeGetMenuWidth;			
	return nNode;
}

function NodeGetOptionEvent(){
	var onMouseOver=" onMouseOver=\" this.style.background='"+this.father.sMenuOverBG+"';this.style.color='"+this.father.sMenuOverTxtColor+"'; ";
	if(!this.father.bMenuIsVertical)onMouseOver+=" document.getElementById('img_"+this.nId+"').src='"+this.sImgOverLeft+"'; "; 
	var onMouseOut=" onMouseOut=\"this.style.background='"+this.father.sMenuOutBG+"';this.style.color='"+this.father.sMenuOutTxtColor+"'; ";
	if(!this.father.bMenuIsVertical)onMouseOut+="document.getElementById('img_"+this.nId+"').src='"+this.sImgOutLeft+"';"; 
	if (this.child!=null){
		 onMouseOver+=" document.getElementById('div"+this.nId+"').style.visibility='visible'; ";
		 onMouseOut+=" document.getElementById('div"+this.nId+"').style.visibility='hidden'; ";
	}
	onMouseOver+="\" ";
	onMouseOut+="\" ";
	var onclick=" onClick=\"document.location='"+this.sLink+"';\" ";
	var sEvent=onclick+onMouseOver+onMouseOut;
	return sEvent;	
}
	
function NodeGetOptionStyle(){
	var sColor=" COLOR:"+this.father.sMenuOutTxtColor+"; ";
	var sMenuBG=" background:"+this.father.sMenuOutBG+"; ";
	var sHeight=" Height:"+nHeightLetter+"px; ";	
	var sWidth=" Width:"+this.GetWidth()+"px; ";		
	var sStyle=" style='"+sColor+sMenuBG+sHeight+"' ";
//	alert(sStyle);
	return sStyle;	
}

function NodeGetMenuWidth(){
	var nMenuWidth=0;
	if(this.child!=null){
		for (var i=0;i<this.child.length;i++){
			var nOptionWidth=this.child[i].GetWidth();
			if ((this.bMenuIsVertical)&&(nMenuWidth<nOptionWidth)){	nMenuWidth=nOptionWidth;}
			else if(!this.bMenuIsVertical) nMenuWidth+=nOptionWidth;
		}
	}
	return nMenuWidth;	
}

function NodeGetMenuLeft(){
		var nMenuLeft=0;
		if(this.father!=null) nMenuLeft=this.father.GetMenuWidth();
		return nMenuLeft;	
}


function NodeGetMenuTop(){
	var nMenuTop=0;
	if(this.child!=null){
		if (this.father!=null){
			var nIndex=0;
			if (this.father.bMenuIsVertical){
				nIndex=this.GetIndex();
				nMenuTop=nIndex*nHeightLetter;
			}
			else nMenuTop=nHeightLetter;			
			if (nIndex!=0)	nMenuTop+=this.nMenuBorder;	
		}
	}
	return nMenuTop;	
}


function NodeGetMenuEvent(){

	var onMouseOver=" onMouseOver=\"this.style.visibility='visible';this.style.cursor='pointer';\";";
	var onMouseOut=(this.father==null)?" ":" onMouseOut=\"this.style.visibility='hidden';this.style.cursor='';\" ";
	var sEvent=onMouseOver+onMouseOut;
	return sEvent;
}

function NodeGetMenuStyle(nLeft,nTop){
	var sTop=" TOP:"+(nTop+this.GetMenuTop())+"px; ";
	var sLeft=" LEFT:"+(nLeft+this.GetLeft())+"px; ";
	var sWidth=" WIDTH:"+this.GetMenuWidth()+"px; ";	
	var sVisibility=(this.father==null)?" VISIBILITY:visible; ":" VISIBILITY:hidden; ";	
	var sStyle=" style=' position:absolute; "+sTop+sLeft+sWidth+sVisibility+"' ";
	return sStyle;
}


function NodeGetTr(){ 
	var strHTML="<tr "+this.GetOptionStyle()+this.GetOptionEvent()+">";	
	strHTML+="<td><img src='images/pixel_box_left.gif' height='"+nHeightLetter+"' width=4></td>";	
	strHTML+="<td  nowrap id='t"+this.nId+"'>"+this.text+"</td>";
	strHTML+="<td>";
	if (this.child!=null) strHTML+="<img src='"+sDefaultImageRightOff+"' width='"+nWidthImageRight+"'>"
	strHTML+="</td>";
	strHTML+="<td align=right><img src='images/pixel_box_right.gif' height='"+nHeightLetter+"' width=4></td>";		
	strHTML+="</tr>";
	return strHTML;
}

function NodeGetTd(){ 
	var strHTML="<td id='t"+this.nId+"' width="+this.GetWidth()+"><table cellspacing=0 cellpading=0 border=0 width=100%><tr "+this.GetOptionStyle()+this.GetOptionEvent()+"><td nowrap><img id='img_"+this.nId+"' src='"+this.sImgOutLeft+"' align='absmiddle' width="+nWidthImageLeft+">&nbsp;"+this.text+"</td><td>";
	if (this.child!=null) strHTML+="<img src='"+sDefaultImageRightOff+"' width='"+nWidthImageRight+"'>"
	strHTML+="</td></tr></table></td>"
	return strHTML;
}

function NodeGetTable(nLeft, nTop){
	var strHTML="";
	if (nLeft==null) nLeft=0;
	if (nTop==null)  nTop=0;
	if(this.child!=null){
		strHTML="<div id='div"+this.nId+"'"+this.GetMenuStyle(nLeft,nTop)+this.GetMenuEvent()+">";	
			var sStyle=" style='BORDER:"+this.nMenuBorder+"px solid "+this.sMenuBorderColor+";' ";					
			strHTML+="<table cellpadding=0 cellspacing=0 border=0 width=100% id='tbl"+this.nId+"'"+sStyle+">";
			if(this.bMenuIsVertical){
				strHTML+="<tr>";
					strHTML+="<td><img src='images/pixel_box_left.gif'></td>";
					strHTML+="<td width="+nWidthImageLeft+"></td>";
					strHTML+="<td><img src='images/pixel_box_up.gif' width='"+(this.GetWidth()+nWidthImageRight)+"' height=4></td>";
					strHTML+="<td><img src='images/corner_right_up.gif' ></td>";
				strHTML+="</tr>";	
			}		
			strHTML+="<tr>";
				strHTML+="<td colspan=4>";
				strHTML+="<table cellpadding=0 cellspacing=0 border=0 width=100%>";			
				if (!this.bMenuIsVertical) strHTML+="<tr>";			
				for(var i=0;i<this.child.length;i++) strHTML+=this.child[i].GetOption();
				if (!this.bMenuIsVertical) strHTML+="</tr>";
				strHTML+="</table></td>";
			strHTML+="</tr>";			
			if(this.bMenuIsVertical){
				strHTML+="<tr>";
					strHTML+="<td><img src='images/corner_left_down.gif'></td>";
					strHTML+="<td colspan=2><img src='images/pixel_box_down.gif' width='100%' height=4></td>";
					strHTML+="<td><img src='images/corner_right_down.gif' ></td>";
				strHTML+="</tr>";	
			}					
			strHTML+="</table>"
			for(var i=0;i<this.child.length;i++){
				if(this.child[i].child!=null) strHTML+=this.child[i].GetMenu();
			}
		strHTML+="</div>";
	}
	return strHTML;
}

