// Copyright 2010 TS Solutions Pty Ltd
// AJAX entry - get library details
function xmlhttpPost(strURL, querystr) 
{
    var xmlHttpReq = false;
    var self = this;
		var url=strURL;
		this.str='';
		this.eID='';
		this.querystring=querystr;
		this.onComplete=function (){};
		this.onCompleteText=function (){};
    this.send=function() {self.xmlHttpReq.send(self.querystring)};
		// Mozilla/Safari
    if (window.XMLHttpRequest) 
		{
        self.xmlHttpReq = new XMLHttpRequest();
				//self.xmlHttpReq.ValidateOnParse=false;
    }
    // IE
    else if (window.ActiveXObject) 
		{
        //self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
        self.xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0");
				//self.xmlHttpReq.async="false";
    }
    self.xmlHttpReq.open('POST', strURL, true);
    self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    self.xmlHttpReq.onreadystatechange = function(){
        if (self.xmlHttpReq.readyState == 4) 
				{
          self.onCompleteText(self.xmlHttpReq.responseText);
          self.onComplete(self.xmlHttpReq.responseXML);
        }
    };
}

function xmlhttpGet(strURL, querystr) 
{
    var xmlHttpReq = false;
    var self = this;
		var url=strURL;
		var str='';
		var eID='';
		this.querystring=querystr;
		this.onComplete=function (fc){ fc.onCompleteText(self.xmlHttpReq.responseText); };
		this.onCompleteText=function (){};
    this.send=function() {self.xmlHttpReq.send(self.querystring)};
		// Mozilla/Safari
    if (window.XMLHttpRequest) 
		{
        self.xmlHttpReq = new XMLHttpRequest();
				//self.xmlHttpReq.ValidateOnParse=false;
    }
    // IE
    else if (window.ActiveXObject) 
		{
        //self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
        self.xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0");
				//self.xmlHttpReq.async="false";
    }
    self.xmlHttpReq.open('GET', strURL, true);
    self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    self.xmlHttpReq.onreadystatechange = function(){
        if (self.xmlHttpReq.readyState == 4) 
				{
          self.onComplete(self);
        }
    };
}

