function cmwMenu(contenedor,flashDiv, dirImg){
	//Datos principales
	this.nombre ="cmMenu";
	this.contenedor = contenedor;
	this.id ="#"+this.nombre;
	this.mp = this.nombre+"Principal";
	this.idmp = "#"+this.mp;
	this.ms = this.nombre+"Secciones";
	this.idms = "#"+this.ms;
	//Flash
	this.flash = "cmmFlashMenu";
	this.flashDiv = flashDiv;
	this.flashVars = new Array();
	this.flashClaves = new Array();

	//Direcciones
	this.dirSis = "./sistema/";
	this.dirImg = dirImg;
	this.dirMods = "./modulos/";
	
	//Secciones
	this.secciones = new Array();
	this.mps = new Array();
	this.mss = new Array();

	//Clases
	this.cssMP = this.nombre+"MP" //Menu Principal
	this.cssMPSel = this.cssMP+"Sel"; //Para Seleccion de fila
	this.cssMS = this.nombre+"MS"; //Menu de salida vertical
	this.cssImg = this.cssMS+"Flecha"; //Flecha para distinguir padres
	this.cssImgSel = this.cssMS+"FlechaSel"; //Flecha para distinguir apertura de secci&oacute;n
	this.cssCebra = this.cssMS+"FondoGris"; //Para cebreado de celdas
	
	//Funciones
	this.iniciar=iniciar;
	this.armarMenu=armarMenu;
	this.armarSeccion=armarSeccion;
	this.acciones=acciones;
	this.accionesMenuPrincipal=accionesMenuPrincipal;
	this.accionesMenuSecciones=accionesMenuSecciones;
	//Flash
	this.armarFlashVars=armarFlashVars;
	this.obtenerFlashVars=obtenerFlashVars;
	
	//Variables de interaccion de salida de men&uacute;es y desapariciones
	this.msPadres = new Array();
	this.msPadresSalidas = new Array();
	this.mouseDentro = null;
	this.seccionAbierta = null;
	this.cierreTiempo = 3000;
	this.cierreIntervalo = null;
	//Funcion para intervalo
	this.cerrarSeccion=cerrarSeccion;
		
	//Arranca el armado del menu
	this.iniciar();
}

function iniciar(){
	var clase=this;
	$(clase.contenedor).append("<div id='"+clase.nombre+"'><div id='"+clase.mp+"'></div><div id='"+clase.ms+"'></div></div>");
	$.post(clase.dirSis+"cmworks/herramientas/menuDatos.php",null,function(data){
		var datos = data.split("//\\");
		jQuery.each(datos,function(){
			var seccion = new Array();
			var variables = this.split("**");
			jQuery.each(variables,function(){
				var cv = this.split("::");
				var clave = cv[0];
				var valor = cv[1];
				if(!(clave == "")) seccion[clave] = valor;
			});
			seccion['id_padre'] == 0 ? clase.mps.push(seccion) : clase.mss.push(seccion);
			clase.secciones.unshift(seccion);
		});
		clase.armarMenu();
		clase.acciones();
	});
}

function armarMenu(){
	var clase = this;
	var mp = "";
	var aLink = "";
	var seccion = "";
	var imgClase = '';
	
	clase.mps.sort(function orden(a,b){ return a['orden'] - b['orden']; });
	jQuery.each(clase.mps,function(){
		mp = "<div id='"+clase.nombre+""+this['id']+"' class='"+clase.cssMP+"'>";
		if(this['link'].length > 0) mp += '<a href=\''+this['link']+'\'>';
		mp += "<div class='"+clase.cssMP+"Izq'></div>";
		mp += "<div class='"+clase.cssMP+"Img'><img src='"+clase.dirImg+""+this['icono']+"' alt='' title='' /></div>"
		mp += "<div class='"+clase.cssMP+"Centro'><div>"+this['nombre']+"</div></div>";
		mp += "<div class='"+clase.cssMP+"Der'></div>";
		if(this['link'].length > 0) mp += "</a>";
		mp += "</div>";
		$(clase.idmp).append(mp);
		clase.armarSeccion(this['id'],'mp');
	});
}

