(function($){	
	$.fn.truncatePopup = function(options){
		options = $.extend({
			maxChar:256
		},options);
		return this.each(function(){
			var leadin = $(this).find('.leadIn').remove();
			var closeButton = $('<a class="closeButton" href="#">close</a>')
				.css({'float':'right'})
				.click(function(){
					popup.fade('hide');
					overlay.fade('hide')
					return false;
				});;
			var popup = $(this)
				.clone()
				
				.prepend('<h3>'+leadin.text()+'</h3>')
				.prepend(closeButton)
				.appendTo('body')
				.addClass('popup')
				.css({
					display:'none',
					position:'absolute'
				})

			var originaltext = $(this).text();
			var newText = '';
			
			var count = 0;
			for (var i=0;i<originaltext.length;i++){
				if(count> options.maxChar && !originaltext.charAt(i).match(/\S/))					
					break;
				if (!originaltext.charAt(i).match(/\t,\n/)) {
					newText += originaltext.charAt(i);
					count++;
				}
			};
			
			var overlay = $('#popup-overlay').length?$('#popup-overlay'):
				$('<div></div>')
					.attr('id','popup-overlay')
					.css({
						'background-color':'#000',
						opacity:.5,
						position:'absolute',
						width:'100%',					
						top:0,
						left:0,
						bottom:0,
						display:'none',
						'z-index':150
					})
					.appendTo('body')
					.click(function(){
						popup.fade('hide');
						overlay.fade('hide')
						return false;
					});
			$(this)
				.empty()
				.append(
					$('<p>'+newText+'</p>')
						.prepend(leadin)
						.append(' [')
						.append($('<a href="#">more...</a>')
							.click(function(){
								popup.fade('show').center({fixed:true,x:false});
								overlay.fade('show')
									.css({
										height: $(document).height()
									});
								return false;
						})	
					)
					.append(']')
				);
			
		});
		
	};
	
	$.fn.fade = function(showOrHide,options){
		var options;
		if(typeof(arguments[0])=='object'){
			options=arguments[0];
			options.showOrHide = 'toggle';
			
		}else{
			options=arguments[1] || {};
			options.showOrHide = arguments[0] || 'toggle';
		}
		
		var settings = $.extend(
			{
				duration:'normal',
				fade:true,
				slide:false,
				complete:function(){}
			},
		options);


		var toAnimate = {};
		if(settings.slide)toAnimate.height = settings.showOrHide;
		if(settings.fade)toAnimate.opacity = settings.showOrHide;
		
		return this.each(function(){
			var el = $(this);
			el.animate(toAnimate,{
				duration:settings.duration,
				complete:function(){
					if ($(this).css('opacity') == 1 && $.browser.msie){
						var st = $(this).attr('style');
						st = st.split(';')
						var out=[];
						
						$.each(st,function(){		
							if(this.search(/FILTER|ZOOM/)==-1){
								out.push(this);
							}
						});
						$(this).attr('style',out.join(';'))
					}		
					settings.complete.call(this);
				}
			});
		});
		
	};
	$.fn.center = function(settings){	
		var settings = $.extend({
			x:true,
			y:true,
			centerTo:{x:window,	y:window},
			fixed:false
		},settings)
		
		var port =  $(settings.centerTo)
		var portY =  $(settings.centerTo.y).height();
		var portYScroll =   settings.fixed && (!$.browser.msie || $.browser.version>6)?0:$(settings.centerTo.y).scrollTop();
		var portYOffset = 0;// $(settings.centerTo.y).position().top;
		
		var portX = $(settings.centerTo.x).width();
		var portXScroll = settings.fixed?0:$(settings.centerTo.x).scrollLeft();
		var portXOffset = 0;//$(settings.centerTo.x).position().left || 0;
		
		this.css('position',settings.fixed && (!$.browser.msie || $.browser.version>6) ? 'fixed':'absolute');
		return this.each(function(){
			var el = $(this);
			if(settings.x) el.css('left',portX/2 -  el.width()/2 + portXScroll  + portXOffset);
			if(settings.y) el.css('top', portY/2  -  el.height()/2 + portYScroll + portYOffset);
	
	})
	
};
})(jQuery)