var root = "http://www.jaquiehagan.com";

function getById(name){
    if (document.getElementById) return document.getElementById(name);  // Mozilla, Safari, W3C
    else if (document.all) return document.all[name];                   // Internet Explorer
    else if (document.layers) return document.layers[name];             // Netscape 4
    return null;
}

function getByClass(searchClass,node,tag){
    var classElements = new Array();
    if (tag==undefined) tag="*";
    if (!node) node = document;
    var els = node.getElementsByTagName(tag); // use "*" for all elements
    var elsLen = els.length;
    var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
    for (i = 0,j = 0; i < elsLen; i++) {
        if ( pattern.test(els[i].className) ) {
            classElements[j] = els[i];
            j++;
        }
    }
    return classElements;
}

function addClass(node, aclass){if (node.className.indexOf(aclass) == -1) {node.className = node.className + " " + aclass;}}
function removeClass(node, aclass){if (node.className.indexOf(aclass) > -1) {node.className = node.className.split(aclass).join(" ")}}

function insertHTML(strURL, el, processor, postProcess, target) {
	//el.innerHTML = "";
    var xhr = false;
    try { // Moz/Safari/w3c
        xhr = new XMLHttpRequest();
    } catch(e) {
        try { // IE
            xhr = new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e) {
            xhr = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    if (!xhr) {
        alert("No XMLHttpRequest found!");
    }
    xhr.open('GET', strURL, true);
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4) {
            el.innerHTML = processor(xhr.responseText);
            if (postProcess instanceof Array) {
                for (var i=0;i<postProcess.length;i++) {
                    postProcess[i](target);
                }
            } else if (target) {
                postProcess(target);
            } else {
                postProcess();
            }
	    //alert(xhr.responseText);
        }
        else {
            el.innerHTML = "";
        }
    }
    xhr.send(null);
}

function hide(el) {getById(el).style.display = "none";}
function show(el) {getById(el).style.display = "block";}
function fade(el, opac) {
	st = getById(el).style;
	st.opacity = opac;
	st.KhtmlOpacity = opac; 
	st.filter = "alpha(opacity=" + opac * 100 + ")";
}

function homePage() {
	hide('data');
	fade('jaq_logo',1);
	show('top_home');
	window.currentPageID = "home";
	return false; // So we don't follow link
}

function loadImage(imageURL, htmlEl, title, postProcess, target) {
	var img = new Image();
	if (postProcess) {
	   img.onload = function () {postProcess(target); updateDescription();return false;}
    }
	img.src = imageURL;
	img.alt = title;
	if (htmlEl.firstChild) htmlEl.removeChild(htmlEl.firstChild);
	htmlEl.insertBefore(img,htmlEl.firstChild);
}

// Processor functions, for insertHTML callback

function doNothing(text) {
    if (!text) {return "";}
    if (!text.indexOf) {return "";}
    if (text.indexOf("<HTML") > -1) {return "";} // Hide missing files, etc
    return text;
}
function listify(text) {
    if (!text) {return "";}
    if (text.indexOf("<HTML>") > -1) return "";
    var data = text.split("\n");
    //return text;
    var result = "<ul>\n";
    for (var i=0;i<data.length;i++) {
        result = result + "<li>" + data[i] + "&nbsp;</li>\n" 
    }
    result = result + "</ul>";
    return result;
}

function ifBlank(text) {
    temp = "";
    if (noWhiteSpace(text)=="") {
        // Nasty Hack
        insertHTML(root + "/3/2/1_1.txt","data_img_image");
    }
    alert(text)
    return text
}

function noWhiteSpace(s) {if((s==null)||(typeof(s)!='string')||!s.length)return'';return s.replace(/\s+/g,'');}

// Post Processor functions

function updateDescription() {
if (getById("data_img_image").firstChild){
    //getById("img_desc").innerHTML = getById("data_img_image").firstChild.alt;
}
}

function updateLinks() {
	getById("jaq_logo").onclick = homePage;
	navitem = getByClass("menu_item");
	for (var i=0;i<navitem.length;i++){
		navitem[i].onclick = processClick;
	}
	navitem = getByClass("side_menu");
	for (var i=0;i<navitem.length;i++){
		navitem[i].onclick = processClick;
	}
	navitem = getByClass("img_menu");
	for (var i=0;i<navitem.length;i++){
		navitem[i].onclick = processClick;
	}
}

