//-------------------------------------------------------------------------------------
// Events
//-------------------------------------------------------------------------------------

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}

//-------------------------------------------------------------------------------------
// DOM
//-------------------------------------------------------------------------------------


function addClass(element,value) {
  if (!element.className) {
    element.className = value;
  } else {
	if (!hasClass(element,value)) {  
	    newClassName = element.className;
	    newClassName+= " ";
	    newClassName+= value;
	    element.className = newClassName;
	 }
  }
  return true;
}

function hasClass(obj,cName) {
	return new RegExp('\\b'+cName+'\\b').test(obj.className);
}

function removeClass(obj,cName) {
	if (!hasClass(obj,cName)) return false;
	var rep=obj.className.match(' '+cName)?' '+cName:cName;
	obj.className=obj.className.replace(rep,'');
	return true;
}

document.getElementsByClassName = function(name) {
  var results = new Array();
  var elems = document.getElementsByTagName("*");
  for (var i=0; i<elems.length; i++) {
    if (elems[i].className.indexOf(name) != -1) {
      results[results.length] = elems[i];
    }
  }
  return results;
}

function insertAfter(newElement,targetElement) {
  var parent = targetElement.parentNode;
  if (parent.lastChild == targetElement) {
    parent.appendChild(newElement);
  } else {
    parent.insertBefore(newElement,targetElement.nextSibling);
  }
}


//---------------------------------------------------------------------------
//description: Converts title attribute to caption on images
//version:   1.0
//author:    Paul Boag
//email:     paul.boag@headscape.co.uk
//website:   http://www.headscape.co.uk
//--------------------------------------------------------

function addCaption(xClass) {
	var allImages = document.getElementsByClassName(xClass);
	for ( var i=0; i < allImages.length; i++) {
		var imageCaption = document.createTextNode(allImages[i].alt);
		var imageContainer = document.createElement("div");
		var imagePara = document.createElement("p");
		var imageWidth = allImages[i].getAttribute("width");
		imagePara.appendChild(imageCaption);
		allImages[i].parentNode.insertBefore(imageContainer, allImages[i]);
		imageContainer.appendChild(allImages[i]);
		if (allImages[i].alt!= "") {
			imageContainer.appendChild(imagePara); 
		}
		imageContainer.className = xClass
		allImages[i].className = "imgCaption"
		imageContainer.style.width = imageWidth + "px";
		
    }
}

//-------------------------------------------------------
// General purpose
//-------------------------------------------------------

function deleteConfirm(str)
{
	 return window.confirm(str);
}


function imageLoadFailed() {
	window.event.srcElement.src = "/assets/images/spacer.png"
}
		
//-------------------------------------------------------

function openWindow(u, w, h, l, t) {
	win = window.open(u, "win", "directories=no,left=" + l + ",top=" + t + ",height=" + h + ",location=no,menubar=no,resizable=yes,scrollbars=yes,status=no,toolbar=no,width=" + w);
	win.focus()
}

//-------------------------------------------------------
// Cookies
//-------------------------------------------------------

function createShortTermCookie(name,value,mins) {
  	if (!(mins))
  		mins = 60;
  		
   	var date = new Date();
   	date.setTime(date.getTime()+(mins*60*1000));
   	var expires = "; expires="+date.toGMTString();

  		
  document.cookie = name+"="+value+expires+"; path=/";
}

function createCookie(name,value,days) {
  	if (days) {
    	var date = new Date();
    	date.setTime(date.getTime()+(days*24*60*60*1000));
    	var expires = "; expires="+date.toGMTString();
  	} else 
  		expires = "";
  		
  document.cookie = name+"="+value+expires+"; path=/";
}

//-------------------------------------------------------

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  
  return null;
}

//-------------------------------------------------------
// From http://www.quirksmode.org/
//-------------------------------------------------------

