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

	function _init(){
		var loadSite;
		
		Ext.History.init();
		
		/*
		 * Global Function.  Any script anywhere should be able to call it
		 */
		loadPage = function (pageName){
			Ext.History.add(pageName);
		}
		/* 
		 * Loads a page inside a page.
		 */
		function loadSubPage(subPageName, mainPageName){
			Ext.History.add(mainPageName + ":" + subPageName);
		}
		
		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);
				
				if (parts.length <= 1) {
					loadSite.load(wrapURL(pageURL));
				}
				else {
					loadSite.tag = parts[1];
					loadSite.load({
						url: wrapURL(parts[0]),
						callback: onLoadSiteLoad
					});
				}
			}
			else {
				loadSite.load(wrapURL("main"));
			}
		});
	}
	
	function onLoadSiteLoad(el, e){
		var loadSite2;
		
		try{
			loadSite2 = Ext.get("load-site-two");
			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.load(wrapURL(cleanedStr));
			}
			else{
				loadSite.tag = parts[1];
				loadSite.load({
					url : parts[0],
					callback : onLoadSiteLoad
				});
			}
		}
		else{
			loadSite.load("pages/main.htm");
		}
	}
	return{
		init : function(){
			_init();
			checkURLToLoad();
		}
	};
}();