﻿/**
 * jQuery jYang 
 */
(function($){
	$.LB = {
		config: {
			SC: '',
			FADE_TIME: 300
		},
		init: function(){
			$.LB.bindEvents();
		},
		bindEvents: function(){
			//set lightBox Scroll
			if($('.dialogWrap').is(':visible')){
				$.LB.lbSetScroll();
			}
			$(window).bind('scroll resize', $.LB.lbSetScroll);
		},
		
		// @returns window width	
		calculateScreenWidth: function(){	
			return $(window).width();	
		},		
		// @returns window height		
		calculateScreenHeight: function(){	
			if(document.all){	
				var h = $('body').height();	
				if(h > $(window).height()){	
					return h + 20;
				}else{	
					return $(window).height();	
				}	
			}else{	
				var h = $('html').height();	
				if(h > $(window).height()){	
					return $('html').height();	
				}else{	
					return $(window).height();	
				}	
			}	
		},	
		// @returns the X position that will center an object		
		calculateCenterX: function(obj){	
			return $(window).width()/2 - $(obj).width()/2;	
		},	
		// @returns the Y position that will center an object (adjusted to scroll top)		
		calculateCenterY: function(obj){
			return $(window).scrollTop() + ($(window).height()/2 - $(obj).height()/2);	
		},		
		//lightBox scroll
		lbSetScroll: function(){
			if($('.dialogWrap').is(':visible')){
				clearTimeout($.LB.config.SC);
				$.LB.config.SC = setTimeout($.LB.reposition, $.LB.config.FADE_TIME);
			}
		},		
		//reposition
		reposition: function(){
			$('.dialogWrap').each(function(){
				$(this).stop(true, true).animate({
					left	: $.LB.calculateCenterX($(this)),
					top		: $.LB.calculateCenterY($(this))
				}, $.LB.config.FADE_TIME);
			});
		},
		move: function(e){
			var _move=false,_x,_y,
				self = $('.dialogWrap'),
				dialogW = self.width(),
				dialogH = self.height(),
				windowW = $.LB.calculateScreenWidth(),
				windowH = $('body').height(),
				maxW = windowW- dialogW-2,
				maxH = windowH- dialogH-2;
			self.bind('click', function(){
				//
			}).bind('mousedown', function(e){
				_move=true;
				_x = e.pageX - parseInt(self.css("left"));
				_y = e.pageY - parseInt(self.css("top"));
				self.fadeTo(20, 0.25);
			});				
			$(document).mousemove(function(e){
				if(_move){						
					var x = e.pageX-_x,
						y = e.pageY-_y;
					_currL = x > maxW ? maxW : (x < 0 ? 0 : x);
					_currT = y > maxH ? maxH : (y < 0 ? 0 : y);
					self.css({top: _currT, left: _currL});
				}
			}).mouseup(function(){
				_move=false;
				self.fadeTo("fast", 1);
		  });
		}
	};
	
})(jQuery);

