var globalelements		= new Array(); 
var globalprops 		= new Array();
var globalevent 		= new Array();
var globalcount			= 0;
var globalload			= 0;

function smartAnchors(conf){
	//console.log('anchors initiated');
	var trigger = conf.trigger, target = conf.target, exec = conf.exec, event = conf.event;
	
	//console.log($('title'));
	
	// Optional
	if(conf.ajax) var ajax	= conf.ajax;
	if(conf.disableWhileLoading) var dwl = true;
	
	/* Element & Properties storage*/
	var elements = new Array(), elprops = new Array();
	
	jQuery.each(jQuery(trigger), function(i,el){
		
		jQuery(el).attr('globalindex', globalcount);
		
		// New properties object
		var props = new Object(); 
			props.index = i;
			
		/* Save important values for later use & delete js props */
		if(jQuery(el).attr('onClick')){ 			props.onclick 	= jQuery(el).attr('onClick'); 		jQuery(el).removeAttr('onClick'); }
		if(jQuery(el).attr('href')){ 				props.href 		= jQuery(el).attr('href'); }
		if(jQuery(el).attr('onMouseOver')){ 		props.mouseover = jQuery(el).attr('onMouseOver'); 	jQuery(el).removeAttr('onMouseOver'); }
		if(jQuery(el).attr('onMouseOut')){ 			props.mouseout 	= jQuery(el).attr('onMouseOut'); 	jQuery(el).removeAttr('onMouseOut'); }
		
		/* If Ajax is set save ajax conf */
		if(ajax){									props.ajax 		= ajax;	}
		
		/* Store values & object */
		elements.push(jQuery(el));
		elprops.push(props);
	
		// bind right listener to element 
		switch(event){
			case 'click':
				elements[i].bind( 'click', function(e){ e.preventDefault(); if(globalload==0){ exec(target, jQuery(this), i) };  });
				//console.log('clickadded');
			break;
			case 'mouseOver':
				elements[i].bind( 'mouseover', function(e){ e.preventDefault(); exec(target, jQuery(this), i); disableTrigger(jQuery(this)); });
			break;
			case 'mouseOut':
				elements[i].bind( 'mouseout', function(e){ e.preventDefault(); exec(target, jQuery(this), i); disableTrigger(jQuery(this)); });
			break;
		}
	});
	
	globalelements[globalcount] 	= elements;
	globalprops[globalcount]		= elprops;
	globalevent[globalcount] 		= event;
	globalcount++;
	
}



function smartAnchorFinish(ref, index){
	
	var gi 	= ref.attr('globalindex'); 
	var o 	= globalprops[gi][index];
	var e 	= globalevent[gi];
	
	
	if(globalload == 0){
		disableTrigger(jQuery(ref));
		switch(e){
		
			case 'click':
				if( o.href && !o.onclick && o.ajax )		dynamicLoader(o.href, o.ajax );
				else if( o.href && !o.onclick && !o.ajax ) 	window.location = o.href;	 
				else if( o.onclick ) 						eval(o.onclick);
			
			break;
			case 'mouseOver':
				if(o.href && !o.mouseover && o.ajax)		dynamicLoader(o.href, o.ajax );
				else if( o.href && !o.mouseover && !o.ajax )window.location = o.href;	 
				else if( o.mouseover ) 						eval(o.mouseover);
			
			break;
			case 'mouseOut':
				if(o.href && !o.mouseout && o.ajax)			dynamicLoader(o.href, o.ajax );
				else if( o.href && !o.mouseout && !o.ajax )	window.location = o.href;	 
				else if( o.mouseout ) 						eval(o.mouseout);
			
			break;
		}
	}
}

function dynamicLoader(url, ajax){
	
	//TODO: 
	// Fehlerabfrage....
	// Contentids && Containerids vorhanden?
	// Längen vergleich Contentids && Containerids --> Häääändliiing
	
	globalload = ajax.containerids.length;
	
	//jQuery('title').text('');
	//jQuery('title').load(url+' '+'title', function(){
	//	jQuery('title').replaceWith(jQuery('title').html());
	//});
	
	
	
	$.each(ajax.containerids, function(i, el){
		var loadstring = url+' '+ajax.contentids[i];
		if(ajax.success[i]) jQuery(ajax.containerids[i]).load(loadstring, function(){ jQuery(ajax.contentids[i]).bind( 'click', function(e){ e.preventDefault(); }); globalload--; startFinisher(ajax);  /*console.log('globalload: '+globalload);*/  });
		else jQuery( ajax.containerids[i]).load(loadstring, function(){ jQuery(ajax.contentids[i]).bind( 'click', function(e){ e.preventDefault();  }); /*console.log('listener deleted');*/ });
	});
}

function startFinisher(ajax){

	if(globalload == 0){
		$.each(ajax.containerids, function(i, el){
			
			ajax.success[i]();
			
		});
	}

}


function disableTrigger(ref){
	
	var gi 	= ref.attr('globalindex'); 
	
	jQuery.each(globalelements[gi], function(i,el){
	
		//console.log('listener deleted @ disableTrigger');
		// bind right listener to element 
		jQuery(globalelements[gi][i]).unbind();
		jQuery(globalelements[gi][i]).bind( 'click', function(e){ e.preventDefault(); });
		//console.log(globalelements[gi][i])
		
	});
}

/*
function enableTrigger(trigger, exec){

	jQuery.each(jQuery(trigger), function(i,el){
	
		// bind right listener to element 
		switch(event){
			case 'click':
				elements[i].bind( 'click', function(e){ e.preventDefault(); exec(target, jQuery(this), i); });
			break;
			case 'mouseOver':
				elements[i].bind( 'mouseover', function(e){ e.preventDefault(); exec(target, jQuery(this), i); });
			break;
			case 'mouseOut':
				elements[i].bind( 'mouseout', function(e){ e.preventDefault(); exec(target, jQuery(this), i); });
			break;
		}
	});
}
*/