function wwXML2Library(xml0)
{
	 xroot=xml0.getElementsByTagName('Libraries').item(0);
	 // then wwLibrary
	 // then wwLibraryItem
	 str=xroot.nodeName+"\n";
	 for(i = 0; i < xroot.childNodes.length; i++)
	 {
	   var c0=xroot.childNodes.item(i);
		 if(c0.nodeType==1)
		 {
			 for(i0=0 ; i0<c0.childNodes.length; i0++)
			 {
				 var c1=c0.childNodes.item(i0);
				 if(c1.nodeName=="wwLibraryItem")
				 {
					 var t0=new wwLibElement;
					 t0.id=c1.getAttribute("id");
					 t0.sourceURL=c1.getElementsByTagName("sourceURL")[0].textContent;
					 if(t0.sourceURL==undefined) t0.sourceURL=c1.getElementsByTagName("sourceURL")[0].text;
					 t0.caption=c1.getElementsByTagName("caption")[0].textContent;
					 if(t0.caption==undefined)t0.caption=c1.getElementsByTagName("caption")[0].text;
					 t0.description=c1.getElementsByTagName("description")[0].textContent;
					 if(t0.description==undefined)t0.description=c1.getElementsByTagName("description")[0].text;
					 slides[slides.length]=t0;
				 }
			 }
		 }
	 }
}
//
function wwControlClass(qtm)
{
	var self=this;
	this.site=null;
	this.quantum=10;
	this.getSite=function()
	{
		self.site=new wwSiteClass();
		return self.site;
	}
	this.getSite();
	//this.site.getLibraries();
	this.timerid=0;
	this.activeEffects=Array();
	this.addEffect=function (f0)
	  {
			this.dbgwrite("wwControl.addEffect effectName="+f0.effectName);
			this.activeEffects[this.activeEffects.length]=f0;
			if(this.timerid==0) this.timerid=setTimeout('wwControl.tick();',this.quantum);
		};
	this.tick=function ()
	  {
		// run each effect
		  if(this.activeEffects.length<=0) return;
			for(var i=0; i< this.activeEffects.length; i++)
			{
				e0=this.activeEffects[i];
//			 this.dbgwrite("tick e0.effectName="+e0.effectName+", timeleft="+e0.timeleft);
				if(e0.tick)
					e0.tick();
				else
					this.dbgwrite("e0.tick not found, e0.timeleft="+e0.timeleft);
					
			}
		// once complete remove all effects with timeleft<=0
			for(var i=this.activeEffects.length-1; i>=0; i--)
			{
				if(this.activeEffects[i].timeleft==undefined || this.activeEffects[i].timeleft<=0) this.activeEffects.splice(i,1);
			}
		// set next tick
		  if(this.activeEffects.length>0)
			  this.timerid=setTimeout('wwControl.tick();',this.quantum);
			else
				this.dbgwrite("No more work, going to sleep");
		};
		this.dbgwrite=function (ln)
		{
			var dbg=document.getElementById("wwEffectDBG");
			if(dbg)
			{
				dbg.innerHTML+=ln+"<br \>\n";
			}
		};
}
//
function wwSiteClass()
{
	var x=0;
	var self=this;
	this.name="test";
	this.menus=Array();
	this.libraries=Array();
	this.calendars=Array();
	var ldr0,ldr1,ldr2;
	
	function XML2Menus()
	{
	};
	this.getMenus=function ()
	{
		var ldr1=new xmlhttpPost("wwInc.php?actionResponse=XML&action=MENU");
		ldr1.onComplete=self.loadMenus;
		ldr1.send();
	};
	this.loadMenus=function(xml)
	{
		
//		var libs=xml.getElementsByTagName("menu");
		try
		{
			if(xml.childNodes.length==0) return;
			//alert(xml.childNodes[xml.childNodes.length-1].nodeValue);
			var m0=new wwMenuClass(xml.childNodes[xml.childNodes.length-1]);
			self.menus[0]=m0;
		}
		catch(err)
		{
			alert("loadMenus[menus] error "+err.description);
		}
		try
		{
			self.onMenusComplete(self.menus);
		}
		catch (err)
		{
			alert("loadMenus[onMenusComplete] error - "+err.description);
		}
	};
	this.onMenusComplete=function () {};
//
  this.getLibraries=function()
	{
		var ldr0=new xmlhttpPost("wwInc.php?actionResponse=XML&action=LIB");
		ldr0.onComplete=self.loadLibraries;
		ldr0.send();
	};
	this.onLibrariesComplete=function () { alert("onLibrariesComplete dummy"); };
	this.loadLibraries=function(xml)
	{
		var libs=xml.getElementsByTagName("wwLibrary");
		try
		{
			for(var i=0; i<libs.length; i++)
			{
				var lib0=new wwLibraryClass(libs[i]);
				self.libraries[self.libraries.length]=lib0;
			}
		}
		catch(err)
		{
			alert("loadLibraries error "+err.description);
		}
		try
		{
			self.onLibrariesComplete(self.libraries);
		}
		catch (err)
		{
			alert("loadLibraries error - "+err.description);
		}
	};
//
  this.getCalendars=function()
	{
		ldr2=new xmlhttpPost("wwInc.php?actionResponse=XML&action=CAL");
		ldr2.onComplete=self.loadCalendars;
		ldr2.send();
	};
	this.loadCalendars=function(xml)
	{
		var cals=xml.getElementsByTagName("calendar");
		try
		{
			for(var i=0; i<cals.length; i++)
			{
				var cal0=new wwCalendarClass(cals[i]);
				self.calendars[self.calendars.length]=cal0;
			}
		}
		catch(err)
		{
			alert("loadCalendars error "+err.description);
		}
		try
		{
			self.onCalendarsComplete(self.calendars);
		}
		catch (err)
		{
			alert("loadCalendars error - "+err.description);
		}
	};
	this.onCalendarsComplete=function () {};
}
// Calendar
function wwCalendarClass(xml)
{
	var self = this;
	this.id=0;
	this.name="";
	this.displaylevel="";
	this.siteId=0;
	this.displayurl="";
	this.css="";
	this.parentid=0;
	this.select='startdate="20-Sep-2010 17:55:02" enddate="" orderby="CalEntryStartDt desc, displayorder desc"';
	this.calendartitle="";
	this.items=Array();
	try 
	{
		for(var ia0=0; ia0<xml.attributes.length; ia0++)
		{
			this[xml.attributes[ia0].name.toLowerCase()]=xml.attributes[ia0].value;
		}
	}
	catch (err)
	{
		alert ("wwCalendarClass attributes error - "+err.description);
	}
	try 
	{
		var calitems=xml.getElementsByTagName("item");
		for(var i1=0; i1<calitems.length ; i1++)
		{
			var li0=new wwCalItemClass(calitems[i1]);
			this.items[i1]=li0;
		}
	}
	catch (err)
	{
		alert ("wwCalendarClass items error - "+err.description);
	}
}
function wwCalItemClass(xml)
{
  var self = this;
	this.id=0;
	this.calendarid=0;
	this.startdate="";
	this.enddate="";
	this.displaystartdate="";
	this.displayenddate="";
	this.parentid=0;
	this.contactid=0;
	this.status="PUBLIC";
	this.displayorder=0;
	this.code="";
	this.calentrystartdate="";
	this.calentryenddate="";
	this.productid=0;
	this.title="";
	this.productid=0;
	this.image="";
	this.text="";
	this.subhead1='';
	this.subhead2='';
	try 
	{
		for(var ia0=0; ia0<xml.attributes.length; ia0++)
		{
			this[xml.attributes[ia0].name.toLowerCase()]=xml.attributes[ia0].value;
		}
	}
	catch (err)
	{
		alert ("wwCalItemClass attributes error - "+err.description);
	}
	try 
	{
// scan the children
			 for(i0=0 ; i0<xml.childNodes.length; i0++)
			 {
				 var c1=xml.childNodes.item(i0);
				 if(c1.nodeType==1)
				 {
					 this[c1.nodeName.toLowerCase()]=c1.textContent;
					 if(c1.textContent==undefined)this[c1.nodeName.toLowerCase()]=c1.text;
				 }
			 }
	}
	catch (err)
	{
		alert ("wwCalendarClass items error - "+err.description);
	}
}
// Libraries
function wwLibraryClass(xml)
{
	var self = this;
	this.id=0;
	this.name="";
	this.code="";
	this.librarywidth="5";
	this.libraryheight="0";
	this.laximagewidth="100";
	this.laximageheight="100";
	this.lisplayorder="999";
	this.lefaultimgcolour="#7fffffff";
	this.lreatedlt="";
	this.lastipdlt="";
	this.librarycaption="";
	this.libraryshorttitle="";
	this.elements=Array();
	var str0="";
	//alert("wwLibraryClass attributes.length="+xml.attributes.length);
	for(var ia0=0; ia0<xml.attributes.length; ia0++)
	{
		this[xml.attributes[ia0].name.toLowerCase()]=xml.attributes[ia0].value;
	}
	var libitems=xml.getElementsByTagName("wwLibraryItem");
	for(var i1=0; i1<libitems.length ; i1++)
	{
		var li0=new wwLibraryElementClass(libitems[i1]);
		this.elements[i1]=li0;
	}
}
function wwLibraryElementClass(xml)
{
  var self = this;
  this.id=0;
  this.sourceurl="";
  this.caption="";
  this.description="";
	this.wwlibraryid=0;
	this.createddt="";
	this.lastupddt="";
	this.displayorder=0;
	this.thumburl="";
	this.caption="";
	this.description="";
	this.sourceurl="";
	this.targeturl="";
	var str0="";
	this.parent=null;
	this.img=new Image();
	this.img.onload=function() {alert("img onLoad - "+self.img.src);};
	this.complete=false;
	this.load=function(s0) {
		if(s0!=undefined) self.img.onload=new Function(s0);
		if(self.img.src!='' && self.img.complete)
		{
			if(self.img.onload) self.img.onload();
			return true;
		}
		//if(self.img.src!='') 
		self.img.src=self.sourceurl;
		//alert("Lib element load("+self.sourceurl+") complete='"+self.img.complete+"'");
		return false;
	};
	try
	{
		for(var ia0=0; ia0<xml.attributes.length; ia0++)
		{
			this[xml.attributes[ia0].name.toLowerCase()]=xml.attributes[ia0].value;
		}
	}
	catch(err)
	{
		alert("wwLibraryElementClass attributes error -"+err.description);
	}
// now get the child nodes
	try
	{
		for(var i1=0; i1<xml.childNodes.length ; i1++)
		{
			if(xml.childNodes[i1].nodeType==1)
			{
				if(xml.childNodes[i1].childNodes.length>0)
					this[xml.childNodes[i1].nodeName.toLowerCase()]=xml.childNodes[i1].childNodes[0].nodeValue;
			}
		}
	}
	catch (err)
	{
		alert("wwLibraryElementClass error "+err.description);
	}
}
// Menu
function wwMenuClass(xml)
{
  var self = this;
	this.id=0;
	this.name="";
	this.siteid=0;
	this.projectid=-1;
	this.parentid=0;
	this.title="";
	this.image0="";
	this.image1="";
	this.stylename="";
	this.targeturl="";
	this.targetframe="";
	this.groupcode="";
	this.order=0;
	this.action="";
	var str0="";
	this.parent=null;
	this.menus=Array();
	
	try
	{
		if(xml.nodeType==9)
		{
			try
			{
				for(var ia0=0; ia0<xml.childNodes.length; ia0++)
				{
					var m0=new wwMenuClass(xml.childNodes[ia0]);
					m0.parent=self;
					self.menus[self.menus.length]=m0;
					str0="menu["+self.menus.length+"]="+m0.title;
				}
//				alert(str0);
			}
			catch(err)
			{
				alert("wwMenuClass[children] error - "+err.description);
			}
		}
		else
		{
			var x0=xml;
			try
			{
				if(xml.nodeType==1)
				{
					for(var ia0=0; ia0<xml.attributes.length; ia0++)
					{
						self[xml.attributes[ia0].name.toLowerCase()]=xml.attributes[ia0].value;
					}
				}
			}
			catch(err)
			{
				alert("wwMenuClass[atributes] error - "+err.description);
			}
			try
			{
				str0="";
				for(var ia0=0; ia0<xml.childNodes.length; ia0++)
				{
					if(xml.childNodes[ia0].nodeType==1)
					{
						var m0=new wwMenuClass(xml.childNodes[ia0]);
						m0.parent=self;
						self.menus[self.menus.length]=m0;
						str0="menu["+self.menus.length+"]="+m0.title;
					}
				}
//				if(str0!="") alert(str0);
			}
			catch(err)
			{
				alert("wwMenuClass[children] error - "+err.description);
			}
		}
	}
	catch (err)
	{
		alert("wwMenuClass error - "+err.description);
	}
// now get the child nodes
	try
	{
		for(var i1=0; i1<xml.childNodes.length ; i1++)
		{
			if(xml.childNodes[i1].nodeType==1)
			{
				if(xml.childNodes[i1].childNodes.length>0)
					this[xml.childNodes[i1].nodeName.toLowerCase()]=xml.childNodes[i1].childNodes[0].nodeValue;
			}
		}
	}
	catch (err)
	{
		alert("wwMenuClass error "+err.description);
	}
}
//
// CCS controls

