/*
 * jquery-util.js - JavaScript Library
 * Copyright (c) 2010 Lucas Ferreira (www.lucasferreira.com)
 *
 * Version: 0.8a
 */

/* Browser info class */
var Browser = {
	init: function()
	{
		this.os = (navigator.platform || "win").toString().toLowerCase();
	},
	isIE: function(){ return jQuery.browser.msie; },
	isOpera: function(){ return jQuery.browser.opera; },
	isMozilla: function(){ return jQuery.browser.mozilla; },
	isSafari: function(){ return jQuery.browser.safari; },
	isWin: function(){ return (this.os.indexOf("win") > -1); },
	isLinux: function(){ return (this.os.indexOf("lin") > -1); },
	isMac: function(){ return (this.os.indexOf("mac") > -1); }
};
Browser.init();

/* For FireBug */
if(!console)
{
	var console = {
		created: false,
		create: function()
		{
			var d = jQuery("<div id='debbug-win'></div>");
			d.css({"padding": "1em", "border": "1px solid black", "font": "12px Georgia1, Georgia, serif"});
			jQuery(document.body).append(d);
			console.created = true;
		},
		log: function(a)
		{
			if(!console.created) console.create();
			var d = document.getElementById("debbug-win");
			d.innerHTML += a + '<br />';
		}
			
	};
}

/* MISCELANIOUS FUNCTIONS */
jQuery.fn.initValue = function()
{
	this.focus(function(){
		if(typeof this.defaultValue == "undefined")
		{
			this.defaultValue = this.val();
		}
		if(this.defaultValue == $(this).val()) $(this).val('');
	}).blur(function(){
		if($(this).val().length < 1) $(this).val(this.defaultValue);
	});
}

function chr(n){ return (String.fromCharCode(n) || null); }

function empty(o){ return ((typeof o == "undefined") || (o==null) || (o.length < 1) || false); }

function cancelEvent(e)
{
	e.preventDefault();
	return false;
}

/* FixSFMenu CLASS */
jQuery.fn.FixSFMenu = function(e)
{
	this.find("li").hover(function(){
		$(this).addClass('over').parent().find(".over").not($(this)).removeClass('over');
	}, function(){
		$(this).removeClass('over');
	}).each(function(){
		if($(this).find("ul").length > 0)
		{
			$(this).find("a:first").focus(function(){ $(this).parent().addClass("over"); });
			$(this).find("a:last").blur(function(){
				$(this).parent().parent().parent().removeClass("over");
				$(this).parent().parent().removeClass("over");
			});
		}
	});
	
	return this;
};

/* CakePHP Integration */
String.prototype.camelize = function(noLowerFirst)
{
	for(var i=0, s=this.replace(/[-_.]+/g, '/').split('/'), ns=""; i<s.length; i++)
	{
		if(!noLowerFirst && i < 1)
		{
			ns += s[i].toLowerCase();
		}
		else
		{
			ns += (ss=s[i]).substr(0, 1).toUpperCase() + ss.substr(1, ss.length).toLowerCase();
		}
	}
	return ns;
};
var $cake = function(s)
{
	return $('#' + s.camelize(true));
};
$cake.name = function(s)
{
	s = s.replace(/[_.]+/g, '/').split('/');
	for(var i=0; i<s.length; i++)
	{
		s[i] = "[" + s[i] + "]";
	}
	
	return ("data" + s.join(""));	
}

/* Add Plugins on the fly*/
$.addPlugin = function(func,link,asyncExec)
{
	if(!func) return false;
	if(eval('typeof $.'+func+' != "undefined" || typeof $.fn.'+func+' != "undefined"'))
	{
		return true;
	}
	else
	{
		link = (!link) ? func : link;
		$return = false;
		$.ajax({
			async: asyncExec ? true : false,
			cache: true,
			dataType: 'script',
			url: defaultUrl+'js/jquery/jquery.'+link.toLowerCase()+'.js',
			success: function(){
				$return = true;
			},
			error: function(){
				$return = false;
			},
			complete: asyncExec
		});
		return $return;
	}
};
