Array.prototype.isArray		= true;
		Array.prototype.isObject	= false;
		Object.prototype.isObject	= true;
		Object.prototype.isArray	= false;

		Function.prototype.isObject	= false;
		Function.prototype.isArray	= false;
		/**
		* Strip whitespaces from the beginning and end of String
		* @return String with whitespaces stripped
		*/
		String.prototype.trim = function(){
			return( this.replace(new RegExp("^([\\s]+)|([\\s]+)$", "gm"), "") );
		};
		/**
		* Strip whitespaces from the beginning of String
		* @return String
		*/
		String.prototype.leftTrim = function(){
			return( this.replace(new RegExp("^[\\s]+", "gm"), "") );
		};
		/**
		* Strip whitespaces from the end of String
		* @return String
		*/
		String.prototype.rightTrim = function(){
			return( this.replace(new RegExp("[\\s]+$", "gm"), "") );
		};
		/**
		* Strip HTML tags from a string
		* @return String
		*/
		String.prototype.stripTags = function()
		{
			return this.replace(/<\/?[^>]+>/gi, '');
		};
		/**
		* Convert special characters to HTML entities
		* @return String
		*/
		String.prototype.escapeHTML = function()
		{
			var div = document.createElement('div');
			var text = document.createTextNode(this);
			div.appendChild(text);
			return div.innerHTML;
		};
		/**
		* Convert special HTML entities back to characters
		* @return String
		*/
		String.prototype.unescapeHTML = function()
		{
			var div = document.createElement('div');
			div.innerHTML = this.trim();
			return div.childNodes[0] ? div.childNodes[0].nodeValue : '';
		};
		/**
		* Search and Replace
		* @return String
		*/
		String.prototype.sReplace = function(search,replace)
		{
			search = search || "";
			replace= replace || "";
			var re = new RegExp(search,"g");
			return this.replace(re,replace);
		};
		/**
		* Camelize String (text-align -> textAlign)
		* @return String
		*/
		String.prototype.camelize = function ()
		{
			var oStringList = this.split("-");
			if (oStringList.length == 1) {
				return oStringList[0];
			}
			var camelizedString = this.indexOf("-")===0 ? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1) : oStringList[0];
			for (var i = 1, len = oStringList.length; i < len; i++)
			{
				var s = oStringList[i];
				camelizedString += s.charAt(0).toUpperCase() + s.substring(1);
		        }
			return camelizedString;
		};
		/**
		* Convert String to Array
		* @return Array
		*/
		String.prototype.toArray = function()
		{
			return this.split("");
		};
/***************************************************************************
*  							  rodeh.js
*                        -------------------
*   copyright			: (C) 2006 rodeh.info
*   email				: maborak@gmail.com
*   Version Actual		: 0.1
*   Ultima Modificacion	: 1164369447
*
***************************************************************************/

/***************************************************************************
*
*   This program is free software; you can redistribute it and/or modify
*   it under the terms of the GNU General Public License as published by
*   the Free Software Foundation; either version 2 of the License, or
*   (at your option) any later version.
*
***************************************************************************/

