$ = jQuery;

// IE Runtime Variables
IE6 = is_ie6(); IE7 = is_ie7(); IE67 = is_ie67();

// IE Detection
function is_ie6()  { return (navigator.appVersion.indexOf("MSIE 6.")==-1) ? false : true; }
function is_ie7()  { return (navigator.appVersion.indexOf("MSIE 7.")==-1) ? false : true; }
function is_ie8()  { return (navigator.appVersion.indexOf("MSIE 8.")==-1) ? false : true; }
function is_ie67() { if ( is_ie6() || is_ie7() ) { return true; } else { return false;	  }
}

// EXTENSION: Back to Top helper
$.fn.top_animation =  function(easing, duration) {
	$(this).click(function(){
		if ( IE67 ) {$('html').animate({scrollTop:0}, duration);return false;}
		if ( !$.browser.opera ) {$('html,body').animate({scrollTop:0}, {duration: duration, easing: easing});}
		else {$('html').animate({scrollTop:0}, {duration: duration,	easing: easing});}
		return false;
	});
}

// Initializes forms for Validation
function init_forms() {
	submitted_form = [];

	// Add form submission slots
	$('form.validate').each(function(i) {
		var id = $(this).attr('id');
		submitted_form[id] = false;
		if (id == '') { return false; }
	});

	$('form.validate input[type=submit]').click(function() {
		var parent = $(this).parents('form');
		var no_ajax = parent.hasClass('no-ajax');
		var valid = false;

		parent.validate(function() {
			if (submitted_form[parent.attr('id')]) {alert('Your message/comment is on the way, thanks.'); return false; }
			valid = true;
			if ( ! no_ajax ) {
				jQuery.ajax({
					type: "POST",
					url: parent.attr('action'),
					data: form_data,
					success: function(response){
							parent.find('.message').slideDown(400);
							submitted_form[parent.attr('id')] = true;
					}
				});
			}
		});
		if ( valid && no_ajax ) { return true }
		return false;
	});
}

// EXTENSION: Validation Framework
$.fn.validate = function(callback) {
	var regexp_types = [ 'name', 'email', 'url' ]
	var regexps = {
		'name' : /[a-zA-Z ]{2,30}/i,
		'author' : /[a-zA-Z ]{2,30}/i,
		'email' : /[\w-+]+(?:\.[\w-+]+)*@(?:[\w-]+\.)+[a-zA-Z]{2,7}/i,
		'url': /http:\/\/[A-Za-z0-9\.-]?[A-Za-z0-9\.-]{3,}\.[A-Za-z]{3}/
	}

	// Add missing regexps and types
	$(this).find('input.required, textarea.required').each(function() {
		var n = $(this).attr('name');
		if ( !in_array(n, regexp_types) && n != 'submit' ) { regexp_types.push(n); }
		if ( regexps[n] == null ) { regexps[n] = /.+/; }
	});

	var valid = true;
	form_data = "ajax=true&";

	// Append Unvalidated data
	$(this).find('input, textarea').each(function() {
		if (! $(this).hasClass('required') && $(this).attr('type') != 'submit' ) { form_data += $(this).attr('name') + '=' + $(this).val() + '&'; }
	});

	for ( var i=0; i < regexp_types.length; i++ ) {
		var name = regexp_types[i];
		var rx = regexps[name];

		var input = $(this).find('input[name=' + name + ']');
		var textarea = $(this).find('textarea[name=' + name + ']');

		if ( input.length == 1 ) {
			if ( input.val().match(rx) == input.val() ) {
				input.removeClass('invalid');
				form_data += input.attr('name') + '=' + input.val() + '&';
			} else {
				// if not required and empty, let go
				if ( ! input.hasClass('required') && $.trim(input.val()) == '' ) {}
				else { valid = false; input.addClass('invalid'); }
			}
		}

		if ( textarea.length == 1 ) {
			if ( textarea.val().match(rx) == textarea.val() || $.trim(textarea.val()) != '' ) {
				textarea.removeClass('invalid');
				form_data += textarea.attr('name') + '=' + textarea.val().replace('&','&amp;') + '&';
			} else {
				// if not required and empty, let go
				if ( ! textarea.hasClass('required') && $.trim(textarea.val()) == '' ) {}
				else { valid = false; textarea.addClass('invalid'); }
			}
		}
	}

	if (valid) {
		form_data = form_data.substring(0, form_data.length-1);
		callback();
	}
}

// PHP's in_array()
function in_array(needle, haystack) {
	for ( var i=0; i < haystack.length; i++) {
		if ( needle == haystack[i]) { return true; }
	}
	return false;
}

/*
*	jQuery Tweet v0.1
*	written by Diego Peralta
*
*	Copyright (c) 2010 Diego Peralta (http://www.bahiastudio.net/)
*	Dual licensed under the MIT (MIT-LICENSE.txt)
*	and GPL (GPL-LICENSE.txt) licenses.
*	Built using jQuery library
*
*/
(function($){
	$.fn.tweets = function(options) {
		$.ajaxSetup({ cache: true });
		var defaults = {
			tweets: 1
		};
		var options = $.extend(defaults, options);
		return this.each(function() {
			var obj = $(this);
			$.getJSON('http://search.twitter.com/search.json?callback=?&rpp='+options.tweets+'&q=from:'+options.username,
		        function(data) {
		            $.each(data.results, function(i, tweet) {
		                if(tweet.text !== undefined) {
							tweet.text = tweet.text
							.replace(/#(.*?)(\s|$)/g,'<span class="hash">#$1 </span>')
							.replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig,'<a href="$&">$&</a> ')
							.replace(/@(.*?)(\s|\(|\)|$)/g,'<a href="http://twitter.com/$1">@$1 </a>$2');
		                   options.callback(tweet.text);
		                }
		            });
		        }
		    );
		});
	};
})(jQuery);