function armarSeccion(padre,tipo){
	var clase=this;
	var secciones = new Array();
	var id = clase.cssMS+""+padre;
	var idPadre = clase.nombre+""+padre;
	var selectorCebra  = "odd";
	
	for(var j=0; j<clase.mss.length; j++){
		var seccion = clase.mss[j];
		if(seccion['id_padre'] == padre) secciones.push(seccion);
	}
	
	if(secciones.length > 0){
		if(!(tipo == 'mp')){
			$("#"+idPadre+" span:first").addClass(clase.cssImg); //Agrego la flecha que indica que es padre
			if(!($("#"+idPadre).hasClass(clase.cssCebra))) selectorCebra = "even";
		}
		
		secciones.sort(function orden(a,b){ return a['orden'] - b['orden']; }); //Ordeno seg&uacute;n la variable orden
		
		var mv = "<div id='"+id+"' class='"+clase.cssMS+"'>";
		for(var i=0; i<secciones.length; i++){
			var seccion = secciones[i];
			if(seccion['orden']>0){
				var claseBorde = "";
				if(i == 0) claseBorde += clase.cssMS+"Top ";
				if(i+1 == secciones.length) claseBorde += clase.cssMS+"Bottom ";
				if(seccion['link'].length > 0) mv += '<a href=\''+seccion['link']+'\'>';
				mv += "<div id='"+clase.nombre+""+seccion['id']+"' class='"+claseBorde+"'>";
				mv += 	"<span><span /></span>";
				mv += 	"<span class='"+clase.cssMS+"Texto'><span>"+seccion['nombre']+"</span></span>";
				mv += "</div>";
				if(seccion['link'].length > 0) mv += "</a>";
			}			
		}
		mv += "</div>";
		$(clase.idms).append(mv);
				
		$("#"+id+" div:"+selectorCebra).addClass(clase.cssCebra);
		for(var i=0; i<secciones.length; i++) clase.armarSeccion(secciones[i]['id'],'ms');
	}
}

function acciones(){
	var clase=this;
	
	clase.accionesMenuPrincipal();
	clase.accionesMenuSecciones();	
	
	//Al hacer click por fuera del menu, este se cierra
	$(clase.id).mouseout(function(){ clase.mouseDentro = false; clase.cerrarSeccion(); });
	$(clase.id).mouseover(function(){ clase.mouseDentro = true; });
	$('body').click(function(){ if(!clase.mouseDentro) clase.cerrarSeccion(true); });	
	
	//Arreglos
	//Chrome
	if(jQuery.browser['safari']){ $("."+clase.cssMS+" div").addClass(clase.cssMS+"Safari"); }
	
	//Flash
	clase.armarFlashVars();
	if($(clase.flashDiv).length > 0) cmw.cargarFlash("sistema/flash/menuPrincipal.swf",clase.flash,clase.flashDiv,800,350);
}

function accionesMenuPrincipal(){
	var clase=this;
	$("."+clase.cssMP).click(function(){
		var menu = "#"+clase.cssMS+""+$(this).attr("id").replace(clase.nombre,"");
		
		$("."+clase.cssMP).not(this).removeClass(clase.cssMPSel);
		$(this).toggleClass(clase.cssMPSel)
		$("."+clase.cssMS).not(menu).slideUp("fast"); //Escondo el resto de los menues
		$("."+clase.cssMS+" div span").removeClass(clase.cssImgSel); // Saco la imagen activa a todas las filas
		//Posiciono y muestro el menu elegido
		$(menu).css({ left: $(this).position().left, top: $(this).height() }).slideToggle("fast");
		clase.msPadres = new Array();
		clase.msPadresSalidas = new Array();
	});
		//Acciones generales
	$("."+clase.cssMP+" a").click(function(){	
		var idSeccion = $(this).parent().attr("id").split(clase.nombre);
		cmw.idSeccion = idSeccion[1];
		clase.cerrarSeccion(true,true);
	});
}

