
(function($) {
	var params={
		fixed:true,
		opacity      : 0,
		url			:null,
		html			:"",
		image			:null,
		contentEl		:null,
		modal			:true,
		bodyClass		:null,
		header		:"",
		overlay      : true,
		zIndex		:1337,
		loadingImage : 'loading.gif',
		closeImage   : 'closelabel.gif',
		imageTypes   : [ 'png', 'jpg', 'jpeg', 'gif' ],
		faceboxHtml  : '\
			<div id="facebox" style="display:none;"> \
				<div class="popup"> \
					<table> \
						<tbody> \
							<tr> \
								<td class="tl"/><td class="b"/><td class="tr"/> \
							</tr> \
							<tr> \
								<td class="b"/> \
								<td class="body"> \
									<TABLE width="100%" cellpadding="0" cellspacing="0">\
									<TR>\
										<TD width="99%" class="header">&nbsp;\
										</TD>\
										<TD width="20px" class="closebtn">\
												<a href="#" class="close"> \
													<img src="images/closelabel.gif" title="close" class="close_image" /> \
												</a> \
										</TD>\
									</TR>\
									<tr>\
										<td colspan="2" width="500" class="content">\
										</td>\
									</tr>\
									</TABLE>\
									</td> \
								<td class="b"/> \
							</tr> \
							<tr> \
								<td class="bl"/><td class="b"/><td class="br"/> \
							</tr> \
						</tbody> \
					</table> \
				</div> \
			</div>'
	}

  $.facebox = function(config) {
	$.extend($.facebox.settings, params)
	init(config);
	var klass = null;
    $.facebox.loading()
		if(config.url){
			//console.log("url")
			$.get(config.url, function(data) {
				$.facebox.reveal(data) 
			})
		}else{
			if(config.contentEl){
				//console.log(contentEl)
				$.facebox.reveal($('#'+config.contentEl).clone().show());
			}else{
				//console.log("html")
				if(config.image){
					$.facebox.reveal("<div>"+config.html+"</div>");
				}else{
					$.facebox.reveal("<div>"+config.html+"</div>");
				}
			}
		}
  }

  /*
   * Public, $.facebox methods
   */

  $.extend($.facebox, {
    settings: {},

    loading: function() {
      if ($('#facebox .loading').length == 1) return true
      showOverlay()
      $('#facebox .header').empty()
      $('#facebox .content').empty()
      $('#facebox .body').children().hide().end().
        append('<div class="loading"><img src="'+$.facebox.settings.loadingImage+'"/></div>')

      $('#facebox').css({
       // top:	getPageScroll()[1] + (getPageHeight() / 10),
        //left:	385.5
      }).show()

      $(document).bind('keydown.facebox', function(e) {
        if (e.keyCode == 27) $.facebox.close()
        return true
      })
      $(document).trigger('loading.facebox')
    },
    _nextZ: function() {
        return $.facebox.settings.zIndex++;
    },
	isModalVisible:function(){
		if(jQuery('.boxy-modal-blackout')==null){
			return false;
		}else{
			return false;
		}
	},
    reveal: function(data) {
		if($.facebox.settings.modal==true && $.facebox.isModalVisible()!=true){
			$.facebox.showmodal(true);
		}
      $(document).trigger('beforeReveal.facebox')
		  if($.facebox.settings.image==null){
			 $('#facebox .content').append(data)
		 }else{		
				$('#facebox .content').append("<center><span style='font-size:10pt;font-family:verdana;'><B>"+errs[19]+"</B></span><br><br>")
				$('#facebox .content').append($.facebox.preload[1]);
				$('#facebox .content').append("</center>")
			var preload2= new Image();
			preload2.src= $.facebox.settings.image;
			$(preload2).load(function(){
				$('#facebox .content').html("");
				$('#facebox .content').append(preload2);
				$('#facebox .content').append($.facebox.settings.html);
				$('#facebox .content').css({'text-align':'center'});
				$.facebox.center("facebox");
			});
		 }
      $('#facebox .header').append($.facebox.settings.header);
      $('#facebox .loading').remove()
      $('#facebox .body').children().fadeIn('normal');
	  if($.facebox.settings.bodyClass){
		$('#facebox .content').css($.facebox.settings.bodyClass);
	  }
	  $('#facebox .header').css({display:'block'})
	  if($.facebox.settings.header==""){
			$('#facebox .content').css({'padding-top':'0px','padding-bottom':'15px'})
			$('#facebox .header').removeClass("headera");
			$('#facebox .closebtn').removeClass("headera");
			//$('#facebox .closebtn').css({'margin-top':'2px'})
		}else{
			$('#facebox .closebtn').addClass("headera");
			$('#facebox .header').css({'padding-left':'10px'})
			$('#facebox .content').css({'padding-top':'10px','padding-bottom':'15px'})
			$('#facebox .header').addClass("headera");
		}
	  $.facebox.visible=true;
      $.facebox.center("facebox");
      $('#facebox').css({zIndex:$.facebox._nextZ()})
      $(document).trigger('reveal.facebox').trigger('afterReveal.facebox')
    },
	center: function(layer, doNotAddOffsets) {
		if(typeof layer=="string"){
			layer=document.getElementById(layer);
		};  
		if(layer){  
			var parent= layer.parentNode;/*unless body tag, must have position to relative or absolute*/  
			parent.style.overflow="hidden";  
			layer.style.position="absolute";/*much better if top and left are specified in style, with 'px'*/  
			layer.style.top=layer.style.top||layer.offsetTop+'px';  
			layer.style.left=layer.style.left||layer.offsetLeft+'px';  
			var clientH=0, clientW=0, offsetT=0, offsetL=0, top=0, left=0;  
			if(parent && parent.nodeType==1/*a tag*/){  
				if(parent.nodeName=="BODY"){  
					if(typeof window.innerHeight!="undefined"){
						clientH=window.innerHeight; clientW=window.innerWidth;
					}else if(document.documentElement && document.documentElement.clientHeight){
						clientH=document.documentElement.clientHeight; clientW=document.documentElement.clientWidth;
					}else if(document.body.clientHeight){
						clientH=document.body.clientHeight; clientW=document.body.clientWidth;
					}else{
						clientH=parent.clientHeight; clientW=parent.clientWidth;
					};  
					if(typeof pageYOffset!="undefined"){
						offsetT=pageYOffset; offsetL=pageXOffset;
					}else if(document.documentElement && document.documentElement.scrollTop){
						offsetT=document.documentElement.scrollTop; offsetL=document.documentElement.scrollLeft;
					}else if(document.body && typeof document.body.scrollTop!="undefined"){
						offsetT=document.body.scrollTop; offsetL=document.body.scrollLeft;
					}else{
						offsetT=0; offsetL=0;
					};  
					top=Math.abs(parent.offsetTop + ((clientH/2) - (layer.offsetHeight/2)));  
					left=Math.abs(parent.offsetLeft + ((clientW/2) - (layer.offsetWidth/2)));  
				}else{  
					clientH=parent.offsetHeight; clientW=parent.offsetWidth;  
					offsetT=parent.scrollTop; offsetL=parent.scrollLeft;  
					top=Math.abs(((clientH/2) - (layer.offsetHeight/2))); left=Math.abs(((clientW/2) - (layer.offsetWidth/2)));  
				};  
				if(!doNotAddOffsets){
					top+=offsetT; left+=offsetL;
				};  
				layer.style.top=top+'px';//comment out to avoid positioning and allow returning only  
				layer.style.left=left+'px';//comment out to avoid positioning and allow returning only  
				return [top, left, top+'px', left+'px'];  
			}
		}
    },
	showmodal:function(op){ 
		if(op){
			jQuery('<div id="modal" class="facebox-modal-blackout"></div>')
					.css({zIndex: $.facebox._nextZ(),
						  opacity: 0.3,
						  width: jQuery(document).width(),
						  height: jQuery(document).height()})
					.appendTo(document.body);
			$(document.body).css({overflow:'hidden'});
		}else{
			$('#modal').fadeOut(200, function(){
				$('#modal').remove()
				$(document.body).css({overflow:'auto'});
			});
		}
	},
    close: function() {
      $(document).trigger('close.facebox')
      return false
    }
  })

  /*
   * Public, $.fn methods
   */

  $.fn.facebox = function(settings) {
   init(settings)
    function clickHandler() {
      $.facebox.loading(true)
      // support for rel="facebox.inline_popup" syntax, to add a class
      // also supports deprecated "facebox[.inline_popup]" syntax
      var klass = this.rel.match(/facebox\[?\.(\w+)\]?/)
      if (klass) klass = klass[1]
      return false
    }

    return this.click(clickHandler)
  }
var facebox = function(){facebox.superclass.constructor.call(this);}
  /*
   * Private methods
   */

  // called one time to setup facebox on this page
  function init(settings) {
 
    $.extend($.facebox.settings, params)
	if (settings) $.extend($.facebox.settings, settings)
    if ($.facebox.settings.inited) return true
    else $.facebox.settings.inited = true
	var config = $.facebox.settings
    $(document).trigger('init.facebox')
    makeCompatible()

    $('body').prepend($.facebox.settings.faceboxHtml)

    $.facebox.preload = [ new Image(), new Image() ]
    $.facebox.preload[0].src = $.facebox.settings.closeImage
    $.facebox.preload[1].src = $.facebox.settings.loadingImage

    $('#facebox').find('.b:first, .bl, .br, .tl, .tr').each(function() {
      $.facebox.preload.push(new Image())
      $.facebox.preload.slice(-1).src = $(this).css('background-image').replace(/url\((.+)\)/, '$1')
    })

    $('#facebox .close').click($.facebox.close)
    $('#facebox .close_image').attr('src', $.facebox.settings.closeImage)
	
  }
  
  // getPageScroll() by quirksmode.com
  function getPageScroll() {
    var xScroll, yScroll;
    if (self.pageYOffset) {
      yScroll = self.pageYOffset;
      xScroll = self.pageXOffset;
    } else if (document.documentElement && document.documentElement.scrollTop) {	 // Explorer 6 Strict
      yScroll = document.documentElement.scrollTop;
      xScroll = document.documentElement.scrollLeft;
    } else if (document.body) {// all other Explorers
      yScroll = document.body.scrollTop;
      xScroll = document.body.scrollLeft;	
    }
    return new Array(xScroll,yScroll) 
  }

  // Adapted from getPageSize() by quirksmode.com
  function getPageHeight() {
    var windowHeight
    if (self.innerHeight) {	// all except Explorer
      windowHeight = self.innerHeight;
    } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
      windowHeight = document.documentElement.clientHeight;
    } else if (document.body) { // other Explorers
      windowHeight = document.body.clientHeight;
    }	
    return windowHeight
  }

  // Backwards compatibility
  function makeCompatible() {
    var $s = $.facebox.settings

    $s.loadingImage = $s.loading_image || $s.loadingImage
    $s.closeImage = $s.close_image || $s.closeImage
    $s.imageTypes = $s.image_types || $s.imageTypes
    $s.faceboxHtml = $s.facebox_html || $s.faceboxHtml
  }
  function skipOverlay() {
    return $.facebox.settings.overlay == false || $.facebox.settings.opacity === null 
  }

  function showOverlay() {
    if (skipOverlay()) return

    if ($('facebox_overlay').length == 0) 
      $("body").append('<div id="facebox_overlay" class="facebox_hide"></div>')

    $('#facebox_overlay').hide().addClass("facebox_overlayBG")
      .css('opacity', $.facebox.settings.opacity)
      .click(function() { $(document).trigger('close.facebox') })
      .fadeIn(200)
    return false
  }

  function hideOverlay() {
    if (skipOverlay()) return

    $('#facebox_overlay').fadeOut(200, function(){
      $("#facebox_overlay").removeClass("facebox_overlayBG")
      $("#facebox_overlay").addClass("facebox_hide") 
      $("#facebox_overlay").remove()
    })
    
    return false
  }

  /*
   * Bindings
   */

  $(document).bind('close.facebox', function() {
    $(document).unbind('keydown.facebox')
    $('#facebox').fadeOut(function() {
      $('#facebox .content').removeClass().addClass('content')
		$.facebox.showmodal(false);
		hideOverlay()
      $('#facebox .loading').remove()
    })
  })

})(jQuery);