function addEvent( obj, type, fn ) {
	if (obj.addEventListener) {
		obj.addEventListener( type, fn, false );
		EventCache.add(obj, type, fn);
	}
	else if (obj.attachEvent) {
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
		EventCache.add(obj, type, fn);
	}
	else {
		obj["on"+type] = obj["e"+type+fn];
	}
}

var EventCache = function(){
	var listEvents = [];
	return {
		listEvents : listEvents,
		add : function(node, sEventName, fHandler){
			listEvents.push(arguments);
		},
		flush : function(){
			var i, item;
			for(i = listEvents.length - 1; i >= 0; i = i - 1){
				item = listEvents[i];
				if(item[0].removeEventListener){
					item[0].removeEventListener(item[1], item[2], item[3]);
				};
				if(item[1].substring(0, 2) != "on"){
					item[1] = "on" + item[1];
				};
				if(item[0].detachEvent){
					item[0].detachEvent(item[1], item[2]);
				};
				item[0][item[1]] = null;
			};
		}
	};
}();
addEvent(window,'unload',EventCache.flush);

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
//borrowed from prototype: http://prototype.conio.net/
function stopEvent(event) {
	if (event.preventDefault) {
		event.preventDefault();
		event.stopPropagation();
	} else {
		event.returnValue=false;
		event.cancelBubble=true;
	}
}

function removeEvent( obj, type, fn ) { 
  if ( obj.detachEvent ) { 
    obj.detachEvent( 'on'+type, obj[type+fn] ); 
    obj[type+fn] = null; 
  } else 
    obj.removeEventListener( type, fn, false ); 
} 

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
function getElementsByClassName(oElm, strTagName, strClassName){
    var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\\-");
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for(var i=0; i<arrElements.length; i++){
        oElement = arrElements[i];      
        if(oRegExp.test(oElement.className)){
            arrReturnElements.push(oElement);
        }   
    }
    return (arrReturnElements)
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
function flipTo (flipWrap,flipNum) {
	var navset=getElementsByClassName(flipWrap, "div", "flipnav")[0].getElementsByTagName("li");
	var bodyset=getElementsByClassName(flipWrap,"div","flipbody");
	if (navset[flipNum].className.match(/curr/)) return false;
	for (var i=0; i<navset.length; i++) {
		navset[i].className = (i==flipNum) ? navset[i].className+(navset[i].className.length>0? " ": "")+"curr": navset[i].className.replace(new RegExp("( ?|^)curr\\b"), "");
		bodyset[i].className = (i==flipNum)? "flipbody flipact" : "flipbody";
	}
}

function navFlip(obj) {
	var blockobj=obj.parentNode;
	while (!blockobj.className || !blockobj.className.match(/flipBlock/)) {
		blockobj=blockobj.parentNode;
	}
	flipTo (blockobj,obj.num);
	return false;
}

function initFlipBlocks () {
	var flipBlocks=getElementsByClassName(document,"div","flipBlock");
	for (var i=0; i<flipBlocks.length; i++) {
		flipBlocks.currstate = 0;
		var fliplinks = getElementsByClassName(flipBlocks[i], "div", "flipnav")[0].getElementsByTagName("a");
		for (var j=0; j<fliplinks.length; j++) {
			fliplinks[j].num = j;
			addEvent (fliplinks[j], "click", function(e) {
				navFlip(this);
				stopEvent(e);
			});
		}
	}
}

function setFlip (flipBlockID,flipIndex) {
	var targetFlip = document.getElementById(flipBlockID);
	flipTo (targetFlip,flipIndex);
}


/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*DOM LOADER*/
function init() {
	// quit if this function has already been called
	if (arguments.callee.done) return;
	
	// flag this function so we don't do the same thing twice
	arguments.callee.done = true;
	
	// kill the timer
	if (_timer) {
		clearInterval(_timer);
		_timer = null;
	}
	
	// ONLOAD functions
	initFlipBlocks();
};

/* for Mozilla */
if (document.addEventListener) {
	document.addEventListener("DOMContentLoaded", init, false);
}

/* for Internet Explorer */
/*@cc_on @*/
/*@if (@_win32)
	document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
	var script = document.getElementById("__ie_onload");
	script.onreadystatechange = function() {
		if (this.readyState == "complete") {
			init(); // call the onload handler
		}
	};
/*@end @*/

/* for Safari */
if (/WebKit/i.test(navigator.userAgent)) { // sniff
	var _timer = setInterval(function() {
		if (/loaded|complete/.test(document.readyState)) {
			init(); // call the onload handler
		}
	}, 10);
}

/* for other browsers */
window.onload = init;