function wwCSSapply(eID, cssUrl)
{
	if(!wwControl.CSSstyles)wwControl.CSSstyles=new Array;
	var i=wwControl.CSSstyles.length;
	//alert('ID='+eID+' url='+cssUrl+', cnt='+i);
	i1=-1;
	for(var i0=0; i0<i; i0++)
	{
		if(wwControl.CSSstyles[i0].src==cssUrl) i1=i0;
	}
	if(i1!=-1)
	{
		fc=wwControl.CSSstyles[i1].fc;
		//alert('SRC='+cssUrl+' found\n'+fc.str);
		wwCSSsetStyle(eID,fc.str);
		return;
	}
	var fc=new xmlhttpGet(cssUrl,"");
	fc.src='';
	fc.eID=eID;
	wwControl.CSSstyles[i]=new Object;
	wwControl.CSSstyles[i].eID=eID;
	wwControl.CSSstyles[i].src=cssUrl;
	wwControl.CSSstyles[i].fc=fc;
	fc.eID=eID;

	var CSSeID="CSS_"+eID;
	var CSSd1=document.getElementById(CSSeID);
	if(!CSSd1)  // not found so create one
	{
		CSSd1=document.createElement('style');
		CSSd1.setAttribute('id',CSSeID);
		CSSd1.type="text/css";
		CSSd1.media="all";
		var headers = document.getElementsByTagName("head");
		headers[0].appendChild(CSSd1);
	}
	fc.onComplete=function(fc0){
		//alert('ID='+fc0.eID+'\nstr='+fc0.xmlHttpReq.responseText+' url='+fc0.url)
		fc0.str=fc0.xmlHttpReq.responseText;
		wwCSSsetStyle(fc0.eID,fc0.str);
	};
	fc.send();
}

