﻿HistoryNavigatorsContainer = [];


function generateHistoryNavigator(id, backButtonID, forwardButtonID, refreshButtonID, locationBarID, fnNameLocationResolver, fnNameEnable, fnNameDisable)
{	
	if((backButton = $("#" + backButtonID)).length == 0) return false;
	if((forwardButton = $("#" + forwardButtonID)).length == 0) return false;
	if((refreshButton = $("#" + refreshButtonID)).length == 0) return false;
	if((locationBar = $("#" + locationBarID)).length == 0) return false;
	
	if(typeof(backButton.data("enabled")) != "undefined") 
		return false; 
	backButton.data("enabled", true);
	if(typeof(forwardButton.data("enabld")) != "undefined") 
		return false;
	forwardButton.data("enabled", true);
	if(typeof(refreshButton.data("enabled")) != "undefined")
		return false;
	refreshButton.data("enabled", true);
	if(typeof(locationBar.data("enabled")) != "undefined")
		return false;
	locationBar.data("enabled", true);
	
	hn = HistoryNavigatorsContainer[id] = new HistoryNavigator(
										
										CompareRequests,
										
										function(req) { if(req == undefined) return; addRequest(req[0], req[1], req[2]); },
										
										null,
										
										new Function('req', 'hn', 'UpdateControler(req, hn, "'+ backButtonID +'", "'+ forwardButtonID +'", "'+ refreshButtonID +'", "'+ locationBarID +'", '+ fnNameEnable +', '+ fnNameDisable +', '+ fnNameLocationResolver +');'),
										
										null,
										
										new Function('req', 'hn', 'UpdateControler(req, hn, "'+ backButtonID +'", "'+ forwardButtonID +'", "'+ refreshButtonID +'", "'+ locationBarID +'", '+ fnNameEnable +', '+ fnNameDisable +', '+ fnNameLocationResolver +');'),
										
										null,
										
										30,
										
										30,
										
										true
										
										);
	
	hn.id = id;
	
	eval("UpdateControler(0, hn, '" + backButtonID + "', '" + forwardButtonID + "', '" + refreshButtonID + "', '" + locationBarID + "', " + fnNameEnable + ", " + fnNameDisable + ", " + fnNameLocationResolver + " );");
	
	return hn;
}

function UpdateControler(steps, hn, backButtonID, forwardButtonID, refreshButtonID, locationBarID, fnEnable, fnDisable, fnResolver)
{
	 if(hn.BackLength() > 0 && !($("#"+ backButtonID).data("enabled")))
		fnEnable(hn.id, backButtonID, "back");
	
	else if(hn.BackLength() == 0 && $("#" + backButtonID).data("enabled")) 
		fnDisable( backButtonID, "back");
	
	
	if(hn.ForwardLength() > 0 && !($("#"+ forwardButtonID).data("enabled"))) 
		fnEnable( hn.id, forwardButtonID, "forward");
	
	else if(hn.ForwardLength() == 0 && $("#"+ forwardButtonID).data("enabled")) 
		fnDisable( forwardButtonID, "forward");
	
	
	if(hn.current != null && !($("#"+ refreshButtonID).data("enabled"))) 
	{
		fnEnable( hn.id, refreshButtonID, "refresh");
		fnEnable( hn.id, locationBarID, "location");
	}
	
	else if(hn.current == null && $("#"+ refreshButtonID).data("enabled")) 
	{
		fnDisable( refreshButtonID, "refresh");
		fnDisable( locationBarID, "location");
	}
	$("#"+ locationBarID).val( fnResolver(hn.current));
	
}


function LocationResolver(req)
{
	if(req == null || typeof(req[1]) == "undefined")
		return "";
	
	if(typeof(req[1].target) != "undefined" || ( typeof(req[1]) == "string" && req[1].search(/target=/i) >= 0 ))
		return "http://stadsyria.com/?navigator=1&container0=RealContent&params0=" + ((typeof(req[1]) == "string")? encodeURIComponent(req[1]) : encodeURIComponent($.param(req[1])));
	else
		return "http://www.stadsyria.com";
}

