/**************/
/* MM Scripts */
/**************/
/*startList = function() {
if (document.all&&document.getElementById) {
navRoot = document.getElementById("nav");
for (i=0; i<navRoot.childNodes.length; i++) {
node = navRoot.childNodes[i];
if (node.nodeName=="LI") {
node.onmouseover=function() {
this.className+=" over";
  }
  node.onmouseout=function() {
  this.className=this.className.replace(" over", "");
   }
   }
  }
 }
}
window.onload=startList;
*/

function MM_jumpMenu(targ,selObj,restore){ //v3.0
  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}


/*************************************************************************************************/

/****
  AmiJs library
    A very small library with DOM and Ajax functions.
    For a much larger script look on http://www.mochikit.com/
  AUTHOR
    4mir Salihefendic (http://amix.dk) - amix@amix.dk
  LICENSE
    Copyright (c) 2006 Amir Salihefendic. All rights reserved.
    Copyright (c) 2005 Bob Ippolito. All rights reserved.
    http://www.opensource.org/licenses/mit-license.php
  VERSION
    1.31 (20/02/06 22:41:35)
  SITE
    http://amix.dk/amijs
 ****/

/**** 
  Assessor functions 
 ****/
function getElement(id) {
  if(typeof(id) == "string") 
    return document.getElementById(id);
  else
    return id;
}
var $ = getElement;

function getBody() { return getElementsByTagAndClassName('body')[0] };

function getElementsByTagAndClassName(tag_name, class_name, /* optional */parent) {
  var class_elements = new Array();
  if(parent == null || parent == "undefined")
    parent = document;
  if(tag_name == null || tag_name == "undefined")
    tag_name = '*';

  var els = parent.getElementsByTagName(tag_name);
  var els_len = els.length;
  var pattern = new RegExp("(^|\\s)" + class_name + "(\\s|$)");

  for (i = 0, j = 0; i < els_len; i++) {
    if ( pattern.test(els[i].className) || class_name == null ) {
      class_elements[j] = els[i];
      j++;
    }
  }
  return class_elements;
}


/**** 
  DOM manipulation 
 ****/
function appendChildNodes(node/*, nodes...*/) {
  if(arguments.length >= 2) {
    for(var i = 1; i < arguments.length; i++) {
      var n = arguments[i];
      if(typeof(n) == "string")
        n = document.createTextNode(n);
      else if(isDefined(n))
        node.appendChild(n);
    }
  }
  return node;
}
var ACN = appendChildNodes;

function replaceChildNodes(node/*, nodes...*/) {
  var child;
  while ((child = node.firstChild)) {
    node.removeChild(child);
  }
  if (arguments.length < 2) {
    return node;
  } else {
    return appendChildNodes.apply(this, arguments);
  }
}
var RCN = replaceChildNodes;

function insertAfter(node, referenceNode) {
  referenceNode.parentNode.insertBefore(node, referenceNode.nextSibling);
}

function insertBefore(node, referenceNode) {
  referenceNode.parentNode.insertBefore(node, referenceNode);
}

function showElement(elm) { elm.style.display = ''; }
function hideElement(elm) { elm.style.display = 'none'; }

function swapDOM(dest, src) {
  dest = getElement(dest);
  var parent = dest.parentNode;
  if (src) {
    src = getElement(src);
    parent.replaceChild(src, dest);
  } else {
    parent.removeChild(dest);
  }
  return src;
}

function removeElement(elm) {
  swapDOM(elm, null);
}

function createDOM(name, attrs) {
  var i = 1;
  elm = document.createElement(name);

  if(isDefined(attrs[0]) && typeof(attrs[0]) != "string") {
    for(k in attrs[0]) {
      if(k == "style")
        elm.style.cssText = attrs[0][k];
      else if(k == "class")
        elm.className = attrs[0][k];
      else
        elm.setAttribute(k, attrs[0][k]);
    }
    for(i; i < attrs.length; i++) {
      var n = attrs[i];
      if(isDefined(n)) {
        if(typeof(n) == "string")
          n = document.createTextNode(n);
        elm.appendChild(n);
      }
    }
  }
  else {
    //We have just a string...
    var n = attrs[0];
    if(isDefined(n)) {
      n = document.createTextNode(n);
      elm.appendChild(n);
    }
  }
  return elm;
}

