SwitchArea = Class.create();
SwitchArea.prototype = {
	
	contentManager: String,
	FirstHolder: String,
	activeRequestCount: Number,
	
	initialize: function(contentManager){
		this.contentManager		= (contentManager) ? contentManager : 'ContentManager.php';
		this.activeRequestCount	= 0;
	},
	
	_do: function(holder, Pars, onCompleteAct, firstTime, postParameters){
		if(this.activeRequestCount > 1){	return;	}
		
		this.activeRequestCount	= 1;
		
		if(firstTime){
			this.firstHolder		= holder;
			Ajax.activeRequestCount	= 0;
		}
		var loader			= this.loader;
		var contentManager	= this.contentManager + Pars;
		var firstHolder		= this.firstHolder;
		var	observeLinks	= this.observeLinks;
		
		var _method	= postParameters ? 'post' : 'get';
		var self	= this;
		
		var act		= function(){
			var act	= new Ajax.Updater(holder, contentManager, {method: _method, parameters: postParameters, evalScripts: true, encoding: 'iso-8859-1'});
			
			act.onComplete = function(){
				self.activeRequestCount	= 0;
				
				if(onCompleteAct){
					onCompleteAct();
				}
				loader(firstHolder, self);
			}.bind(this);
		}
		
		this.makeLoading(firstHolder);
		
		setTimeout(act,100)
	},

	loader: function(holder, self){
		if(this.activeRequestCount){
			if($('LoadingOverlay').style.display == "none"){
				self.makeLoading(holder);
			}
		}
		else{
			if($('LoadingOverlay').style.display != "none"){
				self.removeLoading(holder, true);
				self.observeLinks();
			}
		}
		return holder;
	},
	
	resizeLoading : function(reference){
		var position	= Position.positionedOffset($(reference));
		var dimensions	= $(reference).getDimensions()
		
		$('LoadingOverlay').style.left		= position[0] + 'px';
		$('LoadingOverlay').style.top		= position[1] + 'px';
		$('LoadingOverlay').style.width		= dimensions.width + 'px';
		$('LoadingOverlay').style.height	= dimensions.height + 'px';
	},
	
	makeLoading : function(reference){
		$('LoadingOverlay').show();
		this.resizeLoading(reference)
	},
	
	removeLoading : function(reference, fast){
		Element.hide($('LoadingOverlay'));
	},
	
	observeLinks : function(){
		var anchors = document.getElementsByTagName('a');
		
		for(var i=0; i<anchors.length; i++){
			var anchor	= anchors[i];
			var self	= this;
			
			var relAttribute = String(anchor.getAttribute('rel'));

			if(relAttribute.toLowerCase() == 'link' && !anchor.onclick){
				anchor.onclick = function(){
					var markdown	= this.href;
					var href		= markdown.sub(/(.*?)\.\br\/(.*?)/, '#{2}');
						href		= href.sub(/(.*?)\.\local\/(.*?)/, '#{2}');
					
					self._do('ContentHolder', '/'+href, null, true);
					return false;
				};
			}
		}
	}
}