widthReg  = /^w([0-9]+)$/;
heightReg = /^h([0-9]+)$/;
foundClass = "";

function globalOnLoad() {
    // Assign link events
    anchors = document.getElementsByTagName("a");
    for (key in anchors) {
        if (FM.checkForClass(anchors[key],"ImagePop"))  foundClass = "ImagePop";
        if (FM.checkForClass(anchors[key],"Popup"))     foundClass = "Popup";
        if (FM.checkForClass(anchors[key],"PDF")) {
            anchors[key].onclick = function() { PDFPopup(this.href); return false; }
        }
        if (FM.checkForClass(anchors[key],"Offsite")) {
            anchors[key].onclick = function() { offsitePopup(this.href); return false; }
        }
        if (FM.checkForClass(anchors[key],"Toggle")) {
            anchors[key].onclick = function() { menuToggle(this); return false; }
        }
        if (foundClass != "") {
            // if an anchor has a found class, it finds class names that begin with a 'w' or an 'h' and
            // extracts the width & height values from those subsequent class names
            // popup class names should be, e.g.: class="Popup w400 h320"
            FM.toggleClass(anchors[key],foundClass);
            aClass = anchors[key].className.split(" ");
            width = 700; height = 500;
            for (name in aClass) {
                if (aClass[name].search(widthReg) >= 0)  { width = aClass[name].substr(1); }
                if (aClass[name].search(heightReg) >= 0) { height = aClass[name].substr(1); }
            }
            if (foundClass=="ImagePop") {
                anchors[key].onclick = function () { ImagePopup(this.href,width,height); return false; }
            } else {
                anchors[key].onclick = function() { popupWindow(this.href,width,height); return false; };
            }
        }
        foundClass = "";
    }
    setH();
    // Run page onLoad function, if it exists
    if (typeof onLoad != 'undefined') {
        onLoad();
    }
}
// Every page should execute the global onload function
window.onload = globalOnLoad;

function menuToggle(trigger) {
    FM.toggleClass(trigger,"Toggle");
    if (FM.checkForClass(trigger,"Open")) {
        FM.toggleClass(trigger,"Open");
        foldMenu = document.getElementById(trigger.className);
        FM.toggleClass(trigger,"Closed");
    } else {
        FM.toggleClass(trigger,"Closed");
        foldMenu = document.getElementById(trigger.className);
        FM.toggleClass(trigger,"Open");
    }
    FM.toggleClass(trigger,"Toggle");
    display = foldMenu.style.display;
    display = (display == "none" || display <= "")?"block":"none";
    foldMenu.style.display = display;
    return false;
}

state="down";onTop="menuD";
prevST = currST = offset = monCount = 0;
togState = "up";
oNum = 1;
image1 = new Image();
image1.src = root+"images/mmenu_about.gif";
image2 = new Image();
image2.src = root+"images/mmenu_friends.gif";
image3 = new Image();
image3.src = root+"images/mmenu_portfolio.gif";
image4 = new Image();
image4.src = root+"images/mmenu_projects.gif";
image5 = new Image();
image5.src = root+"images/mmenu_resume.gif";
image6 = new Image();
image6.src = root+"images/mmenu_weblog.gif";

function setH(offset,togg) {
	isIE = document.all?true:false;
	h = top.document.body.clientHeight;
	if (offset) {
		h = h + offset;
	}

	mainD = document.getElementById("mainDiv");
	sideD = document.getElementById("sidebar");
	menuD = document.getElementById("mmenu_inner");
	mattD = document.getElementById("mmenu_under");
	toglD = document.getElementById("mmenu_toggle");

	leftPos = (mainD.offsetLeft + 450) + "px"
	mattD.style.left = menuD.style.left = toglD.style.left = leftPos;
	if (!togg) toglD.style.top = (h - (isIE?8:7)) + "px";
	if (togg || (togState=="up")) {
		h = (h - 296) + "px";
		mattD.style.top = menuD.style.top = h;
	}
	if (!isIE) {
		menuD.style.position = mattD.style.position = toglD.style.position = "fixed"; 
	} else {
		monitor4IE();
	}
}
        
function mmRoll(state) {
	if (state != "out") {
		document.images["mmenu"].src = root+"images/mmenu_" + state + ".gif";
	} else {
		document.images["mmenu"].src = root+"images/spacer.gif";
	}
}
        
function sideArrange() {
	onBot=onTop;
	onTop=(state=="down")?"sideD":"menuD";
	state=(state=="up")?"down":"up";
	alTex=(state=="up")?"Send to Back":"Bring to Front";
	eval(onTop+".style.zIndex = 5");
	eval(onBot+".style.zIndex = 3");
	document.images["sbArr"].src = root+"images/btn_arrange_"+state+".gif"
	isIE?(document.images["sbArr"].alt = alTex):(document.links["sbArrLink"].title = alTex);
}