var rodeh={
	info:{
		name		:"rodeh.js",
		version		:"0.1",
		autor		:"MaBoRaK",
		base		:false,
		debug		:false
	},
	panel:{
		styles:{
			container:
			{
				position	:"absolute",
				top		:"0px",
				backgroundColor:"#FFFFFF",
				left		:"0px"
			},
			panel_root:
			{
				position	:"absolute",
				textAlign	:"center",
				top			:"0px",
				//backgroundColor:"#006699",
				//border		:"1px solid red", //depurado
				left		:"0px"
				//padding		:"0px"
			},
			panel_menu_false:
			{
				//borderBottom:"1px solid #DBE0E5"
			},
			cms_panel:
			{
				color		:"000000",
				position	:"relative",
				top			:"0px",
				left		:"0px",
				backgroundColor:"#FFFFFF", //im
				border		:"1px solid #DBE0E5",
				//borderTop	:"0px",
				padding		:"0px",
				//paddingTop	:"10px",
				//paddingBottom:"10px",
				fontFamily	:"Tahoma",
				//height		:"100%",
				//width		:"100%",
				fontSize	:"8pt",
				textDecoration:"none",
				//line-height
				zIndex		:3
			},
			cms_panel_options:{
				cerrar:{
					stat:{
						width:"10px",
						height:"10px",
						position:"absolute",
						margin:"2px",
						//display:"block",
						//backgroundColor:"#006699",
						top:"0px",
						right:"0px",
						cursor:"pointer",
						zIndex:5
					},
					out:{
						background	:function(){return "url("+rodeh.tools.baseURL()+"imagenes/win_cerrar.jpg)";},
						//background	:"url(http://waska.maborak.org/jscripts/leimnud/core/imagenes/win_cerrar.jpg)",
						backgroundPosition:"1px 1px",
						backgroundRepeat:"no-repeat",
						border:"0px solid #cccccc"
					},
					over:{
						border:"1px solid #cccccc"
					},
					down:{
						border:"1px dashed #cccccc"
					}
				},
				contraer:{
					stat:{
						width:"10px",
						height:"10px",
						position:"absolute",
						margin:"2px",

						//display:"block",
						//backgroundColor:"#006699",
						top:"0px",
						right:"14px",
						cursor:"pointer",
						background	:function(){return "url("+rodeh.tools.baseURL()+"imagenes/win_contraer.gif)";},
						backgroundPosition:"1px 2px",
						backgroundRepeat:"no-repeat",
						zIndex:5
					},
					out:{
						backgroundPosition:"1px 2px",
						border:"0px solid #cccccc"
					},
					over:{
						backgroundPosition:"1px 2px",
						border:"1px solid #cccccc"
					},
					down:{
						border:"1px dashed #cccccc"
					},
					contraerd:{
						background	:function(){return "url("+rodeh.tools.baseURL()+"imagenes/win_contraerOpen.gif)";},
						backgroundPosition:"1px 2px",
						backgroundRepeat:"no-repeat"
					},
					title:{
						//width:"100px",
						//height:"10px",
						position:"absolute",
						zIndex:4,
						top:"0px",
						left:"2px",
						margin:"2px",
						marginTop:"1px",
						color:"#000000",
						fontWeight:"bold"
						//overflow:"hidden"
						//backgroundColor:"#006699"
					}
				}
			},
			cms_panel_drag:
			{
				/*Hack for IE begin*/
				backgroundColor:"transparent",
				//opacity:0,

				/*Hack for IE end*/
				color		:"000000",
				position	:"absolute",
				top			:"0px",
				left		:"0px",
				border		:"0px solid #DBE0E5",
				padding		:"0px",
				width		:"100%",
				height		:10,
				cursor		:"move",
				zIndex		:4
			},
			submenu:{
				backgroundColor	:"transparent",
				position		:"relative",
				zIndex			:3
			},
			html:{
				zIndex			:3,
				position		:"relative",
				//padding		:"5px",
				//margin			:"5px",
				padding			:"5px",
				paddingTop		:"15px",
				paddingBottom	:"5px",

				//backgroundColor:"yellow",
				//width			:"100%",
				height			:"100%",
				//border:"1px solid yellow", //depurado
				textAlign		:"center",
				fontFamily	:"Tahoma",
				fontSize	:"8pt",
				overflow:"hidden",
				textDecoration:"none"
			},
			tab:{
				el:{
					ul:
					{
						padding		:"3px 0",
						borderBottom:"1px solid #DBE0E5",
						margin		:"0px",
						marginTop	:"1px",
						//backgroundColor:"#006699",
						font		:"normal 8pt Tahoma"
					},
					li:
					{
						listStyle	:"none",
						margin		:"0px",
						display		:"inline"
					},
					a:
					{
						padding		:"3px 0.5em",
						paddingLeft	:"10px",
						paddingRight:"10px",
						marginLeft	:"3px",
						border		:"1px solid #DBE0E5",
						borderBottom:"0px",
						backgroundColor:"fafbfc",
						textDecoration:"none",
						font		:"normal 8pt Tahoma",
						cursor		:"pointer",
						color		:"000000"
					},
					a_current:
					{
						backgroundColor	:"#FFFFFF",
						borderBottom:"1px solid white",
						marginLeft	:"15px",
						marginRight	:"12px",
						fontWeight	:"bold",
						color		:"#000000",
						cursor		:"default"
					},
					a_nocurrent:
					{
						padding		:"3px 0.5em",
						paddingLeft	:"10px",
						paddingRight:"10px",
						marginLeft	:"3px",
						marginRight	:"0px",
						border		:"1px solid #DBE0E5",
						borderBottom:"0px",
						backgroundColor:"fafbfc",
						textDecoration:"none",
						font		:"normal 8pt Tahoma",
						cursor		:"pointer",
						color		:"#000000"
					},
					a_over:
					{
						color		:"orange"
					},
					a_out:
					{
						color		:"#000000"
					}
				},
				container:{
					font:"normal 8pt Tahoma"
				},
				submenu:{
					el:{
						ul:{
							padding		:"3px 0",
							borderBottom:"0px solid #666666",
							margin		:"0px",
							marginTop	:"0px",
							font		:"normal 8pt Tahoma"
						},
						li:
						{
							listStyle	:"none",
							margin		:"0px",
							display		:"inline"
						},
						a:
						{
							padding		:"3px 0.5em",
							paddingLeft	:"20px",
							paddingRight:"20px",
							marginLeft	:"3px",
							//border		:"1px solid #DBE0E5",
							backgroundColor:"fafbfc",
							textDecoration:"none",
							font		:"normal 8pt Tahoma",
							cursor		:"pointer",
							color		:"000000"
						},
						a_current:
						{
							backgroundColor	:"#eeeeee",
							background	:"none",
							border		:"1px dashed #DBE0E5",
							paddingLeft	:"20px",
							paddingRight:"20px",
							paddingTop	:"5px",
							paddingBottom:"6px",

							marginLeft	:"3px",
							marginRight	:"0px",
							//fontWeight	:"bold",
							color		:"red",
							cursor		:"default"
						},
						a_nocurrent:
						{
							//padding		:"3px 0.5em",
							background	:function(){return "url("+rodeh.tools.baseURL()+"imagenes/arrow2.jpg)";},
							backgroundRepeat:"repeat-x",
							border		:"1px solid #DBE0E5",
							borderTop	:"0px solid #FF8040",
							paddingLeft	:"20px",
							paddingRight:"20px",
							paddingTop	:"6px",
							paddingBottom:"5px",
							textDecoration:"none",
							font		:"normal 8pt Tahoma",
							cursor		:"pointer",
							color		:"#000000"
						},
						a_over:
						{
							color		:"orange"
						},
						a_out:
						{
							color		:"#000000"
						}
					}
				}
			},
			contextmenu:{
				menu:{
					border:"1px solid #DBE0E5",
					//borderTop	:"0px solid white",
					color:"#666666",
					display:"block",
					textDecoration:"none",
					//width:"100%",
					padding:"3px"
				},
				over:{
					background	:function(){return "url("+rodeh.tools.baseURL()+"imagenes/arrow2.jpg)";},
					backgroundRepeat:"repeat-x",
					border		:"1px solid #DBE0E5",
					borderTop	:"1px solid #ffffff",
					color:"red"
				},
				out:{
					background	:"none",
					borderTop	:"1px solid #DBE0E5",
					color:"#666666"
				}
			}
		},
		element	:false,
		history:[],
		atributos:function(attr)
		{
			this.history[attr.nombre]=attr;
			this.history[attr.nombre].core=this;
			return ;
		},
		inContainer:function(objEl)
		{
			//alert(objEl);
			var newContainer;
			if(objEl && rodeh.panel.history[objEl].other && rodeh.panel.history[objEl].other.incontainer)
			{
				newContainer=rodeh.panel.history[objEl].other.incontainer;
			}
			else
			{
				if(!document.getElementById("setToContainer"))
				{
					newContainer = document.createElement("span");
					newContainer.id="setToContainer";
					document.body.appendChild(newContainer);
				}
				else
				{
					newContainer=document.getElementById("setToContainer");
				}
			}
			//alert(newContainer.id);
			return newContainer;
			//return document.getElementById("cm_a");
		},
		createContainer:function(ObjHistory,other)
		{
			if(rodeh.browser.isOPERA)
			{

			}
			else
			{
				var newItem = document.createElement("div");
				newItem.id=ObjHistory+"|container";
				//newItem.className		="administrator_loader";
				rodeh.style.set(newItem,rodeh.panel.styles.container);
				newItem.style.height	=(document.body.clientHeight+document.body.scrollTop);
				newItem.style.width		=(document.body.clientWidth+document.body.scrollLeft);
				newItem.style.zIndex	=(this.history[ObjHistory].zIndex-1);
				//alert(other.opacity);
				rodeh.fx.opacity.set(newItem,(other && other.opacity)?other.opacity:0);
				this.inContainer(ObjHistory).appendChild(newItem);
				if(other && other.style){rodeh.style.set(newItem,other.style);}
				if(rodeh.browser.isIE && !rodeh.browser.isOPERA)
				{

				}
				else
				{
					rodeh.style.set(newItem,{
						position:"fixed"
					});
				}
				return newItem;
			}
			return;
		},
		create:function(size,position,anombre,zIndex,menu,other)
		{
			var sizeW,sizeH,elemTabPanel;
			var name=anombre;
			var nombre=anombre+"|panel"+Math.floor(Math.random()*99);
			var nnombre=nombre+"panel"+Math.floor(Math.random()*99);
			this.atributos({
				nombre	:nombre,
				zIndex	:zIndex || 3,
				menu	:menu || false,
				size	:size,
				position:position,
				other	:other || false,
				sombra	:false
			});

			this.history[nombre].elementos={};
			var _2=this.history[nombre];
			_2.nnombre=nnombre;
			_2.name=name;
			var container=(!other)?true:((other.container===false)?false:true);
			var ieframe=(!other)?true:((other.ieframe===false)?false:true);
			if(container===true)
			{
				var lock=this.createContainer(nombre,(other && other.container)?other.container:false);
			}
			var contenedor = document.createElement("div"); //contenedor
			rodeh.style.set(contenedor,this.styles.panel_root); //contenedor
			contenedor.style.zIndex=zIndex;
			contenedor.id=nombre+"root";
			var blA = document.createElement("div"); //submenu
			rodeh.style.set(blA,rodeh.panel.styles.submenu);
			var blB 	= document.createElement("div"); //content html
			blB.id 	= name+"html";

			var blC 	= document.createElement("div"); //content html
			blC.id 	= name+"htmlcontainer";
			blC.appendChild(blB);

			rodeh.style.set(blB,rodeh.panel.styles.html);

			if(other && other.style && other.style.panel_root)
			{rodeh.style.set(contenedor,other.style.panel_root);}
			if(other && other.fixed)
			{
				if(rodeh.browser.isIE && !rodeh.browser.isOPERA)
				{

				}
				else
				{
					rodeh.style.set(contenedor,{
						position:"fixed"
					});
				}
			}

			if(other && other.saveSize)
			{
				if(!rodeh.tools.cookie.isset(other.useCookie+".w")){rodeh.tools.cookie.set(other.useCookie+".w",size.w);sizeW=size.w;}else{sizeW=rodeh.tools.cookie.get(other.useCookie+".w");}
				if(!rodeh.tools.cookie.isset(other.useCookie+".h")){rodeh.tools.cookie.set(other.useCookie+".h",size.h);sizeH=size.h;}else{sizeH=rodeh.tools.cookie.get(other.useCookie+".h");}
				if(rodeh.browser.isIE && !rodeh.browser.isOPERA)
				{
					contenedor.style.width=sizeW;
					contenedor.style.height=sizeH;
				}
				else
				{
					if(rodeh.browser.isOPERA)
					{
						contenedor.style.width=sizeW;
						contenedor.style.minHeight=sizeH;
					}
					else
					{
						contenedor.style.minWidth=sizeW;
						contenedor.style.minHeight=sizeH;
					}
					//blB.style.minHeight=size.h;
				}
			}
			else
			{
				sizeW=size.w;
				sizeH=size.h;
				if(rodeh.browser.isIE && !rodeh.browser.isOPERA)
				{
					contenedor.style.width=sizeW;
					contenedor.style.height=sizeH;
				}
				else
				{
					contenedor.style.width=sizeW;
					contenedor.style.minHeight=sizeH;
					//contenedor.style.height=sizeH;
					//blB.style.minHeight=size.h;
				}
			}
			//alert(sizeW+":"+sizeH)
			if(!menu)
			{
				var fmenu=document.createElement("div");
				//fmenu.className="css_panel_menu_false";
				rodeh.style.set(fmenu,this.styles.panel_menu_false); //menu
				//contenedor.appendChild(fmenu);
				this.history[nombre].elementos.menu=false;
				if(other && other.style && other.style.menu)
				{rodeh.style.set(fmenu,other.style.menu);}
			}
			else
			{
				if(rodeh.browser.isIE && !rodeh.browser.isOPERA)
				{
					//elIframe.style.top="0px";
					//elIframe.style.marginTop="-6px";
				}
				elemTabPanel=rodeh.tabPanel.crear(menu,nombre);
				contenedor.appendChild(elemTabPanel);
				this.history[nombre].elementos.menu=elemTabPanel;   //menu
				if(other && other.style && other.style.menu){rodeh.style.set(elemTabPanel,other.style.menu);}
			}
			var context = document.createElement("div"); //cmspanel
			rodeh.style.set(context,this.styles.cms_panel);
			//context.style.minHeight=sizeH;   //panel

			if(rodeh.browser.isIE && !rodeh.browser.isOPERA && ieframe)
			{
				var elIframe=document.createElement("iframe");
				elIframe.style.position="absolute";
				elIframe.style.left="0px";
				elIframe.style.top="0px";
				//elIframe.style.marginTop=(menu)?"-5px":"0px";
				elIframe.style.width="100%";
				elIframe.style.backgroundColor="transparent";
				elIframe.style.border="0px solid #ff4400";
				elIframe.style.height=sizeH;
				elIframe.frameBorder="no";
				elIframe.style.zIndex=1;
				elIframe.scrolling="no";
				elIframe.src="about:blank";
				contenedor.appendChild(elIframe);
				//rodeh.fx.opacity.set(elIframe,0);
			}


			//context.className="cms_panel";
			context.id=nombre;
			if(menu)
			{
				context.style.borderTop="0px";
			}
			else
			{
				context.style.borderTop="1px solid #DBE0E5";
			}

			contenedor.appendChild(context); //insertar cmspanel

			//context.appendChild(blA); //bloque submenu
			context.appendChild(blC); //bloque html
			/*resize Fix begin*/
			if(rodeh.browser.isIE && !rodeh.browser.isOPERA)
			{
				context.style.height=sizeH;
			}
			else
			{
				context.style.minHeight=sizeH;
				//blB.style.minHeight=sizeH;
			}   //panel
			/*resize Fix end*/


			if(_2.other.botones)
			{
				if(_2.other.botones.cerrar)
				{
					var _2a=document.createElement("div");
					_2a.id=nombre+"|tocerrar";
					if(typeof _2.other.botones.cerrar!="object"){
						_2.other.botones.cerrar={};
					}
					rodeh.style.set(_2a,rodeh.panel.styles.cms_panel_options.cerrar.stat);
					rodeh.style.set(_2a,rodeh.panel.styles.cms_panel_options.cerrar.out);
					rodeh.event.add(_2a,"mouseover",function(event){
						var _2c=rodeh.panel.history[rodeh.panel.getidFromMorph(rodeh.event.get(event).id)];
						rodeh.style.set(_2c.other.botones.cerrar.element,rodeh.panel.styles.cms_panel_options.cerrar.over);
					});
					rodeh.event.add(_2a,"mouseout",function(event){
						var _2c=rodeh.panel.history[rodeh.panel.getidFromMorph(rodeh.event.get(event).id)];
						rodeh.style.set(_2c.other.botones.cerrar.element,rodeh.panel.styles.cms_panel_options.cerrar.out);
					}
					);
					rodeh.event.add(_2a,"mousedown",function(event){
						var _2c=rodeh.panel.history[rodeh.panel.getidFromMorph(rodeh.event.get(event).id)];
						rodeh.style.set(_2c.other.botones.cerrar.element,rodeh.panel.styles.cms_panel_options.cerrar.down);
					}
					);
					if(_2.other.botones.cerrar._function)
					{

					}
					else
					{
						/*	rodeh.event.add(_2a,"mouseup",function(){
						rodeh.panel.remove();*/
						rodeh.event.add(_2a,"mouseup",rodeh.panel.remove);
					}
					_2.other.botones.cerrar.element=_2a;
					context.appendChild(_2a);
				}
				if(_2.other.botones.contraer)
				{
					_2.other.botones.contraer={};
					var _2b=document.createElement("div");
					_2b.title="Contraer contenido";
					_2b.id=nombre+"|tocontraer";
					var _4b=document.createElement("div");
					_4b.id=nombre+"|title";
					_4b.innerHTML=(_2.other.botones.titulo)?_2.other.botones.titulo:"";
					_4b.style.visibility="hidden";

					rodeh.style.set(_4b,rodeh.panel.styles.cms_panel_options.contraer.title);

					rodeh.style.set(_2b,rodeh.panel.styles.cms_panel_options.contraer.stat);
					rodeh.style.set(_2b,rodeh.panel.styles.cms_panel_options.contraer.out);
					if(!_2.other.botones.cerrar){_2b.style.right="0px";}
					rodeh.event.add(_2b,"mouseover",function(event){
						var _2c=rodeh.panel.history[rodeh.panel.getidFromMorph(rodeh.event.get(event).id)];
						_2c=rodeh.panel.history[rodeh.panel.getidFromMorph(rodeh.event.get(event).id)];
						rodeh.style.set(_2c.other.botones.contraer.element,rodeh.panel.styles.cms_panel_options.contraer.over);
					});
					rodeh.event.add(_2b,"mouseout",function(event){
						var _2c=rodeh.panel.history[rodeh.panel.getidFromMorph(rodeh.event.get(event).id)];
						_2c=rodeh.panel.history[rodeh.panel.getidFromMorph(rodeh.event.get(event).id)];
						rodeh.style.set(_2c.other.botones.contraer.element,rodeh.panel.styles.cms_panel_options.contraer.out);
					});
					rodeh.event.add(_2b,"mousedown",function(event){
						var _2c=rodeh.panel.history[rodeh.panel.getidFromMorph(rodeh.event.get(event).id)];
						_2c=rodeh.panel.history[rodeh.panel.getidFromMorph(rodeh.event.get(event).id)];
						rodeh.style.set(_2c.other.botones.contraer.element,rodeh.panel.styles.cms_panel_options.contraer.down);
					});
					rodeh.event.add(_2b,"mouseup",function(event){

						var _2c=rodeh.panel.history[rodeh.panel.getidFromMorph(rodeh.event.get(event).id)];
						if(_2c.other.botones.contraerd)
						{
							if(_2c.elementos.resize)
							{
								_2c.elementos.resize.style.visibility="visible";
							}
							_2c.other.botones.contraerTitle.element.style.visibility="hidden";
							_2c.other.botones.contraer.element.title="Contraer contenido";
							_2c.other.botones.contraerd=false;
							rodeh.style.set(_2c.other.botones.contraer.element,rodeh.panel.styles.cms_panel_options.contraer.stat);
							if(!_2c.other.botones.cerrar){_2c.other.botones.contraer.element.style.right="0px";}

							_2c.elementos.html.style.display=""; //element visible
							_2c.elementos.html.style.visibility="visible"; //element visible


							if(rodeh.browser.isIE===true && rodeh.browser.isOPERA===false)
							{
								_2c.elementos.root.style.height=_2c.size.h;
								_2c.elementos.content.style.height=_2c.size.h;
							}
							else
							{
								_2c.elementos.root.style.minHeight=_2c.size.h;
								_2c.elementos.content.style.minHeight=_2c.size.h;
							}
							if(_2c.sombra)
							{
								_2c.elementos.sombra.style.height=_2c.elementos.content.offsetHeight+"px";
								_2c.elementos.sombra.style.width=_2c.elementos.content.offsetWidth+"px";
							}
						}
						else
						{
							if(_2c.elementos.resize){_2c.elementos.resize.style.visibility="hidden";}
							_2c.other.botones.contraerTitle.element.style.visibility="visible"; //mostrar titulo

							_2c.other.botones.contraer.element.title="Expandir contenido";
							_2c.other.botones.contraerd=true;
							rodeh.style.set(_2c.other.botones.contraer.element,rodeh.panel.styles.cms_panel_options.contraer.contraerd);
							_2c.elementos.html.style.display="none"; //content hidden
							_2c.elementos.html.style.visibility="hidden"; //content hidden
							if(rodeh.browser.isIE && !rodeh.browser.isOPERA)
							{
								_2c.elementos.content.style.height="20px";
								_2c.elementos.root.style.height="20px";
							}
							else
							{
								_2c.elementos.content.style.minHeight="15px";
								_2c.elementos.root.style.minHeight="15px";
							}
							if(_2c.sombra)
							{
								_2c.elementos.sombra.style.height=_2c.elementos.content.offsetHeight+"px";
								_2c.elementos.sombra.style.width=_2c.elementos.content.offsetWidth+"px";
							}
						}
					});
					context.appendChild(_2b);
					context.appendChild(_4b);
					_2.other.botones.contraer.element=_2b;
					_2.other.botones.contraerTitle={element:_4b};
				}
			}


			this.inContainer(nombre).appendChild(contenedor);

			if(other && other.savePosition)
			{

				if(!rodeh.tools.cookie.isset(other.useCookie+".x"))
				{
					contenedor.style.left=(((position.x)?position.x:0)-((position.center)?contenedor.clientWidth/2:0))+"px";
					rodeh.tools.cookie.set(other.useCookie+".x",parseInt(contenedor.style.left,10));
				}
				else
				{
					contenedor.style.left=rodeh.tools.cookie.get(other.useCookie+".x");
				}
				if(!rodeh.tools.cookie.isset(other.useCookie+".y"))
				{
					contenedor.style.top=(((position.y)?position.y:0)-((position.center)?contenedor.clientHeight/2:0))+"px";
					rodeh.tools.cookie.set(other.useCookie+".y",parseInt(contenedor.style.top,10));
				}
				else
				{
					contenedor.style.top=rodeh.tools.cookie.get(other.useCookie+".y");
				}

			}
			else
			{
				contenedor.style.left=(((position.x)?position.x:0)-((position.center)?contenedor.clientWidth/2:0))+"px";
				contenedor.style.top=(((position.y)?position.y:0)-((position.center)?contenedor.clientHeight/2:0))+"px";
			}


			if(other && other.style && other.style.panel) //html
			{rodeh.style.set(context,other.style.panel);}
			if(other && other.style && other.style.html) //html
			{rodeh.style.set(blB,other.style.html);}
			if(menu && rodeh.browser.isIE && !rodeh.browser.isOPERA && ieframe)
			{
				//elIframe.style.top=(elemTabPanel.offsetHeight-0)+"px"; //bug to fix
				elIframe.style.top=(elemTabPanel.offsetHeight-6)+"px"; //bug to fix
				elIframe.style.width="100%";
				elIframe.style.height=sizeH;
			}
			this.history[nombre].size={w:sizeW,h:sizeH};
			this.history[nombre].elementos.root		=contenedor;
			this.history[nombre].elementos.content		=context;
			this.history[nombre].elementos.submenu	=blA;
			this.history[nombre].elementos.htmlcontainer	=blC;
			this.history[nombre].elementos.html		=blB;
			this.history[nombre].elementos.lock		=(container)?lock:false;
			if(menu)
			{
				rodeh.tabPanel.open(false,menu.name+"|"+rodeh.tabPanel.tab[menu.name].current,false);
			}
			return nombre;
		},
		scroll:{
			add:function(ObjHistory)
			{
				var inst=rodeh.panel.history[ObjHistory];
				//inst.elementos.html.style.border="3px solid black";
				rodeh.style.set(inst.elementos.htmlcontainer,{
					margin:5,
					border:"1px solid red",
					//marginRight:5,
					position:"relative",
					height:inst.size.h-10,
					width:"100%",
					overflow:"hidden"
				});
				//alert(inst.size.h);
				rodeh.style.set(inst.elementos.html,{
					//position:"absolute",
					//border:"3px solid yellow",
					marginRight:20,
					padding:0,
					paddingRight:15,
					overflow:""
					//width:inst.size.w-150
					//height:800,
					//top:0,
					//left:0
				});
				//inst.elementos.htmlcontainer.id="wn200";
				//inst.elementos.html.id="lyr200";

				var nmScroll=inst.name,nmScrolltainer=inst.name+"html";
				var dvScroll=document.createElement("div");
				rodeh.style.set(dvScroll,{
					position:"absolute",
					overflow:"hidden",
					border:"1px solid red",
					right:0,
					top:10,
					height:inst.size.h-90,
					width:13,
					zIndex:44
				});
				dvScroll.id=nmScroll;
				edr=	"<div id='scrollbar200' style='position:relative;left:0;top:0;height:100%;width:100%'>"+
				"			<div style='position:absolute;top:0;left:0;z-index:3;'>"+
				"				<a href='#' onmouseover=\"dw_scrollObj.initScroll('"+nmScroll+"','up')\" onmouseout=\"dw_scrollObj.stopScroll('"+nmScroll+"')\" onmousedown=\"dw_scrollObj.doubleSpeed('"+nmScroll+"')\" onmouseup=\"dw_scrollObj.resetSpeed('"+nmScroll+"')\">"+
				"					<img src='/images/btn-up.gif' width='11' height='11' border=0 />"+
				"				</a>"+
				"			</div>"+
				"			<div id='track200' style='z-index:2;width:9px;position:absolute;height:100%;left:0;top:0;'>"+
				"				<div id='dragBar200' style='top:0;left:0;position:absolute;width:9px;background-color:black;'></div>"+
				"			</div>"+
				"			<div style='position:absolute;bottom:-3;left:0;z-index:3;'>"+
				"				<a href='#' onclick='return false' onmouseover=\"dw_scrollObj.initScroll('"+nmScroll+"','down')\" onmouseout=\"dw_scrollObj.stopScroll('"+nmScroll+"')\" onmousedown=\"dw_scrollObj.doubleSpeed('"+nmScroll+"')\" onmouseup=\"dw_scrollObj.resetSpeed('"+nmScroll+"')\">"+
				"					<img src='/images/btn-dn.gif' width=11 height=11 border=0 />"+
				"				</a>"+
				"			</div>"+
				"</div>";
				dvScroll.innerHTML=edr;
				inst.elementos.htmlcontainer.appendChild(dvScroll);

				var wndo = new dw_scrollObj(nmScroll,nmScrolltainer);
				wndo.setUpScrollbar("dragBar200", "track200", "v", 1, 1);
				dw_scrollObj.GeckoTableBugFix(nmScroll);
			},
			remove:function(ObjHistory)
			{
			}
		},
		element:function(ObjHistory)
		{
			return this.history[ObjHistory].elementos.html;
		},
		html:function(ObjHistory,html)
		{
			//alert(html)
			if(typeof html=="string")
			{
				var kj=document.createElement("span");
				kj.innerHTML=html;
				this.history[ObjHistory].elementos.html.appendChild(kj);
			}
			else if(typeof html=="object")
			{
				this.history[ObjHistory].elementos.html.appendChild(html);
			}
		},
		sombra:function(ObjHistory,opciones)
		{
			var restMHeight,opacity,color,contenedor;
			if(document.getElementById(ObjHistory+"root|sombra"))
			{
				contenedor = document.getElementById(ObjHistory+"root|sombra");
				restMHeight=(!this.history[ObjHistory].menu)?0:this.history[ObjHistory].elementos.menu.offsetHeight;
				//contenedor.style.width=this.history[ObjHistory].elementos.root.clientWidth+"px";
				contenedor.style.width=this.history[ObjHistory].elementos.content.offsetWidth+"px";
				contenedor.style.height=this.history[ObjHistory].elementos.root.offsetHeight-restMHeight+"px";
			}
			else
			{
				color=(opciones.sombra.color)?opciones.sombra.color:"#000000";
				opacity=(opciones.sombra.opacity)?opciones.sombra.opacity:100;
				contenedor = document.createElement("div");
				contenedor.style.width=this.history[ObjHistory].elementos.root.offsetWidth+"px";

				restMHeight=(!this.history[ObjHistory].menu)?2:this.history[ObjHistory].elementos.menu.offsetHeight-((rodeh.browser.isIE && !rodeh.browser.isOPERA)?6:0);
				//contenedor.style.height=this.history[ObjHistory].elementos.root.clientHeight-restMHeight+"px";
				//window.status=(this.history[ObjHistory].elementos.root.style.height)+":"+(this.history[ObjHistory].elementos.root.clientHeight-restMHeight);
				//alert(this.history[ObjHistory].size.h+"px");
				/*contenedor.style.height=this.history[ObjHistory].elementos.htmlcontainer.offsetHeight+"px";*/
				contenedor.style.height=this.history[ObjHistory].size.h+"px";
				//contenedor.style.height=this.history[ObjHistory].elementos.content.offsetHeight;
				contenedor.style.position="absolute";
				contenedor.style.backgroundColor=color;
				this.inContainer(ObjHistory).appendChild(contenedor);
				this.history[ObjHistory].sombra=true;
				this.history[ObjHistory].elementos.sombra=contenedor;
				contenedor.style.left=(parseInt(this.history[ObjHistory].elementos.root.style.left)+3)+"px";
				contenedor.style.top=(parseInt(this.history[ObjHistory].elementos.root.style.top)+3)+restMHeight+"px";
				contenedor.style.zIndex=(parseInt(this.history[ObjHistory].elementos.root.style.zIndex)-1);
				contenedor.id=ObjHistory+"root|sombra";
				rodeh.fx.opacity.set(contenedor,opacity);
				this.history[ObjHistory].sombra=true;
				this.history[ObjHistory].elementos.sombra=contenedor;
				if(this.history[ObjHistory].other && this.history[ObjHistory].other.fixed)
				{
					if(rodeh.browser.isIE && !rodeh.browser.isOPERA)
					{

					}
					else
					{
						rodeh.style.set(contenedor,{
							position:"fixed"
						});
					}
				}
				if(rodeh.browser.isIE && !rodeh.browser.isOPERA)
				{
					var elIframe=document.createElement("iframe");
					elIframe.style.position="absolute";
					elIframe.style.left="0px";
					elIframe.style.top="0px";
					//elIframe.style.marginTop=(menu)?"-5px":"0px";
					elIframe.style.width="100%";
					elIframe.style.backgroundColor="transparent";
					elIframe.style.border="0px solid #ff4400";
					elIframe.style.height="100%";
					elIframe.frameBorder="no";
					elIframe.style.zIndex=1;
					elIframe.scrolling="no";
					elIframe.src="about:blank";
					contenedor.appendChild(elIframe);
					rodeh.fx.opacity.set(elIframe,0);
				}
			}
			return;
		},
		remove:function(event)
		{
			if(typeof event=="object")
			{
				objeto=rodeh.event.get(event);
				id=rodeh.panel.getidFromMorph(objeto.id);
			}
			else if(typeof event=="string")
			{
				id=event;
			}
			document.getElementById(id+"root").style.visibility="hidden";
			//rodeh.getEvent(event).id=id+"|remove";

			if(document.getElementById(id+"root|sombra"))
			{
				document.getElementById(id+"root|sombra").style.visibility="hidden";
				rodeh.tools.element.remove(id+"root|sombra");
			}
			if(document.getElementById(id+"|container"))
			{
				//alert(document.getElementById(id+"|container"));
				document.getElementById(id+"|container").style.visibility="hidden";
				rodeh.tools.element.remove(id+"|container")
			}
			rodeh.tools.element.remove(id+"root");
		},
		exist:function(objeto)
		{
			return (document.getElementById(objeto+"root"))?true:false;
		},
		removeFromId:function(objeto)
		{
			id=objeto;
			document.getElementById(id+"root").style.visibility="hidden";

			if(document.getElementById(id+"root|sombra"))
			{
				document.getElementById(id+"root|sombra").style.visibility="hidden";
				rodeh.tools.element.remove(id+"root|sombra");
			}
			if(document.getElementById(id+"|container"))
			{
				document.getElementById(id+"|container").style.visibility="hidden";
				rodeh.tools.element.remove(id+"|container")
			}
			rodeh.tools.element.remove(id+"root");
		},
		createDrag:function(ObjHistory,styleObj,fullScreen,addEvent,onState)
		{
			dragd=document.createElement("div")
			//dragd.className="cms_panelDrag";
			rodeh.style.set(dragd,this.styles.cms_panel_drag);
			rodeh.panel.history[ObjHistory].drag={
				fullScreen	:fullScreen || false,
				addEvent	:addEvent || false,
				onState		:onState || false
			};
			dragd.id=ObjHistory+"|drag";
			if(addEvent){
				if(addEvent[0])
				{
					for(h=0;h<addEvent.length;h++)
					{
						rodeh.event.add(dragd,addEvent[h].on,addEvent[h].go);
					}
				}
				else
				{
					rodeh.event.add(dragd,addEvent.on,addEvent.go);
				}
			}
			rodeh.event.add(dragd,"mousedown",rodeh.panel.dragStart);
			this.history[ObjHistory].elementos.content.appendChild(dragd);
			if(styleObj){rodeh.style.set(dragd,styleObj);}

			if(fullScreen)
			{
				if(rodeh.browser.isOPERA)
				{
					dragd.style.height=this.history[ObjHistory].elementos.content.offsetHeight;
				}
				else
				{
					dragd.style.height="100%";
				}
			}

			/*resize begin*/
			if(this.history[ObjHistory].other.resize)
			{
				res=document.createElement("div");
				res.id=ObjHistory+"|resize";
				rodeh.style.set(res,{
					width:"15px",
					height:"15px",
					position:"absolute",
					//backgroundColor:"#006699",
					zIndex:4,
					right:"1px",
					//top:"100%",
					bottom:(rodeh.browser.isIE && !rodeh.browser.isOPERA)?"1px":"1px",
					cursor:"nw-resize",
					background	:"url("+rodeh.tools.baseURL()+"imagenes/resize.gif)",
					backgroundRepeat:"no-repeat",
					backgroundPosition:"100% 100%"
				}
				)
				this.history[ObjHistory].elementos.resize=res;
				this.history[ObjHistory].elementos.content.appendChild(res);
				rodeh.event.add(res,"mousedown",rodeh.panel.resize.start);
			}
			/*resize end*/
		},
		loader:{
			begin:function(ObjHistory)
			{
				if(document.getElementById(ObjHistory+"|loader"))
				{
					return
				}
				else
				{
					/*loader begin*/
					res=document.createElement("div");
					res.id=ObjHistory+"|loader";
					rodeh.style.set(res,{
						left:"0px",
						top:"0px",
						width:"100%",
						//height:((rodeh.browser.isOPERA)?rodeh.panel.history[ObjHistory].elementos.content.offsetHeight:"100%"),
						height:rodeh.panel.history[ObjHistory].elementos.content.offsetHeight,
						position:"absolute",
						background	:"url("+rodeh.tools.baseURL()+"imagenes/loading_basic.gif)",
						backgroundRepeat:"no-repeat",
						backgroundPosition:"50% 50%",
						//backgroundColor:"#006699",
						zIndex:4});
						/*//res.innerHTML="Loading...";
						listS=document.createElement("table");
						rodeh.style.set(listS,{
						width:"100%",
						height:"100%"
						});
						listTitles=listS.insertRow(-1);
						newCell=listTitles.insertCell(0);
						rodeh.style.set(newCell,{
						verticalAlign:"middle",
						padding:"5px",
						backgroundColor:"#006699"
						textAlign:"center"
						});
						ldr = new Image(32,32);
						ldr.src="http://waska.maborak.org/imagenes/loading_basic.gif";
						newCell.appendChild(ldr);
						newCell.innerHTML+="<br>Cargando Sistema: espere un momento...";
						res.appendChild(listS);
						*/
						rodeh.panel.history[ObjHistory].elementos.content.appendChild(res);

						/*loader end*/
				}
			},
			end:function(ObjHistory)
			{
				if(document.getElementById(ObjHistory+"|loader"))
				{
					rodeh.tools.element.remove(document.getElementById(ObjHistory+"|loader"));
				}
			}
		},
		getidFromMorph:function(id)
		{
			valores=id.split("|");
			newval=[];
			for(i=0;i<(valores.length-1);i++)
			{
				newval[i]=valores[i];
			}
			return newval.join("|");
		},
		clean:function(Obj)
		{
			//alert(Obj);
			rodeh.panel.history[Obj].elementos.html.innerHTML="";

			if(document.getElementById(Obj+"root|sombra"))
			{
				delete(rodeh.panel.history[Obj].elementos.sombra);
				delete(rodeh.panel.history[Obj].sombra);
				document.getElementById(Obj+"root|sombra").style.visibility="hidden";
				rodeh.tools.element.remove(Obj+"root|sombra");
			}
		},
		clearAll:function(ObjHistory)
		{
			//rodeh.panel.inContainer((ObjHistory && typeof objRef == "string")?ObjHistory:false).style.visibility="hidden";
			//rodeh.panel.inContainer((ObjHistory && typeof objRef == "string")?ObjHistory:false).style.display="none";
			rodeh.panel.inContainer((ObjHistory && typeof objRef == "string")?ObjHistory:false).innerHTML="";
			//rodeh.panel.inContainer((ObjHistory && typeof objRef == "string")?ObjHistory:false).style.visibility="hidden";
			//rodeh.panel.inContainer((ObjHistory && typeof objRef == "string")?ObjHistory:false).style.visibility="visible";
		},
		dragStart:function(event)
		{
			tid=rodeh.panel.getidFromMorph(rodeh.event.get(event).id);
			arrEls=[];
			arrEls[0]={
				onFinish:false,
				el		:rodeh.panel.history[tid].elementos.root
			};
			if(rodeh.panel.history[tid].sombra)
			{
				arrEls[1]={
					onFinish:false,
					el		:rodeh.panel.history[tid].elementos.sombra
				};
			}
			var cbP=false;
			if(rodeh.panel.history[tid].drag.onState)
			{
				var cb=rodeh.panel.history[tid].drag.onState;
				if(rodeh.panel.history[tid].other.savePosition){cb[cb.length]={_on:"finish",_in:"end",_function:rodeh.panel.savePosition,param:false};}
				cbP=cb;
			}
			rodeh.drag.ini(
			{
				objetos	:arrEls,
				event	:event,
				other	:{
					callback:cbP
				}
			});
		},
		resize:{
			start:function(event)
			{
				//alert(rodeh.panel.getidFromMorph(rodeh.event.get(event).id))
				Obj=rodeh.panel.getidFromMorph(rodeh.event.get(event).id);
				rodeh.panel.resize.tmp={
					cursorStartX	:rodeh.tools.position.cursor(event,"x"),
					cursorStartY	:rodeh.tools.position.cursor(event,"y"),
					Obj				:Obj,
					startWidth		:rodeh.panel.history[Obj].elementos.root.offsetWidth,
					startHeight		:((rodeh.browser.isIE && !rodeh.browser.isOPERA)?parseInt(rodeh.panel.history[Obj].elementos.root.style.height):rodeh.panel.history[Obj].elementos.root.offsetHeight),
					htmlstartHeight	:rodeh.panel.history[Obj].elementos.html.offsetHeight
				};

				if(rodeh.panel.history[Obj].other.resize && rodeh.panel.history[Obj].other.resize.elements2resize)
				{
					e2r=rodeh.panel.history[Obj].other.resize.elements2resize
					rodeh.panel.resize.tmp.a2rEl=[];
					for(v=0;v<e2r.length;v++)
					{
						if(rodeh.panel.history[Obj].other.resize.updateCookies)
						{
							__name=rodeh.panel.history[Obj].other.useCookie;
							ukh=rodeh.panel.cookie[__name];
							__subname=ukh.e2resize[v].name;
							__finalName=__name+"."+__subname+".";
						}
						rodeh.panel.resize.tmp.a2rEl[v]={
							h:((rodeh.panel.history[Obj].other.resize.updateCookies)?parseInt(rodeh.tools.cookie.get(__finalName+"height")):e2r[v].offsetHeight),
							//h:e2r[v].offsetHeight,
							w:((rodeh.panel.history[Obj].other.resize.updateCookies)?parseInt(rodeh.tools.cookie.get(__finalName+"width")):e2r[v].offsetWidth)
							//w:e2r[v].offsetWidth
						}
						//					window.status=((rodeh.panel.history[Obj].other.resize.updateCookies)?rodeh.tools.cookie.get(__finalName+"height"):e2r[v].offsetHeight)
					}
				}
				window.status=rodeh.panel.history[Obj].elementos.root.style.height+":root height "+rodeh.panel.resize.tmp.startHeight+": html height "+rodeh.panel.resize.tmp.htmlstartHeight;
				if (rodeh.browser.isIE) {
					document.attachEvent("onmousemove", rodeh.panel.resize.on);
					document.attachEvent("onmouseup",	rodeh.panel.resize.off);
					window.event.cancelBubble = true;
					window.event.returnValue = false;
				}
				else
				{
					document.addEventListener("mousemove", rodeh.panel.resize.on,   true);
					document.addEventListener("mouseup",   rodeh.panel.resize.off, true);
					event.preventDefault();
				}
			},
			on:function(event)
			{
				rodeh.panel.resize.tmp.cursorPageX=rodeh.tools.position.cursor(event,"x");
				rodeh.panel.resize.tmp.cursorPageY=rodeh.tools.position.cursor(event,"y");

				tid=rodeh.panel.resize.tmp.Obj;
				ob=rodeh.panel.history[tid].elementos.root;
				ob2=rodeh.panel.history[tid].elementos.content;
				diffX=rodeh.panel.resize.tmp.cursorPageX - rodeh.panel.resize.tmp.cursorStartX;
				diffY=rodeh.panel.resize.tmp.cursorPageY - rodeh.panel.resize.tmp.cursorStartY;
				newWidth=(rodeh.panel.resize.tmp.startWidth + diffX);
				newHeight=(rodeh.panel.resize.tmp.startHeight + diffY);
				window.status=newWidth+":"+ob.offsetWidth;
				if(newWidth>5)
				{
					if(rodeh.browser.isIE && !rodeh.browser.isOPERA)
					{
						ob.style.width = newWidth + "px";
						//ob.style.height= newHeight + "px";
						ob.style.height= ((newHeight<0)?0:newHeight)+ "px";
						//ob2.style.offsetHeight= newHeight;
					}
					else
					{
						ob.style.minWidth = newWidth + "px";
						//ob.style.height= newHeight + "px";
						ob.style.minHeight= newHeight + "px";
						ob2.style.minHeight= newHeight + "px";
					}

					/*resize Begin*/
					if(rodeh.panel.history[tid].other.resize && rodeh.panel.history[Obj].other.resize.elements2resize)
					{
						e2r=rodeh.panel.history[tid].other.resize.elements2resize
						for(v=0;v<e2r.length;v++)
						{
							//window.status=rodeh.panel.resize.tmp.a2rEl[v].h+diffY;
							minWidth=parseInt((rodeh.panel.cookie[__name].e2resize[v].min && rodeh.panel.cookie[__name].e2resize[v].min.w)?rodeh.panel.cookie[__name].e2resize[v].min.w:0);
							maxWidth=parseInt((rodeh.panel.cookie[__name].e2resize[v].max && rodeh.panel.cookie[__name].e2resize[v].max.w)?rodeh.panel.cookie[__name].e2resize[v].max.w:0);

							minHeight=parseInt((rodeh.panel.cookie[__name].e2resize[v].min && rodeh.panel.cookie[__name].e2resize[v].min.h)?rodeh.panel.cookie[__name].e2resize[v].min.h:0);
							maxHeight=parseInt((rodeh.panel.cookie[__name].e2resize[v].max && rodeh.panel.cookie[__name].e2resize[v].max.h)?rodeh.panel.cookie[__name].e2resize[v].max.h:0);
							//minHeight=(rodeh.panel.cookie[__name].e2resize[v].min && rodeh.panel.cookie[__name].e2resize[v].min.h)?rodeh.panel.cookie[__name].e2resize[v].min.h:10;
							//e2r[v].style.height=rodeh.panel.resize.tmp.a2rEl[v].h+diffY;
							if(parseInt(rodeh.panel.resize.tmp.a2rEl[v].w+diffX) < minWidth )
							{
								e2r[v].style.width=minWidth;
							}
							else if(parseInt(rodeh.panel.resize.tmp.a2rEl[v].w+diffX) > maxWidth && maxWidth!=0)
							{
								e2r[v].style.width=maxWidth;
							}
							else
							{
								if(rodeh.panel.resize.tmp.a2rEl[v].w < minHeight && rodeh.panel.resize.tmp.a2rEl[v].w<=0)
								{
									nWidth=0;
								}
								else
								{
									nWidth=rodeh.panel.resize.tmp.a2rEl[v].w;
								}
								e2r[v].style.width=parseInt(nWidth+diffX);
							}

							if(parseInt(rodeh.panel.resize.tmp.a2rEl[v].h+diffY) < minHeight )
							{
								//window.status="5:"+parseInt(rodeh.panel.resize.tmp.a2rEl[v].h+diffY)+":"+minHeight
								e2r[v].style.height=minHeight;
							}
							else if(parseInt(rodeh.panel.resize.tmp.a2rEl[v].h+diffY) > maxHeight && maxHeight!=0)
							{
								//window.status="6"
								e2r[v].style.height=maxHeight;
							}
							else
							{
								//window.status="7"
								if(rodeh.panel.resize.tmp.a2rEl[v].h < minHeight && rodeh.panel.resize.tmp.a2rEl[v].h<=0)
								{
									nHeight=0;
								}
								else
								{
									nHeight=rodeh.panel.resize.tmp.a2rEl[v].h;
								}
								//window.status+=":"+parseInt(nHeight+diffY);
								e2r[v].style.height=parseInt(nHeight+diffY);
							}

							if(rodeh.panel.history[tid].other.resize.updateCookies)
							{
								__name=rodeh.panel.history[tid].other.useCookie;
								ukh=rodeh.panel.cookie[__name];
								__subname=ukh.e2resize[v].name;
								__finalName=__name+"."+__subname+".";
								rodeh.tools.cookie.set(__finalName+"height",e2r[v].offsetHeight);
								rodeh.tools.cookie.set(__finalName+"width",e2r[v].offsetWidth);
							}
						}
					}
					/*resize End*/
					/*if(rodeh.panel.history[tid].other.saveSize)
					{
					njm=rodeh.panel.history[tid].other.useCookie;
					rodeh.tools.cookie.set(njm+".w",newWidth);
					rodeh.tools.cookie.set(njm+".h",newHeight);
					}*/
					rodeh.panel.history[tid].size.h=newHeight;
					rodeh.panel.history[tid].size.w=newWidth;
					if(rodeh.panel.history[tid].sombra)
					{
						rodeh.panel.history[tid].elementos.sombra.style.height=ob2.offsetHeight+"px";
						rodeh.panel.history[tid].elementos.sombra.style.width=ob2.offsetWidth+"px";
					}
				}

				//window.status="root Beg.height "+rodeh.panel.resize.tmp.startHeight+": html Beg.height "+rodeh.panel.resize.tmp.htmlstartHeight;
				//window.status+=" | root height "+newHeight+": root height "+ob.offsetHeight+":"+ob.style.height;
				if (rodeh.browser.isIE) {
					window.event.cancelBubble = true;
					window.event.returnValue = false;
				}
				else
				{
					event.preventDefault();
				}
			},
			off:function(event)
			{
				elOb=rodeh.panel.history[rodeh.panel.resize.tmp.Obj];
				elOb.startWidth=elOb.elementos.root.offsetWidth;
				nHg=parseInt(elOb.elementos.root.style.height);
				elOb.startHeight=((rodeh.browser.isIE && !rodeh.browser.isOPERA && nHg>0)?nHg:elOb.elementos.root.offsetHeight);
				elOb.htmlstartHeight=elOb.elementos.html.offsetHeight;

				//window.status+=elOb.startHeight+":"+elOb.htmlstartHeight;
				if(rodeh.browser.isIE && !rodeh.browser.isOPERA)
				{
					elOb.elementos.root.style.width = elOb.startWidth + "px";
					elOb.elementos.root.style.height = elOb.startHeight + "px";
				}
				else
				{
					elOb.elementos.root.style.minWidth = elOb.startWidth + "px";
					elOb.elementos.root.style.minHeight= elOb.startHeight + "px";
				}
				if(rodeh.panel.history[rodeh.panel.resize.tmp.Obj].other.saveSize)
				{
					njm=rodeh.panel.history[rodeh.panel.resize.tmp.Obj].other.useCookie;
					rodeh.tools.cookie.set(njm+".w",elOb.startWidth);
					rodeh.tools.cookie.set(njm+".h",elOb.startHeight);
				}

				if (rodeh.browser.isIE) {
					document.detachEvent("onmousemove", rodeh.panel.resize.on);
					document.detachEvent("onmouseup",	rodeh.panel.resize.off);
				}
				if (rodeh.browser.isNS) {
					document.removeEventListener("mousemove", rodeh.panel.resize.on,	true);
					document.removeEventListener("mouseup",   rodeh.panel.resize.off, true);
				}
			}
		},
		cookie:{
			database:[],
			set:function(param)
			{
				rodeh.panel.cookie[param.name]=param;
				for(o in param.vars)
				{
					nm=param.name+"."+o;
					if(rodeh.tools.cookie.isset(nm))
					{
						if(param.replace)
						{
							rodeh.tools.cookie.set(nm,param.vars[o]);
						}
					}
					else
					{
						rodeh.tools.cookie.set(nm,param.vars[o]);
					}
				}
				if(param.e2resize)
				{
					for(p=0;p<param.e2resize.length;p++)
					{
						mm=param.e2resize[p];
						for(k in mm.vars)
						{
							nm=param.name+"."+mm.name+"."+k;
							//alert(nm)
							if(rodeh.tools.cookie.isset(nm))
							{
								if(param.replace)
								{
									rodeh.tools.cookie.set(nm,mm.vars[k]);
								}
							}
							else
							{
								rodeh.tools.cookie.set(nm,mm.vars[k]);
							}
						}
						//bug begin
						mm.el.style.width=rodeh.tools.cookie.get(param.name+"."+mm.name+".width");
						mm.el.style.height=rodeh.tools.cookie.get(param.name+"."+mm.name+".height");
						//bug end
					}
				}
			},
			read:function(param)
			{
				return rodeh.tools.cookie.get(param.from+"."+param.param);
				//alert(rodeh.tools.cookie.get(param.from+"."+param.param))
			}
		},
		savePosition:function(param)
		{
			Obj=rodeh.panel.getidFromMorph(rodeh.event.get(param.paramDrag.event).id);
			tid=rodeh.panel.history[Obj];
			rodeh.tools.cookie.set(tid.other.useCookie+".x",parseInt(tid.elementos.root.style.left));
			rodeh.tools.cookie.set(tid.other.useCookie+".y",parseInt(tid.elementos.root.style.top));
			//		alert(parseInt(tid.elementos.root.style.left)+":"+tid.other.useCookie);
		},
		alert:function(texto,redir)
		{
			lleft=((document.body.clientWidth/2)+document.body.scrollLeft);
			ltop=((document.body.clientHeight/2)+document.body.scrollTop);
			$=rodeh.panel.create({w:300,h:50},{x:lleft,y:ltop-10,center:true},"alert",80,false,{
				botones:{
					cerrar:true
				}
			});
			rodeh.panel.element($).appendChild(document.createElement("br"));
			rodeh.panel.html($,texto);
			rodeh.panel.element($).appendChild(document.createElement("br"))
			rodeh.panel.element($).appendChild(document.createElement("br"))
			rodeh.panel.sombra($,{sombra:{color:"#000000",opacity:30}});
			rodeh.panel.createDrag($);
		}
	},
	browser:new function(){
		var ua, s, i;
		ua = navigator.userAgent;
		this.isIE    = false;
		this.isNS    = false;
		this.isOPERA = false;
		this.version = null;

		s = "MSIE";
		if ((i = ua.indexOf(s)) >= 0) {
			this.isIE = true;
			this.version = parseFloat(ua.substr(i + s.length));
		}

		s = "Netscape6/";
		if ((i = ua.indexOf(s)) >= 0) {
			this.isNS = true;
			this.version = parseFloat(ua.substr(i + s.length));
		}

		s = "Safari";
		if ((i = ua.indexOf(s)) >= 0) {
			this.isSAFARI = true;
			this.version = parseFloat(ua.substr(i + s.length));
		}

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

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

		s = "Opera";
		i=ua.indexOf(s);
		if (i>=0)
		{
			this.isOPERA=true;
			this.version = parseFloat(ua.substr(i + s.length));
		}
		return;
	},
	fx:{
		opacity:{
			set:function(obj,opacity)
			{
				if(rodeh.browser.isIE){
					obj.style.filter="alpha(opacity="+opacity+")";
					obj.style.opacity=(opacity/100);
				}else{
					if(rodeh.browser.isNS){
						obj.style.opacity=(opacity/100);
					}else{
						if(rodeh.browser.isSAFARI){
							obj.style.opacity=(opacity/100);
							obj.style.KhtmlOpacity=(opacity/100);
						}else
						{
							obj.style.opacity=(opacity/100);
						}
					}
				}
				return;
			},
			get:function(obj)
			{
				if(rodeh.browser.isIE){
					aalp=obj.style.filter.split("=");
					aalq=aalp[1].split(")");
					alpha= parseInt(aalq[0]);
				}else{
					if(rodeh.browser.isNS){
						alpha=(obj.style.opacity*100);
						//alert(alpha)
					}else{
						alpha=(obj.style.opacity*100);
					}
				}
				return (isNaN(alpha) || alpha<=0)?100:alpha;
			}
		}
	},
	event:{
		expand:[],
		add:function(objeto,evento,funcion,recursivo,expand){
			expand=expand || false;
			if(expand){this.expand[expand.name]=expand.Obj;}
			if (rodeh.browser.isIE && !rodeh.browser.isOPERA){
				objeto.attachEvent("on"+evento,funcion);
			}
			else
			{
				objeto.addEventListener(evento, funcion,recursivo || false);
			}
			return;
		},
		remove:function(obj, evType, fn, recursivo){
			if (obj.removeEventListener){
				obj.removeEventListener(evType, fn,(!recursivo)?false:recursivo);
				return true;
			} else if (obj.detachEvent){
				var r = obj.detachEvent("on"+evType, fn);
				return r;
			} else {
				alert("Handler could not be removed");
			}
		},
		get:function(event)
		{
			if (rodeh.browser.isIE)
			{
				evid = window.event.srcElement;
			}
			else if (rodeh.browser.isNS)
			{
				evid = event.target;
			}
			else
			{
				evid = event.target;
			}
			return evid;
		},
		_null:function(event)
		{
			if (event.preventDefault) {
				event.preventDefault( );
			}
			event.returnValue = false;
		}
	},
	style:{
		set:function(elemento,values)
		{
			for (var i in values) {
				if(values.propertyIsEnumerable(i))
				{
					if(typeof values[i]=="function")
					{
						//eval("elemento.style."+i+"=\""+values[i]()+"\";");
						//eval("elemento.style."+i+"='"+values[i]()+"';");
						elemento.style[i]=values[i]();
					}
					else
					{
						//eval("elemento.style."+i+"="+values[i]+";");
						elemento.style[i]=values[i];
					}
				}
			}
		}
	},
	xml:{
		nodeValue:function(nodeObj)
		{
			return (!nodeObj.firstChild)?"":nodeObj.firstChild.nodeValue;
		}
	},
	hacks:{
		elem:
		{
			option:{
				text:function(optObj)
				{
					text=optObj.options[optObj.selectedIndex].text;
					return text;
				}
			}
		}
	},
	tools:{
		jscript:function(param)
		{
			this.options	=param || {};
			this.engine=function()
			{
				//alert(3)
				this.path = this.checkPath();
				if(!this.path)
				{
					if(this.options.file){this.path = this.options.file;}else{return false;}
				}
				var script=document.createElement("script");
				script.type="text/javascript";
				script.src=this.path;
				rodeh.tools.element.head().appendChild(script);
				this.onLoad();
				//alert(234234)
			}
			this.onLoad=function()
			{
				//if(!this.local){return false;}
				var oThis=this;
				var probeVariable=(this.options.probeLoaded)?this.options.probeLoaded:this.options.name;
				//alert(234234234)
				//alert(probeVariable);
				eval("var isLd=typeof "+probeVariable);
				//alert(isLd);
				if(isLd!="undefined")
				{

					if(this.options.onLoad)
					{
						this.options.onLoad._function(this.options.onLoad.arguments || false);
					}
				}
				else
				{
					setTimeout(function(){oThis.onLoad();},500);
				}
			}
			this.checkPath=function()
			{
				var path;
				//alert(rodeh.tools.object.toString(this.options))
				if(this.options.path=="root")
				{
					var allPath=rodeh.tools.baseURL().split("/");
					allPath.pop();
					allPath.pop();
					allPath.pop();
					path = allPath.join("/")+"/"+this.options.name+"/core/"+this.options.name+".js";
					this.local=true;
				}
				else if(this.options.path=="child")
				{
					path=rodeh.tools.baseURL()+"jscripts/"+this.options.name+"/core/"+this.options.name+".js";;
					this.local=true;
				}
				else
				{
					path=false;
					this.local=false;
				}
				return path;
			}
		},
		ejectFunction:function(operation,addArg)
		{
			if(operation._function && typeof operation._function=="function")
			{
				if(addArg)
				{
					if(operation.arguments)
					{
						operation._function(operation.arguments,addArg);
					}
					else
					{
						operation._function(addArg);
					}
				}
				else
				{
					if(operation.arguments)
					{
						operation._function(operation.arguments);
					}
					else
					{
						operation._function();
					}
				}
			}
		},
		loader:function(){
			this.element=false;
			this.top="50%";
			this.left="50%";
			this.text="Loading...";
			this.textPosition

			this.engine=function()
			{
				/*loader begin*/
				res=document.createElement("div");
				res.id=ObjHistory+"|loader";
				rodeh.style.set(res,{
					left:"0px",
					top:"0px",
					width:"100%",
					height:((rodeh.browser.isOPERA)?rodeh.panel.history[ObjHistory].elementos.content.offsetHeight:"100%"),
					position:"absolute",
					background	:"url("+rodeh.tools.baseURL()+"imagenes/loading.gif)",
					backgroundRepeat:"no-repeat",
					backgroundPosition:"50% 50%",
					//backgroundColor:"#006699",
					zIndex:4});
					//res.innerHTML="Loading...";
					rodeh.panel.history[ObjHistory].elementos.content.appendChild(res);
					/*loader end*/
			}
		},
		baseURL:function()
		{
			//window.status="123123"
			return (!rodeh.info.base)?rodeh.tools.getbaseURL("rodeh.js"):rodeh.info.base;
		},
		getbaseURL:function(fileJs)
		{
			var baseURL,elements = document.getElementsByTagName('script');
			var nmFind = fileJs || "rodeh.js";
			for (var i=0; i<elements.length; i++) {
				if (elements[i].src && (elements[i].src.indexOf(nmFind) != -1))
				{
					var Isrc = elements[i].src;
					Isrc = Isrc.substring(0, Isrc.lastIndexOf('/'));
					baseURL = Isrc+"/";
					break;
				}
			}
			//alert(baseURL);
			/*a=document.location.href;
			if (a.indexOf('?') != -1)
			a = a.substring(0, a.indexOf('?'));
			b = a;
			a = a.substring(0, a.lastIndexOf('/'));*/
			return baseURL;
			//alert(a)
		},
		position:{
			absolute:function(elemObj,position)
			{
				offset=0;
				if(position=="x")
				{
					offset=elemObj.offsetLeft;
					while (elemObj.offsetParent) {
						elemObj = elemObj.offsetParent;
						offset += elemObj.offsetLeft;
					}
				}
				else
				{
					offset=elemObj.offsetTop;
					while (elemObj.offsetParent) {
						elemObj = elemObj.offsetParent;
						offset += elemObj.offsetTop;
					}
				}
				return offset;
			},
			cursor:function(event,pos)
			{
				if (rodeh.browser.isIE) {
					x = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
					y = window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop;
				}
				else{
					x = event.clientX + window.scrollX;
					y = event.clientY + window.scrollY;
				}
				if(pos=="x")
				{
					out=x;
				}
				else
				{
					out=y;
				}
				return out;
			}
		},
		object:{
			length:function(obj)
			{
				ii=1;
				for (var i in obj) {
					ii+=1;
				}
				return ii;
			},
			getById:function()
			{
				ii=0;
				dev=false
				for (var i in obj) {
					if(ii==id)
					{
						dev=obj[i];
					}
					ii+=1;
				}
				return dev;
			},
			toString:function(obj)
			{
				var val, output = "";
				if (obj)
				{
					output += "{";
					for (var i in obj) {
						val = obj[i];
						//alert(typeof val)
						switch (typeof val) {
							case ("object"):
							if(typeof val.childNodes!="undefined")
							{
								output += i + ":[DOM.Object],\n";
							}
							else if (val[0]) {
								output += i + ":" + rodeh.tools.array.toString(val) + ",\n";
							} else {
								output += i + ": " + rodeh.tools.object.toString(val) + ",\n\n";
							}
							break;
							case ("string"):
							output += i + ":'" + val + "',\n";
							break;
							case ("function"):
							output += i + ":FUNCTION,\n";
							break;
							default:
							output += i + ":" + val + ",\n";
						}
					}
					output = output.substring(0, output.length-1) + "}";
				}
				return output;
			}
		},
		array:{
			toString:function(array)
			{
				var output = "";
				if (array) {
					output += "[\n";
					for (var i in array) {
						val = array[i];
						//alert(typeof val)
						switch (typeof val) {
							case ("object"):
							if(val.childNodes)
							{
								output += i + ":[DOM.Object],\n";
							}
							else if (val[0])
							{
								output += rodeh.tools.array.toString(val) + ",\n";
							}
							else
							{
								output += rodeh.tools.object.toString(val) + ",\n";
							}
							break;
							case ("string"):
							output += "'" + escape(val) + "',\n";
							break;
							default:
							output += val + ",\n";
						}
					}
					output = output.substring(0, output.length-1) + "]\n";
				}
				return output;
			},
			isArray:function(array)
			{
				return (typeof array=="object" && array[0])?true:false;
			},
			keys:function(array)
			{
				var keys=[];
				for (var i in array) {
					if(i=="toJSONString" && typeof array[i]=="function")
					{
					}
					else
					{
						keys[keys.length]=i;
					}
				}
				return keys;
			}
		},
		string:{
			toObject:function(string)
			{
				eval("var result = " + string);
				return result;
			},
			toArray:function(string)
			{
				eval("var result = " + string);
				return result;
			},
			htmlspecialchars:function(text)
			{
				find=["&","<",">",'"']
				replace=["&amp;","&lt;","&gt;","&quot;"]
				result=text;
				for(i=0;i<find.length;i++)
				{
					re = new RegExp(find[i],"g");
					result = result.replace(re,replace[i]);
				}
				return result;
			}
		},
		element:{
			head:function()
			{
				a=document.getElementsByTagName("HTML");
				b=a[0].getElementsByTagName("HEAD");
				return b[0];
			},
			parent:function(elemID)
			{
				elem = (typeof elemID == "string")?document.getElementById(elemID):elemID;
				if(elem.parentNode)
				{
					return elem.parentNode;
				}
				else if(elem.parentElement)
				{
					return elem.parentElement;
				}
			},
			remove:function(elemID) {
				elem = (typeof elemID == "string")?document.getElementById(elemID):elemID;
				if(elem.parentNode)
				{
					elem.parentNode.removeChild(elem);
				}
				else if(elem.parentElement)
				{
					elem.parentElement.removeChild(elem);
				}
			},
			option:{
				loader:{
					begin:function(target,mensaje,disabled)
					{
						rodeh.tools.element.option.loader.end(target);
						option=document.createElement("option")
						option.text=mensaje;
						option.value=0;
						target.appendChild(option);
						target.disabled=(disabled==true)?true:false;
					},
					end:function (target)
					{
						rodeh.tools.element.option.remove(target);
						target.disabled=false;
					}
				},
				remove:function(target)
				{
					elemento=target;	//hack
					optgrp=elemento.getElementsByTagName("optgroup");
					tr=option.length
					//alert("into remove: "+optgrp.length);
					for(k=0;k<optgrp.length;k++)
					{
						elemento.removeChild(optgrp[k]);
					}
					option=elemento.getElementsByTagName("option");
					//alert("into remove: "+option.length);
					for(ij=0;ij < option.length;ij++)
					{
						//alert("elimino: "+ij)
						//alert(option.parentElement)
						elemento.removeChild(option[ij]);
					}
				}
			}
		},
		lock:function(options)
		{
			fdrag=(options.drag==false)?false:true;
			fsombra=(!options.sombra)?true:((options.sombra==false)?false:true);
			lleft=((document.body.clientWidth/2)+document.body.scrollLeft);
			ltop=((document.body.clientHeight/2)+document.body.scrollTop);
			tmpgc=rodeh.panel.create({w:300,h:40},{x:lleft,y:ltop,center:true},"tmploadsites",4,false,
			{
				style:{
					panel:{padding:"5px"}
				}//,
				//ieframe:false
			});
			if(options.operations)
			{

				//rodeh.tools.ejectFunction({funcion:options.operations,arguments:tmpgc})
			}
			rodeh.panel.html(tmpgc,options.text || "Loading...");
			rodeh.panel.element(tmpgc).id=tmpgc;
			if(fdrag==true)
			{
				rodeh.panel.createDrag(tmpgc);
			}
			if(fsombra==true)
			{
				rodeh.panel.sombra(tmpgc,{sombra:{color:"#000000",opacity:30}});
			}
			return tmpgc;
		},
		cookie:{

			getExpDate:function(days, hours, minutes) {
				var expDate = new Date( );
				if (typeof days == "number" && typeof hours == "number" &&
				typeof hours == "number") {
					expDate.setDate(expDate.getDate( ) + parseInt(days));
					expDate.setHours(expDate.getHours( ) + parseInt(hours));
					expDate.setMinutes(expDate.getMinutes( ) + parseInt(minutes));
					return expDate.toGMTString( );
				}
			},
			getCookieVal:function(offset) {
				var endstr = document.cookie.indexOf (";", offset);
				if (endstr == -1) {
					endstr = document.cookie.length;
				}
				return unescape(document.cookie.substring(offset, endstr));
			},
			get:function(name) {
				var arg = name + "=";
				var alen = arg.length;
				var clen = document.cookie.length;
				var i = 0;
				while (i < clen) {
					var j = i + alen;
					if (document.cookie.substring(i, j) == arg) {
						return rodeh.tools.cookie.getCookieVal(j);
					}
					i = document.cookie.indexOf(" ", i) + 1;
					if (i == 0) break;
				}
				return "";
			},
			isset:function(name)
			{
				return (rodeh.tools.cookie.get(name)=="")?false:true;
			},
			set:function(name, value, expires, path, domain, secure) {
				document.cookie = name + "=" + escape (value) +
				((expires) ? "; expires=" + expires : "") +
				((path) ? "; path=" + path : "") +
				((domain) ? "; domain=" + domain : "") +
				((secure) ? "; secure" : "");
			},
			deleteCookie:function(name,path,domain) {
				if (rodeh.tools.cookie.getCookie(name)) {
					document.cookie = name + "=" +
					((path) ? "; path=" + path : "") +
					((domain) ? "; domain=" + domain : "") +
					"; expires=Thu, 01-Jan-70 00:00:01 GMT";
				}
			}
		}
	},
	drag:{
		callback:function(param)
		{
			//alert(typeof param)
			if(rodeh.tools.array.isArray(param.fn)){
				for(i=0;i<param.fn.length;i++)
				{
					_2=param.fn[i].param;
					if(!_2)
					{
						_2={};
						_2.paramDrag=rodeh.drag.tmp;
					}
					else
					{
						_2.paramDrag=rodeh.drag.tmp;
					}
					if(param.fn[i]._on==param._on && param.fn[i]._in==param._in)
					{
						param.fn[i]._function(_2);
					}
				}
			}
			else
			{
				_2=param.fn.param;
				if(!_2){_2={};_2.paramDrag=rodeh.drag.tmp;}else{_2.paramDrag=rodeh.drag.tmp;}
				if(param.fn._on==param._on && param.fn._in==param._in)
				{
					param.fn._function(_2);
				}
			}
		},
		ini:function(Obj)
		{
			rodeh.drag.tmp={
				objetos		:Obj.objetos,
				event		:Obj.event,
				cursorStartX	:rodeh.tools.position.cursor(Obj.event,"x"),
				cursorStartY	:rodeh.tools.position.cursor(Obj.event,"y"),
				other		:Obj.other
			};
			if(rodeh.drag.tmp.other && rodeh.drag.tmp.other.callback)
			{rodeh.drag.callback({fn:rodeh.drag.tmp.other.callback,_on:"ini",_in:"begin"});}

			for(i=0;i<rodeh.drag.tmp.objetos.length;i++)
			{
				ssleft	=parseInt(rodeh.drag.tmp.objetos[i].el.style.left, 10);
				sstop	=parseInt(rodeh.drag.tmp.objetos[i].el.style.top, 10);
				rodeh.drag.tmp.objetos[i].startLeft	=isNaN(ssleft)?0:ssleft;
				rodeh.drag.tmp.objetos[i].startTop	=isNaN(sstop)?0:sstop;
			}
			if(rodeh.drag.tmp.other && rodeh.drag.tmp.other.callback)
			{rodeh.drag.callback({fn:rodeh.drag.tmp.other.callback,_on:"ini",_in:"end"});}
			if (rodeh.browser.isIE) {
				document.attachEvent("onmousemove", rodeh.drag.go);
				document.attachEvent("onmouseup",	rodeh.drag.stop);
				window.event.cancelBubble = true;
				window.event.returnValue = false;
			}
			else{
				document.addEventListener("mousemove", rodeh.drag.go,   true);
				document.addEventListener("mouseup",   rodeh.drag.stop, true);
				Obj.event.preventDefault();
			}
		},
		go:function(event)
		{
			if(rodeh.drag.tmp.other && rodeh.drag.tmp.other.callback)
			{rodeh.drag.callback({fn:rodeh.drag.tmp.other.callback,_on:"go",_in:"begin"});}
			rodeh.drag.tmp.cursorPageX=rodeh.tools.position.cursor(event,"x");
			rodeh.drag.tmp.cursorPageY=rodeh.tools.position.cursor(event,"y");
			var min=(rodeh.drag.tmp.other && rodeh.drag.tmp.other.limit && rodeh.drag.tmp.other.limit.min);
			var max=(rodeh.drag.tmp.other && rodeh.drag.tmp.other.limit && rodeh.drag.tmp.other.limit.max);
			for(ii=0;ii<rodeh.drag.tmp.objetos.length;ii++)
			{
				var _x=parseInt(rodeh.drag.tmp.objetos[ii].startLeft + rodeh.drag.tmp.cursorPageX - rodeh.drag.tmp.cursorStartX);
				var _y=parseInt(rodeh.drag.tmp.objetos[ii].startTop  + rodeh.drag.tmp.cursorPageY - rodeh.drag.tmp.cursorStartY);
				if(rodeh.drag.tmp.other && rodeh.drag.tmp.other.drag)
				{
					if(rodeh.drag.tmp.other.drag=="x")
					{
						if(min && _x>rodeh.drag.tmp.other.limit.min.x)
						{
							if(max && (parseInt(_x+rodeh.drag.tmp.objetos[ii].el.offsetWidth)<rodeh.drag.tmp.other.limit.max.x))
							{
								rodeh.drag.tmp.objetos[ii].el.style.left  = _x;
							}
						}
					}
					else
					{
						if(min && _y>rodeh.drag.tmp.other.limit.min.y)
						{
							if(max && (parseInt(_y+rodeh.drag.tmp.objetos[ii].el.offsetHeight)<rodeh.drag.tmp.other.limit.max.y))
							{
								rodeh.drag.tmp.objetos[ii].el.style.top  = _y;
							}
						}
					}
				}
				else
				{
					if(min && rodeh.drag.tmp.other.limit.min.y && _y>rodeh.drag.tmp.other.limit.min.y)
					{
						if(max && rodeh.drag.tmp.other.limit.max.y && (parseInt(_y+rodeh.drag.tmp.objetos[ii].el.offsetHeight)<rodeh.drag.tmp.other.limit.max.y))
						{
							rodeh.drag.tmp.objetos[ii].el.style.top  = _y;
						}
					}
					else
					{
						rodeh.drag.tmp.objetos[ii].el.style.top  = _y;
					}
					if(min && rodeh.drag.tmp.other.limit.min.x && _x>rodeh.drag.tmp.other.limit.min.x)
					{
						if(max && rodeh.drag.tmp.other.limit.max.x && (parseInt(_x+rodeh.drag.tmp.objetos[ii].el.offsetWidth)<rodeh.drag.tmp.other.limit.max.x))
						{
							rodeh.drag.tmp.objetos[ii].el.style.left  = _x;
						}
					}
					else
					{
						rodeh.drag.tmp.objetos[ii].el.style.left  = _x;
					}
				}
			}
			if(rodeh.drag.tmp.other && rodeh.drag.tmp.other.callback)
			{rodeh.drag.callback({fn:rodeh.drag.tmp.other.callback,_on:"go",_in:"end"});}
			if (rodeh.browser.isIE) {
				window.event.cancelBubble = true;
				window.event.returnValue = false;
			}
			if (rodeh.browser.isNS)
			{
				event.preventDefault();
			}
			//		window.status="jh";
		},
		stop:function(event)
		{
			if (rodeh.browser.isIE) {
				document.detachEvent("onmousemove", rodeh.drag.go);
				document.detachEvent("onmouseup",	rodeh.drag.stop);
			}
			if (rodeh.browser.isNS) {
				document.removeEventListener("mousemove", rodeh.drag.go,	true);
				document.removeEventListener("mouseup",   rodeh.drag.stop, true);
			}
			if(rodeh.drag.tmp.other && rodeh.drag.tmp.other.callback)
			{rodeh.drag.callback({fn:rodeh.drag.tmp.other.callback,_on:"finish",_in:"begin"});}
			//more functions
			if(rodeh.drag.tmp.other && rodeh.drag.tmp.other.callback)
			{rodeh.drag.callback({fn:rodeh.drag.tmp.other.callback,_on:"finish",_in:"end"});}
			//	window.status="stop";
		}
	},
	tabPanel:{
		css:
		{
			over:function(event)
			{
				fIdent	=rodeh.event.get(event).name.split("|");
				fName	=fIdent[0];
				fTab	=fIdent[1];
				rodeh.style.set(rodeh.tabPanel.tab[fName].list[fTab].element,rodeh.panel.styles.tab.el.a_over);
			},
			out:function(event)
			{
				fIdent	=rodeh.event.get(event).name.split("|");
				fName	=fIdent[0];
				fTab	=fIdent[1];
				rodeh.style.set(rodeh.tabPanel.tab[fName].list[fTab].element,rodeh.panel.styles.tab.el.a_out);
			}
		},
		tab:[],
		crear:function(menu,Obj)
		{
			rodeh.tabPanel.tab[menu.name]=menu;
			rodeh.tabPanel.tab[menu.name].Obj=Obj;
			tpDiv=document.createElement("div");
			rodeh.style.set(tpDiv,rodeh.panel.styles.tab.container);
			tpDiv.id="css_panel_menu";
			align=menu.align || "left";
			tpDiv.style.textAlign=align;
			tpUl=document.createElement("ul");
			rodeh.style.set(tpUl,rodeh.panel.styles.tab.el.ul);
			for(i=0;i<menu.list.length;i++)
			{
				tpLi=document.createElement("li");
				rodeh.style.set(tpLi,rodeh.panel.styles.tab.el.li);
				tpHref=document.createElement("a");
				rodeh.style.set(tpHref,rodeh.panel.styles.tab.el.a);
				tpHref.innerHTML=menu.list[i].value;
				if(menu.list[i].selected && menu.list[i].selected==true)
				{
					//rodeh.style.set(tpHref,rodeh.panel.styles.tab.el.a_current);
					this.tab[menu.name].current=i;
				}
				else
				{
					//tpHref.href	="#";
					tpHref.id	=menu.name+"|"+i;
					tpHref.name	=menu.name+"|"+i;
					rodeh.event.add(tpHref,"mouseover",rodeh.tabPanel.css.over);
					rodeh.event.add(tpHref,"mouseout",rodeh.tabPanel.css.out);
					rodeh.event.add(tpHref,"mousedown",rodeh.tabPanel.open);
				}
				tpLi.appendChild(tpHref);
				this.tab[menu.name].list[i].element=tpHref;
				tpUl.appendChild(tpLi);
			}
			tpDiv.appendChild(tpUl);
			rodeh.tabPanel.tab[menu.name].elemento=tpDiv;
			return tpDiv;
		},
		open:function(event,manual,issetCurrent)
		{
			frName	=(event)?rodeh.event.get(event).name:manual;
			issetCur=issetCurrent || false;
			//alert(frName);
			fIdent	=frName.split("|");
			//if(issetCur){alert(23);}
			//alert(rodeh.event.get(event).name);
			fName	=fIdent[0];
			fTab	=fIdent[1];
			//alert(fName+":"+fTab)
			funcion=rodeh.tabPanel.tab[fName].list[fTab].funcion;
			funciBe=funcion.before || false;
			if(funciBe)
			{
				if(!funcion.to({tabPanel:rodeh.tabPanel.tab[fName].Obj,param:funcion.param || false,tab:{fName:fName,fTab:fTab}}))
				{
					return;
				}
			}
			if(rodeh.tabPanel.tab[fName].list[fTab].submenu)
			{
				//alert(rodeh.panel.history[rodeh.tabPanel.tab[fName].Obj].elementos);
				rodeh.panel.history[rodeh.tabPanel.tab[fName].Obj].elementos.submenu.innerHTML="";
				rodeh.panel.clean(rodeh.tabPanel.tab[fName].Obj);
				$a=rodeh.panel.element(rodeh.tabPanel.tab[fName].Obj);
				rodeh.tabPanel.setActive({fName:fName,fTab:fTab,onLoad:((event)?false:true),issetCurrent:issetCur});
				rodeh.tabPanel.submenu.engine({fName:fName,fTab:fTab});
				return;
			}
			else
			{
				rodeh.panel.history[rodeh.tabPanel.tab[fName].Obj].elementos.submenu.innerHTML="";
				rodeh.panel.clean(rodeh.tabPanel.tab[fName].Obj);
			}
			funcion.to({tabPanel:rodeh.tabPanel.tab[fName].Obj,param:funcion.param || false,tab:{fName:fName,fTab:fTab}});
			rodeh.tabPanel.setActive({fName:fName,fTab:fTab});
		},
		setActive:function($)
		{
			fName	=$.fName;
			fTab	=$.fTab;
			onLoad	=$.onLoad || false;
			issetCurrent=$.issetCurrent || false;
			rodeh.style.set(rodeh.tabPanel.tab[fName].list[fTab].element,rodeh.panel.styles.tab.el.a_current);
			rodeh.event.remove(rodeh.tabPanel.tab[fName].list[fTab].element,"mousedown",rodeh.tabPanel.open);
			rodeh.event.remove(rodeh.tabPanel.tab[fName].list[fTab].element,"mouseout",rodeh.tabPanel.css.out);
			rodeh.event.remove(rodeh.tabPanel.tab[fName].list[fTab].element,"mouseover",rodeh.tabPanel.css.over);
			tabCurrent=rodeh.tabPanel.tab[fName].current;
			if(rodeh.tabPanel.tab[fName].list[tabCurrent].submenu && rodeh.tabPanel.tab[fName].list[tabCurrent].submenu.elemento)
			{
				delete(rodeh.tabPanel.tab[fName].list[tabCurrent].submenu.elemento);
			}
			rodeh.tabPanel.tab[fName].list[tabCurrent].element.name=fName+"|"+tabCurrent;
			if((!onLoad || issetCurrent) && fTab!=tabCurrent)
			{
				rodeh.style.set(rodeh.tabPanel.tab[fName].list[rodeh.tabPanel.tab[fName].current].element,rodeh.panel.styles.tab.el.a_nocurrent);
				rodeh.event.add(rodeh.tabPanel.tab[fName].list[rodeh.tabPanel.tab[fName].current].element,"mouseover",rodeh.tabPanel.css.over);
				rodeh.event.add(rodeh.tabPanel.tab[fName].list[rodeh.tabPanel.tab[fName].current].element,"mouseout",rodeh.tabPanel.css.out);
				rodeh.event.add(rodeh.tabPanel.tab[fName].list[rodeh.tabPanel.tab[fName].current].element,"mousedown",rodeh.tabPanel.open);
			}
			rodeh.tabPanel.tab[fName].current=fTab;
		},
		engine:function(Obj)
		{
			//			alert(Obj);
			name=Obj.split("|")[0];
			funcion=rodeh.tabPanel.tab[name].list[this.tab[name].current].funcion;
			funcion.to({tabPanel:Obj,param:funcion.param || false});
		},
		submenu:{
			css:{
				out:function(event)
				{
					ab=rodeh.event.get(event);
					rodeh.style.set(ab,rodeh.panel.styles.tab.submenu.el.a_nocurrent);
				},
				over:function(event)
				{
					ab=rodeh.event.get(event);
					rodeh.style.set(ab,rodeh.panel.styles.tab.submenu.el.a_current);
					rodeh.style.set(ab,{
						cursor:"pointer"
					}
					);

				}
			},
			engine:function($)
			{
				Obj		=rodeh.tabPanel.tab[$.fName].Obj;
				menuroot=rodeh.tabPanel.tab[$.fName].list[$.fTab].submenu;
				menu	=menuroot.menu;
				fName	=$.fName;
				fTab	=$.fTab;
				//alert(Obj)
				$a=rodeh.panel.history[Obj].elementos.submenu;
				//$a.innerHTML=menu.length;
				tpDiv=document.createElement("div");
				rodeh.style.set(tpDiv,{
					paddingTop	:"10px",
					marginBottom:"5px"
				});
				tpUl=document.createElement("ul");
				rodeh.style.set(tpUl,rodeh.panel.styles.tab.submenu.el.ul);
				for(i=0;i<menu.length;i++)
				{
					tpLi=document.createElement("li");
					rodeh.style.set(tpLi,rodeh.panel.styles.tab.submenu.el.li);
					tpHrefsm=document.createElement("a");
					//alert(document.createElement("a"));
					//rodeh.tabPanel.tab[fName].list[fTab].submenu.menu[i].elemento=tpHrefsm;
					rodeh.style.set(tpHrefsm,rodeh.panel.styles.tab.submenu.el.a);
					tpHrefsm.innerHTML=menu[i].nombre;
					if(menu[i].selected && menu[i].selected==true)
					{
						tpHrefsm.id		=fName+"|"+fTab+"|"+i;
						tpHrefsm.name	=fName+"|"+fTab+"|"+i;
						rodeh.style.set(tpHrefsm,rodeh.panel.styles.tab.submenu.el.a_current);
						rodeh.tabPanel.tab[fName].list[fTab].submenu.current=i;
					}
					else
					{
						//tpHref.href	="#";
						//tpHref.id	=menu.name+"|"+i;
						tpHrefsm.id		=fName+"|"+fTab+"|"+i;
						tpHrefsm.name	=fName+"|"+fTab+"|"+i;
						rodeh.style.set(tpHrefsm,rodeh.panel.styles.tab.submenu.el.a_nocurrent);
						rodeh.event.add(tpHrefsm,"mouseover",rodeh.tabPanel.submenu.css.over);
						rodeh.event.add(tpHrefsm,"mouseout",rodeh.tabPanel.submenu.css.out);
						rodeh.event.add(tpHrefsm,"mousedown",rodeh.tabPanel.submenu.go);
						//rodeh.event.add(tpHrefsm,"mouseout",rodeh.tabPanel.css.out);
					}
					tpLi.appendChild(tpHrefsm);
					rodeh.tabPanel.tab[fName].list[fTab].submenu.menu[i].elemento=tpHrefsm;
					tpUl.appendChild(tpLi);
				}
				tpDiv.appendChild(tpUl);
				menuroot.elemento=tpDiv;
				$a.appendChild(tpDiv);
				//$a.appendChild(document.createElement("br"));
				//$a.appendChild(document.createElement("br"));

				/*autoload*/

				guncion=rodeh.tabPanel.tab[fName].list[fTab].submenu;
				funcion=guncion.menu[guncion.current].funcion;
				funcion.to({tabPanel:Obj,param:funcion.param || false, tab:{fName:fName,fTab:fTab,fOpt:guncion.current}});
				//$a.appendChild(document.createElement("BR"));
			},
			go:function($)
			{
				$a=rodeh.event.get($);
				fName	=$a.name.split("|")[0];
				fTab	=$a.name.split("|")[1];
				fOpt	=$a.name.split("|")[2];
				//alert(rodeh.tabPanel.tab[fName].list[fTab].submenu.menu[fOpt].elemento.innerHTML);
				//return;
				submenn=rodeh.tabPanel.tab[fName].list[fTab].submenu;
				//alert(submenn.menu[fOpt].elemento.innerHTML);
				//return;
				funcion=submenn.menu[fOpt].funcion;
				funciBe=funcion.before || false;
				if(funciBe)
				{
					//if(!funcion.to({tabPanel:rodeh.tabPanel.tab[fName].Obj,param:funcion.param || false,tab:{fOpt:fOpt,fName:fName,fTab:fTab}}))
					//{
					//alert("aaa");
					//return;
					//}
				}
				else
				{
					//lmn=ik;
					//ik=lmn;
					//alert("esqueleto inner: "+cms.esqueleto.innerHTML+" ++ jj value: "+cms.jj+" ++ div inner:"+cms.jk.innerHTML);
					rodeh.panel.clean(rodeh.tabPanel.tab[fName].Obj);
					rodeh.tabPanel.submenu.setActive({fName:fName,fTab:fTab,fOpt:fOpt});
					funcion.to({tabPanel:rodeh.tabPanel.tab[fName].Obj,param:funcion.param || false,tab:{fOpt:fOpt,fName:fName,fTab:fTab}});
					return;
				}
				//alert(cms.esqueleto.innerHTML+"::end");
			},
			setActive:function($)
			{
				fName	=$.fName;
				fTab	=$.fTab;
				fOpt	=$.fOpt;
				submenn=rodeh.tabPanel.tab[fName].list[fTab].submenu;
				//alert(fName+":"+fTab+":"+fOpt+":"+submenn.menu[fOpt].elemento.innerHTML);
				//alert(submenn.menu[fOpt].elemento.innerHTML);

				//return;
				rodeh.style.set(submenn.menu[fOpt].elemento,rodeh.panel.styles.tab.submenu.el.a_current);
				rodeh.event.remove(submenn.menu[fOpt].elemento,"mouseover",rodeh.tabPanel.submenu.css.over);
				rodeh.event.remove(submenn.menu[fOpt].elemento,"mouseout",rodeh.tabPanel.submenu.css.out);
				rodeh.event.remove(submenn.menu[fOpt].elemento,"mousedown",rodeh.tabPanel.submenu.go);
				tabCurrent=submenn.current;

				//rodeh.tabPanel.tab[fName].list[tabCurrent].element.name=fName+"|"+tabCurrent;
				rodeh.style.set(submenn.menu[tabCurrent].elemento,rodeh.panel.styles.tab.submenu.el.a_nocurrent);
				rodeh.event.add(submenn.menu[tabCurrent].elemento,"mouseover",rodeh.tabPanel.submenu.css.over);
				rodeh.event.add(submenn.menu[tabCurrent].elemento,"mouseout",rodeh.tabPanel.submenu.css.out);
				rodeh.event.add(submenn.menu[tabCurrent].elemento,"mousedown",rodeh.tabPanel.submenu.go);
				submenn.current=fOpt;
			}
		}
	},
	rpc:{
		xmlhttp:function(param)
		{
			this.error="";
			this.param=param;
			this.getURL=function()
			{
				if(!this.param.url && typeof http_processor!='undefined'){	return http_processor;}else{if(this.param.url){return this.param.url;}else{this.error="blank URL";return false;}}
			}
			this.getXMLHTTPREQUEST=function()
			{
				try {xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");} catch (e) {try {xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");} catch (E) {xmlhttp = false;}}if (!xmlhttp && typeof XMLHttpRequest!='undefined') {xmlhttp = new XMLHttpRequest();}if(!xmlhttp){this.error="Su navegador no soporta AJAX";}
				return xmlhttp;
			}
			this.url=this.getURL();
			this.xmlhttp=this.getXMLHTTPREQUEST();
			if(!this.url){return false;}
			if(!this.xmlhttp){return false;}
			this.open=function()
			{
				this.xmlhttp.open(this.param.method,this.url/*+((this.param.variables)?'&'+this.param.variables:'')*/,(!this.param.async)?true:this.param.async);
				if(this.param.method=="POST")
				{
					this.xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
					this.xmlhttp.send((this.param.variables)?'&'+this.param.variables:'');
				}
				else if(this.param.method=="GET"){this.xmlhttp.send(null);}
			}
			this.open();
			var _this=this;
			this.xmlhttp.onreadystatechange=function()
			{
				if (_this.xmlhttp.readyState==4)
				{
					if(_this.xmlhttp.status==200 && _this.param.callback)
					{
						var arguments		=false;
						if(_this.param.callback.arguments){arguments=(_this.param.callback.arguments)?_this.param.callback.arguments:false;}
						_this.param.callback._function(
						{
							request		:{
								responseText	:_this.xmlhttp.responseText,
								responseXML		:_this.xmlhttp.responseXML
							},
							state		:_this.xmlhttp.readyState,
							arguments	:arguments
						});
					}
					else
					{

					}
				}
			}
		},
		aji:{
			database:[],
			nuevo:function(param)
			{
				_1="ajaxN"+Math.floor(Math.random()*2199);
				_2=rodeh.rpc.aji.database[_1]=param;
				_2.name=_1;
				_2.completed=false;
				uri=_2.url+"?ajiId="+_2.name+((_2.param)?"&"+_2.param:"");
				_n = document.createElement('script');
				_n.src = uri;
				_n.type = "text/javascript";
				document.getElementsByTagName("HTML")[0].getElementsByTagName("HEAD")[0].appendChild(_n);
				_2.script=_n;
				_2.interval = setInterval("rodeh.rpc.aji.verificar('"+_2.name+"')", 500);
			},
			verificar:function(param)
			{
				_1=rodeh.rpc.aji.database[param];
				if(!_1.aji)
				{
					_1.g+=1;
					return;
				}
				else
				{
					clearInterval(_1.interval);
					rodeh.tools.element.remove(_1.script);
					rodeh.rpc.aji.finish(param);
				}
			},
			finish:function(param)
			{
				_1=rodeh.rpc.aji.database[param];
				_2=_1.callback.funcion.param;
				if(!_2)
				{
					_2={};
					_2.aji=_1.aji;
				}
				else
				{
					_2.aji=_1.aji;
				}
				delete rodeh.rpc.aji.database[param];
				_1.callback.funcion.exec(_2);
			}
		},
		dom:{
			database:[],
			nuevo:function(param)
			{
				_1="ajaxDOM"+Math.floor(Math.random()*2199);
				_2=rodeh.rpc.dom.database[_1]=param;
				uri=_2.url+"?dom="+_1+((_2.param)?"&"+_2.param:"");
				if (window.ActiveXObject)
				{
					//xmldoc=new ActiveXObject("Microsoft.XMLDOM");
					window.status="for activex"
					xmldoc=new ActiveXObject("MSXML2.DOMDocument");
					xmldoc.async = false;
					xmldoc.load(uri);
				}
				//apartir de Opera 8, y alguna de las ultimas versiones de Opera 7
				else if(document.implementation.createLSParser) {
					var ls = document.implementation.createLSParser(1, null);
					xmldoc=ls.parseURI(uri);
				}
				else if (document.implementation&&document.implementation.createDocument)
				{
					window.status="for native code"
					xmldoc=document.implementation.createDocument("","doc",null);
					xmldoc.async = false;
					xmldoc.load(uri);
				}
				//netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
				doc=xmldoc.documentElement;
				_3=_2.callback.funcion.param;
				if(!_3)
				{
					_3={};
					_3.xml=doc;
				}
				else
				{
					_3.xml=doc;
				}
				delete rodeh.rpc.aji.database[param];
				_2.callback.funcion.exec(_3);
			}
		}
	}
}
rodeh.graf={
	database:{linea:[],circulo:[],punto:[],codo:[]},
	linea:function(object)
	{
		if(!object || !object.name){return false;}
		var name=(object.nameNoGenerate)?object.name:object.name+Math.random();
		var id=object.name.split("|")[0]+Math.random();
		inst=this.database.linea[id]=object;
		inst.width		= (inst.position.x1 < inst.position.x2) ? (inst.position.x2 - inst.position.x1) : (inst.position.x1 - inst.position.x2);
		inst.height		= (inst.position.y1 < inst.position.y2) ? (inst.position.y2 - inst.position.y1) : (inst.position.y1 - inst.position.y2);
		inst.eslargo	= inst.width > inst.height;
		inst.pendiente	= (inst.largo) ? parseInt(inst.width/inst.height) : parseInt(inst.height/inst.width);
		inst.pendiente	= isNaN(inst.pendiente)?0:inst.pendiente;
		inst.largo 		= (inst.eslargo) ? inst.width : inst.height ;

		inst.iniX		= (inst.position.x1 < inst.position.x2) ? inst.position.x1 : inst.position.x2;
		inst.iniY		= (inst.position.y1 < inst.position.y2) ? inst.position.y1 : inst.position.y2;

		inst.reversa	= (inst.position.x1 < inst.position.x2 || inst.position.y1 < inst.position.y2)?false:true;
		//inst.iniX		= inst.position.x1;
		//inst.iniY		= inst.position.y1;

		inst.inversa	= (inst.position.x1 < inst.position.x2) && (inst.position.y2 < inst.position.y1) || (inst.position.x2 < inst.position.x1) && (inst.position.y1 < inst.position.y2);

		inst.puntos=[];
		//x ++
		//y div++
		//document.getElementById("debug").innerHTML+="<br><br>PUNTOS A GENERAR: "+inst.largo+"<br><pre>"+rodeh.tools.object.toString(inst)+"</pre><br><br>";
		for(i=0;i<=inst.largo;i++)
		{
			/**
			*  inst.eslargo, if(true)  linea x++ else linea y++
			**/
			if(inst.eslargo)
			{
				x=i+inst.iniX;
			}else
			{
				if(inst.inversa)
				{
					x=(inst.width - parseInt(i * inst.width / inst.height))+inst.iniX;
				}
				else
				{
					x=parseInt(((i * inst.width) / inst.height)+inst.iniX);
				}
			}
			if(inst.eslargo)
			{
				if(inst.inversa)
				{
					y=(inst.height- parseInt(i * inst.height/ inst.width))+inst.iniY;
				}else
				{
					y=parseInt(((i * inst.height)/ inst.width)+inst.iniY);
				}
			}else
			{//alert(768)
				y=i+inst.iniY;
			}
			//document.getElementById("debug").innerHTML+="Punto: x="+x+" ("+inst.width+" - [("+i+" * "+inst.width+" / "+inst.height+")=<b>"+((i*inst.width)/inst.height)+"</b>])+"+inst.position.x1+" , y:"+y+"<br>";
			//if(x >= inst.iniX && y >= inst.iniY)
			//{
			ln=rodeh.graf.punto({
				name:name+"|"+i,
				noRand:true,
				w:inst.size,
				h:inst.size,
				x:x,
				y:y,
				color:inst.color,
				style:((inst.style)?inst.style:false),
				zIndex:inst.zIndex || false,
				event:(inst.event)?inst.event:false,
				target:inst.target
			});
			inst.puntos[i]=ln.objeto;
			if(inst.showPosition){ln.objeto.title="x: "+x+" ,y: "+y;}
			//}
		}
		//alert(name)
		//		document.getElementById("debug").innerHTML+="<hr><pre style='min-height:300px;'>"+rodeh.tools.object.toString(inst)+":"+inst.largo+"</pre>";
		//alert(rodeh.tools.object.toString(inst));
		return id;
	},
	_delete:{
		linea:function(uid)
		{
			var linea=rodeh.graf.database.linea[uid];
			//alert(uid+":"+linea+":"+rodeh.tools.object.toString(rodeh.graf.database))
			for(var g=0;g<linea.puntos.length;g++)
			{
				rodeh.tools.element.remove(linea.puntos[g]);
			}
			delete(rodeh.graf.database.linea[uid]);
		}
	},
	punto:function(object)
	{
		if(!object && !object.name){return false;}
		var name,punto;
		name=object.name+((object.noRand)?"":Math.random());
		punto=document.createElement("span");
		punto.id=name;
		punto.name="punto";
		rodeh.style.set(punto,{
			textDecoration:"none",
			fontSize:"0px",
			position:"absolute",
			width	:(object.w)?object.w:"1px",
			height	:(object.h)?object.h:"1px",
			top		:object.y,
			left	:object.x,
			overflow:"hidden",
			zIndex	:object.zIndex || 2,
			border	:"0px solid #000000",
			padding	:0,
			margin	:0,
			//cursor	:"pointer",
			backgroundColor:object.color});
			if(object.style){rodeh.style.set(punto,object.style);}
			object.target.appendChild(punto);
			if(object.event){
				if(object.event[0])
				{
					for(h=0;h<object.event.length;h++)
					{
						rodeh.event.add(punto,object.event[h].on,object.event[h].go);
					}
				}
				else
				{
					rodeh.event.add(punto,object.event.on,object.event.go);
				}
			}

			if(object.database){rodeh.graf.database.punto[name]=punto;}
			return {name:name,objeto:punto};
	}
};