var UL = function() { return createDOM.apply(this, ["ul", arguments]); };
var LI = function() { return createDOM.apply(this, ["li", arguments]); };
var TD = function() { return createDOM.apply(this, ["td", arguments]); };
var TR = function() { return createDOM.apply(this, ["tr", arguments]); };
var TH = function() { return createDOM.apply(this, ["th", arguments]); };
var TBODY = function() { return createDOM.apply(this, ["tbody", arguments]); };
var TABLE = function() { return createDOM.apply(this, ["table", arguments]); };
var INPUT = function() { return createDOM.apply(this, ["input", arguments]); };
var SPAN = function() { return createDOM.apply(this, ["span", arguments]); };
var B = function() { return createDOM.apply(this, ["b", arguments]); };
var A = function() { return createDOM.apply(this, ["a", arguments]); };
var DIV = function() { return createDOM.apply(this, ["div", arguments]); };
var IMG = function() { return createDOM.apply(this, ["img", arguments]); };
var BUTTON = function() { return createDOM.apply(this, ["button", arguments]); };
var H1 = function() { return createDOM.apply(this, ["h1", arguments]); };
var H2 = function() { return createDOM.apply(this, ["h2", arguments]); };
var H3 = function() { return createDOM.apply(this, ["h3", arguments]); };
var BR = function() { return createDOM.apply(this, ["br", arguments]); };
var TEXTAREA = function() { return createDOM.apply(this, ["textarea", arguments]); };
var FORM = function() { return createDOM.apply(this, ["form", arguments]); };
var P = function() { return createDOM.apply(this, ["p", arguments]); };
var SELECT = function() { return createDOM.apply(this, ["select", arguments]); };
var OPTION = function() { return createDOM.apply(this, ["option", arguments]); };
var TN = function(text) { return document.createTextNode(text); };
var IFRAME = function() { return createDOM.apply(this, ["iframe", arguments]); };
var SCRIPT = function() { return createDOM.apply(this, ["script", arguments]); };


/**** 
  Ajax functions 
 ****/
function getXMLHttpRequest() {
  var try_these = [
    function () { return new XMLHttpRequest(); },
    function () { return new ActiveXObject('Msxml2.XMLHTTP'); },
    function () { return new ActiveXObject('Microsoft.XMLHTTP'); },
    function () { return new ActiveXObject('Msxml2.XMLHTTP.4.0'); },
    function () { throw "Browser does not support XMLHttpRequest"; }
  ];
  for (var i = 0; i < try_these.length; i++) {
    var func = try_these[i];
    try {
      return func();
    } catch (e) {
    }
  }
}

function doSimpleXMLHttpRequest(url) {
  var req = getXMLHttpRequest();
  req.open("GET", url, true);
  return sendXMLHttpRequest(req);
}

Deferred = function(req) {
  this.callbacks = [];
  this.req = req;

  this.callback = function (res) {
    while (this.callbacks.length > 0) {
      var fn = this.callbacks.pop();
      res = fn(res);
    }
  };

  this.errback = function(e){
    alert("Error encountered:\n" + e);
  };

  this.addErrback = function(fn) {
    this.errback = fn;
  };

  this.addCallback = function(fn) {
    this.callbacks.unshift(fn);
  };

  this.addCallbacks = function(fn1, fn2) {
    this.addCallback(fn1);
    this.addErrback(fn2);
  };

  this.sendReq = function(data) {
    if(isDefined(data))
      this.req.send(data);
    else
      this.req.send(null);
  };
}

Deferred.prototype = new Deferred();

function sendXMLHttpRequest(req, data) {
  var d = new Deferred(req);

  var onreadystatechange = function () {
    if (req.readyState == 4) {
      try {
        status = req.status;
      }
      catch(e) {};
      if(status == 200 || status == 304) {
        d.callback(req, data);
      }
      else {
        d.errback();
      }
    }
  }
  req.onreadystatechange = onreadystatechange;
  return d;
}

