/*
 * jQuery Easing Plugin
 *
 * website:			http://gsgd.co.uk/sandbox/jquery/easing/
*/
jQuery.easing['jswing']=jQuery.easing['swing'];jQuery.extend(jQuery.easing,{def:'easeOutQuad',swing:function(x,t,b,c,d){return jQuery.easing[jQuery.easing.def](x,t,b,c,d)},easeInQuad:function(x,t,b,c,d){return c*(t/=d)*t+b},easeOutQuad:function(x,t,b,c,d){return-c*(t/=d)*(t-2)+b},easeInOutQuad:function(x,t,b,c,d){if((t/=d/2)<1)return c/2*t*t+b;return-c/2*((--t)*(t-2)-1)+b},easeInCubic:function(x,t,b,c,d){return c*(t/=d)*t*t+b},easeOutCubic:function(x,t,b,c,d){return c*((t=t/d-1)*t*t+1)+b},easeInOutCubic:function(x,t,b,c,d){if((t/=d/2)<1)return c/2*t*t*t+b;return c/2*((t-=2)*t*t+2)+b},easeInQuart:function(x,t,b,c,d){return c*(t/=d)*t*t*t+b},easeOutQuart:function(x,t,b,c,d){return-c*((t=t/d-1)*t*t*t-1)+b},easeInOutQuart:function(x,t,b,c,d){if((t/=d/2)<1)return c/2*t*t*t*t+b;return-c/2*((t-=2)*t*t*t-2)+b},easeInQuint:function(x,t,b,c,d){return c*(t/=d)*t*t*t*t+b},easeOutQuint:function(x,t,b,c,d){return c*((t=t/d-1)*t*t*t*t+1)+b},easeInOutQuint:function(x,t,b,c,d){if((t/=d/2)<1)return c/2*t*t*t*t*t+b;return c/2*((t-=2)*t*t*t*t+2)+b},easeInSine:function(x,t,b,c,d){return-c*Math.cos(t/d*(Math.PI/2))+c+b},easeOutSine:function(x,t,b,c,d){return c*Math.sin(t/d*(Math.PI/2))+b},easeInOutSine:function(x,t,b,c,d){return-c/2*(Math.cos(Math.PI*t/d)-1)+b},easeInExpo:function(x,t,b,c,d){return(t==0)?b:c*Math.pow(2,10*(t/d-1))+b},easeOutExpo:function(x,t,b,c,d){return(t==d)?b+c:c*(-Math.pow(2,-10*t/d)+1)+b},easeInOutExpo:function(x,t,b,c,d){if(t==0)return b;if(t==d)return b+c;if((t/=d/2)<1)return c/2*Math.pow(2,10*(t-1))+b;return c/2*(-Math.pow(2,-10*--t)+2)+b},easeInCirc:function(x,t,b,c,d){return-c*(Math.sqrt(1-(t/=d)*t)-1)+b},easeOutCirc:function(x,t,b,c,d){return c*Math.sqrt(1-(t=t/d-1)*t)+b},easeInOutCirc:function(x,t,b,c,d){if((t/=d/2)<1)return-c/2*(Math.sqrt(1-t*t)-1)+b;return c/2*(Math.sqrt(1-(t-=2)*t)+1)+b},easeInElastic:function(x,t,b,c,d){var s=1.70158;var p=0;var a=c;if(t==0)return b;if((t/=d)==1)return b+c;if(!p)p=d*.3;if(a<Math.abs(c)){a=c;var s=p/4}else var s=p/(2*Math.PI)*Math.asin(c/a);return-(a*Math.pow(2,10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p))+b},easeOutElastic:function(x,t,b,c,d){var s=1.70158;var p=0;var a=c;if(t==0)return b;if((t/=d)==1)return b+c;if(!p)p=d*.3;if(a<Math.abs(c)){a=c;var s=p/4}else var s=p/(2*Math.PI)*Math.asin(c/a);return a*Math.pow(2,-10*t)*Math.sin((t*d-s)*(2*Math.PI)/p)+c+b},easeInOutElastic:function(x,t,b,c,d){var s=1.70158;var p=0;var a=c;if(t==0)return b;if((t/=d/2)==2)return b+c;if(!p)p=d*(.3*1.5);if(a<Math.abs(c)){a=c;var s=p/4}else var s=p/(2*Math.PI)*Math.asin(c/a);if(t<1)return-.5*(a*Math.pow(2,10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p))+b;return a*Math.pow(2,-10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p)*.5+c+b},easeInBack:function(x,t,b,c,d,s){if(s==undefined)s=1.70158;return c*(t/=d)*t*((s+1)*t-s)+b},easeOutBack:function(x,t,b,c,d,s){if(s==undefined)s=1.70158;return c*((t=t/d-1)*t*((s+1)*t+s)+1)+b},easeInOutBack:function(x,t,b,c,d,s){if(s==undefined)s=1.70158;if((t/=d/2)<1)return c/2*(t*t*(((s*=(1.525))+1)*t-s))+b;return c/2*((t-=2)*t*(((s*=(1.525))+1)*t+s)+2)+b},easeInBounce:function(x,t,b,c,d){return c-jQuery.easing.easeOutBounce(x,d-t,0,c,d)+b},easeOutBounce:function(x,t,b,c,d){if((t/=d)<(1/2.75)){return c*(7.5625*t*t)+b}else if(t<(2/2.75)){return c*(7.5625*(t-=(1.5/2.75))*t+.75)+b}else if(t<(2.5/2.75)){return c*(7.5625*(t-=(2.25/2.75))*t+.9375)+b}else{return c*(7.5625*(t-=(2.625/2.75))*t+.984375)+b}},easeInOutBounce:function(x,t,b,c,d){if(t<d/2)return jQuery.easing.easeInBounce(x,t*2,0,c,d)*.5+b;return jQuery.easing.easeOutBounce(x,t*2-d,0,c,d)*.5+c*.5+b}});

