/**
 * @author alex
 */
/**
 * @author alexrich
 */
historySingleton = function() {
	var tokenDelimiter = ':';
	
	function wrapURL(url){
		var result;
		
		result = "pages/" + url + ".htm";
		
		return result;
	}

	function _init(){
		var loadSite;
		
		Ext.History.init();
		
		function onLoadSiteLoad(el, e){
			var subLoadSite;
			
			try {
				subLoadSite = Ext.get("sub-load-site");
				subLoadSite.load(wrapURL(el.tag));
			} 
			catch (err) {
				console.error(err);
			}
		}
		
		Ext.History.on('change', function(pageURL){
			loadSite = Ext.get("load-site");
			if (pageURL) {
				var parts = pageURL.split(tokenDelimiter);
				
				loadSite.tag = parts[0];
				loadSite.tag2 = parts[1];
				
				loadSite.load({
					url : wrapURL("tanbox"),
					callback : onTanBoxLoad
				});
			}
			else {
				loadSite.load(wrapURL("main"));
			}
		});
	}
	
	function onTanBoxLoad(el, e){
		var loadSiteInTanBox = Ext.get("load-site-in-tan-box");
		
		if(el.tag2){
			loadSiteInTanBox.tag = el.tag2;			
			loadSiteInTanBox.load({
				url : wrapURL(el.tag),
				callback : onFirstPageLoad
			});
		}
		else {
			loadSiteInTanBox.load(wrapURL(el.tag));
		}
	}
	
	function onFirstPageLoad(el, e){
		var loadSite2;
		
		try{
			loadSite2 = Ext.get("inner-load-site");
			loadSite2.load(wrapURL(el.tag));
		} catch(err) {
			console.error(err);
		}
	}
	
	function checkURLToLoad(){
		var URLstr = window.location.hash;
		var cleanedStr = URLstr.substr(1);  //removes # sign
		
		loadSite = Ext.get("load-site");
		
		if (cleanedStr) {
			var parts = cleanedStr.split(tokenDelimiter);
			
			if (parts.length <= 1) {
				loadSite.tag = cleanedStr;
				loadSite.load({
					url : wrapURL("tanbox"),
					callback : onTanBoxLoad
				});
			}
			else{
				loadSite.tag = parts[1];
				loadSite.load({
					url : parts[0],
					callback : onLoadSiteLoad
				});
			}
		}
		else{
			loadSite.load("pages/main.htm");
		}
	}
	return{
		init : function(){
			_init();
			checkURLToLoad();
		}
	};
}();