function wwCSSsetStyle(eID,CSSstr)
{
	// check the existance of the DIV
	var d1=document.getElementById(eID);
	if(!d1) return false;
	var CSSeID="CSS_"+eID;
	var CSSd1=document.getElementById(CSSeID);
	if(!CSSd1)  // not found so create one
	{
		CSSd1=document.createElement('style');
		CSSd1.setAttribute('id',CSSeID);
		CSSd1.type="text/css";
		CSSd1.media="all";
		var headers = document.getElementsByTagName("head");
		headers[0].appendChild(CSSd1);
	}
	// append ID to start of each rule
	if(typeof CSSstr!='string')CSSstr='';
	lCSSstr=CSSstr;

	if(CSSstr!='')
	{
		var lCSSstr="#"+eID+" "+CSSstr.replace(/\n/g,"").replace(/\r/g,"").replace(/}/gi,"}\n#"+eID+" ");
	  lCSSstr=lCSSstr.replace(new RegExp("\n#"+eID+" $","gm"),"");
	}
	//alert("CSSstr=\n"+lCSSstr);
  // change the CCS rules for the ID
	if(CSSd1)
	{
		CSSd1.innerHTML=lCSSstr;
		//alert(CSSd1.innerHTML);
	}
	else
	  alert (CSSeID+' not found');
}

//var p0=new xmlhttpPost("wwInc.php?actionResponse=XML&action=LIB");
//p0.onComplete=wwXML2Library;
//p0.send();
var wwControl=new wwControlClass();
