$(document).ready(function (){
	
});

/////////////////////////////////// DIALOGOS

	var dialogoAbierto=new Array();


/////// (inicio) MÉTODOS PRINCIPALES

	//fuente -> $(this) 
	// dialogoTipo -> modal, desplegable, otro 
	// ventana -> el cuadro de diálogo 
	// callBack -> función que se ejecuta después de abrir el cuadro de dialogo
	// orientacion -> bottom, top, left, right (posicion de la capa)
	// margen -> Un Array: 0 -> top, 1 -> right, 2-> bottom, 3-> left : especificar el margen en función de la orientacion.
	// comportamiento -> absoluto, relativo : especifica de que forma de calcula la posicion del widget.
	function dialogoAbrir(fuente, dialogo, dialogoTipo, orientacion, margen, comportamiento, callBack){
		if(!dialogoEstaAbierto(dialogo)){
			if(dialogoTipo==null || dialogoTipo=="desplegable"){
				for(i=0;i<dialogoAbierto.length;i++)
					dialogoCerrar(dialogoAbierto[i]);			
				
				
				// se posiciona el elemento...
				alinearDialogoConFuente(fuente,dialogo,orientacion,margen, comportamiento);	
				mostrarDialogo(dialogo);
			}
			else if(dialogoTipo=="modal"){
				// se abre en un thickBox	
			}
			else{
				// no es celoso ;)
				
			}
			dialogoAbierto.push(dialogo);
		}
		else
			dialogoCerrar(dialogo,callBack);
		
		//
		if(callBack!=null)
			callBack();
	}
	
	function dialogoCerrar(dialogo, callBack){
		$("#"+dialogo).hide();
		dialogoAbierto.splice(dialogoAbierto.indexOf(dialogo),1);
		
		//
		if(callBack!=null)
			callBack();
	}
	
	function dialogoBlink(fuente, dialogo, dialogoTipo, orientacion, margen, callBack){
		dialogoAbrir(fuente, dialogo, dialogoTipo, orientacion, margen, callBack);
		$("#"+dialogo).cyclicFade({
			repeat: 3, // las veces que se repetirá el efecto: 0(es infinito)
			params: [
				{fadeout:100, stayout:200, opout:0, fadein:100, stayin:100, opin:1.0}
			]
		});
		dialogoCerrarConTimer(dialogo,4);
		
		//
		if(callBack!=null)
			callBack();
	}

/////////// (fin) MÉTODOS PRINCIPALES
	
	
	function alinearDialogoConFuente(fuente, dialogo, orientacion, margen, comportamiento){
		//DEBERÍA TENER CONTROL DE SI HAY ESPACIO
		//a la derecha o a la izquierda o debajo,
		//a los efectos de alinear el objeto en 
		//función del espacio disponible
		var margen_null = true;
		var margen_top = 6;
		var margen_right = 6;
		var margen_bottom = 6;
		var margen_left = 6;				
		
		if(margen==null){
			margen_top=6+fuente.height();
			margen_right=6+fuente.width();
			margen_bottom=6+fuente.height();
			margen_left=6+fuente.width();			
		}
		else{
			var margen_null = false;
			if(margen[0] != "undefined" && !isNaN(margen[0])){
				 margen_top=fuente.height()+parseInt(margen[0]);
			}
			if(margen[1] != "undefined" && !isNaN(margen[1])){
				 margen_right=fuente.height()+parseInt(margen[1]);
			}
			if(margen[2] != "undefined" && !isNaN(margen[2])){
				 margen_bottom=fuente.height()+parseInt(margen[2]);
			}
			if(margen[3] != "undefined" && !isNaN(margen[3])){
				 margen_left=fuente.height()+parseInt(margen[3]);
			}			
		}
		
		if(orientacion==null || orientacion=="bottom"){
			if(margen_null){
				$("#"+dialogo).css("left",fuente.offset().left+"px");
			}
			else{
				$("#"+dialogo).css("left",parseInt(fuente.offset().left+margen_left)+"px");
			}
			$("#"+dialogo).css("top",(fuente.offset().top+margen_top)+"px");
		}
		else if(orientacion=="top"){
			$("#"+dialogo).css("left",fuente.offset().left+"px");
			$("#"+dialogo).css("top",(fuente.offset().top+margen_top)+"px");
		}
		else if(orientacion=="right"){		
			if(comportamiento == null || comportamiento == "absoluto"){
				$("#"+dialogo).css("left",(fuente.offset().left)+"px");
			}
			else if( comportamiento == "relativo"){
				$("#"+dialogo).css("left",parseInt(fuente.position().left+6+fuente.width())+"px");
			}
			
			$("#"+dialogo).css("top",(fuente.position().top+margen_top)+"px");
		}
		else{
			$("#"+dialogo).css("left",fuente.offset().left+"px"+margen+fuente.width());
			$("#"+dialogo).css("top",(fuente.offset().top)+"px");		
		}
	}
	
	function mostrarDialogo(dialogo){
		$("#"+dialogo).fadeIn("fast");	
	}
	
	function dialogoCerrarConTimer(dialogo,tiempo){
		var timerID=setTimeout("dialogoCerrar('"+dialogo+"')", tiempo);

	}

	function dialogoEstaAbierto(dialogo){
		if(dialogoAbierto.indexOf(dialogo)!=-1)
			return(true);
		else
			return(false);
	}
	
	if(!Array.indexOf){ //FIX indexOf in IE.
	    Array.prototype.indexOf = function(obj){
	        for(var i=0; i<this.length; i++){
	            if(this[i]==obj){
	                return i;
	            }
	        }
	        return -1;
	    }
	}

////////////////////////////////// DIALOGOS