// JavaScript Document
function PageControl(vname)
	{
	// Private
	var iname=vname;
	var parameter_string=null;
	var width=null,height=null;
	var parameters=[];
	var standard_animation={percent:null,callback:null,callback_time:null,frames:100,frame:0,timer_handle:null};
	
	var menu_button_images={normal:null,hover:null,selected:null};
	var menu_button_selected=null;
	var menu_button_classname="button_foreground";
	
	var currentModalInfo={source:null,value:null};
	
	var PI=[];
	
	var last_page_name=null;
		
	function do_modal(cb_clickout)
	{
	var obj=null;
	
	var S="<div id=\"modal_container\" style=\"position:absolute; top:0px; left:0px; display:block; width:100%; height:100%; z-index:100; \">";
	S+="<div id=\"modal_under\" style=\"position:absolute; top:0px; left:0px; display:block; width:100%; height:100%; background-color:#000000; opacity: 0.7; filter: alpha(opacity=70); z-index:110;\"></div>";
	S+="<div id=\"modal_over\"  style=\"position:absolute; top:0px; left:0px; display:block; width:100%; height:100%; z-index:120;\"></div>";
	S+="</div>";
	
	
	if(cb_clickout!=null)
		{
			
		$('body').append(S);		
		
		var aw="100%";
		var ah="115%";
		var position="fixed";
		var from="bottom";
		var isiPad   = navigator.userAgent.match(/iPad/i) != null;
		
		if(isiPad)
			{
			aw="135%";
			ah="135%";
			position="absolute";
			from="top";
			}
			
		obj=$('#modal_container');		
		obj.css({height:ah,width:aw,position:position});			
		
		obj.click(cb_clickout);
		
		obj=$('#modal_under');
		obj.click(cb_clickout);
		
		}
	else
		{
		$("#modal_container").remove();
		}
	
	}

	
	function add_page_info(name,opts)
		{
		var obj={name:name,source:null,target_div:null,pfn_ready:null,pfn_exit:null};
		var ientry="!"+name+","+PI.length;
		if(PI.length==0)
			obj['index']=ientry;
		else
			{			
			var index_obj=PI[0];
			index_obj.index+=ientry;
			}
		var i,o;
		for(i in obj)
			{
			o=opts[i];
			if(o!=null)				
				obj[i]=o;				
			}
		PI[PI.length]=obj;
		return obj;
		}
		
	function get_page_info(name)
		{
		if(PI.length==0)
			return null;
		var index;
		var index=PI[0].index;
		var Search="!"+name;
		var ipos=index.indexOf(Search);		
		if(ipos<0)
			return null;
		ipos=index.indexOf(",",ipos);
		var ss=index.substring(ipos+1);
		ipos=parseInt(ss);		
		return PI[ipos];
		}
	
	
	function init()
		{
		}
		
	function add_parameter(k,v)
		{
		var obj=null;
		var ientry="!"+k+","+parameters.length;
		if(parameters.length==0)
			obj={name:k,value:v,index:ientry};
		else
			{
			obj={name:k,value:v};
			var index_obj=parameters[0];
			index_obj.index+=ientry;
			}
		parameters[parameters.length]=obj;
		return true;
		}
		
	function add_parameters(query_string)
		{
		var ipos=0;
		ipos=query_string.indexOf("?");
		if(ipos>=0)
			query_string=query_string.substring(ipos+1);
		else
			return 0;
		var alist=query_string.split('&');
		var i,kv;
		for(i=0;i<alist.length;i++)
			{
			kv=alist[i].split("=");
			add_parameter(kv[0],kv[1]);
			}
		return i;
		}
		
	function get_parameter(k)
		{
		var index_obj=parameters[0];
		if(index_obj==null)
			return null;
		var index=index_obj.index;
		var Search="!"+k;
		var ipos=index.indexOf(Search);		
		if(ipos<0)
			return null;
		ipos=index.indexOf(",",ipos);
		var ss=index.substring(ipos+1);
		ipos=parseInt(ss);		
		return parameters[ipos].value;
		}
		
	function load_module(div_id,source,pfn_complete)
		{
		var obj=$('#'+div_id);
		if(obj==null)
			return false;
		var script=null;
		var ipos=source.indexOf(".");
		if(ipos>0)
			{
			script=source.substring(0,ipos+1)+"js";			
			}
		// remember I can also load source="document.html #selector"
		obj.load(source,function()
								 {
								 $.ajax({url: script,dataType: "script",success: pfn_complete,error:pfn_complete});
								 }
								 );
		}
		
	// Public Interface	
	this.loadModule=function(s_div_id,s_location,pfn)
		{
		return load_module(s_div_id,s_location,pfn);
		}
		
	this.setWidth=function(the_width)
		{
		width=the_width;
		}
		
	this.setHeight=function(the_height)
		{
		height=the_height;
		}
		
	
	this.refresh=function()
		{
		if(parameter_string==null)  // Initial load
			{
			parameter_string=window.location.href;
			add_parameters(parameter_string);
			}
		
		}
		
	this.setMenuButtonImages=function(opts)
		{
		if(opts!=null)
			{
			var i,obj=null;
			for(i in menu_button_images)
				{
				obj=opts[i];
				if(obj!=null)
					{
					menu_button_images[i]=new Image();
					menu_button_images[i].src=obj;
					}
				}
			}
		}
		
	this.setMenuButtonClassName=function(name)
		{
		menu_button_classname=name;
		}
		
	this.getMenuButtonImage=function(S)
		{
		var obj=menu_button_images[S];
		return obj;
		}
		
	this.getMenuButtonClassName=function()
		{		
		return menu_button_classname;
		}
		
	this.setMenuButtonSelected=function(n)
		{
		menu_button_selected=n;
		}
		
	this.getMenuButtonSelected=function()
		{
		return menu_button_selected;
		}
		
	this.getMenuBarHeight=function()
		{
		var mbh=0;
		var i;
		for(i in menu_button_images)
			{
			if(menu_button_images[i] && menu_button_images[i].height)
			mbh=(menu_button_images[i].height>mbh) ? menu_button_images[i].height:mbh;
			}
			
		mbh+=2;
		return mbh;	
		}
		
	
		
	this.animateStandardLayout=function(opts)
		{
		// var standard_animation={percent:null,callback_time:null,menu:null,banner:null,buttons:null,content:null,frames:100,frame:0};
		
		if(opts!=null)
			{
			var i,obj;
			for(i in standard_animation)
				{
				obj=opts[i];
				if(obj!=null)
					standard_animation[i]=obj;				
				}			
			if(standard_animation.duration==null)
				standard_animation.duration=500;			
			
			if(standard_animation.percent==null)
				standard_animation.percent=0.0;
			standard_animation.callback_time=Math.round(standard_animation.duration/standard_animation.frames);
			standard_animation.frame=0;
			
			}
		
		standard_animation.frame++;
		if(standard_animation.frame<standard_animation.frames)
			{
			standard_animation.percent=standard_animation.frame/standard_animation.frames;
			if(standard_animation.callback!=null)
				{
				standard_animation.callback(standard_animation.percent);				
				}
			standard_animation.timer_handle=setTimeout(iname+".animateStandardLayout()",standard_animation.callback_time);
			return true;
			}
		else
			{
			if(standard_animation.callback!=null)
				{
				standard_animation.callback(1.0);				
				}
			// var standard_animation={percent:null,callback_time:null,menu:null,banner:null,buttons:null,content:null,frames:100,frame:0};
			standard_animation.duration=standard_animation.percent=standard_animation.callback=standard_animation.timer_handle=null;			
			return false;
			}
		}		
		
	this.addPageInfo=function(name,opts)
		{
		return add_page_info(name,opts);
		}
		
	this.getPageInfo=function(name)
		{
		return get_page_info(name);
		}
		
	this.openPage=function(name)
		{
		var obj=get_page_info(name);
		if(obj==null)
			return false;
// var obj={name:name,source:null,target_div:null,pfn_ready:null,pfn_exit:null};
		if(last_page_name==name)
			return true;
		if(last_page_name!=null)
			{
			var last_obj=get_page_info(last_page_name);
			if(last_obj!=null)
				{
				if(last_obj.pfn_exit!=null)
					last_obj.pfn_exit();
				}
			}

		last_page_name=name;
		this.closeOverlay();
		this.loadModule(obj.target_div,obj.source,obj.pfn_ready);		
		}
		
	this.openOverlay=function(name,pfn_clickout)
		{
		var obj=get_page_info(name);
		if(obj==null)
			return false;
			
		do_modal(function(e)
						  {
						  // alert("HELLO "+$(this).attr("id"));
						  // do_modal();
						  }
						  );
		
		this.loadModule("modal_over",obj.source,obj.pfn_ready);
		}
		
	this.closeOverlay=function()
		{
		do_modal();
		}
		
	this.getParameter=function(k)
		{
		return get_parameter(k);
		}
	
	}