function reprString(o) {
  return ('"' + o.replace(/(["\\])/g, '\\$1') + '"'
  ).replace(/[\f]/g, "\\f"
  ).replace(/[\b]/g, "\\b"
  ).replace(/[\n]/g, "\\n"
  ).replace(/[\t]/g, "\\t"
  ).replace(/[\r]/g, "\\r");
}

function serializeJSON(o) {
  var objtype = typeof(o);
  if (objtype == "undefined") {
    return "undefined";
  } else if (objtype == "number" || objtype == "boolean") {
    return o + "";
  } else if (o === null) {
    return "null";
  }
  if (objtype == "string") {
    return reprString(o);
  }
  var me = arguments.callee;
  var newObj;
  if (typeof(o.__json__) == "function") {
    newObj = o.__json__();
    if (o !== newObj) {
      return me(newObj);
    }
  }
  if (typeof(o.json) == "function") {
    newObj = o.json();
    if (o !== newObj) {
      return me(newObj);
    }
  }
  if (objtype != "function" && typeof(o.length) == "number") {
    var res = [];
    for (var i = 0; i < o.length; i++) {
      var val = me(o[i]);
      if (typeof(val) != "string") {
        val = "undefined";
      }
      res.push(val);
    }
    return "[" + res.join(",") + "]";
  }
  res = [];
  for (var k in o) {
    var useKey;
    if (typeof(k) == "number") {
      useKey = '"' + k + '"';
    } else if (typeof(k) == "string") {
      useKey = reprString(k);
    } else {
      // skip non-string or number keys
      continue;
    }
    val = me(o[k]);
    if (typeof(val) != "string") {
      // skip non-serializable values
      continue;
    }
    res.push(useKey + ":" + val);
  }
  return "{" + res.join(",") + "}";
}

function loadJSONDoc(url) {
  var d = doSimpleXMLHttpRequest(url);
  var eval_req = function(req) {
    return eval('(' + req.responseText + ')');
  };
  d.addCallback(eval_req);
  return d;
}

function postJSONDoc(url, data) {
  var req = getXMLHttpRequest();
  req.open("POST", url, true);
  req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  var d = sendXMLHttpRequest(req, data);
  return d;
}


/**** 
  Misc 
 ****/
function keys(obj) {
  var rval = [];
  for (var prop in obj) {
    rval.push(prop);
  }
  return rval;
}

function isDefined(o) {
  return (o != "undefined" && o != null)
}

function isArray(obj) { 
  try { return (typeof(obj.length) == "undefined") ? false : true; }
  catch(e)
  { return false; }
}


/*************************************************************************************************/

/****
 GreyBox - The pop-up window thingie
   Copyright Amir Salihefendic 2006
 AUTHOR
   4mir Salihefendic (http://amix.dk) - amix@amix.dk
 VERSION
	 1.61 (19/02/06 20:35:54)
 LICENSE
  LGPL (read more in LGPL.txt)
 SITE
   http://amix.dk/greybox
****/
var GB_HEADER = null;
var GB_WINDOW = null;
var GB_IFRAME = null;
var GB_OVERLAY = null;
var GB_TIMEOUT = null;

var GB_HEIGHT = 400;
var GB_WIDTH = 400;

var GB_caption = null;

//The url that was visited last
var GB_last_win_url = null;

function GB_show(caption, url /* optional */, height, width) {
  try {
    if(height != 'undefined')
      GB_HEIGHT = height;
    if(width != 'undefined')
      GB_WIDTH = width;

    initIfNeeded();
    GB_IFRAME.src = url;
    GB_IFRAME.opener = this;

    GB_caption.innerHTML = caption;

    GB_setPosition();
    if(GB_ANIMATION) {
      positionRightVertically(GB_HEADER, -(GB_HEIGHT));
      positionRightVertically(GB_WINDOW, -(GB_HEIGHT+22));
    }

    showElement(GB_OVERLAY);
    showElement(GB_HEADER);
    showElement(GB_WINDOW);

    GB_setWidth();

    if(GB_ANIMATION) {
      GB_animateOut(-GB_HEIGHT);
    }
    return false;
  }
  catch (e) {
    return false;
  }
}

function GB_hide() {
  GB_IFRAME.src = "";
  hideElement(GB_WINDOW);
  hideElement(GB_HEADER);
  hideElement(GB_OVERLAY);
}

function GB_setPosition() {
  positionRightVertically(GB_HEADER, 0);
  positionRightVertically(GB_WINDOW, 22);
}

function GB_animateOut(top) {
  if(top+getScrollTop() < 0) {
    positionRightVertically(GB_WINDOW, top+22);
    positionRightVertically(GB_HEADER, top);
    GB_TIMEOUT = window.setTimeout(function() { GB_animateOut(top+50); }, 1);
  }
  else {
    GB_WINDOW.style.top = getScrollTop()+22+"px";
    GB_HEADER.style.top = getScrollTop()+"px";
    clearTimeout(GB_TIMEOUT);
  }
}

function GB_setWidth() {
  var array_page_size = GB_getWindowSize();

  //Set size
  GB_WINDOW.style.width = GB_WIDTH + "px";
  GB_IFRAME.style.width = GB_WIDTH + "px";
  GB_HEADER.style.width = GB_WIDTH + "px";

  GB_WINDOW.style.height = GB_HEIGHT + "px";
  GB_IFRAME.style.height = GB_HEIGHT - 5 + "px";

  GB_OVERLAY.style.width = array_page_size[0] + "px";

  var max_height = Math.max(getScrollTop()+array_page_size[1], getScrollTop()+GB_HEIGHT+30);
  GB_OVERLAY.style.height = max_height + "px";

  GB_WINDOW.style.left = ((array_page_size[0] - GB_WINDOW.offsetWidth) /2) + "px";
  GB_HEADER.style.left = ((array_page_size[0] - GB_HEADER.offsetWidth) /2) + "px";
  
}

function GB_init() {
  //Create the overlay
  GB_OVERLAY = DIV({'id': 'GB_overlay'});

  if(GB_overlay_click_close)
    GB_OVERLAY.onclick = GB_hide;

  getBody().insertBefore(GB_OVERLAY, getBody().firstChild);

  //Create the window
  GB_WINDOW = DIV({'id': 'GB_window'});

  GB_HEADER = DIV({'id': 'GB_header'});
  GB_caption = DIV({'id': 'GB_caption'}, "");

  var close = DIV({'id': 'GB_close'}, IMG({'src': GB_IMG_DIR + 'close.gif', 'alt': 'Close window'}));
  close.onclick = GB_hide;
  ACN(GB_HEADER, close, GB_caption);

  getBody().insertBefore(GB_WINDOW, GB_OVERLAY.nextSibling);
  getBody().insertBefore(GB_HEADER, GB_OVERLAY.nextSibling);

}

function initIfNeeded() {
  if(GB_OVERLAY == null) {
    GB_init();
    GB_addOnWinResize(GB_setWidth);
    window.onscroll = function() { GB_setPosition(); };
  } 
  //Remove the old iFrame
  var new_frame = IFRAME({'id': 'GB_frame', 'name': 'GB_frame'});
  if (GB_IFRAME != null)
    removeElement(GB_IFRAME);
  ACN(GB_WINDOW, new_frame);
  GB_IFRAME = new_frame;
}

function GB_getWindowSize(){
	var window_width, window_height;
	if (self.innerHeight) {	// all except Explorer
		window_width = self.innerWidth;
		window_height = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		window_width = document.documentElement.clientWidth;
		window_height = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		window_width = document.body.clientWidth;
		window_height = document.body.clientHeight;
	}	
	return [window_width, window_height];
}

function GB_addOnWinResize(func) {
  var oldonrezise = window.onresize;
  if (typeof window.onresize != 'function')
    window.onresize = func;
  else {
    window.onresize = function() {
      oldonrezise();
      func();
    }
  }
}

function positionRightVertically(elm, value) {
  elm.style.top = getScrollTop()+value+"px";
}

function getScrollTop() {
  //From: http://www.quirksmode.org/js/doctypes.html
  var theTop;
  if (document.documentElement && document.documentElement.scrollTop)
      theTop = document.documentElement.scrollTop;
  else if (document.body)
      theTop = document.body.scrollTop;
  return theTop;
}

/* This script and many more are available free online at
The JavaScript Source :: http://javascript.internet.com
Created by: Philip Myers :: http://virtualipod.tripod.com/bookmark.html */

function bookmark(url,title){
	
  if ((navigator.appName == "Microsoft Internet Explorer") && (parseInt(navigator.appVersion) >= 4)) {
  window.external.AddFavorite(url,title);
  } else if (navigator.appName == "Netscape") {
    window.sidebar.addPanel(title,url,"");
  } else {
    alert("Press CTRL-D (Netscape) or CTRL-T (Opera) to bookmark");
  }
  //alert(url);
}


/*************************************************************************************************/

    //GreyBox configuration
      //Use animation?
      var GB_ANIMATION = true;
      var GB_IMG_DIR = "greybox/";

      //Clicking on the transparent overlay closes the GreyBox window?
      var GB_overlay_click_close = false;

      //Demo change headline - look more in demoiframe
      //$ function is like getElementById
      function changeHeadline(text){
        $('headline').innerHTML = text;
      }

/*************************************************************************************************/

