﻿;(function($) {

$.extend($.fn, {
	//进度条
	loading: function(options) {
		var options = $.extend({
				action: true,
				text: "加载中……"
			}, options),
			self = this;
		if(self.length==0) self = $(document.body);
		if(options.action){
			$('<div id="loading"/>').appendTo(self)
				.html(options.text)
				.hide()
				.css({
					top: ($.fn.ie6&&self.get(0).tagName.toLowerCase()!='body') ? $(document).scrollTop() : 0,
					right: 0,
					position: ($.fn.ie6||self.get(0).tagName.toLowerCase()!='body')?'absolute':'fixed'
				})
				.show();
		}else{
			$("#loading").fadeOut('fast',function(){$(this).remove();});
		};
	},

	//overlay
	overlay: function(options,id){
		var options = $.extend({//absolute
				position: 'fixed', top: 0, left: 0,
				width: '100%',
				height: '100%',
				opacity: 0.2, background: 'black', zIndex: 99
			}, options),
		id = id || 'overlay';
		if( $.fn.ie6 ) options = $.extend(options, {
			position: 'absolute',
			width: Math.max($(window).width(),$(document.body).width()),
			height: Math.max($(window).height(),$(document.body).height()) });

		return $('<div class="overlay" id="'+id+'"/>')
			.appendTo(document.body)
			.css(options);
	},

	//取得居中位置
	position: function(options){
		var options = $.extend({
				fixx: 0,
				fixy: 0,
				width: 0,
				height: 0
			}, options),
			mod = (this.css("position")=="fixed") ? 0 : 1,
			pTop = $(document).scrollTop()*mod,
			pLeft = $(document).scrollLeft()*mod,
			minTop = pTop;

		pLeft += (($.browser.opera ? document.documentElement.clientWidth : $(window).width()) - (options.width||this.width())) * .5;
		pTop += (($.browser.opera ? document.documentElement.clientHeight : $(window).height()) - (options.height||this.height())) * .5;
		
		pLeft += options.fixx;
		pTop = Math.max(pTop, minTop)+options.fixy;
		
		if(pTop<0) pTop = 0;
		if(pLeft<0) pLeft = 0;
		
		return {top: pTop, left: pLeft};
	},

	//可拖拉
	draggable: function(options, evclass) {
		var options = $.extend({
			}, options),
			handle = options.handle ? $(options.handle, this) : this,
			flag = false,
			__poffset = { left: 0, top: 0 },
			evclass = evclass || 'draggable',
			mod = this.css("position")=="fixed" ? 1 : 0,
			self = this;

		handle.bind("mousedown."+evclass,function(ev){
			flag = true;
			var offset = self.offset();
			__poffset = { left: ev.pageX - offset.left, top: ev.pageY - offset.top };
			$(document).bind("mousemove."+evclass,function(ev){
				if (flag) {
					var offset = self.offset(),
					pTop = $(document).scrollTop(),
					pLeft = $(document).scrollLeft();
					self.css( {
						left : ev.pageX - __poffset.left - pLeft*mod + "px",
						top : ev.pageY - __poffset.top - pTop*mod + "px"
					} );
				}
			});
		}).bind("mouseup."+evclass,function(ev){
			if (flag) {
				var offset = self.offset();
				pTop = $(document).scrollTop(),
				pLeft = $(document).scrollLeft();
				self.css( {
					left : ev.pageX - __poffset.left - pLeft*mod + "px",
					top : ev.pageY - __poffset.top - pTop*mod + "px"
				} );
			}
			flag = false;
			$(document).unbind("mousemove."+evclass);
		});

		return self;
	}

});

})(jQuery);

if ( jQuery.browser.msie ) {
	try{document.execCommand('BackgroundImageCache', false, true);}catch(e){}
	jQuery.fn.extend( { ie6: jQuery.browser.version == '6.0' } );
};

