// Kick jQuery Plugins - Full Script

// Display Error
(function($){
	$.error = function(options) {
		var defaults = {  
		};
		
		var options = $.extend(defaults, options);
		
		if(!options.errMessage) {
			switch (options.errID) {
				case 1 :
					options.errMessage = "This field must be between "+options.errLen+" charcters long.";
					break;
				case 2 :
					options.errMessage = "This is a required field and cannot be left blank.";
					break;
				case 3:
					options.errMessage = "You must select an option.";
					break;
				case 4:
					options.errMessage = "You must select between "+options.errMin+" and "+options.errMax;
					break;				
			}
		}
		
		if (options.errField) {
			$(options.errField).html(options.errMessage).slideDown().delay(2500).slideUp();
		} else {
			alert(options.errMessage);
		}
	
	}

})(jQuery);

// Field Error

(function($){
	
	$.fn.error = function(options) {
		
		var defaults = {  
		   highlight:'#FFCCCC',
		   original:'#FFFFFF',
		   time:400,
		   repeat:3
		};
		  
		var options = $.extend(defaults, options);
		
		$.error({ errID:options.errID, errMessage:options.errMessage, errField:options.errField, errLen:options.errLen });
		
			return this.each(function() {
				el = $(this);
				for(i=0;i<options.repeat;i++) {
					el.animate({backgroundColor:options.highlight},options.time).animate({backgroundColor:options.original},options.time);
				}
			});
		
	}
	

})(jQuery);

// Validate field
(function($){
		
	$.fn.validate = function(options) {
		
		var defaults = {  
		   required:true,
		   maxLen:9999,
		   minLen:1
		};
		  
	var options = $.extend(defaults, options);
	
	var result = 0;
	
	this.each(function() {

		if($(this).attr('type')=="text" || $(this).is('TEXTAREA')) {
			
			if(options.required==true && $(this).val()==""){
				$(this).error({errID:2,errField:options.errField});
				return result += 1;
			}

			if($(this).val().length < options.minLen || $(this).val().length > options.maxLen ) {
				$(this).error({errID:1,errLen:options.minLen+" and "+options.maxLen,errField:options.errField});
				return result += 1;
			}
		
		}
		
		
	}); 
		
		if(result>0) {
			return false;
		} else {
			return true;
		}
		
	}
	
})(jQuery);

// Validate group of fields
(function($){
		
	$.fn.validateGroup = function(options) {
		
		var defaults = {
			minChecked:1,
			maxChecked:99999
		};
		  
	var options = $.extend(defaults, options);
	
	var result = 0;
	
	this.each(function() {
	
		el = $(this);
			
		if(el.attr('checked')) {
			return result += 1
		}
	
	}); 
		
		if(result >= options.minChecked && result <= options.maxChecked) {
			return true;
		} else {
			$.error({
				errField:options.errField,
				errMessage:options.errMessage,
				errID:4,
				errMin:options.minChecked,
				errMax:options.maxChecked
			});
			return false;
		}
		
	}
	
})(jQuery);

// Text switcher
(function($){
		
	$.fn.textSwitch = function(options) {
		
		var defaults = {
			text: "Search..."
		};
		  
		var options = $.extend(defaults, options);
		
		var result = 0;
		
		return this.each(function() {
		
			el = $(this);
			el.val(options.text);
			
			el.blur(function(){
				el = $(this);
				if(!el.val()) {
					el.val(options.text);
				}
			});
			
			el.focus(function(){
				el = $(this);
				if(el.val()==options.text) {
					el.val('');
				}
			});
			
			el.parents('form').submit(function(){
				if(el.val()==options.text) return false;
			})
		
		}); 
		
	}
	
})(jQuery);


(function($){
		
	$.fn.kickFade = function(options) {
		
		var defaults = {
			delay:6000,
			duration:2000,
			paused:false,
			current:0,
			fadeFirst:false,
			fade:"crossfade"
		};
		  
		var options = $.extend(defaults, options);
		
		this.each(function() {
			
			options.els = $(this).children();
			options.els.not(":first-child").hide();
			if(options.fadeFirst) {
				options.els.eq(0).hide().load(function(){
					$(this).fadeTo(options.duration,1,function(){
						$.kickFade.autoChange(options);
					});
				});
			} else {
				$.kickFade.autoChange(options);
			}
			$(this).hover(
				function() {
					options.paused = true;
					$.kickFade.autoChange(options);
				},
				function() {
					options.paused = false;
					$.kickFade.autoChange(options);
				}
			);
		
		});
		
	}
	
	$.kickFade = {
		
	autoChange: function(options){
		if(options.els.length>0) {
			if(options.timer) window.clearTimeout(options.timer);
			if(!options.paused) {
				options.timer = window.setTimeout(
					function() {
						if(options.fade == "crossfade") {
							options.els.eq(options.current).fadeTo(options.duration,0);
							options.current++;
							if(options.current>=options.els.length) options.current=0;
							options.els.eq(options.current).fadeTo(options.duration,1);
							$.kickFade.autoChange(options);
						} else if (options.fade == "inout") {
							options.els.eq(options.current).fadeTo(options.duration,0,function(){
								options.current++;
								if(options.current>=options.els.length) options.current=0;
								options.els.eq(options.current).fadeTo(options.duration,1);
								$.kickFade.autoChange(options);		
							});
						}
					},
					options.delay
				);
			}
		}
	}
		
}
		
})(jQuery);



