/* author: Simon Willisons - http://simon.incutio.com/archive/2004/05/26/addLoadEvent */
function addLoadEvent(f){var o=window.onload;if(typeof window.onload!='function'){window.onload=f}else{window.onload=function(){o();f()}}}

// jsCSS(action,object,class1,class2) -  className: swap, add, remove, check or toggle - author: Christian Heilmann - http://www.onlinetools.org/articles/unobtrusivejavascript/cssjsseparation.html
function jsCSS(a,o,c1,c2){switch(a){case'swap':o.className=!jsCSS('check',o,c1)?o.className.replace(c2,c1):o.className.replace(c1,c2);break;case'add':if(!jsCSS('check',o,c1)){o.className+=o.className?' '+c1:c1};break;case'remove':var rep=o.className.match(' '+c1)?' '+c1:c1;o.className=o.className.replace(rep,'');break;case'check':return new RegExp('\\b'+c1+'\\b').test(o.className);break;case'toggle':if(jsCSS('check',o,c1)){jsCSS('remove',o,c1)}else{jsCSS('add',o,c1)};break}return false}

/* author: mike foskett - http://webSemantics.co.uk/ */
function $id(id){return(document.getElementById(id)?document.getElementById(id):false)}
function idExists(id){return($id(id)?true:false)}
function replaceContent(id,content){if(idExists(id))$id(id).innerHTML=content}
function isDom(){return(document.getElementById && document.getElementsByTagName)?true:false}
function setOpacity(id,op){var o=$id(id).style;o.opacity=op/100;o.MozOpacity=op/100;o.KhtmlOpacity=op/100;o.filter="alpha(opacity="+op+")"}


function createCloseLink(id){
  // create a close link for pop-up - pass in pop-up id
  var linkObj=document.createElement('a');
  linkObj.href="#"+$id(id).linkId;
  linkObj.id=id+"Close";
  linkObj.className=$id($id(id).linkId).className;
  linkObj.onclick=function(){popOff(this.parentNode.id);return false}
  linkObj.appendChild(document.createTextNode("Return to main content"));
  $id(id).appendChild(linkObj);
  // return created link object
  return linkObj;
}


function popOn(id){
  // create a close link for pop-up
  createCloseLink(id)

  setOpacity(id,0);
  for(var o=0;o<101;o+=25){
    var op=(o>100)?100:o;
    setTimeout("setOpacity('"+id+"',"+op+")",o*2);
  }
  jsCSS('add',$id(id),$id(id).displayClass);
}


function popOff(id){
  setOpacity(id,100);
  for(var o=0;o<100;o+=30){
    setTimeout("setOpacity('"+id+"',"+(100-o)+")",o*2);
  }
  // remove the displayClass (.show)
  setTimeout('jsCSS("remove",$id("'+id+'"),"'+$id(id).displayClass+'")',o*2);
  // remove the close link
  $id(id).removeChild($id(id+"Close"));
}

function popup(idName,linkId,displayClass){
	
  // store variables in objects for reference
  $id(linkId).idName=idName;
  $id(idName).linkId=linkId;
  $id(idName).displayClass=displayClass;

  $id(linkId).onclick=function(){

    // toggle via css class of popup.displayClass (.show)
    var divObj=$id(this.idName);
    if (jsCSS('check',divObj,divObj.displayClass)) var show=true;
    if (!show){
      popOn(this.idName)
    }else{
      popOff(this.idName);
    }
    return false;
  }
}

function popups(){
  // loop through all links
  var A=document.getElementsByTagName("a");
  for(var i=0;i<A.length;i++){

    // act on links with rel ="appendix" attribute only
    if (A[i].getAttribute("rel")=="appendix"){

        // get popup div id from the anchor
        A[i].idName=A[i].href.substring(A[i].href.lastIndexOf("#")).replace('#','');
		
		// Furtherence: if div doesn't exist get file via ajax.

        // if the link does not have an id then give it one. Acts as a focus anchor upon return.
        A[i].id=(A[i].id)?A[i].id:A[i].idName+'Link'+i;		

        // add popup action
        popup(A[i].idName,A[i].id,popupDisplayClass);

    }
  }
}

document.documentElement.className="hasJS";
var popupDisplayClass="show";

if (isDom()){addLoadEvent(popups)}