function monitor4IE() {
	monCount+=1;
	if (monCount < 2) {
		currST = document.body.scrollTop;
		if (prevST == currST) {
//			alert(prevST + "\n" + currST);
		} else {
			setH(currST);
			prevST = currST;
		}
		monCount-=1;
//		alert(monCount);
		setTimeout('monitor4IE()',10);
	} else {
	 monCount-=1;
	}
}

function toggle() {
	if (togState != "down") {
		togState = "down";
		button = "up"
		offset = -10000;
		alTex = "Show Main Menu";
	} else {
		togState = "up"
		button = "down"
		offset = "";
		alTex = "Hide Main Menu";
	}
	document.images['togImg'].src = root+"images/btn_toggle_"+button+".gif";
	toglD.title = alTex;
	setH(offset,true);
}

function pfSwitch(num){
	if (oNum!=num) {
		capO = document.getElementById("cap"+oNum);
		capS = document.getElementById("cap"+num);
		capO.style.display = "none";
		capS.style.display = "inline";
		document.projImg.src = "/portfolio/images/"+proj+"-0"+num+".jpg";
		oNum = num;
	}
}

function pfSwitch2(num,filename){
	if (oNum!=num) {
		capO = document.getElementById("cap"+oNum);
		capS = document.getElementById("cap"+num);
		capO.style.display = "none";
		capS.style.display = "inline";
		document.projImg.src = "http://www.x13design.com/res/screenshots/"+filename;
		oNum = num;
	}
}

function popTip(div) {
	tip = document.getElementById(div);
	currD = tip.style.display;
	tip.style.display = ((currD=="none")||(currD==""))?"block":"none";
}

// Dan's FluidMind functions //
// Make sure the "FM" namespace object exists
if (typeof FM != 'object') {
    FM = new Object();
}

/**
 * Checks a given class attribute for the presence of a given class
 *
 * @author  Dan Delaney     http://fluidmind.org/
 * @param   element         DOM Element object (or element ID) to remove the class from
 * @param   nameOfClass     The name of the CSS class to check for
 */
FM.checkForClass = function(element, nameOfClass) {
    if (typeof element == 'string') { element = document.getElementById(element); }

    if (element.className == '') {
        return false;
    } else {
        return new RegExp('\\b' + nameOfClass + '\\b').test(element.className);
    }
}


/**
 * Adds a class to an element's class attribute
 *
 * @author  Dan Delaney     http://fluidmind.org/
 * @param   element         DOM Element object (or element ID) to add the class to
 * @param   nameOfClass     Class name to add
 * @see     checkForClass
 */
FM.addClass = function(element, nameOfClass) {
    if (typeof element == 'string') { element = document.getElementById(element); }

    if (!FM.checkForClass(element, nameOfClass)) {
        element.className += (element.className ? ' ' : '') + nameOfClass;
        return true;
    } else {
        return false;
    }
}


/**
 * Removes a class from an element's class attribute
 *
 * @author  Dan Delaney     http://fluidmind.org/
 * @param   element         DOM Element object (or element ID) to remove the class from
 * @param   nameOfClass     Class name to remove
 * @see     checkForClass
 */
FM.removeClass = function(element, nameOfClass) {
    if (typeof element == 'string') { element = document.getElementById(element); }

    if (FM.checkForClass(element, nameOfClass)) {
        element.className = element.className.replace(
            (element.className.indexOf(' ' + nameOfClass) >= 0 ? ' ' + nameOfClass : nameOfClass),
            '');
        return true;
    } else {
        return false;
    }
}


/**
 * Replaces a class with another if the class is present
 *
 * @author  Dan Delaney     http://fluidmind.org/
 * @param   element         DOM Element object (or element ID) to remove the class from
 * @param   class1          Class name to replace
 * @param   class2          Class name to replace it with
 * @see     checkForClass
 * @see     addClass
 * @see     removeClass
 */
FM.replaceClass = function(element, class1, class2) {
    if (typeof element == 'string') { element = document.getElementById(element); }

    if (FM.checkForClass(element, class1)) {
        FM.removeClass(element, class1);
        FM.addClass(element, class2);
        return true;
    } else {
        return false;
    }
}


/**
 * Toggles the specified class on and off
 *
 * @author  Dan Delaney     http://fluidmind.org/
 * @param   element         DOM Element object (or element ID) to toggle the class of
 * @param   nameOfClass     Class name to toggle
 * @see     checkForclass
 * @see     addClass
 * @see     removeClass
 */
FM.toggleClass = function(element, nameOfClass) {
    if (typeof element == 'string') { element = document.getElementById(element); }

    if (FM.checkForClass(element, nameOfClass)) {
        FM.removeClass(element, nameOfClass);
    } else {
        FM.addClass(element, nameOfClass);
    }

    return true;
}
// Dan's FluidMind functions //