(function($){
		
	$.fn.kickScroll = function(options) {
		
		var defaults = {
			delay:6000,
			duration:2000,
			fadeOutDuration:400,
			paused:false,
			current:0,
			scrollFirst:false,
			scrollDir:"random"
		};
		  
		var options = $.extend(defaults, options);
		
		this.each(function() {
			$(this).css({overflow:'hidden'});
			options.width = $(this).width();
			options.height = $(this).height();			
			
			options.els = $(this).children();
			options.els.not(":first-child").hide();
			if(options.fadeFirst) {
				options.els.eq(0).hide().load(function(){
					$(this).fadeTo(options.duration,1,function(){
						$.kickScroll.autoChange(options);
					});
				});
			} else {
				$.kickScroll.autoChange(options);
			}
			$(this).hover(
				function() {
					options.paused = true;
					$.kickScroll.autoChange(options);
				},
				function() {
					options.paused = false;
					$.kickScroll.autoChange(options);
				}
			);
		
		});
		
	}
	
	$.kickScroll = {
		
	autoChange: function(options){
		if(options.els.length>0) {
			if(options.timer) window.clearTimeout(options.timer);
			if(!options.paused) {
				options.timer = window.setTimeout(
					function() {						
						if(options.scrollDir == "random") {
							var arrTemp = Array("right","left","down","up");
							intTemp = Math.floor(Math.random()*3)
							strDir = arrTemp[intTemp];
							
						} else {
							strDir = options.scrollDir;
						}
						
						options.els.eq(options.current).css({'z-index':'10'})
							options.current++;
							if(options.current>=options.els.length) options.current=0;
							
							switch(strDir) {
							case "right":
								options.els.eq(options.current).css({'z-index':'11',left:'-'+options.width+'px',top:'0px'}).show().animate({left:'0px'},options.duration);
								break;
							case "left":
								options.els.eq(options.current).css({'z-index':'11',left:options.width+'px',top:'0px'}).show().animate({left:'0px'},options.duration);
								break;
							case "down":
								options.els.eq(options.current).css({'z-index':'11',top:'-'+options.height+'px',left:'0px'}).show().animate({top:'0px'},options.duration);
								break;
							case "up":
								options.els.eq(options.current).css({'z-index':'11',top:options.height+'px',left:'0px'}).show().animate({top:'0px'},options.duration);	
								break;
								
							}
							
							$.kickScroll.autoChange(options);
						
					},
					options.delay
				);
			}
		}
	}
		
}
		
})(jQuery);



(function($){
	
	$.fn.twitterScroll = function(options) {
		var el = $(this);
		
		var defaults = {
			tweetCount:5,
			delay:6000,
			fadeTime:1500,
			slideTime:800
		};
		
		var options = $.extend(defaults, options);
	
		if(!options.user) {
			
			alert("No twitter user set");
			
		} else {
				
			var jsonUrl = 'http://twitter.com/statuses/user_timeline/'+options.user+'.json?&count='+options.tweetCount+'&callback=?';
			var twitterData;
			$.getJSON(jsonUrl, function(twitterData) {
			
				for (var i=0; i<twitterData.length; i++){
					
					var status = twitterData[i].text.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g, function(url) { return '<a href="'+url+'">'+url+'</a>'; }).replace(/\B@([_a-z0-9]+)/ig, function(reply) { return  reply.charAt(0)+'<a href="http://twitter.com/'+reply.substring(1)+'">'+reply.substring(1)+'</a>'; });
					var time = $.twitterScroll.relative_time(twitterData[i].created_at);
					el.append('<div class="tweet"><p class="status">'+status+'</p><p class="time">'+time+'</p></div>');
					
				}
				
			});
		
		}
		
			var scrollTimer = window.setInterval(function(){
					el.children().eq(0).fadeTo(options.fadeTime,0.01,function(){
						$(this).slideUp(options.slideTime,function(){
							$(this).appendTo(el).show().fadeTo(1,1);
							
						});
					});			
			},options.delay);
		
	}
		
	$.twitterScroll = {

		relative_time: function(time_value) {
			var values = time_value.split(" ");
			time_value = values[1] + " " + values[2] + ", " + values[5] + " " + values[3];
			var parsed_date = Date.parse(time_value);
			var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
			var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
			delta = delta + (relative_to.getTimezoneOffset() * 60);
			
			if (delta < 60) {
				return 'less than a minute ago';
			} else if(delta < 120) {
				return 'about a minute ago';
			} else if(delta < (60*60)) {
				return (parseInt(delta / 60)).toString() + ' minutes ago';
			} else if(delta < (120*60)) {
				return 'about an hour ago';
			} else if(delta < (24*60*60)) {
				return 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago';
			} else if(delta < (48*60*60)) {
				return '1 day ago';
			} else {
				return (parseInt(delta / 86400)).toString() + ' days ago';
			}
		}
	
	}

})(jQuery);
