var controlprocessor;
var viewprocessor;
		
function StartUp(xmlfile,xslfile)
{
	var xml=null;

	try
	{
		xml=new ActiveXObject("MSXML2.FreeThreadedDomDocument");
	}
	catch(e)
	{
		alert("Cannot create required object \"MSXML2.FreeThreadedDomDocument\", because \""+e.description+"\". Please use the alternative link on web page.");
		return null;
	}

	xml.async=false;

	if(!xml.load(xmlfile))
	{
		alert("Cannot load data file - "+xmlfile+"\n");
		return null;
	}

	var xsl=null;

	try
	{
		xsl=new ActiveXObject("MSXML2.FreeThreadedDomDocument");
	}
	catch(e)
	{
		alert("Cannot create required object \"MSXML2.FreeThreadedDomDocument\", because \""+e.description+"\". Please use the alternative link on web page.");
		return null;
	}

	xsl.async=false;

	if(!xsl.load(xslfile))
	{
		alert("Cannot load XSL file - "+xslfile+"\n");
		return null;
	}

	var xslt=null;

	try
	{
		xslt=new ActiveXObject("MSXML2.XSLTemplate");
	}
	catch(e)
	{
		alert("Cannot create required object \"MSXML2.XSLTemplate\", because \""+e.description+"\". Please use the alternative link on web page.");
		return null;
	}

	xslt.stylesheet=xsl;
			
	var processor=xslt.createProcessor();
	processor.input=xml
			
	return processor;
}			

function Process(processor)
{
	if (arguments.length==2)
	{
		var args=arguments[1];
				
		for (var i=0; i<Math.floor((args.length) / 2);i++)
		{
			paramName=args[2*i];
			paramValue=args[2*i+1];
			processor.addParameter(paramName,paramValue);
		}
	}

	if(!processor.transform())
	{
		alert("Cannot generate view\n");
		return null;
	}
			
	return processor.output;
}

function SaveView(type)
{
	var f=document.all['ControllerForm'];

	var a=new Array(f.elements.length*2);

	var cookieval="";
				
	var first=true;	
	for(i=0;i!=(f.elements.length*2);i+=2)
	{
		if(f.elements[i/2].name!='xsl.start')
		{
			if(!first)
				cookieval+="^";
			else
				first=false;
		
			cookieval+=f.elements[i/2].name;
			cookieval+="="+f.elements[i/2].value;
		}
	}
	
	var never=new Date(2020,1,1);

	document.cookie = type+"viewer="+escape(cookieval)+"; expires="+never.toGMTString()+"; path=/";
}

function LoadUp(xmlpath,type,datapath,name)
{
//	var never=new Date(1999,1,1);
//	document.cookie = "photoviewer=; expires="+never.toGMTString()+";path=/";

	controlprocessor=StartUp(xmlpath+"/"+type+"views.xml",xmlpath+"/"+type+"control.xsl");

	if(controlprocessor!=null)
	{
		viewprocessor=StartUp(datapath+"/"+name+".xml",xmlpath+"/"+type+"viewer.xsl");

		if(viewprocessor!=null)
		{
			var output;

			var a=new Array(arguments.length-4);

			if(arguments.length>4)
			{
				for(i=0;i!=arguments.length-4;i++)
				{
					a[i]=arguments[i+4];
				}
			}

			if(document.cookie!=null)
			{
				var cookies=document.cookie.split('; ');
				var cookiestr=null;

				for(i=0;i!=cookies.length;i++)
				{
					var nvp=cookies[i].split("=");

					if(nvp[0]==(name+"viewer"))
					{
						cookiestr=nvp[1];
					}
					else if(nvp[0]==(type+"viewer") && cookiestr==null)
					{
						cookiestr=nvp[1];
					}
				}

				if(cookiestr!=null)
				{
					var values=unescape(cookiestr).split("^");
							
					for(v=0;v!=values.length;v++)
					{
						var co=values[v].split("=");
								
						var found=false;
	
						for(j=0;j!=a.length;j+=2)
						{
							if(a[j]==co[0])
							{
								a[j+1]=co[1];
								found=true;
							}
						}
		
						if(!found)
						{
							a.push(co[0]);
							a.push(co[1]);
						}
					}
				}
			}

			if(a.length!=0)
				output=Process(controlprocessor,a);
			else
				output=Process(controlprocessor);
				
			if(output!=null)
			{
				document.all['Controller'].innerHTML=output;
				
				UpdateView(a);
			}
		}
	}
}
		
function UpdateView(f)
{
	var view;
			
	if(f!=null)
	{
		if(f.elements)
		{
			var a=new Array(f.elements.length*2);
				
			for(i=0;i!=(f.elements.length*2);i+=2)
			{
				a[i]=f.elements[i/2].name;
				a[i+1]=f.elements[i/2].value;
			}
			view=Process(viewprocessor,a);
		}
		else
		{
			view=Process(viewprocessor,f);
		}
	}
	else
	{
		view=Process(viewprocessor);
	}

	if(view!=null)
		document.all['Viewer'].innerHTML=view;
}

function ClearPageLinks()
{
	var ele=event.toElement;

	var inside=false;
		
	while(ele!=null)
	{
		if(ele.id=="pagelinks")
		{
			inside=true;
		}
		
		ele=ele.parentElement;
	}
	
	if(!inside)
	{
		var s=document.all['pagelinks'].style;

		s.display='none';
		s.visibility='hidden';
	}
}

function ShowPageLinks(t,first)
{
	var s=document.all['pagelinks'].style;	

	s.pixelTop=0;
	s.pixelLeft=0;

	var ele=event.srcElement;

	while(ele!=null)
	{
		s.pixelTop+=ele.offsetTop;
		s.pixelLeft+=ele.offsetLeft;
		
		ele=ele.offsetParent;
	}
	
	s.display='block';

	if(first=="no")
		s.pixelTop-=document.all['pagelinks'].offsetHeight-11;

	s.visibility='visible';
}