function EnableHistoryElement(hnID, elemID, type)
{
	if(typeof(hnID) != "string" || !(hnID in HistoryNavigatorsContainer) || typeof(elemID) == "undefined" || typeof(type) != "string")
		return false;
		
	switch(type)
	{
		case "back":
			if((backButton = $("#" + elemID)).length == 0)
				return false;
			if(backButton.data("enabled"))
				return true;
			backButton.data("enabled", true);
			backButton.stop(true, true);
			//backButton.fadeTo(300, 0.7);
			backButton.animate({width:20}, 200);
			backButton.css('cursor', 'pointer');
			backButton.click(function(){ HistoryNavigatorsContainer[hnID].Back(); });
			//backButton.hover( function() { $(this).stop(true).fadeTo(100, 1);}, function() {$(this).stop(true).fadeTo(100, 0.7)});
			break;
			
		case "forward":
			if((forwardButton = $("#" + elemID)).length == 0)
				return false;
			if(forwardButton.data("enabled"))
				return true;
			forwardButton.data("enabled", true);
			forwardButton.stop(true, true);
			//forwardButton.fadeTo(300, 0.7);
			forwardButton.animate({width:20}, 200);
			forwardButton.css('cursor', 'pointer');
			forwardButton.click(function(){ HistoryNavigatorsContainer[hnID].Forward(); });
			//forwardButton.hover( function() { $(this).stop(true).fadeTo(100, 1);}, function() {$(this).stop(true).fadeTo(100, 0.7);});
			break;
			
		case "refresh":
			if((refreshButton = $("#" + elemID)).length == 0)
				return false;
			if(refreshButton.data("enabled"))
				return true;
			refreshButton.data("enabled", true);
			refreshButton.stop(true, true);
			//refreshButton.fadeTo(300, 0.7);
			refreshButton.animate({width:20}, 200);
			refreshButton.css('cursor', 'pointer');
			refreshButton.click( function(){ HistoryNavigatorsContainer[hnID].Refresh(); });
			//refreshButton.hover( function() { $(this).stop(true).fadeTo(100, 1);}, function() {$(this).stop(true).fadeTo(100, 0.7);});
			break;
			
		case "location":
			if((locationBar = $("#" + elemID)).length == 0)
				return false;
			if(locationBar.data("enabled"))
				return true;
			locationBar.data("enabled", true);
			locationBar.stop(true, true);
			//locationBar.fadeTo(300, 0.8);
			//locationBar.hover( function() { $(this).stop(true).fadeTo(100, 1);}, function() {$(this).stop(true).fadeTo(100, 0.8);});
			break;
	}	
}

function DisableHistoryElement(elemID, type)
{
	if(typeof(elemID) == "undefined" || typeof(type) != "string")
		return false;
		
	switch(type)
	{
		case "back":
			if((backButton = $("#" + elemID)).length == 0)
				return false;
			if(!backButton.data("enabled"))
				return true;
			backButton.data("enabled", false);
			backButton.stop(true, true);
			//backButton.fadeTo(300, 0.3);
			backButton.animate({width:16}, 200);
			backButton.css('cursor', '');
			backButton.unbind("click mouseenter mouseleave");
			break;
			
		case "forward":
			if((forwardButton = $("#" + elemID)).length == 0)
				return false;
			if(!forwardButton.data("enabled"))
				return true;
			forwardButton.data("enabled", false);
			forwardButton.stop(true, true);
			//forwardButton.fadeTo(300, 0.3);
			forwardButton.animate({width:16}, 200);
			forwardButton.css('cursor', '');
			forwardButton.unbind("click mouseenter mouseleave");
			break;
			
		case "refresh":
			if((refreshButton = $("#" + elemID)).length == 0)
				return false;
			if(!refreshButton.data("enabled"))
				return true;
			refreshButton.data("enabled", false);
			refreshButton.stop(true, true);
			//refreshButton.fadeTo(300, 0.3);
			refreshButton.animate({width:16}, 200);
			refreshButton.css('cursor', '');
			refreshButton.unbind("click mouseenter mouseleave");
			break;
			
		case "location":
			if((locationBar = $("#" + elemID)).length == 0)
				return false;
			if(!locationBar.data("enabled"))
				return true;
			locationBar.data("enabled", false);
			locationBar.stop(true, true);
			//locationBar.fadeTo(300, 0.3);
			locationBar.unbind("mouseenter mouseleave");
			break;
	}
}

function UpdateRCHistory(request)
{
	if("cRealContent" == request[0])
		HistoryNavigatorsContainer["hnRealContent"].Update(request);
}
