/* This script provides all the dynamic styiling of the site.
It uses 2 libraries:
nifty to add rounding to elements.
Behaviour to dynamically change elements in the DOM tree. This allows the page html to remain clean, and easier to change style at will.

(C) Copyright Ventia Pty Limited 2006. All rights reserved.
*/
window.onload=function(){
//if(screen.width<=800) {
//	document.getElementById("pagetable").style.width=770;
//}
Behaviour.apply();
if(!NiftyCheck()) {
	return;
}
Rounded("div.pagediv","top","transparent","white","border #CCCCCC");
Rounded("div.pagediv","bottom","transparent","white","border #CCCCCC");
Rounded("div.nav","top","transparent","#659FD5","border #CCCCCC");
Rounded("div.nav","bottom","transparent","#EEEEEE","border #CCCCCC");
Rounded("div.sidebox","top","transparent","#659FD5","border #CCCCCC");
Rounded("div.sidebox","bottom","transparent","#EEEEEE","border #CCCCCC");
Rounded("div.sidephotobox","top","transparent","#EEEEEE","border #CCCCCC");
Rounded("div.sidephotobox","bottom","transparent","#EEEEEE","border #CCCCCC");
Rounded("div.sidegreenbox","top","transparent","#659FD5","border #CCCCCC");
Rounded("div.sidegreenbox","bottom","transparent","white","border #CCCCCC");
Rounded("div.customersbox","top","transparent","#659FD5","border #CCCCCC");
Rounded("div.customersbox","bottom","transparent","white","border #CCCCCC");
Rounded("div.RoundedContentTitle","all","transparent","#EEEEEE","");
Rounded("div.menubox","all","transparent","#4A597A","small");
Rounded("div.altheadleft","tl","white","#3ABA31","");
Rounded("div.altheadright","tr","white","#3ABA31","");
Rounded("div.altheadleftandright","t","white","#3ABA31","");
Rounded("div.altbleft","bl","white","#3ABA31","");
Rounded("div.altbright","br","white","#3ABA31","");
Rounded("div.side2","all","white","white","border #CCCCCC");
Rounded("div.downloadboxdiv","top","transparent","#26CC33","border #CCCCCC");
Rounded("div.downloadboxdiv","bottom","transparent","#EEEEEE","border #CCCCCC");
}

/* insert an element under parent given the tagname (ex. 'div').
All the childNodes of parent get moved under the new element.
Return the created element.
*/
function wedgeElement(parent,tagname) {
	var el=document.createElement(tagname);
	var children=parent.childNodes;
	for(var i=0;i<children.length;i++) {
		el.appendChild(children[i]);
	}
	parent.appendChild(el);
	return el;
}
/* wrap the given element inside another element built from tagname.
return the newly created element.
*/
function wrapElement(el,tagname) {
	var newel=document.createElement(tagname);
	var parent=el.parentNode;
	parent.insertBefore(newel,el);
	newel.appendChild(el);
	return newel;
}

