var divPopup,
    divPopupBackground,
    divPopupContent ;

function popup(content, fnct, speed, clickOutside, elementClose, width, height){
	// Definir los elementos básicos del popup
	var htmlPopup = '';
	htmlPopup    += '<div id="popup">';
	htmlPopup    += '  <div id="popupContent">';
	htmlPopup    += '  </div>';
	htmlPopup    += '  <div id="popupBackground">';
	htmlPopup    += '  </div>';
	htmlPopup    += '</div>';


	// Inicializar parámetros no definidos en la función.
	speed = speed ? speed : "normal" ;
	clickOutside = clickOutside ? true : false ;
	elementClose = (!elementClose || elementClose=='') ? null : elementClose ;


	// Eliminar si ya existe otro popup y agregar el código del nuevo popup a crear.
	$('#popup').remove();
	$('body').prepend(htmlPopup);


	// Simplificar referencias a los elementos insertados.
	divPopup           = $('#popup');
	divPopupBackground = $('#popupBackground');
	divPopupContent    = $('#popupContent');

	// FIX IE6: Ocultar los selects que estén fuera del popup, porque se muestran por encima de todo.
	if(isIE6()){
		$('select').css('visibility','hidden');
		$('#popup select').css('visibility','visible');
	}


    var cssObj = { 'position':'absolute','width':'100%','height':'100%','margin':'0','padding':'0','top':'0','left':'0','z-index':'9999'}
	divPopup.css(cssObj);

	// Aplicar estilos del fondo.
    cssObj = { 'position':'absolute','width':'100%','height':'100%','margin':'0','padding':'0','top':'0','left':'0','z-index':'1'}
	divPopupBackground.css(cssObj);


	// Aplicar estilos del contenedor.
    cssObj = { 'position':'fixed','display':'none','top':'0','left':'0','z-index':'2'}
	divPopupContent.css(cssObj);
    if(isIE6())
      divPopupContent.css('position','absolute');



	// Asignar el alto y ancho del contenedor, si están definidos correctamente.
	if(!isNaN(width)) divPopupContent.width(width);
	if(!isNaN(height))divPopupContent.height(height);


	// Insertar el contenido del popup.
	divPopupContent.html(content);


	// Ajusta la posición del popup y dimensiones del fondo en la ventana.
	// Y lo recalcula cada vez que que el usuario modifique la ventana.
	popupPosAdjust();
	$(window).resize(popupPosAdjust);


	// Mostrar el contenedor.
	divPopupContent.fadeIn(speed);


	// Si se indica la opción de cerrar al hacer clic fuera del popup, asiganar la acción al fondo.
	if(clickOutside==true) divPopupBackground.click( function(){ popupClose(speed) } );


	// Si se indica un elemento para cerrar el popup, asignar la acción al mismo.
	if(elementClose!=null) $(elementClose).click( function(){ popupClose(speed); } );


	// Ejecutar la función opcional, si existe.
	if(fnct!=undefined && fnct!='' ) try{ eval(fnct)}catch(e){};

}




function popupPosAdjust(){

	// Asignar la nueva posición.
	$('#popupContent').css('top',posY()+'px');
	$('#popupContent').css('left',posX()+'px');


	// Ajusta las dimensiones del fondo.
	$('#popupBackground').width($('body').width());
	$('#popupBackground').height($('body').height());


}

function posY(){
  var popUpHeight  = divPopupContent.height();
  var windowHeight = $(window).height();
  var y = 0;
  if(popUpHeight<windowHeight)
     y = (windowHeight-popUpHeight)/4;
  if(isIE6())   /* IE6 fix */
     y += $(document).scrollTop();
  return parseInt(y);
}

function posX(){
  var popUpWidth  = divPopupContent.width();
  var windowWidth = $(window).width();
  var x = 0;
  if(popUpWidth<windowWidth)
     x = (windowWidth-popUpWidth)/2;
  return parseInt(x);
}




function popupClose(speed){

	// Inicializar 'speed' si no está definida en la función.
    switch(speed){
      case "fast":
      case "normal":
      case "slow":
            speed = speed;
            break;
      default:
            speed = "normal";
            break;
    }

	// Remover el fondo primero.
	$('#popupBackground').remove();


	// Desvanecer el contenedor con la velocidad indicada.
	// Luego de desvanecer, remover todo el código del popup
	$('#popupContent').fadeOut(speed,function(){

      $('#popup').remove();
      // FIX IE6: restablecer la visibilidad de los select, ocultados en la función 'popup'.
	  if(isIE6()) $('select').css('visibility','');
	});

    return false;
    
}




function isIE6(){
  if($.browser.msie&&parseInt($.browser.version)<7)  return true;
  return false;
}



function newPopUpLoadContent(urlToLoad, fnct, clickOutside, elementClose, width, height, posX, posY){
   $('body').css('cursor','wait');
    showLoading(posX,posY);
    var peticion = $.ajax({
                     url:        urlToLoad,
                     method:     'GET',
                     dataType:   'html',
                     success:    function(html){ $('body').css('cursor','auto'); newPopUp(html,fnct,clickOutside,elementClose,width,height); },
                     error:      function(){ $('body').css('cursor','auto');  hideLoading(); alert('Error al cargar content.');  return false;}
     });
}
function newPopUpExternalPage(urlToLoad, fnct, clickOutside, elementClose, width, height){
   var html = '<iframe width="100%" height="100%" border="0" src="'+urlToLoad+'"></iframe> ';
   newPopUp(html,fnct,true,'',width,height);
}

function showLoading(posX,posY){
  $('#popUpPreload').remove();
  $('body').append('<div id="popUpPreload">Loading...</div>');
  $('#popUpPreload').css('top',posY+'px');
  $('#popUpPreload').css('left',posX+'px');
  $('#popUpPreload').fadeIn();
}
function hideLoading(){
    $('#popUpPreload').fadeOut('slow',function(){$(this).remove();});
}


