/**
 * This js file contains all the common method and even the common dom load runs too.
 * 
 * @author Basit (basit@imegah.com || http://Basit.me)
 */

/**
 * dom load on startup run
 */
jQuery(function($) {
	
	$.preloadCssImages(); // preload css images
	
	$("#loading").ajaxStart(function(){
		$(this).show();				
	 });
	 
	$("#loading").ajaxComplete(function(){
		$(this).hide();				
	});
	 
	$("#message_alert").ajaxError(function(event, XMLHttpRequest, settings, thrownError){
		ajax_error(event, XMLHttpRequest, settings, thrownError);
	});
	 
	$("#message_alert .remove").click(function() {
	 	$("#message_alert").slideUp('slow');
		return false;
	});
	
	var message_old_style = $("#message_alert").attr('style');	
	$("#message_alert").attr("style", message_old_style+"; opacity:0.75; filter:alpha(opacity=75);"); // for ie also
		
	// add hint on text boxes if they have titles
	$('input[type="text"], .empty_text, textarea').hint();

	// header menu 
	$("#accountmenu ul").hide();
	$("li#accountmenu").mouseenter(function(event)	{
		$("#accountmenu ul").slideDown("normal");
	});
	$("#accountmenu").mouseleave(function(event) {
		$("#accountmenu ul").slideUp("normal");
	});
	
	// search
	$("#search a").click(function() {
		$("#search form").trigger("submit");
	});
	$("#search form").submit(function() {
		var action = $(this).attr('action');
		var search = $("#searchInput").val();
		window.location = action+search;
		return false;
	});
	$('#searchInput').focus();
	
	// growing space every sec
	$("#growing_space").everyTime(1000, function(i) {
		var current_space = $(this).html();
		var increment_by  = $(this).attr('class');
		var new_space 	   = parseFloat(current_space) + parseFloat(increment_by);
		$(this).html(new_space.toFixed(6));
	});
	
	// start/stop following
	$('[rel].startFollowing,[rel].stopFollowing').live('click', function() {
		var username = $(this).attr('rel');
		var follow   = ($(this).attr('class') == 'startFollowing') ? true : false;
		ui.toggle_follow(username, follow);
		return false;
	});
	
	// collapsing divs below header
	$(".arrow_down, .arrow_collapsed").mouseover(function() 
	{
		$(this).addClass('alternate_static');
	})
	.mouseleave(function() 
	{
		$(this).removeClass('alternate_static');
	});	
	
	// coping method on inputbox's
	ZeroClipboard.setMoviePath('/javascript/jquery/ZeroClipboard.swf');
});

/**
 * for showing successful message on top
 * @param {Object} response
 * @param {string} showSuccessMsg
 */
function ajax_response (response, showSuccessMsg)
{
	jQuery('#message_alert').removeClass('error');
	$ul = jQuery('#message_alert').children('ul');
	
	// xml and json validation, whatever you used to gain the status valid from backend
	if (response.status_valid == 1 || jQuery('status_valid', response).text() == 1)
	{
		// success
		if (showSuccessMsg != 'undefined' && showSuccessMsg)
		{
			$ul.html('<li>'+showSuccessMsg+'</li>');
			jQuery('#message_alert').slideDown('slow');
			
			setTimeout("jQuery('#message_alert').slideUp('slow')", 2500);		
		}
	}	
}

/**
 * for showing error messages on top
 * @param {Object} XMLHttpRequest
 */
function ajax_error (event, XMLHttpRequest, settings, thrownError)
{
	$this = jQuery('#message_alert');
	$ul = $this.children('ul');
	$ul.html('');
	
	$this.addClass('error');

	var is_xml = (settings.dataType == 'xml');
	var request = {};

	if (is_xml)
	{
		var description = jQuery('status_description', XMLHttpRequest.responseText).text();
		var status_error = jQuery('status_error', XMLHttpRequest.responseText).children();
		var length = status_error.length;
	}
	else
	{
		// console.log(XMLHttpRequest.responseText);
		if (XMLHttpRequest.responseText != '')
			eval("var request = "+XMLHttpRequest.responseText);

		var description = request.status_description;
		var status_error = request.status_error;
		var length = status_error;
	}
	
	description = description ? description : ' Ooops! something went wrong, please try again later.';

	if (length)
		jQuery.each(status_error, function(i, val) {			
			if (is_xml)
				$ul.append('<li> '+ $(this).text() +'</li>');
			else
				$ul.append('<li> '+ val +'</li>');
		});
	else
		$ul.html('<li>'+ description +'</li>');
	
	$this.slideDown('slow');
}