function makeActive(node){
    if (!node) { setTimeout("makeActive("+node+")",100); return false;}
    if (!node.parentNode) { setTimeout("makeActive("+node+")",100); return false;}
    base = node.parentNode.parentNode;
    nodes = base.getElementsByTagName('A');
    	for (var i=0;i<nodes.length;i++){
		removeClass(nodes[i],"active")
	} 
	addClass(node,"active")	
	document.body.focus(); 
	if (getById("img_desc")) {
        temp = node.title;
        if (temp.indexOf("www") > 0){
            temp = temp.replace("www",'<a href="http://www') + '" target="top">www' + temp.split("www")[1] + "</a>";
        }
	if (temp != "") {
	    getById("img_desc").innerHTML = temp;
	}
    } else {
        //alert(getById("img_desc"));
        //setTimeout("makeActive("+node+")",100);
    }   
    updateLinks();
    preloadImages(getById("data_img_sel").innerHTML);
}

function preloadImages(text) {
    // Find all <img src="thingo" /> tags, and preload images from there.
    t = text.match(/id="(.*)"/g);
    //alert(t);
    if (!t) return;
    for (var i=0;i<t.length;i++) {
	img = new Image();
	ext = t[i].split('"')[1].split("_")[4]
	if (ext) {
	    img.src = t[i].split('"')[1].replace("_","/").replace("_","/").slice(0,-4) + '.' + ext;
	}
	//alert(src);
    }
}

//

function processClick(id,noAdd) {
    if (this == window) {
        if (!id) { return false; }
        else {
            this_ = getById(id);
            if (!this_) {
                // Hmm, unable to get this page.  Might have to get it's parent first.
                var menu = "menu_" + id.split("_")[0] + "_" + id.split("_")[1];
                processClick(menu, true);
                //setTimeout("processClick("+id+", true)", 100);
            }
        }
    } else {
        this_ = this;
    }
    id = this_.id;
    className = this_.className;
    if (window.pageID == id) {return false;} // Already viewing this page, do nothing.
    if (className == "menu_item"){
        // process click from Main Menu
        //alert(id)
        cat = id.split("_")[1];
        group = id.split("_")[2];
        getById("data_menu_head").innerHTML = '<img src="'+root + '/' + cat + '/' + group + '_head.gif" alt=""/>';
		getById("data_img_image").innerHTML = "";
		getById("data_img_sel").innerHTML = "";
		insertHTML(root+'/'+cat+"/"+group+"_menu.thtml", getById("data_menu_body"), doNothing, updateLinks);
		if ((cat+"_"+group) == "3_2") {
		  insertHTML(root+"/3/2/1_1.txt", getById("data_img_image"), listify, doNothing);
		  }
        show('data');
	    fade('jaq_logo',0.5);
	    hide('top_home');
	    window.pageID = id;
            if (!noAdd) {
                window.pages[window.pages.length] = id;
            }
        return false;
    }

    cat = id.split("_")[0];
    group = id.split("_")[1];
    client = id.split("_")[2];
    index = id.split("_")[3];
    ext = id.split("_")[4];
    
    if (className.indexOf("side_menu") > -1) {
        id = id.substring(0,id.length-5);
        //that = cat+"_"+group+"_"+client+"_1_"+ext;
        insertHTML(root+'/'+cat+'/'+group+'/'+client+'_menu.thtml', getById("data_img_sel"), doNothing, makeActive, this_);
        //alert(root+'/'+cat+'/'+group+'/'+client+'_menu.thtml');
    }
    
    URL = root + "/" + cat + "/" + group + "/" + client + "_" + index + "." + ext;
    //alert(URL);
    if (ext == "txt") { insertHTML(URL, getById("data_img_image"), listify, makeActive, this_); }
    else if (ext == "thtml") { insertHTML(URL, getById("data_img_image"), doNothing, makeActive, this_); }
    else { loadImage(URL, getById("data_img_image"), this.title, makeActive, this_); }
    window.pageID = id;
    makeActive(getById(id));
    if (!noAdd) { window.pages[window.pages.length] = id; }
    return false;
}

function back(){
    if (window.pages.length == 1) {return true;}
    window.pages = window.pages.slice(0,-1);
    if (window.pages[window.pages.length-1] == "home") {
        homePage()
    } else {
        processClick(window.pages[window.pages.length-1], true)
    }
    return false;
}

function preloadMenus(){
    // Preload special image files, for menus and the like.
    var i1 = new Image();
    i1.src = root + "/images/menu_info_over.gif";
    var i2 = new Image();
    i2.src = root + "/images/menu_interior_over.gif";
    var i3 = new Image();
    i3.src = root + "/images/menu_visual_over.gif";
    var img = new Array();
    for (var i=1;i<=3;i++){
	img[i] = new Array();
	for (var j=1;j<=3;j++){
	    img[i][j] = new Image();
	    img[i][j].src = root + "/" + i + "/" + j + "_head.gif";
	}
    }
}

function init(){
    updateLinks();
    preloadMenus();
    window.pages = new Array();
    window.pages[0] = 'home';
}

onload = init;