function getElementsByTagNames(list,obj) {
	if (!obj) var obj = document;
	var tagNames = list.split(',');
	var resultArray = new Array();
	for (var i=0;i<tagNames.length;i++) {
		var tags = obj.getElementsByTagName(tagNames[i]);
		for (var j=0;j<tags.length;j++) {
			resultArray.push(tags[j]);
		}
	}
	var testNode = resultArray[0];
	if (!testNode) return [];
	if (testNode.sourceIndex) {
		resultArray.sort(function (a,b) {
				return a.sourceIndex - b.sourceIndex;
		});
	}
	else if (testNode.compareDocumentPosition) {
		resultArray.sort(function (a,b) {
				return 3 - (a.compareDocumentPosition(b) & 6);
		});
	}
	return resultArray;
}
//-------------------------------------------------------
// Modified version of the Table of contents code from http://www.quirksmode.org/dom/toc.html
//-------------------------------------------------------

function createTOC() {

	var div = document.createElement('div');
	var ul = div.appendChild(document.createElement('ul'));

	var toBeTOCced = getElementsByTagNames('h2',document.getElementById('content'));
	
	for (var i=0;i<toBeTOCced.length;i++) {

		var li = ul.appendChild(document.createElement('li'));
	
		var a = document.createElement('a');
		a.innerHTML = toBeTOCced[i].innerHTML;
		
		if (toBeTOCced[i].nodeName == 'H3') 
			li.className += ' indentedMenuItem';
					
		li.appendChild(a);		
			
		var headerId = toBeTOCced[i].id || 'link' + i;
		a.href = '#' + headerId;
		toBeTOCced[i].id = headerId;
		
	}
	return div;
}

//-------------------------------------------------------
// Access keys: from MSKB article aa479043
//-------------------------------------------------------

function displayAccessKeys(e)
{
    if (!e) e = window.event;
    if (e.keyCode == 18)
    {
        toggleAccessKeys();
        document.onkeydown = null;
        document.onkeyup = hideAccessKeys;
    }
}

function hideAccessKeys(e)
{
    if (!e) e = window.event;
    if (e.keyCode == 18)
    {
        toggleAccessKeys();
        document.onkeyup = null;
        document.onkeydown = displayAccessKeys;
    }
}


function toggleAccessKeys()
{
    var spans = document.getElementsByTagName('span');
    for (var k=0;k<spans.length;k++)
        if (spans[k].className == 'accessKey' )
        {
            if ( 'inline' != spans[k].style.display)
                spans[k].style.display = 'inline';
            else
                spans[k].style.display = 'none';    
        }
}

//-------------------------------------------------------
/** XHConn - Simple XMLHTTP Interface - bfults@gmail.com - 2005-04-08        **
 ** Code licensed under Creative Commons Attribution-ShareAlike License      **
 ** http://creativecommons.org/licenses/by-sa/2.0/                           **/
//-------------------------------------------------------
function XHConn()
{
  var xmlhttp, bComplete = false;
  
  try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
  catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
  catch (e) { try { xmlhttp = new XMLHttpRequest(); }
  catch (e) { xmlhttp = false; }}}

  if (!xmlhttp) 
  	return null;

  this.connect = function(sURL, sMethod, sVars, fnDone) {

    if (!xmlhttp) 
    	return false;
    
    bComplete = false;
    
    sMethod = sMethod.toUpperCase();

    try {
      if (sMethod == "GET") {
        xmlhttp.open(sMethod, sURL+"?"+sVars, true);
        sVars = "";
      } else {
        xmlhttp.open(sMethod, sURL, true);
        xmlhttp.setRequestHeader("Method", "POST "+sURL+" HTTP/1.1");
        xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
      }
      
      xmlhttp.onreadystatechange = function(){
        if (xmlhttp.readyState == 4 && !bComplete) {
          bComplete = true;
          fnDone(xmlhttp);
        }
       };
       
      xmlhttp.send(sVars);
    }
    
    catch(z) { return false; }
    return true;
  };
  return this;
}

//-------------------------------------------------------

function textCounter(field, countfield, maxlimit) {
	if (field.value.length > maxlimit)
	   field.value = field.value.substring(0, maxlimit);
	else
	   countfield.value = maxlimit - field.value.length;
}

//-------------------------------------------------------
// From http://www.quirksmode.org/js/detect.html

var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};

BrowserDetect.init();

//-------------------------------------------------------
// Page initialisation code
//-------------------------------------------------------

function initPage() {

}

addLoadEvent(initPage);





