/*
-----------------------------------------------
Site: HelpWith
Author: Tom Fadial
Name: Global JavaScript
----------------------------------------------- */


/* Global Methods
----------------------------------------------- */
var global = {
	duplicateBar : function() {
		$('#footer').append($('#header .bar').clone());
	},
	prepareTopBar : function() {
		var top_bar = $('#header .bar');
		top_bar.find('.tab').click(function() {
			top_bar.find('.content ul').slideToggle('slow', 'easeOutExpo');
			return false;
		});
	},
	pageWrappers : function() {
		var $wrapper = $('<div class="wrapper"></div>');
		$('div#page')
			.wrap($wrapper.clone().addClass('one'));
		$('div#banner .content')
			.wrap($wrapper.clone().addClass('one'));
	},
	prepareTweetList : function() {
		var items = $('ul.tweets li');
		items.each(function(i) {
			$(this).css('z-index', (items.length - i));
		});
	},
	applyCorners : function() {
		$('.tweets li > .content, .navigate, .loading').each(function() {
			$(this).markupCorners('all');
		});
	},
	railsResponse : function() {
		jQuery.ajaxSetup({ 
			beforeSend: function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")}
		});
	},
	ajaxLoad : function(path, container, callback) {
		var loading = $('<div class="loading"><span>Loading</span><div class="corner top left"><!-- --></div><div class="corner top right"><!-- --></div><div class="corner bottom left"><!-- --></div><div class="corner bottom right"><!-- --></div></div>');
		container.empty().append(loading.show());
		$.get(path, function(data) {
			container.append(data);
			loading.hide();
			global.bindEvents();
			if (typeof callback != 'undefined') {
				callback();
			}
		});
	},
	bindEvents : function() {
		var pagination = $('.navigate.pagination a');
		pagination.click(function() {
			global.ajaxPaginate($(this));
			return false;
		});

		var filter = $('.navigate.topic form');
		filter
			.find('input[type=submit]').hide()
			.end()
			.find('select').change(function() {
				global.ajaxFilter(filter);
			});
		global.applyCorners();
	},
	ajaxPaginate : function(e) {
		var request = e[0].href;
		global.ajaxLoad(request, $('#content'), tb_init);
	},
	ajaxFilter : function(e) {
		var request = e.attr('action')+'?t='+e.find('select option:selected').attr('value');
		global.ajaxLoad(request, $('#content'), tb_init);
	},
	popup : {
		preparePopup : function() {
			var popup = $('#TB_window #TB_ajaxContent');
			if (window.XMLHttpRequest && document.all) {
				$('ul.tweets li').css('z-index', 1);
				popup.parents('li').css('z-index', 100);
			}
			var reply_wrapper = popup.find('div.textarea');
			var textarea = reply_wrapper.find('textarea').focus();
			var name_w = reply_wrapper.find('.username').width();
			reply_wrapper.find('textarea').css('textIndent', (5+name_w));

			global.popup.popupCounter(reply_wrapper, textarea);
			global.popup.popupLoaded();
		},
		popupCounter : function(reply_wrapper, textarea) {
			var max = 123;
			var counter = reply_wrapper.find('div.counter');
			var counter_count = counter.children('span.characters').text(max);

			var updateCount = function() {
				counter.removeAttr('style');
				var count = max-(textarea.val().length);
				counter_count.text(count);
				if (count < 0) {
					counter.css('backgroundColor', '#d51f1f');
				}
			};
			textarea.keyup(function() {
				updateCount();
			}); updateCount();
		},
		popupLoaded : function() {
			var popup = $('#TB_window #TB_ajaxContent');
			var prepareForm = function() {
				var loading = $('<img class="loading_img" src="images/template/popup_inner_loading_bg.gif" alt="Loading" />');
				popup.find('input#post_submit').hide().after(loading);
			};
			popup.find('form').ajaxForm({
				beforeSend: function(xhr) {xhr.setRequestHeader("Accept", "text/javascript"); prepareForm();},
				target: popup,
				success: global.popup.preparePopup
			});
		}
	},
	init : function() {
		// global.duplicateBar();
		// global.prepareTopBar();
		global.pageWrappers();
		global.railsResponse();
		global.bindEvents();
	}
};

$(function() {
	global.init();
});




/* jQuery Extensions
----------------------------------------------- */
jQuery.fn.extend({
	markupCorners : function(o) {
		var tl = $('<div class="corner top left"><!-- --></div>');
		var tr = $('<div class="corner top right"><!-- --></div>');
		var bl = $('<div class="corner bottom left"><!-- --></div>');
		var br = $('<div class="corner bottom right"><!-- --></div>');

		$(this).addClass(o);
		if ($(this).hasClass('all') || o == 'all') {$(this).append(tl).append(tr).append(bl).append(br)}

		return $(this);
	},
	pulse : function(speed) {
		$(this).fadeOut(speed).fadeIn(speed);
	}
});
jQuery.easing['jswing'] = jQuery.easing['swing'];
jQuery.extend(jQuery.easing,{
	easeOutExpo: function (x, t, b, c, d) {
		return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
	}
});