function accionesMenuSecciones(){
	var clase = this;
	$("."+clase.cssMS+" div").click(function(){
		var menu = "#"+clase.cssMS+""+$(this).attr("id").replace(clase.nombre,"");
		if($(menu).length > 0){
			var ancho = $(menu).width();
			var posX = $(this).parent().position().left + $(this).parent().width();
			var posTotalX = posX + ancho;
			var anchoCont = $(clase.idms).width();
			var posY = $(this).parent().position().top + $(this).position().top;
			var idPadre = $(this).parent().attr('id');
			var ubicPadre = jQuery.inArray(idPadre,clase.msPadres);
			var spanImg = $(this).children(":eq(0)");
			var salida = "toggle";
			var salidaIzq = false;
			var noCerrar = "";
			
			if(posTotalX > anchoCont) salidaIzq = true;
			//Incluyo el padre para que no se cierre cuando se abran hijos del actual
			if(ubicPadre == -1){
				clase.msPadres.push(idPadre);
				clase.msPadresSalidas.push(salidaIzq);
			} else {
				clase.msPadres = clase.msPadres.slice(0,ubicPadre+1);
				clase.msPadresSalidas = clase.msPadresSalidas.slice(0,ubicPadre+1);
			}
			jQuery.each(clase.msPadres,function(i){
				noCerrar += "[id!="+this+"]";
				if(!(salidaIzq) && clase.msPadresSalidas[i]) salidaIzq = true;
			}); //Menues que NO se cierran
			$("."+clase.cssMS+""+noCerrar).not(menu).slideUp("fast"); //Escondo el resto de los menues
			$("."+clase.cssMS+" div span").not(spanImg).removeClass(clase.cssImgSel); // Saco la imagen activa al resto
			spanImg.toggleClass(clase.cssImgSel); // Coloco la imagen activa
			
			if(salidaIzq){
				posX = $(this).parent().position().left - ancho;
				salida = "slideToggle";
			}
			if($(menu).css("display") == "none") $(menu).css({ left: posX, top: posY });
			eval("$(menu)."+salida+"('fast')");
		}
	});	
	$("."+clase.cssMS+" a div").click(function(){
		var idSeccion = $(this).attr("id").split(clase.nombre);
		cmw.idSeccion = idSeccion[1];
		clase.cerrarSeccion(true,true);
	});
}

function cerrarSeccion(ahora,forzar){
	clase=this;
	if(!forzar) forzar = false;
	clearTimeout(clase.intervaloCierre);
	ahora ? tiempo = true : tiempo = clase.cierreTiempo;
	if(clase.mouseDentro == forzar){
		clase.intervaloCierre = setTimeout(function(){
			$('.'+clase.cssMS).slideUp("fast");
			$('.'+clase.cssImgSel).removeClass(clase.cssImgSel);
			$('.'+clase.cssMPSel).removeClass(clase.cssMPSel);
			clase.seccionAbierta = null;
		},tiempo);
	}
}

function armarFlashVars(){
	var clase = this;
	var variables = "";
	var coma = "";
	jQuery.each(clase.secciones,function(i){
		var seccion = "";
		for(clave in this){
			var valor = this[clave];
			if(!clase.flashVars[clave]) clase.flashVars[clave] = new Array();
			clase.flashVars[clave].push(valor);
			if(i == 0) clase.flashClaves.push(clave);
		}
	});
}

function obtenerFlashVars(){
	var clase = this;
	for(clave in clase.flashVars) cmw.llamarFlash(clase.flash).SetVariable("_root."+clave,clase.flashVars[clave].join("**"));
	cmw.llamarFlash(clase.flash).SetVariable("_root.claves",clase.flashClaves);
	cmw.llamarFlash(clase.flash).SetVariable("_root.separador","**");
}
