var linkDirector = {      
	
	options: {
		completed:false,
		base_url:false,
		direct_url:false,
		return_func: false,
		data:false,
		recorder: {}
	},
	
	initComplete: function(){
		//falesafe for extra complete call
		if(!this.options.completed) {
			this.options.completed = true;
			this.options.init_return_func(this.fetchData());
			
			this.fireEvent("directorReady");
		}			
    },
    
	directionComplete: function(){
		//falesafe for extra complete call
		
		if(!this.options.completed) {
			this.options.completed = true;
			this.options.direct_return_func(this.fetchData());
			
			this.fireEvent("directorReady");
			
		}			
    },
	
	directionReady: function() {
		return this.options.completed;
	},
	
	initialize: function(options)
	{
		// Set options
		this.setOptions(options);
		
		if(!this.options.base_url){
			alert('base_url required!');
			return false;
		}
		
		if(!this.options.init_url){
			alert('init_url required!');
			return false;
		}
		
		if(!this.options.init_return_func){
			alert('init_return_func required!');
			return false;
		}
		
		if(!this.options.direct_url){
			alert('direct_url required!');
			return false;
		}
		
		if(!this.options.direct_return_func){
			alert('direct_return_func required!');
			return false;
		}
		/*
		if(!SWFAddress) {
			alert('SWFAddress required!');
			return false;
		}
		*/
		if(!seqImageLoader) {
			alert('seqImageLoader singleton required');
			return;
		}
		
		this.updateLinks();
	},
	
	updateLink: function(reference) {
		if(link.getProperty('href') && link.getProperty('target') != '_blank'){
					
			link.setProperty('href',link.getProperty('href').replace(this.options.base_url,'/'));				
			link.addEvent('click', function(e){
				e = new Event(e).stop();
				
				SWFAddress.setValue(link.getProperty('href'));
				link.blur();
				return false;
								
			}.bind(this));
		}
	},
	
	updateLinks: function(reference) {
		if(reference) {
			reference.getElements('a').each(function(link) {
			
				if(link.getProperty('href') && link.getProperty('target') != '_blank'){
					
					link.setProperty('href',link.getProperty('href').replace(this.options.base_url,'/'));				
					link.addEvent('click', function(e){
						e = new Event(e).stop();
						
						SWFAddress.setValue(link.getProperty('href'));
						link.blur();
						return false;
										
					}.bind(this));
				}			
			}.bind(this));
		}else{
			$$('a').each(function(link) {
			
				if(link.getProperty('href') && link.getProperty('target') != '_blank'){
					
					link.setProperty('href',link.getProperty('href').replace(this.options.base_url,'/'));				
					link.addEvent('click', function(e){
						e = new Event(e).stop();
						
						SWFAddress.setValue(link.getProperty('href'));
						link.blur();
						return false;
										
					}.bind(this));
				}			
			}.bind(this));
		}
	
	},
	
	initLink: function(direction) {
		// EMPTY CURRENT CHAINS ARRAY
		cancelChains();
		
		// EMPTY AND RESET seqImageLoader
		seqImageLoader.close();
		
		// STOP AUTOPLAY PORTFOLIO ITEM
		if($('visual_container')) {
			if($('visual_container').retrieve("image_slider")) {
				$('visual_container').retrieve("image_slider").stop();
			}
		}
		
		var req = new Request.JSON({
			url:this.options.init_url+''+direction,
			method:'post',
			evalScripts:false,
			evalResponse:false,
			autoCancel:true,
			onRequest: function(){
				
				this.options.completed = false;
			}.bind(this),
			onSuccess: function(json, txt) {
				
				// OPEN seqImageLoader QUEUE
				seqImageLoader.open();
				if(json.completed) {
					
					this.options.data = json;
					this.initComplete();
				}else {
					alert('incomplete');
				}
			}.bind(this),
			onFailure: function () {
				
				alert('fail');
			}.bind(this)
		});
		req.send();
	},
	
	directLink: function(direction) {
		
		this.fireEvent("directorDirectlink",[direction]);
		
		// EMPTY CURRENT CHAINS ARRAY
		cancelChains();
		
		// EMPTY AND RESET seqImageLoader
		seqImageLoader.close();
		
		// STOP AUTOPLAY PORTFOLIO ITEM
		if($('visual_container')) {
			if($('visual_container').retrieve("image_slider")) {
				$('visual_container').retrieve("image_slider").stop();
			}
		}
		
		var req = new Request.JSON({
			url:this.options.direct_url+''+direction,
			method:'post',
			evalScripts:false,
			evalResponse:false,
			autoCancel:true,
			onRequest: function(){
				
				this.options.completed = false;
			}.bind(this),
			onSuccess: function(json, txt) {
				
				// OPEN seqImageLoader QUEUE
				seqImageLoader.open();
				
				if(json.completed) {
					this.options.data = json;
					this.directionComplete();
				}else {
					alert('incomplete');
				}
			}.bind(this),
			onFailure: function () {
				
				alert('fail');
			}.bind(this)
		});
		req.send();
	},
	
	fetchData: function() {
		return this.options.data;
	}	
};

$extend(linkDirector,new Chain());
$extend(linkDirector,new Events());
$extend(linkDirector,new Options());