
	function debugObject(obj) {
		var output = '';
							
		for(var key in obj) {
			
			if(typeof(obj[key]) != 'string') {
				var obj2 = obj[key];
				
				for(var key2 in obj2) {
					output += key2+': '+obj2[key2]+'\n';
				}
			} else {
				output += key+': '+obj[key]+'\n';
			}
		}
		
		alert(output);
	}
	
	function setFeedback(_obj,_msg,_success) {
		
		var obj = typeof(_obj) == "string" ? jQuery(_obj) : _obj;
		
		obj.stop(true,true).slideUp({
			duration: transition_time, 
			easing: "easeInOutExpo",
			complete: function() {
				
				obj.html(_msg);
				if(_success)
					obj.addClass('feedback_success');
				else
					obj.removeClass('feedback_success');
				//Cufon.refresh();
				
				obj.stop(true,true).slideDown(transition_time, function() {
					setTimeout(function() { hideFeedback(obj,transition_time) },hold_time);
				});
			}
		});
		
		
	}
	
	function hideFeedback(_obj) {
		
		var obj = typeof(_obj) == "string" ? jQuery(_obj) : _obj;
		
		obj.stop(true,true).slideUp(transition_time,function() {
			obj.html('');
		});
	}
	
	function clearFieldset(obj) {
		var el = typeof(obj) == "string" ? jQuery(obj) : obj;
		fields = el.filter(':input');
		alert(fields.length);
		fields.each(function(evt) {
			alert($(this).attr('id'));
		});
	}
	
	function toggleEl(_el_caller,_el_target,_speed) {
		var el_target = typeof(_el_target) == "string" ? jQuery(_el_target) : _el_target;
		var el_caller = typeof(_el_caller) == "string" ? jQuery(_el_caller) : _el_caller;
		var opener = this;
		var state = el_target.css('display');
		
		if(state == 'none') {
			if(_el_caller.text() != '') 
				_el_caller.text('-');
			
			el_target.slideDown(_speed);
			el_target.removeClass('closed').addClass('open');
			el_caller.removeClass('closed').addClass('open');
		} else {
			if(_el_caller.text() != '') 
				_el_caller.text('+');
			
			el_target.slideUp(_speed);
			el_target.removeClass('open').addClass('closed');
			el_caller.removeClass('closed').addClass('open');
		}
	}

	function getAnchorVar(obj,prop) {
		
		if(obj == '' || !obj)
			return false;
		
		if(prop == '' || !prop)
			return false;
		
		var attr = obj.split('&');
		
		for(var x=0;x<attr.length;x++) {
			var nvpair = attr[x].split('=');
			if(nvpair[0] == prop)
				return nvpair[1];
		}
		
		return false;
	}
	
	
	function numberMax(n1,n2) {
		return parseInt(n1) >parseInt(n2) ? false : true;
	}
	
	
	function validateEmail(emailString) {
		var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
		return emailPattern.test(emailString);
	}

	
	function elementColorFlash(_el,color2,speed,easing) {
		
		var el = typeof(_el) == "string" ? jQuery(_el) : _el;
		var color1 = el.css('background-color');
		var color2 = color2.substring(0,1) == '#' ? color2 : '#'+color2;
		
		if(speed == null)
			speed = 300;
		
		el.stop(true,true).animate({ backgroundColor: color2 }, speed,easing).animate({ backgroundColor: color1 }, Math.round(speed * 1.5), easing);
	}
	
	function replaceElement(_el_replace,_el_with,_speed) {
		var el_replace = typeof(_el_replace) == "string" ? jQuery(_el_replace) : _el_replace;
		var el_with = typeof(_el_with) == "string" ? jQuery(_el_with) : _el_with;
		var speed1,speed2;
		
		switch(typeof(_speed)) {
			case 'number':
				speed1 = Math.round(_speed/2);
				speed2 = _speed;
				break;
				
			case 'string':
				if(_speed == 'slow') {
					speed1 = 'slow';
					speed2 = 'fast';
				} else if(_speed == 'fast') {
					speed1 = 'fast';
					speed2 = 'fast';
				}
				break;
		}
		
		el_with.hide();
		el_replace.after(el_with);
		
		el_replace.fadeOut(speed1,function() { 
			el_replace.remove();
			el_with.fadeIn(speed2);
		});
	}
	
	
	
	function onFormSubmitHandler(el,func) {
		el.submit(func());
	}
	
	
	function textareaMaxChars(textarea, limit, el_feedback) {
		
		var text = textarea.value.replace(/\n/g, "\r\n");
		var textlength = text.length;
		var info = jQuery('#'+el_feedback);
		
		if (textlength > limit) {
		
			if (info != null) {
				
				info.html('Limited to ' + limit + ' characters!');
				textarea.val(text.substr(0, limit));
				
				return false; 
			
			} else {
				
				if(info != null)
					info.html('Limited to ' + limit + ' characters (' + (limit - textlength) + ' left'); 
			}
			
		}
		
		return true;
	}
	
	
	function trackPage(id,domain,page) {
		return "<fb:serverFbml style='width:0;height:0;display:none;'>"+
		"<script type='text/fbml'>"+
			"<fb:google-analytics uacct='"+id+"' udn='"+domain+"' page='"+page+"' />"+
		"</script>"+
		"</fb:serverFbml>";
	}
	
	
	function test() {
		alert(trackPage('1','page'));
	}