$(document).ready(function(){

	/*
	 * TEXTAREA AUTO GROW
	*/
		
		$('textarea').each(function() {		
			var $this       = $(this),
				minHeight   = $this.height(),
				lineHeight  = $this.css('lineHeight');
			
			var shadow = $('<div></div>').css({
				position:   'absolute',
				top:        -10000,
				left:       -10000,
				width:      $(this).width(),
				fontSize:   $this.css('fontSize'),
				fontFamily: $this.css('fontFamily'),
				lineHeight: $this.css('lineHeight'),
				resize:     'none'
			}).appendTo(document.body);
			shadow.hide();
			
			var update = function() {
				
				var val = this.value.replace(/</g, '&lt;')
									.replace(/>/g, '&gt;')
									.replace(/&/g, '&amp;')
									.replace(/\n/g, '<br/>');
				
				shadow.html(val);
				shadow.hide();
				$(this).css('height', Math.max(shadow.height() + 20, minHeight));
				$(this).css({overflow: 'hidden'});
			}
			
			$(this).change(update).keyup(update).keydown(update);
			
			update.apply(this);		
		});
		
	/* END OF AUTOGROW */
	
	/* ----------------------------------------- */
	
	/*
	 * CLEAR DEFAULT FROM FORM FIELD
	*/
		
		default_color = "#bbb";
		default_focus_color = "#000";
		
		$('.default').each(function(){
			$(this).css('color', default_color);
			var _default = $(this)[0].defaultValue;
			$(this).focus(function(){
				$(this).css({'color' : default_focus_color});
				if($(this).val() == _default){
					$(this).val('');	
				}
			}).blur(function(){
				if($(this).val() == ''){
					$(this).val(_default);	
					$(this).css({'color' : default_color});
				}
			});						
		});
		
	/* END OF DEFAULT */
	
	/* ----------------------------------------- */
	
	/*
	 * MAIN VERTICAL SLIDER
	*/
		//get panes
		var slider_panes = $('#tabs .content ul');
		//get width of single pane
		var slider_pane_width = slider_panes.eq(0).outerWidth()
		//get the width of all panes together
		var slider_w = slider_panes.length * slider_pane_width;
	
		//set slider pane width
		$('#tabs .content>div').css({width: slider_w});
		//apply class to all odd li for margin
		$('#tabs .content>div ul').find('li:odd').addClass('odd');
		//apply action for main tab nav, move left or right depending on item clicked
		$('#tabs .nav a').click(function(){
			//set current tab as active, remove previous active tab state
			$('.nav .active').removeClass('active');
			$(this).addClass('active');
			//get index
			var idx = $('#tabs .nav a').index($(this));
			//slide left or right based on index
			$('#tabs .content>div').animate({left: -slider_pane_width * idx}, {duration: 200, queue: false, easing: 'easeInOutQuad'});
			return false;
		});
		
		//check each pane if more than 6 create sub nav
		$('#tabs .content div ul').each(function(){
			//create div for each pane
			var div = $('<div></div>');
			//add div to subnav container
			$('#tabs .content .subnav').append(div);
			//simple hover fade effect
			$('#tabs .content li a').hover(
				function(){$(this).animate({opacity: .5}, {duration: 300, queue: false})}, function(){$(this).animate({opacity: 1}, {duration: 300, queue: false})}
			);
			//if more than 6 entries exist follow direction below
			if($(this).find('li').length > 6){
				//hide all except the first 6 entries
				$(this).find('li:gt(5)').hide();
				//create next and previous buttons
				var prev = $('<a href="#previous" title="previous" class="previous">&lt;</a>');
				var next = $('<a href="#next" title="next" class="next">&gt;</a>');
                //for each page of entries add a navigation button                
                for(var i=1; i<=Math.ceil($(this).find('li').length / 6); i++){
					var linnk = $('<a href="#' + i + '">' + i + '</a>');
					if(i == 1) linnk.addClass('active');
					div.append(linnk);	
				}
				//foreach button do the below actions			
				div.find('a').click(function(){
					//if currently active skip
					if($(this).hasClass('active')) return false;
					//set current button as active, remove previous active button
					$(this).parent().find('.active').removeClass('active'); 
					$(this).addClass('active');
					//get index of button
					var idx = div.find('a').index($(this));
					//get corisponding pane
					var ul = slider_panes.eq($(this).parent().parent().find('div').index($(this).parent()));
					//hide pane, all entries
					ul.animate({opacity: 0}, {duration: 300, complete: function(){
						//when finish animation hide all entries, then show the correct 6 entries, then animate to visible
						ul.find('li').hide();
						ul.find('li').slice((idx-1) * 6, ((idx-1) * 6)+6).show();
						ul.animate({opacity: 1}, {duration: 300});
					}});	
					//check if previous or next needs to be hidden
					checkNav($(this));
				});
				//add previous and next to current div
				div.prepend(prev);
				div.append(next);				
				//hide the previous button initially
				prev.css({visibility: 'hidden'});
				//set previous and next actions
				prev.click(function(){checkNav($(this));});
				next.click(function(){checkNav($(this));});
			}
		});
		
		$('#tabs .content div ul.start').each(function(){
			var idx = $('#tabs .content div ul').index($(this));
			$('#tabs .nav a').eq(idx).trigger('click');
		});
		
		//check previous and next buttons disable or enable
		function checkNav(button, skip){	
			//get current active button
			var current_button = $(button).parent().find('.active');
			//get buttons parent
			var parent = $(button).parent();
			//set the next and previous button to visible
			$(button).parent().find('.previous, .next').css({visibility: 'visible'});
			//if next trigger the next button in succession
			if($(button).hasClass('next') && current_button.next().hasClass('next') != true){
				current_button.next().trigger('click');		
			//else trigger the previous button
			}else if($(button).hasClass('previous') && current_button.prev().hasClass('previous') != true){
				current_button.prev().trigger('click');				
			}
			//check if at the end hide the next button
			if(current_button.next().hasClass('next')){
				current_button.next().css({visibility: 'hidden'});
			//check if at beginning if so, hide previous button
			}else if(current_button.prev().hasClass('previous')){
				current_button.prev().css({visibility: 'hidden'});
			}
		}
	
	/* END OF SLIDER */

	
});
