/*
 * jquery-util-lite.js - JavaScript Support Library
 * Copyright (c) 2009 Diego Martins da Rocha
 * Version: 0.5.4
 */
 /* this path */
tmp = $.find('script')[0].src.toString().split(/(c)?js\//)[0];
var DEFAULT_URL = tmp.match('app/webroot') ? tmp.split(/app\/webroot/)[0]+'index.php/' : tmp;
delete tmp;
(function(){
	/* default value for empty value of a field */
	$.fn.initValue = function(v){
		var c = 'initValue';
		$(this).each(function(){
			var o = $(this);
			if(o.val().length<1){
				if(v.length>0 && o.val().length<1) o.val(v);
				o.defaultValue = o.addClass(c).val();
				o.focus(function(){
					(o.val() == o.defaultValue) ? o.addClass(c).val('') : o.removeClass(c);
				}).blur(function(){
					(o.val().length<1) ? o.addClass(c).val(o.defaultValue) : o.removeClass(c);
				}).keypress(function(){
					o.removeClass(c);
				});
				o.parents('form:first').submit(function(){
					o.triggerHandler('focus');
				});
			}
		});
		return $(this);
	};
	/* fix menu hover */
	$.fn.FixSFMenu = function(opened){
		var opened = (opened || false);
		if(opened) this.parent().find('li:nth-child('+opened+')').addClass('over');
		this.find("li").hover(function(){
			$(this).addClass('over').parent().find('.over').not($(this)).removeClass('over');
		}, function(){
			if(!opened)	$(this).removeClass('over');
		}).each(function(){
			if($(this).find('ul').length > 0){//acessibilidade - tab
				$(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);
	};
	/* CSS position:fixed for ie6 */
	$.fn.positionFixed = function(){
		if($.browser.msie && parseInt($.browser.version) < 7){
			var that = $(this);
			var thatTop = parseInt(that.css('top'));
			$(window).scroll(function(){
				that.css({'top':(document.documentElement.scrollTop || 0)+thatTop});
			});
			$(this).css({'position': 'absolute'});
		}else{
			$(this).css({'position': 'fixed'});
		};
		return $(this);
	};
	/* CakePHP Integration */
	function $cake(a) {
		for(i=0,a=a.split('_').join('.').split(',');i<a.length&&(b=a[i])&&(a[i]='#');i++)
			for(j=0,c=b.split('.');j<c.length;(a[i]+=c[j].substr(0,1).toUpperCase()+c[j].substr(1)),j++);
		return $(a.join(","));
	}
	/* protect mail from spammers */
	$.fn.pMail = function(){
		$(this).each(function(){
			$(this).html($(this).html().replace(/\[ponto\]/g,'.').replace(/\[arroba\]/g,'@').replace(/%5Bponto%5D/g,'.').replace(/%5Barroba%5D/g,'@'));
		});
		return $(this);
	};
	/* center the element */
	$.fn.center = function(pos){
		var that = $(this);
		var h = function(){
			var x = -parseInt((that.outerWidth() - that.parent().width())/2);
			that.css({
				'margin-left': x+'px',
				'margin-right': x+'px' 
			});
		};
		var v = function(){
			var y = -parseInt((that.outerHeight() - that.parent().height())/2);
			that.css({
				'margin-top': y+'px',
				'margin-bottom': y+'px' 
			});
		};
		switch(pos){
			default: case 'h': h(); break;
			case 'v': v(); break;
			case 'both': h();v(); break;
		};
		return that;
	};
	/* normalize height of the real height of the elements: useful in lists */
	$.fn.normalizeHeight = function(property,el_per_time){
		var that = $(this);
		var property = property || 'height';
		var el_per_time = el_per_time || that.length;
		
		var start = 0;
		var end = el_per_time;
		
		for(i=0;i<that.length;i++){
			if(start < i && end > i){
				start = end;
				end += el_per_time;
			}
			var maxHeight = 0;
			
			that.slice(start,end).each(function(){
				var those = $(this);
				switch (property) {
					case 'padding':
					case 'height':
					default:
						maxHeight = (maxHeight > those.innerHeight()) ? maxHeight : those.innerHeight();
					break;
					case 'margin':
						maxHeight = (maxHeight > those.outerHeight()) ? maxHeight : those.outerHeight();
					break;
				}
			}).each(function(){
				var those = $(this);
				var cfg = {};
				switch (property) {
					case 'padding':
						cfg[property+'-bottom'] = maxHeight-those.innerHeight()+parseInt(those.css(property+'-bottom'))+'px';
					break;
					case 'margin':
						cfg[property+'-bottom'] = maxHeight-those.outerHeight()+parseInt(those.css(property+'-bottom'))+'px';
					break;
					default:
					case 'height':
						cfg['height'] = maxHeight-parseInt(those.css('padding-bottom'))+'px';
					break;
				}
				those.css(cfg);
			});
		}
	};
	/* 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+'/'+func : link;
			$return = false;
			$.ajax({
				async: asyncExec ? true : false,
				cache: true,
				dataType: 'script',
				url: DEFAULT_URL+'js/jquery/'+link.toLowerCase()+'.js',
				success: function(){
					$return = true;
				},
				error: function(){
					$return = false;
				},
				complete: asyncExec
			});
			return $return;
		}
	};
	$.getQueryString = function(){
		var vars=window.location.href.toString(),results={}; 
		if((vars=vars.split('?')).length>1){
			$.each(vars[1].split('#')[0].split('&'),function(k,v){
				temp=value.split('=');
				results[temp[0]]=temp[1];
			});
		}
		return results;
	}
	$.UtilAjax = function(){
		$(window).load(function(){
			$(this).ajaxSend(function(){
				if($('#ajax-msg').length < 1){
					$('body').prepend('<div id="ajax-msg">Carregando Dados...</div>');
					$('#ajax-msg').positionFixed();
				}
				$('#ajax-msg').show().animate({
					'opacity': 1
				});
			}).ajaxComplete(function(){
				$('#ajax-msg').animate({
					'opacity': 0
				},'normal','swing',function(){
					$('#ajax-msg').hide();
				});
			});
		});
	};
})(jQuery);
