/*!
 * jQuery Accordia Plugin v1.1
 * http://dev.yourifteam.com/plugins/accordia/
 *
 * Copyright 2011, Steven Crocker
 * Released under the MIT, BSD, and GPL Licenses.
 *
 * Date: 11:20 AM Monday, February 07, 2011
 * Latest Update: 12:21 PM Monday, February 14, 2011
 */
 
(function($){
	var methods = {
		init : function(options) {
			return this.each(function(){
				var me = $(this);
				me.data('settings', {
					'autodisplay': true,
					'slide': false,
					'fade': false,
					'stick': false,
					'speed': 500,
					'heading': 'h2',
					'arrow': '',
					'arrowhover': false,
					'position': me.css('position'),
					'display': me.css('display'),
					'left': me.css('left')
				});
				var $$ = $(this).data('settings');
				if(options) $.extend($$,options);
				me.css({
					position: 'absolute',
					display: 'block',
					left: '-10000px'
				});
				me.css({width:me.width()-(parseInt(me.css('padding-left'))||0)-(parseInt(me.css('padding-right'))||0)-(parseInt(me.css('border-left-width'))||0)-(parseInt(me.css('border-right-width'))||0)});
				me.find('.hide').each(function(){ $(this).data('height',$(this).css('height')); $(this).css('overflow','hidden'); });
				me.find('[href=#expand]').click(function(){
					me.children($$['heading']+':first').click();
					return(false);
				});
				me.children($$['heading']).each(function(){
					$(this).css({zIndex:1,position:'relative',display:'block',width:me.width()-(parseInt($(this).css('padding-left'))||0)-(parseInt($(this).css('padding-right'))||0)-(parseInt($(this).css('border-left-width'))||0)-(parseInt($(this).css('border-right-width'))||0),cursor:'pointer'});
				});
				me.children($$['heading']+' + next').each(function(){
					$(this).addClass('content').css({zIndex:0,width:me.width()-(parseInt($(this).css('padding-left'))||0)-(parseInt($(this).css('padding-right'))||0)-(parseInt($(this).css('margin-left'))||0)-(parseInt($(this).css('margin-right'))||0)-(parseInt($(this).css('border-left-width'))||0)-(parseInt($(this).css('border-right-width'))||0)});
				});
				me.children($$['heading']).click(function(){
					var title = $(this), para = $(this).next('div'), min = para.data('minheight');
					if(para.height()==min){
						title.addClass('active').siblings($$['heading']).removeClass('active');
						data = para.find(':first-child');
						if($$['fade']) para.css({opacity:0});
						para.stop().animate({
							height:(parseInt(data.css('height'))||0)+(parseInt(data.css('padding-top'))||0)+(parseInt(data.css('padding-bottom'))||0)+(parseInt(data.css('border-top-width'))||0)+(parseInt(data.css('border-bottom-width'))||0)+(parseInt(data.css('margin-bottom'))||0)+(parseInt(data.css('margin-top'))||0),
							opacity:1
						},$$['speed']);
						if($$['arrow']) {
							$(this).find('.arrow').css({backgroundPosition:'0px -'+($(this).data('arrow')+$(this).data('hover'))+'px'});
							if(!$$['stick']) $(this).siblings($$['heading']).find('.arrow').css({backgroundPosition:'0px 0px'});
						}
						if(!$$['stick']) if($$['fade']) {
							para.siblings('div').each(function(){$(this).stop().animate({height:$(this).data('minheight'),opacity:0},$$['speed']);});
						} else {
							para.siblings('div').each(function(){$(this).stop().animate({height:$(this).data('minheight')},$$['speed']);});
						}
						me.find('.hide').each(function(){ $(this).stop().animate({height:0},$$['speed']); });
					} else {
						title.removeClass('active');
						if($$['fade']) {
							para.stop().each(function(){$(this).animate({height:$(this).data('minheight'),opacity:0},$$['speed']);});
						} else {
							para.stop().each(function(){$(this).animate({height:$(this).data('minheight')},$$['speed']);});
						}
						if($$['arrow']) {
							$(this).find('.arrow').css({backgroundPosition:'0px -'+$(this).data('hover')+'px'});
						}
						me.find('.hide').each(function(){ $(this).stop().animate({height:$(this).data('height')},$$['speed']); });
					}
				}).hover(function(){
					if($$['arrowhover']){
						$(this).data('hover',parseInt($(this).data('arrow'))*2);
						var para = $(this).next('div'), min = para.data('minheight');
						if(para.height()==min){
							$(this).find('.arrow').css({backgroundPosition:'0px -'+$(this).data('hover')+'px'});
						} else {
							$(this).find('.arrow').css({backgroundPosition:'0px -'+($(this).data('arrow')+$(this).data('hover'))+'px'});
						}
					}
				},function(){
					if($$['arrowhover']){
						$(this).data('hover',0);
						var para = $(this).next('div'), min = para.data('minheight');
						if(para.height()==min){
							$(this).find('.arrow').css({backgroundPosition:'0px -'+$(this).data('hover')+'px'});
						} else {
							$(this).find('.arrow').css({backgroundPosition:'0px -'+($(this).data('arrow')+$(this).data('hover'))+'px'});
						}
					}
				}).next().each(function(){
					para = $(this);
					var mtop = (parseInt(para.css('margin-top'))||0);
					var mbottom = (parseInt(para.css('margin-bottom'))||0);
					para.append('<div style="position:relative;height:0px;clear:both;overflow:hidden;clear:both;padding:0px;margin:0px;">&nbsp;</div>');
					para.css({
						marginTop:Math.max(mtop,0),
						marginBottom:Math.max(mbottom,0),
						height:para.height(),
						display:'block',
						position:'absolute',
						left:0,
						top:0
					});
					var min = Math.max(-mtop-mbottom,0);
					para.wrap('<div style="display:block;position:relative;left:0px;margin:'+(min?mtop:0)+'px 0px '+(min?mbottom:0)+'px 0px;padding:0px;width:100%;height:'+Math.max(-mtop-mbottom,0)+'px;border:0px;overflow:hidden;z-index:0;" />');
					para.parent().data('minheight',min);
					if($$['fade']) para.parent().css({opacity:0});
					if($$['slide']) para.css({top:'auto',bottom:0});
				});
				if($$['arrow']) {
					var arrow = new Image();
					$(arrow).load(function(){
						var width = this.width;
						var height = Math.round(this.height/($$['arrowhover']?4:2));
						me.children($$['heading']).each(function(){
							$(this).wrapInner('<span style="position:relative;display:block;left:0px;top:0px;width:100%;height:100%;z-index:3;" />');
							var top = Math.round((((parseInt($(this).css('height'))||0)-height)/2+(parseInt($(this).css('padding-top'))||0)/2+(parseInt($(this).css('padding-bottom'))||0)/2)+(parseInt($(this).css('border-top-width'))||0));
							var right = (parseInt($(this).css('padding-right'))||0)+(parseInt($(this).css('border-right-width'))||0);
							$(this).append('<span class="arrow" style="position:absolute;display:block;padding:0px;margin:0px;top:'+top+'px;left:auto;right:'+right+'px;width:'+width+'px;height:'+height+'px;background: 0px 0px url('+$$['arrow']+');z-index:2;" />');
							$(this).data('arrow',height);
							$(this).data('hover',0);
						});
						
					}).attr('src',$$['arrow']);
				}
				me.css({position:$$['position'],left:$$['left'],display:$$['display']});
				if($$['autodisplay']) me.css({display:'block'});
			});
		}
	};
	$.fn.accordia = function(method) {
		if (methods[method]) { return methods[method].apply(this,Array.prototype.slice.call(arguments,1)); }
		else if (typeof method==='object'||!method){ return methods.init.apply(this,arguments); }
		else { $.error('Method '+method+' does not exist!'); }
	};
})( jQuery );