(function($){
	//show panels in center
	$.fn.showPanelCenter = function(){
		this.each(function(){
			var coorX = ($(window).width() - $(this).width())/2;
			var coorY = ($(window).height() - $(this).height())/2;
			coorX = $(window).scrollLeft() + ((coorX>0)?coorX:0);
			coorY = $(window).scrollTop() + ((coorY>0)?coorY:0);
			$(this).showPanelPosition(coorX, coorY);
		});
		
		return this;
	};
	
	//show panels in position
	$.fn.showPanelPosition = function(x, y){
		this.each(function(){
			$(this)
				.css({
					"left": x,
					"top": y
				})
				.fadeIn();
		});
		
		return this;
	};
	
	//fadeout to remove an element
	$.fn.foRemove = function(during){
		during = during ? during : 600;
		this.each(function(){
			var obj = $(this);
			obj.animate({
				opacity: 0
			}, during, function(){
				obj.remove();
			});
		});
		
		return this;
	};
	//textarea max character tips
	$.fn.maxCharTips = function(maxChar, jQ_objTips){
		this.each(function(i){
			$(this).keyup(function(){
				var str = $(this).val();
				var strLength = str.length;
				var charRemain = maxChar - strLength;
				var strTips = '( 还能输入 ' + maxChar + ' 字 )';
				if(charRemain<0){
					$(this).val(str.substr(0, maxChar));
					
					strTips = '( 还能输入 0 字 )';
					jQ_objTips.eq(i).addClass("highlight");
					
					var scrollHeight = $(this)[0].scrollHeight;
					$(this).scrollTop(scrollHeight);
				} else{
					strTips = '( 还能输入 ' + charRemain + ' 字 )';
					jQ_objTips.eq(i).removeClass("highlight");
				}
				jQ_objTips.eq(i).text(strTips);
			});			
		});
		
		return this;
	};
	//textarea max character tips_en
	$.fn.maxCharTips_en = function(maxChar, jQ_objTips){
		this.each(function(i){
			$(this).keyup(function(){
				var str = $(this).val();
				var strLength = str.length;
				var charRemain = maxChar - strLength;
				var strTips = '( ' + maxChar + ' characters remaining )';
				if(charRemain<0){
					$(this).val(str.substr(0, maxChar));
					
					strTips = '( 0 characters remaining )';
					jQ_objTips.eq(i).addClass("highlight");
					
					var scrollHeight = $(this)[0].scrollHeight;
					$(this).scrollTop(scrollHeight);
				} else{
					strTips = '( ' + charRemain + ' characters remaining )';
					jQ_objTips.eq(i).removeClass("highlight");
				}
				jQ_objTips.eq(i).text(strTips);
			});			
		});
		
		return this;
	}
	
})(jQuery);

/**
 * jQuery Dialog 
 */

