/**
* Extensions diverses
*
* @author	Philippe Elsass
* @version	1.1
*/
(function($){
	
	/**
	* Object serialization.
	* ex: {var1:val1, var2:val2} --> "var1=val1&var2=val2"
	*/
	$.serializeObject = function(data, separator)
	{
		var parts = [];
		for(var prop in data)
		{
			if (typeof(data) != "function")
				parts.push(prop + "=" + escape(data[prop]));
		}
		return parts.join( separator | "&" );
	}
	
	/**
	* Climb up the DOM
	* ex: $(this).upTo("div"); 
	*     $(this).upTo("li.classname")
	*     $(this).upTo(".classname")
	* @param	expr	Node to find
	*/
	$.fn.upTo = function(expr)
	{
		if (this.length == 0) return this;
		var target = this.get(0);
		var p = (expr + ".").split(".");
		var name = p[0].toUpperCase();
		var cname = p[1];
		while (target && 
				( (name.length && target.nodeName != name)
				  || (cname.length && !$(target).hasClass(cname)) ) ) target = target.parentNode;
		return $(target || []);
	}
	
	/**
	* Automatic popups
	* ex: <a href="..." rel="mypopup,700,700">...</a>
	* ex: <a href="..." rel="_blank">...</a>
	*/
	$.autoPopup = function()
	{
	    $("a[rel]").click(
	        function(e) 
	        {
	            var rel = $(e.target).upTo("a").attr("rel").split(",");
	            var href = $(e.target).upTo("a").attr("href");
        	    
                var width = null;
                var height = null;
                var scrollbars = "yes";
                var sizeable = "yes";
                var index = 1;
                if (rel.length > 1)
                {
                    if (!isNaN(rel[index]) && parseInt(rel[index]) > 100) width = parseInt(rel[index++]);
                    if (!isNaN(rel[index]) && parseInt(rel[index]) > 100) height = parseInt(rel[index++]);
                    if (!isNaN(rel[index])) scrollbars = (rel[index++] == "0") ? "no" : "yes";
                    if (!isNaN(rel[index])) sizeable = (rel[index++] == "0") ? "no" : "yes";
                }                
                var options = "status=yes,resizable=" + sizeable + ",scrollbars=" + scrollbars;
                if (width) options += ",width=" + width + ",left=" + Math.round((screen.width-width)/2);
                if (height) options += ",height=" + height + ",top=" + Math.round((screen.height-height)/2);
                
                if (!width && !height) options += ",menubar=yes,toolbar=yes,location=yes";
                
                var win = window.open(href, rel[0], options);
                if (win != null) e.preventDefault();
            }
        );
	}
	
	/**
	* Text inputs default values - show/hide a default text (title content) in input fields.
	* ex: <input title="Enter your name" text="Enter your name">...</a>
	* ex: <input title="Enter your name">...</a>
	*/
	$.autoInputDefault = function()
	{
	    $("input[title],textarea[title]")
	    .focus(
	        function(e)
	        {
	            var field = $(e.target);
	            if (field.val() == field.attr("title")) 
	            {
	                field.val("");
	                field.removeClass("fade");
	            }
	        }
	    )
	    .blur(
	        function(e)
	        {
	            var field = $(e.target);
	            if (field.attr("type") != "password" && field.val() == "") 
	            {
	                field.addClass("fade");
	                field.val(field.attr("title"));
	            }
	        }
	    )
	    .each(
	        function()
	        {
	            var field = $(this);
	            if (field.attr("type") != "password") 
	            {
	                if (field.val() == field.attr("title")) field.addClass("fade");
	                if (field.val() == "") field.val(field.attr("title"));
	            }
            }
        );
        
        // override ASP.NET validation
        if (window.ValidatorGetValue && !window.__ValidatorGetValue)
        {
            window.__ValidatorGetValue = window.ValidatorGetValue;
            window.ValidatorGetValue = function(id)
            {
                var field = $("#"+id);
	            if (field.val() == field.attr("title")) return "";
                else return window.__ValidatorGetValue(id);
            }
            //window.__ValidatorGetValueRecursive = window.ValidatorGetValueRecursive;
        }
	}
	
})(jQuery);