function moveChildren(parent,srcclass,dest) {
	var cs=parent.childNodes;
	for(var i=0;i<cs.length;i++) {
		var node=cs[i];
		if (node.className==srcclass) {
			dest.innerHTML=node.innerHTML;
//			var children=node.childNodes;
//			for(var j=0;j<children.length;j++) {
//				dest.appendChild(children[j]);
//			}
			return;
		}
	}
}
var myrules = {
	'ul.downloadbox': function(ul) {
		var div=document.createElement('div');
		div.className="downloadboxdiv";
		var h1=document.createElement('h1');
		div.appendChild(h1);
		moveChildren(ul,'_title',h1);
		var table=document.createElement('table');
		div.appendChild(table);
		var tbody=document.createElement('tbody');
		table.appendChild(tbody);
		var tr=document.createElement('tr');
		tbody.appendChild(tr);
		var td=document.createElement('td');
		tr.appendChild(td);
		moveChildren(ul,'_description',td);
		td=document.createElement('td');
		td.vAlign="top";
		td.align="right";
		tr.appendChild(td);
		moveChildren(ul,'_link',td);
		ul.parentNode.insertBefore(div,ul);
		ul.parentNode.removeChild(ul);
	},
	'div#autonav': function(element) {
		// creates a nav menu simply based on all the p.ContentTitle paragraphs in the document.
		// adds an <a name="xyz"/> to every paragraph, and the approprate navigation link in the menu.
		// In short, all you have to do is to add a <div id="autonav"/> in the document!
		element.className='nav';
		var h1=document.createElement('h1');
		element.appendChild(h1);
		var ul=document.createElement('ul');
		element.appendChild(ul);
		
		// now grabs from the document all the p.ContentTitle elements,
		// and add an <li> to the <ul> for everyone of them.
		var cts=document.getElementsBySelector('p.ContentTitle');
		for(var i=0;i<cts.length;i++) {
			var tnode=cts[i].childNodes[0]; //TextNode
			var text=tnode.nodeValue;
			var anchorName=text.replace(/\s/i,"_");
			var aname;
			if(document.all) {
				aname=document.createElement("<A NAME='"+anchorName+"'></A>");
			}
			else {
				aname=document.createElement("A");
				aname.name=anchorName;
			}
			cts[i].parentNode.insertBefore(aname,cts[i]);

			var li=document.createElement('li');
			var lia=document.createElement('a');
			lia.href="#"+anchorName;
			li.appendChild(lia);
			var litnode=document.createTextNode(text);
			lia.appendChild(litnode);
			ul.appendChild(li);
		}
	},
	'table.alttable' : function(element){
		// alternate rows in the table
		var rows = element.getElementsByTagName("tr");  
		for(var i = 1; i < rows.length; i++){          // skip first row (headers)
		 if(i % 2 == 0){
		   rows[i].className = "even";
   		 rows[i].onmouseout=function() {
		   this.className="even";
		 }
		 }else{
		   rows[i].className = "odd";
		 rows[i].onmouseout=function() {
		   this.className="odd";
		 }
		 }      
	     rows[i].onmouseover=function() {
		   this.className="alttableon";
		 }
	   }
	   
	   // add rounding to the thead
	   var ths=element.getElementsByTagName("th");
	   for(var i=0;i<ths.length;i++) {
		   var th=ths[i];
		   if(ths.length>1) {
			   if(i==0) {
				   var div=wedgeElement(th,'div');
				   div.className='altheadleft';
			   }
			   else if(i==(ths.length-1)) {
				   var div=wedgeElement(th,'div');
				   div.className='altheadright';
			   }
			   else {
				   th.className='altheadmiddle';
			   }
		   }
		   else {
			   var div=wedgeElement(th,'div');
			   div.className='altheadleftandright';
		   }
	   }
	   
	   // other stuff
	   element.cellPadding=0;
	   element.cellSpacing=0;
	   
	   // center in the text it is in
	   var div=wrapElement(element,'div');
	   div.align='center';
	},
	'div.nav ul li' : function(element){
		// nav bar typically on the left. Turn li into active buttons
		element.onmouseover=function() {
			this.className='nav_li_on';
		};
		element.onmouseout=function() {
			this.className='nav_li_off';
		};
		element.onclick=function() {
			var as=element.getElementsByTagName("a");
			if(as && as.length>0) {
				var a=as[0];
				var l=a.href;
				var tg=a.target;
				if(!tg || tg=="" || tg=="_self") {
					window.location=l;
				}
				else {
					window.open(l,tg);
				}
				return false;
			}
		};
	},
	'p.ContentTitle' : function(element) {
		// to cater for js rounding, wraps the p element in a div
//		var div=wrapElement(element,'div');
//		div.className='RoundedContentTitle';
	},
	'img.screenshot':function(img) {
		var pr=img.parentNode;
		var element;
		var alink;
		if(pr.tagName=="A") {
			element=pr;
			element.target="";
			alink=element.href;
			element.href="#";
		}
		else {
			element=img;
		}
		var p=wrapElement(element,'span');
		var p1=wrapElement(p,'p');
		if(img.alt) {
			p1.appendChild(document.createElement('br'));
			var s1=document.createElement('span');
			s1.style.cyrsor='pointer';
			s1.className="screenshotlabel";
			s1.innerHTML=img.alt;
			p1.appendChild(s1);
		}
		if(pr.tagName=="A") {
			p.title="Click to enlarge";
			img.alt="Click to enlarge";
//			p1.appendChild(document.createElement('br'));
//			var s1=document.createElement('span');
//			s1.style.cyrsor='pointer';
//			s1.innerHTML="Click to enlarge";
//			p1.appendChild(s1);
		}
		if(alink) {
    		p1.onclick=function() {
				window.open(alink,'_blank','toolbar=0,location=0,directories=0,menubar=0,scrollbars=0,resizable=1,width=900,height=800');
			};
		}		
		var div=wrapElement(p1,'div');
		div.className='side2';
	},
	'.rounded':function(element) {
		var p=wrapElement(element,'p');
		var div=wrapElement(p,'div');
		div.className='side2';
	}
};

function getEmail(s,d) {
	var m= s+'@'+d;
	document.write("<a href='mailto:"+m+"'>"+m+"</a>");
}

Behaviour.register(myrules);