(function($){
		  
$.jYang = {
	alertBox: function(msg){
		this.dialog.alert({
			id     : 'jYang-dialog-alert',
			title  : 'Alert',
			msg    : '<p class="txtMessage"><span>' + msg + '</span></p>',
			button : {
				func : function(event){
					this.destroy();
				}
			}
		}).open();
	},

	alertBoxInDialog: function(msg){
		this.dialog.alert({
			id     : 'jYang-dialog-alert',
			title  : 'Alert',
			msg    : '<p class="txtMessage"><span>' + msg + '</span></p>',
			button : {
				func : function(event){
					this.destroy();
					$("#overlay01").fadeIn();
				}
			}
		}).open();
	},

	confirmBox: function(msg, fn){
		this.dialog.confirm({
			id      : 'jYang-dialog-confirm',
			title   : 'Confirm',
			msg     : '<p class="txtMessage"><span>' + msg + '</span></p>',
			buttonY : {
				func : function(event){
					var self = this;
					this.destroy();					
					fn.apply(self, arguments);
				}
			},
			buttonN : {
				func : function(event){
					this.destroy();
				}
			}
		}).open();
	},
	dialog: {
		alert: function(setting){
			return this._alert._create(setting);
		},
		confirm: function(setting){
			return this._confirm._create(setting);
		},
		_alert: {
			options: {
				id        : "jYang-dialog-alert",
				title     : "Alert",
				msg       : "",
				overlay   : true,
				button    : {
					id       : "jYang-dialog-btnClose",
					cssClass : "btnDialog01",
					text     : "Close",
					data     : {},
					func     : function(){
						this.destroy();
					}
				}
			},
			_create: function(setting){
				var self = this,
					options = $.extend(true, {}, self.options, setting);
					
				if(self.jYangDialog) self.destroy();
				
				var	id = options.id,
					title = options.title,
					msg = options.msg,
					
					jYangDialog = (self.jYangDialog = $('<div></div>'))
						.appendTo(document.body)
						.fadeOut()
						.addClass('dialogWrap')
						.attr('id', id),
					
					jYangDialogTitle = (self.jYangDialogTitle = $('<h3></h3>'))
						.addClass('title')
						.text(title)
						.appendTo(jYangDialog),
					
					jYangDialogContent = (self.jYangDialogContent = $('<div></div>'))
						.addClass('content')
						.appendTo(jYangDialog),
					
					jYangDialogMessage = (self.jYangDialogMessage = $(msg))
						.appendTo(jYangDialogContent),
					
					jYangDialogButtonPanel = (self.jYangDialogButtonPanel = $('<div></div>'))
						.addClass('botButtonWrap')
						.appendTo(jYangDialogContent);
				
				self._createButtons(options.button);
				
				if(options.overlay) $('#overlay01').click(function(){self.destroy();});
				
				return self;
			},
			_createButtons: function(button){
				var self = this;
				
				var jYangDialogButton = $('<a href="#01"></a>')
					.attr('id', button.id)
					.addClass(button.cssClass)
					.text(button.text)
					.bind('click', button.data, function(){button.func.apply(self, arguments);})
					.appendTo(self.jYangDialogButtonPanel);
				
				return jYangDialogButton;
			},
			destroy: function(){
				var self = this,
					options = self.options;
				
				$('#overlay01').fadeOut();
				self.jYangDialog.remove();
			},
			open: function(){
				var self = this,
					options = self.options;
					
				if(options.overlay) $('#overlay01').fadeIn();
				self.jYangDialog.showPanelCenter();
				$.LB.move();
				return self;
			},
			close: function(){
				var self = this,
					options = self.options;
					
				$('#overlay01').fadeOut();
				self.jYangDialog.fadeOut();
				
				return self;
			}
		},
		_confirm: {
			options: {
				id        : "jYang-dialog-confirm",
				title     : "Confirm",
				msg       : "",
				overlay   : true,
				buttonY   : {
					id    : "jYang-dialog-btnYes",
					cssClass : "btnDialog01",
					text  : "Yes",
					data  : {},
					func  : function(){}
				},
				buttonN   : {
					id    : "jYang-dialog-btnNo",
					cssClass : "btnDialog02",
					text  : "No",
					data  : {},
					func  : function(){
						this.destroy();
					}
				}
			},
			_create: function(setting){
				var self = this,
					options = $.extend(true, {}, self.options, setting);
				
				if(self.jYangDialog) self.destroy();
					
				var	id = options.id,
					title = options.title,
					msg = options.msg,
					
					jYangDialog = (self.jYangDialog = $('<div></div>'))
						.appendTo(document.body)
						.fadeOut()
						.addClass('dialogWrap')
						.attr('id', id),
						
					jYangDialogTitle = (self.jYangDialogTitle = $('<h3></h3>'))
						.addClass('title')
						.text(title)
						.appendTo(jYangDialog),
					
					jYangDialogContent = (self.jYangDialogContent = $('<div></div>'))
						.addClass('content')
						.appendTo(jYangDialog),
						
					jYangDialogMessage = (self.jYangDialogMessage = $(msg))
						.appendTo(jYangDialogContent)
						
					jYangDialogButtonPanel = (self.jYangDialogButtonPanel = $('<div></div>'))
						.addClass('botButtonWrap')
						.appendTo(jYangDialogContent);
					
				self._createButtons(options.buttonY);
				self._createButtons(options.buttonN);
				
				if(options.overlay) $('#overlay01').click(function(){self.destroy();});
				
				return self;
			},
			_createButtons: function(button){
				var self = this;
				
				var jYangDialogButton = $('<a href="#01"></a>')
					.attr('id', button.id)
					.addClass(button.cssClass)
					.text(button.text)
					.bind('click', button.data, function(){button.func.apply(self, arguments);})
					.appendTo(self.jYangDialogButtonPanel);
				
				return 	jYangDialogButton;
			},
			destroy: function(){
				var self = this,
					options = self.options;
				
				$('#overlay01').fadeOut();
				self.jYangDialog.remove();
			},
			open: function(){
				var self = this,
					options = self.options;
					
				if(options.overlay) $('#overlay01').fadeIn();
				self.jYangDialog.showPanelCenter();
				$.LB.move();
				return self;
			},
			close: function(){
				var self = this,
					options = self.options;
					
				$('#overlay01').fadeOut();
				self.jYangDialog.fadeOut();
				
				return self;
			}
		}
	}
}

})(jQuery);