(function($) {
	$.fn.lightBox = function(options) {
		var options = $.extend({
			closeonesc: true,
			overlay: { opacity: 0.2, background: 'black' },
			fixedNavigation: false,
			imageLoading: 'res/img/loading.gif',
			imageBtnPrev: 'res/img/prev.gif',
			imageBtnNext: 'res/img/next.gif',
			imageBtnClose: 'res/img/icon_close.png',
			imageBlank: 'res/img/blank.gif',
			containerBorderSize: 10,
			containerResizeSpeed: 400,
			txtImage: 'Image',
			txtOf: 'of',
			keyToClose: 'c',
			keyToPrev: 'p',
			keyToNext: 'n',
			imageArray: [],
			activeImage: 0,
			zIndex: 1,
			imgs: ''
		},options);

		if($.trim(options.imgs)=='') return false;

		var self = this, imga = options.imgs.split(','), imgn = imga.length;

		function _initialize() {
			_start(this,self);
			return false;
		}

		function _start(obj,self) {
			$('embed, object, select').css({ 'visibility' : 'hidden' });
			_set_interface();
			options.imageArray.length = 0;
			options.activeImage = 0;
			for ( var i = 0; i < imgn; i++ ) {
				options.imageArray.push([imga[i],'']);
			}
			_set_image_to_view();
		}
		function _set_interface() {
			$('body').append('<div id="lightbox"><div id="lightbox_imagebox"><div id="lightbox_databox"><span id="lightbox_currentNumber"></span><a href="#" id="lightbox_btnClose"><img src="' + options.imageBtnClose + '"></a></div><div id="lightbox_image"><img id="lightbox-image"><div style="" id="lightbox_nav"><a href="#" id="lightbox_btnPrev"></a><a href="#" id="lightbox_btnNext"></a></div><div id="lightbox_loading"><a href="#" id="lightbox_loading-link"><img src="' + options.imageLoading + '"></a></div></div></div></div>');	

			if(options.overlay){
				var lightboxOverlay = $('#lightbox_overlay');
				if(lightboxOverlay.length==0){
					lightboxOverlay = $().overlay( $.extend(options.overlay, { position: ($.fn.ie6) ? 'absolute' : 'fixed' }), 'lightbox_overlay' );
			
				};
				if (options.closeonesc) {
					$(document).bind('keydown.lightboxOverlay', function(e) {
						(e.keyCode && e.keyCode == 27 && _finish()); 
					});
				};
			};

			var arrPageSizes = ___getPageSize();
			var arrPageScroll = ___getPageScroll();
			$('#lightbox').css($.extend({
				position: 'absolute', zIndex: 99+options.zIndex, outline: 0
			},$('#lightbox').position())).show();
			$('#jquery-overlay,#lightbox').click(function() {
				_finish();									
			});
			$('#lightbox_loading-link,#lightbox_btnClose').click(function() {
				_finish();
				return false;
			});
			$(window).resize(function() {
				var arrPageSizes = ___getPageSize();
				var arrPageScroll = ___getPageScroll();
				$('#lightbox').css({
					top:	arrPageScroll[1] + (arrPageSizes[3] / 10),
					left:	arrPageScroll[0]
				});
			});
		}
		function _set_image_to_view() {
			$('#lightbox_loading').show();
			if ( options.fixedNavigation ) {
				$('#lightbox-image').hide();
			} else {
				$('#lightbox_databox').css('visibility','hidden');
				$('#lightbox-image,#lightbox_nav').hide();
			}
			var objImagePreloader = new Image();
			objImagePreloader.onload = function() {
				$('#lightbox-image').attr('src',options.imageArray[options.activeImage][0]);
				_resize_container_image_box(objImagePreloader.width,objImagePreloader.height);
				objImagePreloader.onload=function(){};
			};
			options.activeImage = (options.activeImage+imgn)%imgn;
			objImagePreloader.src = options.imageArray[options.activeImage][0];
		};
		function _resize_container_image_box(intImageWidth,intImageHeight) {
			var intCurrentWidth = $('#lightbox_imagebox').width();
			var intCurrentHeight = $('#lightbox_imagebox').height();
			var intWidth = (intImageWidth + (options.containerBorderSize * 2));
			var intHeight = (intImageHeight + (options.containerBorderSize * 2) + 23); 
			var intDiffW = intCurrentWidth - intWidth;
			var intDiffH = intCurrentHeight - intHeight;
			$('#lightbox_imagebox').animate({ width: intWidth, height: intHeight },options.containerResizeSpeed,function() { _show_image(); });
			if ( ( intDiffW == 0 ) && ( intDiffH == 0 ) ) {
				if ( $.browser.msie ) {
					___pause(250);
				} else {
					___pause(100);	
				}
			} 
			$('#lightbox_databox').css({ width: intImageWidth });
			$('#lightbox_btnPrev,#lightbox_btnNext').css({ height: intImageHeight + (options.containerBorderSize * 2) });
		};
		function _show_image() {
			$('#lightbox_loading').hide();
			$('#lightbox-image').fadeIn(function() {
				_show_image_data();
				_set_navigation();
			});
			_preload_neighbor_images();
		};
		function _show_image_data() {
			$('#lightbox_databox').css('visibility','visible');
			//$('#lightbox_databox,#lightbox_databox > *').show();
			if ( options.imageArray.length > 1 ) {
				$('#lightbox_currentNumber').html(( options.activeImage + 1 ) + ' / ' + options.imageArray.length).show();
			}		
		}
		function _set_navigation() {
			$('#lightbox_nav').show();

			$('#lightbox_btnPrev,#lightbox_btnNext').css({ 'background' : 'transparent url(' + options.imageBlank + ') no-repeat' });
			
			if ( options.activeImage != 0 ) {
				if ( options.fixedNavigation ) {
					$('#lightbox_btnPrev').css({ 'background' : 'url(' + options.imageBtnPrev + ') left 25% no-repeat' })
						.unbind()
						.bind('click',function() {
							options.activeImage = options.activeImage - 1;
							_set_image_to_view();
							return false;
						});
				} else {
					$('#lightbox_btnPrev').unbind().hover(function() {
						$(this).css({ 'background' : 'url(' + options.imageBtnPrev + ') left 25% no-repeat' });
					},function() {
						$(this).css({ 'background' : 'transparent url(' + options.imageBlank + ') no-repeat' });
					}).show().bind('click',function() {
						options.activeImage = options.activeImage - 1;
						_set_image_to_view();
						return false;
					});
				}
			}
			
			if ( options.activeImage != ( options.imageArray.length -1 ) ) {
				if ( options.fixedNavigation ) {
					$('#lightbox_btnNext').css({ 'background' : 'url(' + options.imageBtnNext + ') right 25% no-repeat' })
						.unbind()
						.bind('click',function() {
							options.activeImage = options.activeImage + 1;
							_set_image_to_view();
							return false;
						});
				} else {
					$('#lightbox_btnNext').unbind().hover(function() {
						$(this).css({ 'background' : 'url(' + options.imageBtnNext + ') right 25% no-repeat' });
					},function() {
						$(this).css({ 'background' : 'transparent url(' + options.imageBlank + ') no-repeat' });
					}).show().bind('click',function() {
						options.activeImage = options.activeImage + 1;
						_set_image_to_view();
						return false;
					});
				}
			}
			_enable_keyboard_navigation();
		}
		function _enable_keyboard_navigation() {
			$(document).keydown(function(objEvent) {
				_keyboard_action(objEvent);
			});
		}
		function _disable_keyboard_navigation() {
			$(document).unbind();
		}
		function _keyboard_action(objEvent) {
			if ( objEvent == null ) {
				keycode = event.keyCode;
				escapeKey = 27;
			} else {
				keycode = objEvent.keyCode;
				escapeKey = objEvent.DOM_VK_ESCAPE;
			}
			key = String.fromCharCode(keycode).toLowerCase();
			if ( ( key == options.keyToClose ) || ( key == 'x' ) || ( keycode == escapeKey ) ) {
				_finish();
			}
			if ( ( key == options.keyToPrev ) || ( keycode == 37 ) ) {
				if ( options.activeImage != 0 ) {
					options.activeImage = options.activeImage - 1;
					_set_image_to_view();
					_disable_keyboard_navigation();
				}
			}
			if ( ( key == options.keyToNext ) || ( keycode == 39 ) ) {
				if ( options.activeImage != ( options.imageArray.length - 1 ) ) {
					options.activeImage = options.activeImage + 1;
					_set_image_to_view();
					_disable_keyboard_navigation();
				}
			}
		}
		function _preload_neighbor_images() {
			if ( (options.imageArray.length -1) > options.activeImage ) {
				objNext = new Image();
				objNext.src = options.imageArray[options.activeImage + 1][0];
			}
			if ( options.activeImage > 0 ) {
				objPrev = new Image();
				objPrev.src = options.imageArray[options.activeImage -1][0];
			}
		}
		function _finish() {
			$('#lightbox').remove();
			$('#lightbox_overlay').fadeOut(function() { $('#lightbox_overlay').remove(); });
			$('embed, object, select').css({ 'visibility' : 'visible' });
		}
		function ___getPageSize() {
			var xScroll, yScroll;
			if (window.innerHeight && window.scrollMaxY) {	
				xScroll = window.innerWidth + window.scrollMaxX;
				yScroll = window.innerHeight + window.scrollMaxY;
			} else if (document.body.scrollHeight > document.body.offsetHeight){
				xScroll = document.body.scrollWidth;
				yScroll = document.body.scrollHeight;
			} else {
				xScroll = document.body.offsetWidth;
				yScroll = document.body.offsetHeight;
			}
			var windowWidth, windowHeight;
			if (self.innerHeight) {
				if(document.documentElement.clientWidth){
					windowWidth = document.documentElement.clientWidth; 
				} else {
					windowWidth = self.innerWidth;
				}
				windowHeight = self.innerHeight;
			} else if (document.documentElement && document.documentElement.clientHeight) {
				windowWidth = document.documentElement.clientWidth;
				windowHeight = document.documentElement.clientHeight;
			} else if (document.body) {
				windowWidth = document.body.clientWidth;
				windowHeight = document.body.clientHeight;
			}	
			if(yScroll < windowHeight){
				pageHeight = windowHeight;
			} else { 
				pageHeight = yScroll;
			}
			if(xScroll < windowWidth){	
				pageWidth = xScroll;		
			} else {
				pageWidth = windowWidth;
			}
			arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight);
			return arrayPageSize;
		};
		function ___getPageScroll() {
			var xScroll, yScroll;
			if (self.pageYOffset) {
				yScroll = self.pageYOffset;
				xScroll = self.pageXOffset;
			} else if (document.documentElement && document.documentElement.scrollTop) {
				yScroll = document.documentElement.scrollTop;
				xScroll = document.documentElement.scrollLeft;
			} else if (document.body) {
				yScroll = document.body.scrollTop;
				xScroll = document.body.scrollLeft;	
			}
			arrayPageScroll = new Array(xScroll,yScroll);
			return arrayPageScroll;
		};
		function ___pause(ms) {
			var date = new Date(); 
			curDate = null;
			do { var curDate = new Date(); }
			while ( curDate - date < ms);
		};
		_initialize();
		return this;//.unbind('click');//.click(_initialize);
	};
})(jQuery);