rodeh.graf.fx={

	linea:
	{
		create:function(param)
		{
			var line,lineas,x1,x2,y1,y2,ln={},name;
			name=param.name+Math.random();
			lineas=param.position.length;
			ln={
				object	:param,
				name	:name,
				lineas	:[],
				puntas	:{},
				codos	:[],
				tmp		:{menucodo:{step1:false,step2:false}}
			};
			ln.object.focus={size:5,move:2};
			ln.object.style={cursor:"pointer"};
			var inst=rodeh.graf.database.codo[name]=ln;
			for(var i=0;i<lineas;i++)
			{
				if(i<(lineas-1))
				{
					/* crear codo */
					rodeh.graf.fx.linea.createCodo({
						id:name+"|"+i,
						x:param.position[i].x2,
						y:param.position[i].y2,
						color:param.color,
						zIndex:param.zIndex+1,
						target:param.target
					});
				}
				if(i===0)
				{
					//window.status+="punto"
					ln.puntas.x1=param.position[i].x1;
					ln.puntas.y1=param.position[i].y1;
				}
				if(i===(lineas-1))
				{
					ln.puntas.x2=param.position[i].x2;
					ln.puntas.y2=param.position[i].y2;
				}
				var line=rodeh.graf.linea({
					name:name+"|"+i,
					nameNoGenerate:true,
					position:{
						x1:param.position[i].x1,
						y1:param.position[i].y1,
						x2:param.position[i].x2,
						y2:param.position[i].y2
					},
					size:param.size,
					//showPosition:true,
					color:param.color,
					style:ln.object.style,
					zIndex:param.zIndex,
					target:param.target,
					event:[
					{
						on:"mouseover",
						go:rodeh.graf.fx.linea.over
					},
					{
						on:"mousedown",
						go:rodeh.graf.fx.linea.click
					},
					{
						on:"mouseout",
						go:rodeh.graf.fx.linea.out
					}
					]
				});
				ln.lineas[i]=line;
			}
			/* crear conectores BEGIN */
			if(inst.object.conectores)
			{
				var conector=inst.object.conectores,guide;
				if(conector.begin)
				{

					rodeh.graf.fx.linea.conectores.create({
						inst:name,
						position:"begin",
						type:conector.begin
					});
				}
				if(conector.end)
				{
					rodeh.graf.fx.linea.conectores.create({
						inst:name,
						position:"end",
						type:conector.end
					});
					//alert(conector.begin+":"+inst.lineas[inst.lineas.length-1]);
					//guide=rodeh.graf.database.linea[inst.lineas[inst.lineas.length-1]];
					//alert(rodeh.tools.object.toString(guide))
				}
			}
			/* crear conectores END */
			return name;
		},
		over:function(event)
		{

			var el,x,y;
			el=rodeh.event.get(event);
			if(el.name=="punto")
			{
				var inst=rodeh.graf.fx.tools.getCodoInstOfCodo(el.id);
				x=parseInt(el.style.left);
				y=parseInt(el.style.top);
				rodeh.style.set(el,{
					width:inst.object.focus.size,
					height:inst.object.focus.size,
					zIndex:inst.object.zIndex+1,
					backgroundColor:inst.object.color,
					left:x-inst.object.focus.move,
					top:y-inst.object.focus.move
				});
			}
		},
		out:function(event)
		{
			var el,x,y,linea,punto;
			el=(!event)?elem:rodeh.event.get(event);
			if(el.name=="punto")
			{
				var inst=rodeh.graf.fx.tools.getCodoInstOfCodo(el.id);
				x=parseInt(el.style.left);
				y=parseInt(el.style.top);
				rodeh.style.set(el,{
					width:inst.object.size,
					height:inst.object.size,
					zIndex:inst.object.zIndex-1,
					left:x+((el.offsetWidth==inst.object.size && el.offsetHeight==inst.object.size)?0:inst.object.focus.move),
					top:y+((el.offsetWidth==inst.object.size && el.offsetHeight==inst.object.size)?0:inst.object.focus.move)
				});
			}
		},
		click:function(event)
		{
			var arrEls;
			el=rodeh.event.get(event);
			//alert(parseInt(el.style.left)+":"+parseInt(el.style.top));
			var tpos={x:parseInt(el.style.left),y:parseInt(el.style.top)};
			rodeh.event.remove(el,"mouseout",rodeh.graf.fx.linea.out);
			rodeh.event.remove(el,"mouseover",rodeh.graf.fx.linea.over);
			/* guideline tmp */
			var inst=rodeh.graf.fx.tools.getCodoInstOfCodo(el.id);
			var guideVertical	=document.createElement("div");
			rodeh.style.set(guideVertical,{
				width:2,
				height:"100%",
				position:"absolute",
				border:"0px solid red",
				borderLeft:"1px dashed red",
				top:0,
				left:parseInt(el.style.left)+2
			});
			var guideHorizontal	=document.createElement("div");
			rodeh.style.set(guideHorizontal,{
				height:2,
				width:"100%",
				position:"absolute",
				border:"0px solid red",
				borderTop:"1px dashed red",
				left:0,
				top:parseInt(el.style.top)+2
			});
			var info	=document.createElement("div");
			rodeh.style.set(info,{
				height:30,
				width:40,
				position:"absolute",
				paddingLeft:5,
				border:"1px solid #006699",
				backgroundColor:"#fafbfc",
				left:(parseInt(el.style.left)+2)+10,
				top:(parseInt(el.style.top)+2)-40
			});
			info.innerHTML="<b>x</b>: "+(parseInt(el.style.left)+2)+"<br><b>y</b>: "+(parseInt(el.style.top)+2);
			inst.object.target.appendChild(guideHorizontal);
			inst.object.target.appendChild(guideVertical);
			inst.object.target.appendChild(info);
			tmpguide={horizontal:guideHorizontal,vertical:guideVertical,info:info};

			rodeh.drag.ini(
			{
				objetos	:[{el:el},{el:guideHorizontal},{el:guideVertical},{el:info}],
				event	:event,
				other	:{
					callback:[{
						_on:"go",
						_in:"begin",
						_function:function(object)
						{
							var el=rodeh.event.get(object.paramDrag.event);
							if(el.name=="casicodo")
							{
								el.name="casicodo";
							}
							else if(el.name=="codo")
							{
								el.name="codo";
							}
							else
							{
								el.name="casicodo"
							}
							//rodeh.event.remove(el,"mouseout",rodeh.graf.fx.linea.out);
						},
						param:tmpguide
					},
					{
						_on:"go",
						_in:"end",
						_function:function(object)
						{
							var el=rodeh.event.get(object.paramDrag.event);
							var inst=rodeh.graf.fx.tools.getCodoInstOfCodo(el.id);
							if(inst && inst.codos)
							{
								rodeh.style.set(object.vertical,{top:0});
								rodeh.style.set(object.horizontal,{left:0});
								object.info.innerHTML="<b>x</b>: "+(parseInt(el.style.left)+2)+"<br><b>y</b>: "+(parseInt(el.style.top)+2);
							}
						},param:tmpguide
					},
					{
						_on:"finish",
						_in:"begin",
						_function:function(object)
						{
							var el,x,y,zz;
							el=rodeh.event.get(object.paramDrag.event);
							//window.status=object.tpos.x+":"+object.tpos.y+"|"+parseInt(el.style.left)+":"+parseInt(el.style.top);

							//alert(rodeh.tools.object.toString(object.horizontal))
							/* eliminar guideline tmp begin */
							rodeh.tools.element.remove(object.tmpguide.horizontal);
							rodeh.tools.element.remove(object.tmpguide.vertical);
							rodeh.tools.element.remove(object.tmpguide.info);

							/* eliminar guideline tmp end */
							var inst=rodeh.graf.fx.tools.getCodoInstOfCodo(el.id);
							if(inst && inst.codos)
							{
								//document.getElementById("debug").innerHTML+="+name:"+el.name+" id="+el.id+"<br><br><pre>"+el+"</pre><br><br>";
								if(el.name=="casicodo")
								{
									rodeh.event.remove(el,"mouseover",rodeh.graf.fx.linea.over);
									el.style.visibility="hidden";
									x=parseInt(el.style.left);
									y=parseInt(el.style.top);
									zz=2;
									rodeh.graf.fx.linea.createCodo({
										action:"update",
										x:x,
										y:y,
										color:inst.object.color,
										zIndex:inst.object.zIndex+1,
										target:inst.object.target,
										id:el.id,
										noFix:true
									});
									//rodeh.graf.fx.linea.codo.set(object.paramDrag.event);
									//rodeh.event.add(el,"mouseout",rodeh.graf.fx.linea.codo.set);
									//rodeh.event.add(el,"mouseover",rodeh.graf.fx.linea.codo.over);
									el.name="codo";
									//rodeh.graf.fx.linea.resize(el.id);
									//(tam/cantidad)
								}
								else if(el.name=="codo")
								{
									//x=parseInt(el.style.left);
									//y=parseInt(el.style.top);
									//zz=2;
									//document.getElementById("debug").innerHTML+="CODO: +id="+el.id+" name="+el.name+" x="+x+" y="+y+" size:("+el.style.width+"x"+el.style.height+")  inst.size="+inst.size+"<br>";
								}
								else if(el.name=="punto")
								{
									//if(object.tpos.x==parseInt(el.style.left) && object.tpos.y==parseInt(el.style.top))
									//{

									//	}else{

									//}
									rodeh.graf.fx.linea.out(object.paramDrag.event);
									rodeh.event.add(el,"mouseover",rodeh.graf.fx.linea.over);
									//window.status="kkk|"+el.id
								}
								//document.getElementById("debug").innerHTML="<hr><pre style='min-height:300px;'>"+rodeh.tools.object.toString(rodeh.graf.database.codo[rodeh.graf.fx.tools.getCodo(el.id).codo])+"</pre>";
							}
						},
						param:{tmpguide:tmpguide,tpos:tpos}
					}
					]
				}
			});
		},
		codo:{
			over:function(event){
				var el	=rodeh.event.get(event);
				var inst=rodeh.graf.fx.tools.getCodoInstOfCodo(el.id);
				rodeh.style.set(el,{backgroundColor:inst.object.colorCodoOver||"red"});
				//window.status=el.style.left+":"+el.style.top
			},
			out:function(event)	{
				var el	=rodeh.event.get(event);
				var inst=rodeh.graf.fx.tools.getCodoInstOfCodo(el.id);
				rodeh.style.set(el,{backgroundColor:inst.object.color});
			},
			contextmenu:function(event,manual)
			{
				var codo,inst,el=rodeh.event.get(event);
				if(manual){codo=manual.codo;inst=manual.inst;}else{codo=rodeh.graf.fx.tools.getCodo(el.id);inst=rodeh.graf.database.codo[codo.codo];}
				zzi=inst.object.zIndex+3;
				//window.status=zzi
				var b=rodeh.panel.create({w:85,h:10},{x:inst.codos[codo.num].position.x,y:inst.codos[codo.num].position.y},"contextmenu",zzi,false,{
					botones:{cerrar:((rodeh.browser.isOPERA)?true:false)},
					incontainer:inst.object.target,
					style:{
						panel:{border:"1px dashed "+inst.object.color},
						html:{padding:2}
					}
				});
				var href=document.createElement("a");
				href.innerHTML="Delete";
				href.href="#";
				href.id=codo.codo;
				if(!rodeh.browser.isOPERA)
				{
					var unlock=rodeh.panel.history[b].elementos.lock;
					rodeh.event.add(unlock,"mouseup",rodeh.panel.remove);
				}
				rodeh.panel.html(b,href);
				rodeh.style.set(href,rodeh.panel.styles.contextmenu.menu);
				rodeh.event.add(href,"mouseover",function(event){rodeh.style.set(rodeh.event.get(event),rodeh.panel.styles.contextmenu.over);});
				rodeh.event.add(href,"mouseout",function(event){rodeh.style.set(rodeh.event.get(event),rodeh.panel.styles.contextmenu.out);});
				rodeh.event.add(href,"mouseup",rodeh.graf.fx.linea.deleteCodo,false,{
					name:codo.codo,
					Obj:{codoId:el.id,panelId:b}
				});
				//rodeh.fx.opacity.set(rodeh.panel.history[b].elementos.root,70);
				rodeh.event._null(event);
			},
			click:function(event)
			{
				var el=rodeh.event.get(event);
				var codo=rodeh.graf.fx.tools.getCodo(el.id);
				var inst=rodeh.graf.database.codo[codo.codo];
				if (typeof event.button != "undefined"){if (event.button == 2) {return false;}}
				/* click menu for OPERA begin */
				if(rodeh.browser.isOPERA)
				{
					var s=inst.tmp.menucodo;
					if(s.step1===codo.num && s.step2===codo.num)
					{
						rodeh.graf.fx.linea.codo.contextmenu(event,{codo:codo,inst:inst});
					}else if(s.step1===codo.num){
						s.step2=codo.num;
						window.status=2
					}else{
						s.step1=codo.num;
						s.step2=false;
						window.status=3
					}
				}
				/* click menu for OPERA end */

				/* codo guideline begin */
				var guideVertical	=document.createElement("div");
				rodeh.style.set(guideVertical,{
					width:2,
					height:"100%",
					position:"absolute",
					border:"0px solid red",
					borderLeft:"1px dashed red",
					top:0,
					left:inst.codos[codo.num].position.x
				});
				var guideHorizontal	=document.createElement("div");
				rodeh.style.set(guideHorizontal,{
					height:2,
					width:"100%",
					position:"absolute",
					border:"0px solid red",
					borderTop:"1px dashed red",
					left:0,
					top:inst.codos[codo.num].position.y
				});
				var info	=document.createElement("div");
				rodeh.style.set(info,{
					height:30,
					width:40,
					position:"absolute",
					paddingLeft:5,
					border:"1px solid #006699",
					backgroundColor:"#fafbfc",
					left:inst.codos[codo.num].position.x+10,
					top:inst.codos[codo.num].position.y-40
				});
				rodeh.fx.opacity.set(info,30);
				inst.object.target.appendChild(guideHorizontal);
				inst.object.target.appendChild(guideVertical);
				inst.object.target.appendChild(info);
				info.innerHTML="<b>x</b>: "+inst.codos[codo.num].position.x+"<br><b>y</b>: "+inst.codos[codo.num].position.y;
				/* codo guideline end */
				inst.codos[codo.num].guideline={
					horizontal:guideHorizontal,
					vertical:guideVertical
				}
				inst.codos[codo.num].infobox=info;
				//alert(el.id)
				rodeh.drag.ini(
				{
					objetos	:[{el:el},{el:guideVertical},{el:guideHorizontal},{el:info}],
					event	:event,
					other	:{
						callback:[
						{
							_on:"go",
							_in:"end",
							_function:function(object)
							{
								var el,x,y,zz;
								el=rodeh.event.get(object.paramDrag.event);
								var codo=rodeh.graf.fx.tools.getCodo(el.id);
								var inst=rodeh.graf.database.codo[codo.codo];
								//window.status=inst.codos;
								if(inst && inst.codos && inst.codos[codo.num])
								{
									rodeh.style.set(inst.codos[codo.num].guideline.vertical,{top:0});
									rodeh.style.set(inst.codos[codo.num].guideline.horizontal,{left:0});
									inst.codos[codo.num].infobox.innerHTML="<b>x</b>: "+(parseInt(el.style.left)+2)+"<br><b>y</b>: "+(parseInt(el.style.top)+2);
								}
							}
						},
						{
							_on:"finish",
							_in:"begin",
							_function:function(object)
							{
								var el,x,y,zz;
								el=rodeh.event.get(object.paramDrag.event);
								var codo=object.codo;
								var inst=rodeh.graf.database.codo[codo.codo];
								if(inst && inst.codos)
								{
									//alert(codo.num+":"+rodeh.tools.object.toString(inst.codos[codo.num]))
									rodeh.tools.element.remove(inst.codos[codo.num].guideline.vertical);
									rodeh.tools.element.remove(inst.codos[codo.num].guideline.horizontal);
									rodeh.tools.element.remove(inst.codos[codo.num].infobox);

									var x=parseInt(inst.codos[codo.num].punto.objeto.style.left);
									var y=parseInt(inst.codos[codo.num].punto.objeto.style.top);
									//window.status=inst.codos[codo.num].position.x+":"+x+"|"+inst.codos[codo.num].position.y+":"+y;
									if(inst.codos[codo.num].position.x!=x+2 || inst.codos[codo.num].position.y!=y+2)
									{
										rodeh.graf._delete.linea(inst.lineas[codo.num]);
										rodeh.graf._delete.linea(inst.lineas[codo.num+1]);
										inst.codos[codo.num].position.x=x+2;
										inst.codos[codo.num].position.y=y+2;
										//rodeh.graf.fx.linea.newCodoLines({inst:inst,codo:codo});
										el.title="x: "+(x+2)+" ,y: "+(y+2);

										rodeh.graf.fx.linea.newDoubleLines({inst:inst,codo:codo});
									}
									//alert(rodeh.tools.object.toString(codo))
								}
							},
							param:{codo:codo}
						}
						]
					}
				});
			}
		},
		createCodo:function(param)
		{
			var size=(rodeh.browserISIE)?5:5;
			var diff=(!param.noFix)?2:0;
			var codo=rodeh.graf.fx.tools.getCodo(param.id)
			var action=param.action || "create";
			var inst=rodeh.graf.database.codo[codo.codo];
			codo.num=parseInt(codo.num);
			//alert(action)
			//alert(rodeh.tools.object.toString(codo))
			//nnm=codo.codo+"|"+((action=="update")?parseInt(parseInt(codo.num)+1):codo.num);
			var ln=rodeh.graf.punto({
				name:codo.codo+"|"+codo.num,
				noRand:true,
				w:size,
				h:size,
				x:param.x-diff,
				y:param.y-diff,
				color:param.color,
				style:{cursor:"move"},
				zIndex:param.zIndex,
				event:[{on:"mouseover",go:rodeh.graf.fx.linea.codo.over},
				{on:"mousedown",go:rodeh.graf.fx.linea.codo.click},
				{on:"contextmenu",go:rodeh.graf.fx.linea.codo.contextmenu},
				{on:"mouseout",go:rodeh.graf.fx.linea.codo.out}
				],
				target:param.target
			});
			ln.objeto.title="x: "+(param.x+((action=="create")?0:2))+" ,y: "+(param.y+((action=="create")?0:2));
			if(action=="create")
			{
				//alert(codo.codo)
				inst.codos[inst.codos.length]={
					punto:ln,
					position:{x:param.x,y:param.y}
				};
			}
			else if(action=="update")
			{
				var tmp=inst.codos.slice(codo.num,inst.codos.length);
				inst.codos[codo.num]={
					punto:ln,
					position:{x:param.x+2,y:param.y+2}
				};
				for(var i=0;i<tmp.length;i++)
				{
					var nj=(parseInt(codo.num)+i)+1;
					var nm=codo.codo+"|"+nj;
					inst.codos[nj]={
						punto:{name:nm,objeto:tmp[i].punto.objeto},
						position:tmp[i].position
					};
					inst.codos[nj].punto.objeto.id=nm;
				}
				/* resize */
				rodeh.graf.fx.linea.newCodoLines({inst:inst,codo:codo});
			}
		},
		deleteCodo:function(event)
		{
			var el=rodeh.event.get(event);
			var obj=rodeh.event.expand[el.id];
			var codo=rodeh.graf.fx.tools.getCodo(obj.codoId);
			var inst=rodeh.graf.database.codo[codo.codo];
			var line1=inst.lineas[codo.num],line2=(inst.lineas[codo.num+1]);
			rodeh.panel.remove(obj.panelId);
			rodeh.tools.element.remove(inst.codos[codo.num].punto.objeto);
			inst.codos.splice(codo.num,1);
			inst.lineas.splice(codo.num+1,1);
			for(var i=codo.num;i<inst.codos.length;i++)
			{
				var nm=codo.codo+"|"+i;
				inst.codos[i].punto.name=nm;
				inst.codos[i].punto.objeto.id=nm;
			}
			for(var i=(codo.num+1);i<inst.lineas.length;i++)
			{
				rodeh.graf.fx.linea.reloadInternalLineDB(inst.lineas[i],codo.codo+"|"+i);
			}
			rodeh.graf._delete.linea(line1);
			rodeh.graf._delete.linea(line2);
			/* crear linea begin */
			x1=(codo.num==0)?inst.puntas.x1:inst.codos[codo.num-1].position.x;
			y1=(codo.num==0)?inst.puntas.y1:inst.codos[codo.num-1].position.y;
			x2=(codo.num==inst.codos.length)?inst.puntas.x2:inst.codos[codo.num].position.x;
			y2=(codo.num==inst.codos.length)?inst.puntas.y2:inst.codos[codo.num].position.y;
			var line=rodeh.graf.linea({
				name:codo.codo+"|"+codo.num,
				nameNoGenerate:true,
				position:{x1:x1,y1:y1,x2:x2,y2:y2},
				event:[
				{on:"mouseover"	,go:rodeh.graf.fx.linea.over},
				{on:"mousedown"	,go:rodeh.graf.fx.linea.click},
				{on:"mouseout"	,go:rodeh.graf.fx.linea.out}],
				style:((inst.object.style)?inst.object.style:false),
				size:1,zIndex:inst.object.zIndex,color:inst.object.color,target:inst.object.target
			});
			inst.lineas[codo.num]=line;
			/* crear linea end */
			if(inst.object.onChange){rodeh.tools.ejectFunction(inst.object.onChange,codo.codo);}
			//document.getElementById("debug").innerHTML+="===================================";
			//document.getElementById("debug").innerHTML+="<pre>"+rodeh.tools.object.toString(inst)+"</pre>";
			//document.getElementById("debug").innerHTML+="-----------------------------------";
			//document.getElementById("debug").innerHTML+="<pre>"+rodeh.tools.object.toString(inst.codos)+"</pre>";
		},
		newCodoLines:function(param)
		{
			var inst=param.inst,codo=param.codo;
			rodeh.graf._delete.linea(inst.lineas[codo.num]);
			var tmp=inst.lineas.slice(codo.num,inst.lineas.length);
			rodeh.graf.fx.linea.newDoubleLines(param);
			for(var i=1;i<tmp.length;i++)
			{
				var nj=parseInt(parseInt(codo.num)+i)+1;
				var nm=codo.codo+"|"+nj;
				inst.lineas[nj]=tmp[i];
				rodeh.graf.fx.linea.reloadInternalLineDB(tmp[i],nm);
			}
		},
		newDoubleLines:function(param)
		{
			var inst=param.inst,codo=param.codo;
			codo.num=parseInt(codo.num);
			var newlines=[[],[]];
			newlines[0]['x1']=(codo.num==0)?inst.puntas.x1:inst.codos[codo.num-1].position.x;
			newlines[0]['y1']=(codo.num==0)?inst.puntas.y1:inst.codos[codo.num-1].position.y;
			newlines[0]['x2']=inst.codos[codo.num].position.x;
			newlines[0]['y2']=inst.codos[codo.num].position.y;

			newlines[1]['x1']=inst.codos[codo.num].position.x;
			newlines[1]['y1']=inst.codos[codo.num].position.y;
			newlines[1]['x2']=(codo.num==inst.codos.length-1)?inst.puntas.x2:inst.codos[codo.num+1].position.x;
			newlines[1]['y2']=(codo.num==inst.codos.length-1)?inst.puntas.y2:inst.codos[codo.num+1].position.y;

			//var tmp=inst.lineas.slice(codo.num,inst.lineas.length);
			for(var i=0;i<2;i++)
			{
				var codonum=parseInt(parseInt(codo.num)+i);
				//window.status+=codonum+"|";
				var line=rodeh.graf.linea({
					name:codo.codo+"|"+codonum,
					nameNoGenerate:true,
					position:{x1:newlines[i]['x1'],y1:newlines[i]['y1'],x2:newlines[i]['x2'],y2:newlines[i]['y2']},
					event:[
					{on:"mouseover"	,go:rodeh.graf.fx.linea.over},
					{on:"mousedown"	,go:rodeh.graf.fx.linea.click},
					{on:"mouseout"	,go:rodeh.graf.fx.linea.out}],
					style:((inst.object.style)?inst.object.style:false),
					size:1,zIndex:inst.object.zIndex,color:inst.object.color,target:inst.object.target
				});
				inst.lineas[codonum]=line;
				//window.status+="||||"+inst.codos[codonum].punto.objeto.style.left+":"+inst.codos[codonum].punto.objeto.style.top+":"+newlines[i]['x1']+":"+newlines[i]['y1']+"::"+newlines[i]['x2']+":"+newlines[i]['y2'];
			}
			if(inst.object.onChange){rodeh.tools.ejectFunction(inst.object.onChange,codo.codo);}
		},
		reloadInternalLineDB:function(uid,id)
		{
			var linea=rodeh.graf.database.linea[uid];
			//alert(uid+":"+id)
			for(var g=0;g<linea.puntos.length;g++)
			{
				linea.puntos[g].id=id+"|"+g;
			}
		},
		conectores:{
			set:function(param)
			{

			},
			create:function(param)
			{
				var inst=rodeh.graf.database.codo[param.inst],position=param.position,type=param.type,guide,puntos;
				if(position=="begin")
				{guide=rodeh.graf.database.linea[inst.lineas[0]];}
				else if(position=="end")
				{guide=rodeh.graf.database.linea[inst.lineas[inst.lineas.length-1]];}
				else{return false;}
				puntos=guide.puntos.length;
				if(puntos<5){return false;}
				//alert(rodeh.tools.object.toString(inst))
				var a=[];
				for(var i=0;i<5;i++)
				{
					var c=((guide.reversa && position=="begin") || (!guide.reversa && position=="end"))?guide.puntos.length-(i+1):i;
					var b=guide.puntos[c];
					a[i]={
						x:parseInt(b.style.left),
						y:parseInt(b.style.top)
					};
					//alert(c+"::"+b)
				}
				if(type=="arrow")
				{
					for(var i=0;i<a.length;i++)
					{
						//for(var k=0;k<(i+1);k++)
						//{
						if(i>0)
						{
							var x=a[i].x+i;
							var y=a[i].y;
							var ln=rodeh.graf.punto({
								name:inst+"|arrow",
								noRand:true,
								w:1,
								h:1,
								x:a[i].x-i,
								y:y,
								color:"red",
								zIndex:inst.object.zIndex+1,
								target:inst.object.target
							});

							var ln=rodeh.graf.punto({
								name:inst+"|arrow",
								noRand:true,
								w:1,
								h:1,
								x:x,
								y:y,
								color:"red",
								zIndex:inst.object.zIndex+1,
								target:inst.object.target
							});
						}
						else
						{
							var x=a[i].x+i;
							var y=a[i].y;
							var ln=rodeh.graf.punto({
								name:inst+"|arrow",
								noRand:true,
								w:1,
								h:1,
								x:x,
								y:y,
								color:"red",
								zIndex:inst.object.zIndex+1,
								target:inst.object.target
							});
						}
						//}
					}
				}
				//alert(a.length+":"+rodeh.tools.object.toString(guide));
				//alert(puntos)
			}
		}
	},
	tools:{
		reloadBF:function(param)
		{
			//			alert(rodeh.tools.object.toString(param));
			var prop=rodeh.graf.fx.tools.object.properties(rodeh.panel.history[param.task.panel].elementos.root);
			var inst=rodeh.graf.database.codo[param.line];
			var codo={codo:param.line};
			//alert(rodeh.tools.object.toString(inst))
			//return;

			codo.num=0;
			rodeh.graf._delete.linea(inst.lineas[codo.num]);
			eval("x1=prop."+param.pos+".x");
			eval("y1=prop."+param.pos+".y");
			inst.puntas.x1=x1;
			inst.puntas.y1=y1;
			//window.status=inst.codos.length
			x2=(codo.num==inst.codos.length)?inst.puntas.x2:inst.codos[codo.num].position.x;
			y2=(codo.num==inst.codos.length)?inst.puntas.y2:inst.codos[codo.num].position.y;
			//alert(x1+":"+y1+":"+x2+":"+y2)
			//var tmp=inst.lineas.slice(codo.num,inst.lineas.length);
			var codonum=parseInt(parseInt(codo.num)+i);
			//window.status+=codonum+"|";
			var line=rodeh.graf.linea({
				name:param.line+"|"+codo.num,
				nameNoGenerate:true,
				position:{x1:x1,y1:y1,x2:x2,y2:y2},
				event:[
				{on:"mouseover"	,go:rodeh.graf.fx.linea.over},
				{on:"mousedown"	,go:rodeh.graf.fx.linea.click},
				{on:"mouseout"	,go:rodeh.graf.fx.linea.out}],
				style:((inst.object.style)?inst.object.style:false),
				size:1,zIndex:inst.object.zIndex,color:inst.object.color,target:inst.object.target
			});
			inst.lineas[codo.num]=line;
		},
		reloadBF2:function(param)
		{
			alert(rodeh.tools.object.toString(param));
			var inst=rodeh.graf.database.codo[param.line];
			var codo={codo:param.line};
			if(param.punta=="begin")
			{
				codo.num=0;
				x1=param.position.x;
				y1=param.position.y;
				inst.puntas.x1=x1;
				inst.puntas.y1=y1;
				x2=(codo.num==inst.codos.length)?inst.puntas.x2:inst.codos[codo.num].position.x;
				y2=(codo.num==inst.codos.length)?inst.puntas.y2:inst.codos[codo.num].position.y;
			}
			else
			{
				codo.num=inst.codos.length;
				x1=(codo.num==0)?inst.puntas.x1:inst.codos[codo.num-1].position.x;
				y1=(codo.num==0)?inst.puntas.y1:inst.codos[codo.num-1].position.y;
				x2=param.position.x;
				y2=param.position.y;
				inst.puntas.x2=x2;
				inst.puntas.y2=y2;
			}

			rodeh.graf._delete.linea(inst.lineas[codo.num]);
			alert(x1+":"+y1+":"+x2+":"+y2)
			var codonum=parseInt(parseInt(codo.num)+i);
			var line=rodeh.graf.linea({
				name:param.line+"|"+codo.num,
				nameNoGenerate:true,
				position:{x1:x1,y1:y1,x2:x2,y2:y2},
				event:[
				{on:"mouseover"	,go:rodeh.graf.fx.linea.over},
				{on:"mousedown"	,go:rodeh.graf.fx.linea.click},
				{on:"mouseout"	,go:rodeh.graf.fx.linea.out}],
				style:((inst.object.style)?inst.object.style:false),
				size:1,zIndex:inst.object.zIndex,color:inst.object.color,target:inst.object.target
			});
			inst.lineas[codo.num]=line;
		},
		positionsToObject:function(string)
		{
			var pos=string.split(",");
			var p=[];
			for(var k=0;k<pos.length;k+=4)
			{
				p[p.length]={
					x1:parseInt(pos[k]),
					y1:parseInt(pos[k+1]),
					x2:parseInt(pos[k+2]),
					y2:parseInt(pos[k+3])
				}
			}
			return p;
		},
		positionsToString:function(id)
		{
			var inst=rodeh.graf.database.codo[id];
			var rt="";
			rt+=inst.puntas.x1+","+inst.puntas.y1+",";
			for(var i=0;i<inst.codos.length;i++)
			{
				rt+=inst.codos[i].position.x+","+inst.codos[i].position.y+","+inst.codos[i].position.x+","+inst.codos[i].position.y+",";
			}
			rt+=inst.puntas.x2+","+inst.puntas.y2;
			return rt;
		},
		getInst:function(id)
		{
			var ard=id.split("|");
			return {linea:ard[0],punto:ard[1]}
		},
		getInstCodo:function(id)
		{
			//window.status=id;
			var ard=id.split("|");
			return {codo:ard[0],linea:parseInt(ard[1]),punto:parseInt(ard[2])}
		},
		getCodo:function(id)
		{
			//window.status=id;
			var ard=id.split("|");
			return {codo:ard[0],num:parseInt(ard[1])}
		},
		getLineNameOfCodo:function(codoid)
		{
			var dataInst=rodeh.graf.fx.tools.getInstCodo(codoid);
			var linea=rodeh.graf.database.codo[dataInst.codo].lineas[dataInst.linea];
			return linea;
		},
		getCodoInstOfCodo:function(codoid)
		{
			var dataInst=rodeh.graf.fx.tools.getInstCodo(codoid);
			var linea=rodeh.graf.database.codo[dataInst.codo];
			return linea;
		},
		getLineInstOfCodo:function(codoid)
		{
			return rodeh.graf.database.linea[rodeh.graf.fx.tools.getLineNameOfCodo(codoid)];
		},
		getPuntoInstOfCodo:function(codoid)
		{
			var punto=rodeh.graf.fx.tools.getInstCodo(codoid).punto;
			var line=rodeh.graf.database.linea[rodeh.graf.fx.tools.getLineNameOfCodo(codoid)];
			return punto;
		},
		object:{
			properties:function(obj)
			{
				var w,h,x1,x2,y1,y2,center,ct,cl,cr,cd;
				w=obj.offsetWidth;
				h=obj.offsetHeight;
				x1=parseInt(obj.style.left);
				x2=x1+w;
				y1=parseInt(obj.style.top);
				y2=y1+h;
				center={
					x:parseInt(x1+(w/2)),
					y:parseInt(y1+(h/2))
				};
				ct={
					x:parseInt(x1+(w/2)),
					y:y1
				};
				cb={
					x:parseInt(x1+(w/2)),
					y:y2
				};
				cl={
					x:x1,
					y:parseInt(y1+(h/2))
				};
				cr={
					x:x2,
					y:parseInt(y1+(h/2))
				};
				return {
					w:w,
					h:h,
					x1:x1,
					x2:x2,
					y1:y1,
					y2:y2,
					center:center,
					ct:ct,
					cb:cb,
					cl:cl,
					cr:cr
				}
			}
		}
	}
};
rodeh.aplication={
	ajax:{
		database:[],
		loadHtml:function(param)
		{
			this.vars=param.vars || false;
			this.target=rodeh.aplication.tools.getTarget(param.target || false);
			this.url=param.url || false;
			this.process=param.process || Math.random();
			this.method=param.method || "GET";
			this.advanced=param.advanced || {};
			this.error="No errors";
			this.launchs=1;
			this.render=function()
			{
				if(!this.probeError()){return false;}
				if(this.advanced.panel && this.advanced.panel.loader){
					rodeh.panel.loader.begin(this.advanced.panel.loader);
				}
				uyh=new rodeh.rpc.xmlhttp({
					variables	:this.vars,
					method    :this.method,
					url		:this.url,
					callback    :{
						_function	:function($)
						{
							var inst=$.arguments.inst;
							var target=inst.target;
							if(inst.advanced.panel && inst.advanced.panel.loader){
								rodeh.panel.loader.end(inst.advanced.panel.loader);
							}
							inst.innerHTML($.request.responseText);
							if(inst.advanced.update)
							{
								inst.advanced.update.interval = inst.advanced.update.interval || 10000;
								rodeh.aplication.ajax.database[inst.process]=inst;
								if(inst.advanced.update.limit)
								{
									if(inst.advanced.update.limit>=inst.launchs)
									{
										inst.launchs+=1;
										inst.interval = setTimeout("rodeh.aplication.ajax.reLaunch('"+inst.process+"');",inst.advanced.update.interval);
									}
								}
								else
								{
									inst.interval = setTimeout("rodeh.aplication.ajax.reLaunch('"+inst.process+"');",inst.advanced.update.interval);
								}
							}
						},
						arguments	:{inst:this}
					}});
			}
			this.probeError=function()
			{
				this.isOk=true;
				if(!this.target)
				{
					this.isOk=false;
					this.error="Target container not Found!";
					rodeh.panel.alert(this.error);
				}
				else if(!this.url)
				{
					this.isOk=false;
					this.error="URL not Found";
					this.target.innerHTML=this.error;
				}
				return this.isOk;
			}
			this.innerHTML=function(html)
			{
				if(this.advanced && this.advanced.html)
				{
					if(this.advanced.html=="new")
					{
						this.target.innerHTML=html;
					}
					else if(this.advanced.html=="begin")
					{
						this.target.innerHTML=html+this.target.innerHTML;
					}
					else if(this.advanced.html=="end")
					{
						this.target.innerHTML+=html;
					}
					else
					{
						this.target.innerHTML=html;
					}

				}
				else
				{
					this.target.innerHTML=html;
				}
			}
		},
		reLaunch:function(process)
		{
			var inst=rodeh.aplication.ajax.database[process]
			inst.render();
		}
	},
	tools:{
		getTarget:function(id)
		{
			return (!id)?false:((typeof id=="object")?id:((document.getElementById(id))?document.getElementById(id):false));
		}
	},
	event:{
		instance:{
			add:function(inst)
			{
				rodeh.event.expand[inst.name]=inst.inst;
			},
			get:function(inst)
			{
				return (!rodeh.event.expand[inst])?false:rodeh.event.expand[inst];
			}
		},
		dispatcher:function(param)
		{
			var name		=param.name || false;
			var _goto		=param._function || false;
			var arguments	=param.arguments || false;
			if(!name){return false;}
			rodeh.event.expand[name]={
				_function	:_goto,
				name	:name,
				arguments:arguments
			};
			//rodeh.event.expand[name]=_goto;
			return true;
		},
		launch:function(event,name,arguments)
		{
			var nameProcess=(!name)?rodeh.event.get(event).id:name;
			//alert(nameProcess)
			if(!rodeh.event.expand[nameProcess])
			{
				return false;
			}
			else
			{
				var process =rodeh.event.expand[nameProcess];
				if(!process._function){return false;}
				if(typeof process._function=='function')
				{
					return process._function({event:event,arguments:process.arguments,param:arguments || false});
				}
				else
				{
					return process._function;
				}
			}
		}
	}
};
rodeh.aplication.ajax.simpleHTML=function(url,target,arguments,callback,method)
{
	var html=new rodeh.rpc.xmlhttp({
		variables	:arguments,
		method	:method || "POST",
		url		:url,
		callback	:{
			_function:function($){
				var tg=$.arguments.target;
				var target=(typeof tg=="object")?tg:document.getElementById($.arguments.target);
				target.innerHTML=$.request.responseText;
				if($.arguments.cb)
				{
					$.arguments.cb();
				}
			},
			arguments:{target:target,cb:callback || false}
		}
	});
};
rodeh.aplication.slide=function(options)
{
	this.options=options || {};
	this.className={
		normal:"",
		selected:"seleccionado"
	};
	this.inHistory=false;
	//this.loader="loaderimage.gif";
	this.loader=rodeh.tools.baseURL()+"imagenes/loading_basic.gif";

	this.engine=function()
	{
		this.target=this.prepareTarget();
		if(!this.target){return false;}
		var img=document.getElementsByTagName("a");
		this.images=[];
		var oThis=this;
		var t=0;
		for(var i=0;i<img.length;i++)
		{
			if(img[i].rel==this.options._for && img[i].href!="")
			{
				this.images[this.images.length]={
					element:img[i],
					url:img[i].href,
					title:img[i].alt || false
				}
				//img[i].href="#javascript";

				//img[i].setAttribute('rel','1212');
				img[i].rel=img[i].rel+"|"+t;
				/*rodeh.event.add(img[i],"click",function(event){
					if(rodeh.browser.isIE)
					{
						var image=rodeh.event.get(event);
						oThis.show(rodeh.tools.element.parent(image),image);
					}
					else
					{
						oThis.show(this,rodeh.event.get(event));
					}
					return false;
				});*/
				img[i].onclick=function(event)
				{
					if(rodeh.browser.isIE)
					{
						var image=rodeh.event.get(event);
						oThis.show(rodeh.tools.element.parent(image),image);
					}
					else
					{
						oThis.show(this,rodeh.event.get(event));
					}
					return false;
				}
				t+=1;
			}
		}
		this.id=this.options._for+"|"+this.options._in;
		this.image=document.createElement("img");
		this.image.style.display="none";
		this.image.id=this.id;
		this.target.appendChild(this.image);

		this.loaderImage = document.createElement("img");
		this.loaderImage.style.display="none";
		this.loaderImage.src = this.loader;
		this.target.appendChild(this.loaderImage);

		if(this.images.length>0)
		{
			this.show(this.images[0].element)
		}
		//alert(this.images.length)
	}
	this.show=function(href,image)
	{
		this.currentLink=href;
		//alert(this.currentLink.childNodes[0])

		//this.currentLink.style.border="2px solid red";

		//alert(href.rel+":"+image)
		//var a=(image)?rodeh.event.get(image):false;
		this.currentImage=image || false;


		this.current=this.currentLink.rel.split("|")[1];
		this.mark();

		this.loading("on");

		this.theImage=new Image();
		var oThis=this;
		rodeh.event.add(this.theImage,"load",function(event){oThis.onload(event);})
		this.theImage.src=this.images[this.current].url;

		//alert(this.images[this.current].url+":"+this.current);
		//this.current=rodeh.event.get(event).rel.split("|")[1];
		//alert(this.current);
	}
	this.onload=function(event)
	{
		this.image.src=this.images[this.current].url;
		if(this.images[this.current].title)
		{
			this.image.alt=this.images[this.current].title;
		}
		//window.status=event;
		//rodeh.hacks.pause(2000);
		this.loading("off");
		//this.image.style.display="";
		new Effect.Appear(this.id, { duration: 2, queue: 'end', afterFinish: function(){} });
	}
	this.loading=function(_on)
	{
		if(_on=="on")
		{
			this.image.style.display="none";
			this.loaderImage.style.display="";
		}
		else if(_on=="off")
		{
			this.loaderImage.style.display="none";
		}
	}
	this.prepareTarget=function()
	{
		var el=document.getElementById(this.options._in);
		if(!el){return false;}
		rodeh.style.set(el,{
			position:"relative",
			textAlign:"center",
			zIndex:2,
			verticalAlign:"middle"
		});

		this.width=el.offsetWidth;
		this.height=el.offsetHeight;
		return el;
	}
	this.mark=function()
	{
		if(this.inHistory)
		{
			this.images[this.inHistory].element.className=this.className.normal;
		}
		this.inHistory=this.current;
		this.images[this.current].element.className=this.className.selected;
	}
}