/* Javascript Utilities for the Ftrain Sitekit. */

/* "The reader's freedom is a holy thing." --William Gass, Finding a
 * Form. Various friendly utilities to provide the reader with a
 * better experience. The cookie functions appear around the Web and
 * are provenance unknown; original functions appear below them. 
 * 
 * With help from: Jakob Borg.
*/ 

var Links=0;
var Everything=0;
var Compress=0;
var expdate = new Date ();
expdate.setTime(expdate.getTime() + (24 * 60 * 60 * 1000 * 31 * 9));

function getCookieVal (offset) {
    var endstr = document.cookie.indexOf (";", offset); //; signifies end of value
    if (endstr == -1)
	endstr = document.cookie.length; //if -1 then take it to the end
    return unescape(document.cookie.substring(offset, endstr)); //convert to readable text
}

function GetCookie (name) {
    var arg = name + "=";
    var alen = arg.length;
    var clen = document.cookie.length;
    var i = 0;
    while (i < clen) {
	var j = i + alen;
	if (document.cookie.substring(i, j) == arg)
	    return getCookieVal(j);
	i = document.cookie.indexOf(" ", i) + 1;
	if (i == 0) break; }
    return null; 
}

function SetCookie (name, value) {
    var argv = SetCookie.arguments;
    var argc = SetCookie.arguments.length;
    var expires = (argc > 2) ? argv[2] : null;
    var path = (argc > 3) ? argv[3] : null;
    var domain = (argc > 4) ? argv[4] : null;
    var secure = (argc > 5) ? argv[5] : false;
    document.cookie = name + "=" + escape (value) +
	((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
	((path == null) ? "" : ("; path=" + path)) +
	((domain == null) ? "" : ("; domain=" + domain)) +
	((secure == true) ? "; secure" : ""); 
}


function AnchorHiLiter() {
    var anchor=location.hash;
    if (anchor) {
	re=RegExp('#','');
	posthash=anchor.replace(re,'');
	var as=document.getElementsByTagName("a");
	for (var i=0;i<as.length;i++){
	    if (as[i].name==posthash) {
		var node = as[i].parentNode;
		node.style.background = '#ffa';
		var a=document.createElement("a");
		a.setAttribute("href","#top");
		a.setAttribute("class","toplink");
		a.appendChild(document.createTextNode("[Top]"));
		node.insertBefore(a,node.childNodes[1]);
	    }
	}
    }
}

function setdisplay() {
/*    color(); */
}

/* http://www.kryogenix.org/code/browser/searchhi/ */
/* Modified 20021006 to fix query string parsing and add case insensitivity */
function highlightWord(node,word) {
	// Iterate into this nodes childNodes
	if (node.hasChildNodes) {
		var hi_cn;
		for (hi_cn=0;hi_cn<node.childNodes.length;hi_cn++) {
			highlightWord(node.childNodes[hi_cn],word);
		}
	}
	
	// And do this node itself
	if (node.nodeType == 3) { // text node
		tempNodeVal = node.nodeValue.toLowerCase();
		tempWordVal = word.toLowerCase();
		if (tempNodeVal.indexOf(tempWordVal) != -1) {
			pn = node.parentNode;
			if (pn.className != "searchword") {
				// word has not already been highlighted!
				nv = node.nodeValue;
				ni = tempNodeVal.indexOf(tempWordVal);
				// Create a load of replacement nodes
				before = document.createTextNode(nv.substr(0,ni));
				docWordVal = nv.substr(ni,word.length);
				after = document.createTextNode(nv.substr(ni+word.length));
				hiwordtext = document.createTextNode(docWordVal);
				hiword = document.createElement("span");
				hiword.className = "searchword";
				hiword.appendChild(hiwordtext);
				pn.insertBefore(before,node);
				pn.insertBefore(hiword,node);
				pn.insertBefore(after,node);
				pn.removeChild(node);
			}
		}
	}
}

function googleSearchHighlight() {
	if (!document.createElement) return;
	ref = document.referrer;
	if (ref.indexOf('?') == -1) return;
	qs = ref.substr(ref.indexOf('?')+1);
	qsa = qs.split('&');
	for (i=0;i<qsa.length;i++) {
		qsip = qsa[i].split('=');
	        if (qsip.length == 1) continue;
        	if (qsip[0] == 'query' || qsip[0] == 'q' || qsip[0] == 'p') { 
		/* query= for local search, q= for Google, p= for Yahoo */
		    words = unescape(qsip[1].replace(/\+/g,' ')).split(/\s+/);
		    for (w=0;w<words.length;w++) {
			highlightWord(document.getElementsByTagName("body")[0],words[w]);
		    }
	        }
	}
}


function randHex() {
    var a = Math.floor(Math.random() * 256);
    var b = Math.floor(Math.random() * 256);
    var c = Math.floor(Math.random() * 256);
    return '#' + a.toString(16) + b.toString(16) + c.toString(16);
}

Colors = new Array ('#aca', '#ddd', '#ccc', '#bbb');

function color() {
   var divs = document.getElementsByTagName('td');
   var i=0;
   for (j=0;j<divs.length;j++) {
       if (divs[j].className=='frontBox') {
	   divs[j].style.background=Colors[i]; 
	   i++;
       }
   }
}

function LayerShow(layer) {
    var el = document.getElementById(layer);
    el.style.display='block';
    linker(el);
}

function LayerHide(layer) {
    var el = document.getElementById(layer);
    el.style.display='none';
}

var LastGraph;
var GraphNotes=0;
function SPN(o) {
    if (Everything!=1) {
	if (LastGraph && o!=LastGraph) {
	    var spans = LastGraph.getElementsByTagName('span');
	    for (i=0;i<spans.length;i++) {
		if (spans[i].className=='footnoteShow') {
		    spans[i].className='footnote';
		}
	    }
	    GraphNotes=0;
	}
	
	LastGraph=o;
	
	var spans = o.getElementsByTagName('span');
	
	if (!GraphNotes) {
	    for (i=0;i<spans.length;i++) {
		if (spans[i].className=='footnote') {
		    spans[i].className='footnoteShow';
		}
		GraphNotes=1;
	    }
	}
	else {
	    for (i=0;i<spans.length;i++) {
		if (spans[i].className=='footnoteShow') {
		    spans[i].className='footnote';
		}
		GraphNotes=0;
	    }
	}
    }
}

function SPL(o) {
    if (Links!=1) {
	if (Links==0) {
	    linker(o);
	}
    }
}

function HPL(o) {
    if (Links!=1 && Links==0) {
	var as = o.getElementsByTagName('A');
	for (i=0;i<as.length;i++) {
	    as[i].className='contenthide';
	}
    }
}


function turnOn(state) {
    if (state=='links') {
	if (Links==0) {
	    linker(document);
	    Links=1;
	    SetCookie("Links","1",expdate);
	}
	else {
	    var as = document.getElementsByTagName('A');
	    for (i=0;i<as.length;i++) {
		as[i].className='';
	    }
	    Links=0;
	    SetCookie("Links","0",expdate);
	}
    }
    if (state=='everything') {
	if (Everything==0) {
	    var spans=document.getElementsByTagName("span");
	    for (var i=0;i<spans.length;i++){
		if (spans[i].className=="footnote") {
		    spans[i].className="footnoteShow";
		}
	    }
	    Everything=1;
	    SetCookie("Everything","1",expdate);
	}
	else {
	    var spans=document.getElementsByTagName("span");
	    for (var i=0;i<spans.length;i++){
		if (spans[i].className=="footnoteShow") {
		    spans[i].className="footnote";
		}
	    }
	    Everything=0;
	    SetCookie("Everything","0",expdate);
	}
    }
}

function compress() {
    var img = document.getElementById('widepixel');
    img.width='700';

    var mast = document.getElementById('mastHead');
    mast.className='mastHeadNarrow';

    var buttona = document.getElementById('compress');
    buttona.style.display='none';

    var buttonb = document.getElementById('expand');
    buttonb.style.display='inline';

    var divs = document.getElementsByTagName('div');
    var RE = new RegExp('(frontBox)', 'i');
    for (var i=0;i<divs.length;i++){
	if (RE.test(divs[i].className)) {
	    divs[i].style.position='relative';
	    divs[i].style.left='10px';
	}
    }

    var hs = document.getElementsByTagName('H3');
    for (var i=0;i<hs.length;i++){
	if (hs[i].className=='frontBoxHeaderAlt') {
	    hs[i].className='frontBoxHeaderAltInline';
	}
    }
    var body = document.getElementsByTagName('body');
    for (var i=0;i<body.length;i++){
	body[i].className='inside';
    }

    SetCookie("Compress","1",expdate);
}

function expand() {
    var img = document.getElementById('widepixel');
    img.width='2000';
    
    var mast = document.getElementById('mastHead');
    mast.className='mastHead';

    var buttona = document.getElementById('compress');
    buttona.style.display='inline';

    var buttonb = document.getElementById('expand');
    buttonb.style.display='none';
    
    var divs = document.getElementsByTagName('div');
    var RE = new RegExp('(frontBox)', 'i');
    for (var i=0;i<divs.length;i++){
	if (divs[i].className=='twoFrontBox') { 
	    divs[i].style.left='720px'; 
	    divs[i].style.position='absolute';
	}
	
	if (divs[i].className=='threeFrontBox') { 
	    divs[i].style.left='930px';
	    divs[i].style.position='absolute';
	}

	if (divs[i].className=='fourFrontBox') { 
	    divs[i].style.left='1140px';
	    divs[i].style.position='absolute';
	}


	if (divs[i].className=='fiveFrontBox') { 
	    divs[i].style.left='1350px';
	    divs[i].style.position='absolute';
	}

	if (divs[i].className=='sixFrontBox') { 
	    divs[i].style.left='1560px';
	    divs[i].style.position='absolute';
	}
    }

    var hs = document.getElementsByTagName('H3');
    for (var i=0;i<hs.length;i++){
	if (hs[i].className=='frontBoxHeaderAltInline') {
	    hs[i].className='frontBoxHeaderAlt';
	}
    }
    var body = document.getElementsByTagName('body');
    for (var i=0;i<body.length;i++){
	body[i].className='';
    }
    SetCookie("Compress","0",expdate);
}

function linker(o) {
    var URL = new RegExp('(http://|mailto:)', 'i');
    var fta = new RegExp('(^http://ftrain\.com)', 'i');
    var ftb = new RegExp('(^http://www\.ftrain\.com)', 'i');
    var as = o.getElementsByTagName('A');
    for (i=0;i<as.length;i++) {
	if (URL.test(as[i].href) && !fta.test(as[i].href) && !ftb.test(as[i].href)) {
	    as[i].className='external';
	}
	else as[i].className='internal';
    }
}

function anno(o) {
    o.parentNode.childNodes[3].style.display="inline";
}

function annohide(o) {
    o.parentNode.childNodes[3].style.display="none";
}

