/*Copyright (C) 2006 Paul Mackinlay (info@webotech.co.uk)*/
function jslBrowserType() {
if (window.navigator.userAgent.match(/MSIE/))
	return "IE";
if (window.navigator.userAgent.match(/Gecko\/[0-9]{8}/))
return "Gecko";
 return "unknown";
}

function jslGetXMLHttpRequest() {
 var req;
 try { // The proper way
   req=new XMLHttpRequest();
  } catch (e) {
  try { // The M$ way (sometimes!)
   req=new ActiveXObject("Microsoft.XMLHTTP");
  } catch (e) {
   jslLog("jslGetXMLHttpRequest fatal error, XMLHttpRequest is not supported by this browser!", "ERROR");
   return null;
  }
 }
 return req;	
}

function jslLog(message, severity) {
 if (arguments.length==1)
  severity="ERROR";

 if ("log_win_print" in window)
  log_win_print(message, severity, new String(arguments.callee.caller));

 if (severity=="ERROR") {
  alert(severity+": "+message);
 }
}

function jslAddEvent(subj,event,fn) {
 if (jslBrowserType()=="IE") {
  subj.attachEvent("on"+event, fn);
 } else {
  subj.addEventListener(event,fn,false);
 }
}

function jslRemoveEvent(subj,event,fn) {
 if (jslBrowserType()=="IE") {
  subj.detachEvent("on"+event, fn);
 } else {
  subj.removeEventListener(event,fn,false);
 }
}

function jslGetAbsHeight(el) {
  var h = el.offsetHeight + el.offsetTop;
  while (el.offsetParent) {
   var elH=el.offsetParent.offsetTop;
   if (elH > 1) {
    h += elH;
   }
   el = el.offsetParent;
  }
  return h;
}

function jslGetAbsWidth(el) {
  var w = el.offsetLeft;
  while (el.offsetParent) {
   var elW=el.offsetParent.offsetLeft;
   if (elW > 1) {
    w += elW;
   }
   el = el.offsetParent;
  }
  return w;
}


function jslGetPointPos(e) {
 var coords = new Array();
 if (jslBrowserType() != 'IE') {
  coords[0] = e.pageX;
  coords[1] = e.pageY;
 }
 if (jslBrowserType() == 'IE') {
  coords[0] = event.clientX+document.body.scrollLeft;
  coords[1] = event.clientY+document.body.scrollTop;
 }
 return coords;
}

function jslGetAllChildNodes(parentEl,countRef) {
 if (!(countRef instanceof Array)) {
  alert ("jslGetAllChildNodes: countRef has to be a reference to an array defined in the parent object.");
 } else {
  if (parentEl.childNodes) {
   var childNodesA = parentEl.childNodes;
   for (var j=0;j<childNodesA.length;j++) {
    if (childNodesA[j].nodeName) {
     countRef.push(childNodesA[j]);
    }
   }
   var i=0;
   while (childNodesA[i]) {
    jslGetAllChildNodes(childNodesA[i],countRef);
    i++;
   }
  }
 }
}

function jslSetCookie(name,value,nDays) {
 var today = new Date();
 var cs = name + "=" + escape(value) + ";";
 if (nDays!=null && nDays>0) {
  var expire = new Date();
  expire.setTime(today.getTime() + 3600000*24*nDays);
  cs += "expires=" + expire.toGMTString() + ";";
 }
 document.cookie = cs+"path=/;"
 document.cookie = cs+"path=/cgi-bin;"
}

function jslGetCookie(name) {
  var dc = document.cookie;
  var prefix = name + "=";
  var begin = dc.indexOf("; " + prefix);
  if (begin == -1) {
    begin = dc.indexOf(prefix);
    if (begin != 0) return null;
  } else
    begin += 2;
  var end = document.cookie.indexOf(";", begin);
  if (end == -1)
    end = dc.length;
  return unescape(dc.substring(begin + prefix.length, end));
}

function jslSetOpaque(node, value) {
 if (jslBrowserType()=="IE") {
  node.style.filter="alpha(opacity="+value+")";
 } else {
  node.style.opacity=value/100;
 }
}

 function jslGetTarget(e) {
  var tNode;
  if (!e) var e = window.event;
  if (e.target) {
   tNode = e.target;
  } else if (e.srcElement) {
   tNode = e.srcElement;
  }
  if (tNode.nodeType == 3) tNode = tNode.parentNode;
  return tNode;
 }

 function jslGetAjaxToken() {
  var tn = '_wotAT';
  var t = jslGetCookie(tn);
  if (!t) {
   t = (Math.round((Math.random()*100000)+1));
   jslSetCookie(tn,t);
  }
  return t;
 }
