$(function(){
	var Toggler = function(){
		// toggleize .toggle divs and stuff
		$(".toggle").each(function(index, trigger){
			var trigger = $(trigger);         // the trigger
			var dest_id = trigger.attr('rel');// the destination id
			
			if(typeof dest_id != 'string') return;
			
			var dest    = $('#' + dest_id) // the destination		
			
			if(dest.length == 0) return;
			
			// sets visibility to none by default
			dest.hide();
			
			// converts trigger tags into link if the are not so by default
			if(trigger.get(0).tagName != 'A'){
				var new_trigger = $(document.createElement('A'));
				new_trigger.html(trigger.html());
				trigger.html("");
				trigger.removeAttr('rel');
				trigger.append(new_trigger);
				
				var trigger = new_trigger;
			}
			trigger.attr('href', 'javascript:void(0)');
			trigger.attr('rel', dest_id);
			trigger.attr('title', TOGGLE_SHOW_LABEL);
			
			// creates a flexible trigger indicator
			var trigger_i = $(document.createElement('img'));
			trigger_i.attr('src', TOGGLE_IMG_SHOW);
			trigger_i.attr('border', 0);
			trigger.prepend(trigger_i);
			
			// sets callback
			trigger.click(function(){
				var trigger   = $(this);
				var trigger_i = trigger.children('img');
				var dest      = $('#' + trigger.attr('rel'));
				
				var status_prev = dest.css('display'); 
				var status_next = status_prev == 'none'? '': 'none';
				
				// sets the new status
				status_next == ''? dest.fadeIn(300): dest.fadeOut(300);
				
				// updates trigger and indicator too
				trigger.attr('title', status_next == 'none'? TOGGLE_SHOW_LABEL: TOGGLE_HIDE_LABEL);
				trigger_i.attr('src', status_next == 'none'? TOGGLE_IMG_SHOW: TOGGLE_IMG_HIDE);		
			})
		});
	};
	
	// extends jquery
	$.extend({
		toggler: function(opts){
			var toggler = new Toggler(opts);
		}
	});	
	
	// autoload
	$.toggler();	
});
