/**
 * jQuery TBA library

 * Stylr Internet Technology | http://stylr.nl
 * Date: 20/11/2009
 * 
 * Last-edited: 06/09/2011
 * 
 * @author Robin van Baalen
 * @version 1.1.0
 * 
 * 
 * Change Log:
 *
 * 1.1.0	Added serializeObject() function for new filter.
 * 1.0.9	Removed stripeIt() function from library.
 * 1.0.8	Added the stripeIt() function to easily stripe elements.
 * 1.0.7	Added setting for custom container. Automatically sets the position of the container to relative.
 * 1.0.6	Added clickToHide option
 * 1.0.5	hideUIMessage() now has the attribute fadeTime (default: settings.fadeTime)
 * 1.0.4	Added image setting to show any kind of icon (default: loading.gif)
 * 1.0.3	Added the hide setting to remove existing UI Messages
 * 1.0.2	Added the autoHide setting.
 * 1.0.1	UI Message removes itself after it was shown.
 * 1.0.0	First release
 * 
 * TODO:
 * - Add Apple shop-style behaviour to uiMessage positioning.
 *
 */



/**
 * Serialize object
 */
$.fn.serializeObject = function()
{
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        if (o[this.name]) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });
    return o;
};

(function($) // Compliant with jquery.noConflict()
{

    //*** Simple debug function
    $.debug = function(content) { 
	console.log(content); 
	};

    //*** Pause plugin.
    $.fn.pause = function(duration) { $(this).animate({ dummy: 1 }, duration); return this; };

    //*** UI Message plugin.
    $.uiMessage = function(message, settings) {
	    
	settings = $.extend({
    	    fadeTime: 2000, 			// Fade time in miliseconds
    	    timeOut: 3000, 			// Timeout in miliseconds
    	    autoHide: true, 			// Automatically remove the uiMessage
    	    clickToHide: true,			// Click the message to hide it
    	    css: {}, 				// Overwrite default CSS
    	    container: 'body', 			// The container to append the uiMessage to.
	    image: '/images/loading-black.gif', // Default image
	    toConsole: false			// Log messages to Firebug console
	}, settings || {});
	    
	//*** Create the DOM element
	var $message  = $("<p>"+message+"<\/p>"),
	    $previous = $("#uiMessage");
	
	if(message == "remove"){
	    hideUIMessage("#uiMessage");
	}
	else {
	    createUIMessage();
	}
	
	function createUIMessage(){
	    
	    if($previous.length > 0){ 		// Remove any existing uiMessage.
		$previous.remove();
	    }
	    
	    if(settings.container !== "body"){
		$(settings.container).css("position","relative");
	    }
		
	    $message
	    	.wrap("<div id=\"uiMessage\"></div>")
	    	.parent()
	    	.appendTo(settings.container);
	    
	    var $uiMessage = $message.parent();

	    if($(settings.image).length <= 0){
		$uiMessage.prepend("<img src=\""+settings.image+"\" alt=\"\" />").show();
	    }
	 	
	    if($(settings.css).length > 0){
		$uiMessage.css(settings.css);
	    }
	    
	    if(settings.fadeTime > 0){
		$uiMessage.fadeIn(settings.fadeTime);
	    }
	    else {
		$uiMessage.show();
	    }
	    
	    if(settings.autoHide){
		hideUIMessage("#uiMessage");
	    } 
	    if(settings.clickToHide){
		$uiMessage.bind("click", function(){
		    hideUIMessage("#uiMessage",0);
		});
		$uiMessage.css("cursor","pointer");
	    }
	}
	
	function hideUIMessage(dom, fadeTime){
	    fadeTime = typeof(fadeTime) != 'undefined' ? fadeTime : settings.fadeTime;

	    if(fadeTime > 0){
		$(dom)
    	    	    .pause(settings.timeOut)
    	    	    .fadeOut(fadeTime, function(){
    	    		$(this).remove();
    	    	    });
	    }
	    else {
		$(dom).remove();
	    }
	    
	    return true;
	}
	
	if(settings.toConsole){
	    console.log("UI Message:");
	    console.log(message);
	}
    };
    
})(jQuery);
