﻿
(function($) {
$.facebox = function(data) 
{
	$.facebox.init()
	$.facebox.loading()
	$.isFunction(data) ? data.call() : $.facebox.reveal(data)
}

$.facebox.settings = 
{
	loading_image : 'facebox/loading.gif',
	image_types   : [ 'png', 'jpg', 'jpeg', 'gif' ],
	facebox_html  : '\
	<div id="facebox" style="display:none;" > \
	    <div class="popup" id="faceboxDragBar" title="点这里拖动"> \
			      <div class="content" style="position: relative;"> \
			      </div> \
			      <div style="position: absolute;top:8px;right:5px;z-index:100;width:18px;height:18px;overflow:hidden;"> \
				    <a href="#" class="close" style="text-decoration:none;height:17px;width:17px;display:block;" title="点这里关闭显示"> \
				    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a> \
			      </div> \
	    </div> \
	</div>'
}
//				      <img src="js/facebox/xxx.jpg" title="点这里关闭显示" border=0 /> \
$.facebox.loading = function() 
{
	if ($('#facebox .loading').length == 1) return true
	
	$('#facebox .content').empty()
	$('#facebox .body').children().hide().end().
	  append('<div class="loading"><img src="'+$.facebox.settings.loading_image+'"/></div>')
	
	//loading
	var bodyScrollSize=this.getBodyScrollSize();//页面滚动尺寸
	var bodySize=this.getBodySize();//页面尺寸
	//位置
	var left=bodyScrollSize.left;
	var top=bodyScrollSize.top;
	$('#facebox').show();
	var _w=300;
	var _h=62;//同上
	//alert(_w);
	top=(bodySize.height-_h)/2 + top;
	left=(bodySize.width-_w)/2;
	
	$('#facebox').css(
	{
		top:	top ,
		left:	left ,
		width:_w,//loading表格的宽是 250 + 30（边框）
		height:_h
	})
	
	$(document).bind('keydown.facebox', function(e) 
	{
	  	if (e.keyCode == 27) $.facebox.close()
	})
}

$.facebox.reveal = function(data, klass) 
{
	if (klass) $('#facebox .content').addClass(klass)
	$('#facebox .content').append(data)
	$('#facebox .loading').remove()
	$('#facebox .body').children().fadeIn('normal')	
	$('#facebox').show();
	var bodyScrollSize=this.getBodyScrollSize();//页面滚动尺寸
	var bodySize=this.getBodySize();//页面尺寸
	//位置
	var left=bodyScrollSize.left;
	var top=bodyScrollSize.top;

	var _w=$('#facebox .content').width();//这里取的是主体内容的宽度，再加上两边边框的宽，15*2=30
	var _h=$('#facebox .content').height();//同上
	//alert(_w);
	//top=(bodySize.height-_h)/2 ;//+ top;
	top=(425-_h)/2 ;//+ top;
//	left=(bodySize.width-_w);
	left=260;
	$('#facebox').css(
	{   
		top:	top ,
		left:	left ,
		height:	_h,
		width:	_w
	})

}

$.facebox.close = function() 
{
	$(document).unbind('keydown.facebox')
	$('#facebox').fadeOut(function() {
	  $('#facebox .content').removeClass().addClass('content')
	})
	return false
}

$.fn.facebox = function() 
{
	$.facebox.init()
	
	var image_types = $.facebox.settings.image_types.join('|')
	image_types = new RegExp('\.' + image_types + '$', 'i')
	
	function click_handler() 
	{
		$.facebox.loading(true)
		
		// support for rel="facebox[.inline_popup]" syntax, to add a class
		var klass = this.rel.match(/facebox\[\.(\w+)\]/)
		if (klass) klass = klass[1]
		
		// div
		if (this.href.match(/#/)) 
		{
		var url    = window.location.href.split('#')[0]
		var target = this.href.replace(url,'')
		$.facebox.reveal($(target).clone().show(), klass)
		
		// image
		} 
		else if (this.href.match(image_types)) 
		{
			var image = new Image()
			image.onload = function() {
			  $.facebox.reveal('<div class="image"><img src="' + image.src + '" /></div>', klass)
			}
			image.src = this.href
			// ajax
		} 
		else 
		{
			$.get(this.href, function(data) { $.facebox.reveal(data, klass) })
		}
		return false
	}
	
	this.click(click_handler)
	return this
}

$.facebox.init = function() 
{
	if ($.facebox.settings.inited) 
	  	return true
	else 
	  	$.facebox.settings.inited = true
	
	$('body').append($.facebox.settings.facebox_html)
	
	var preload = [ new Image(), new Image() ]
	preload[0].src = $.facebox.settings.close_image
	preload[1].src = $.facebox.settings.loading_image
	
	$('#facebox').find('.b:first, .bl, .br, .tl, .tr').each(function() {
		preload.push(new Image())
		preload.slice(-1).src = $(this).css('background-image').replace(/url\((.+)\)/, '$1')
	})
	
	$('#facebox .close').click($.facebox.close)
	$('#facebox .close_image').attr('src', $.facebox.settings.close_image)
}

//得到当前窗口的滚动的尺寸
$.facebox.getBodyScrollSize=function()
{
	var bodySL, bodyST, bodySW, bodySH; 
	if(window.pageXOffset) 
	{
		bodySL=window.pageXOffset; 
		bodySW=window.innerWidth; 
		bodyST=window.pageYOffset; 
		bodySH=window.innerHeight; 
	}
	else if(document.documentElement&&document.documentElement.clientWidth) //注意这里的条件document.documentElement.clientWidth也可以为scrollLeft....
	{	
		//alert("document.documentElement");
		bodySL=document.documentElement.scrollLeft; 
		bodySW=document.documentElement.scrollWidth; //-10
		bodyST=document.documentElement.scrollTop; 
		bodySH=document.documentElement.clientHeight>document.documentElement.scrollHeight?document.documentElement.clientHeight:document.documentElement.scrollHeight;
	}
	else if(document.body) 
	{
		//alert("document.body");
		bodySL=document.body.scrollLeft; 
		bodySW=document.body.scrollWidth; 
		bodyST=document.body.scrollTop; 
		bodySH=document.body.clientHeight>document.body.scrollHeight?document.body.clientHeight:document.body.scrollHeight;
	}

	return {"top":bodyST,"left":bodySL,"width":bodySW,"height":bodySH};
}

//得到当前窗口宽和高	
$.facebox.getBodySize=function()
{
	var bodyCW, bodyCH; 
	if(window.innerWidth) 
		bodyCW=window.innerWidth; 
	else if(document.documentElement&&document.documentElement.clientWidth) 
		bodyCW=document.documentElement.clientWidth; 
	else if(document.body) 
		bodyCW=document.body.clientWidth; //author: meizz 

	if(window.innerHeight) 
		bodyCH=window.innerHeight; 
	else if(document.documentElement&&document.documentElement.clientHeight) 
		bodyCH=document.documentElement.clientHeight; 
	else if(document.body) 
		bodyCH=document.body.clientHeight; 
	
	return {"width":bodyCW,"height":bodyCH};
}
/*
// getPageScroll() by quirksmode.com
$.facebox.getPageScroll = function() 
{
	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) 
}

// adapter from getPageSize() by quirksmode.com
$.facebox.getPageHeight = function() 
{
	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
}

$.facebox.getPageWidth = function() 
{
	var w
	if (self.innerWidth) {	// all except Explorer
	  w = self.innerWidth;
	} else if (document.documentElement && document.documentElement.clientWidth) { // Explorer 6 Strict Mode
	  w = document.documentElement.clientWidth;
	} else if (document.body) { // other Explorers
	  w = document.body.clientWidth;
	}	
	return w
}
*/
})(jQuery);
