var modules = new Array();
var animationLength = 300;
var expandoffset = 0;
var collapseoffset = 0;

//addEvent - attach a function to an event
function addEvent(obj, evType, fn){ 
 if (obj.addEventListener){ 
   obj.addEventListener(evType, fn, false); 
   return true; 
 } else if (obj.attachEvent){ 
   var r = obj.attachEvent("on"+evType, fn); 
   return r; 
 } else { 
   return false; 
 } 
}

//Attach to onload event
addEvent(window, 'load', initColumn);

function utf16to8(str) {
    var out, i, len, c;

    out = "";
    len = str.length;
    for(i = 0; i < len; i++) {
c = str.charCodeAt(i);
if ((c >= 0x0001) && (c <= 0x007F)) {
    out += str.charAt(i);
} else if (c > 0x07FF) {
    out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
    out += String.fromCharCode(0x80 | ((c >>  6) & 0x3F));
    out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));
} else {
    out += String.fromCharCode(0xC0 | ((c >>  6) & 0x1F));
    out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));
}
    }
    return out;
}

function initColumn() {
	hidemodule = document.getElementById("ja-collapsedmodules");
	if (hidemodule) {
		p = hidemodule.parentNode;
		while (p.parentNode && p.className.indexOf("module") == -1) p = p.parentNode;
		if (p.style) p.style.display = "none";
		else hidemodule.style.display = "none";
	}

	allmodules = document.getElementsByTagName("h3");
	hc = getHiddenColumn();
	count = 0;
	for (i = 0; i < allmodules.length; ++i) {
		nc = allmodules[i].firstChild;
		while (nc.nodeType != 3) nc = nc.firstChild;
		
		code = hex_md5(utf16to8(nc.nodeValue.trim())).substr(0,5);
		if (modulestring.indexOf(code) != -1) {
			modules[count] = allmodules[i];
			modules[count].fxid = count;
			modules[count].code = code;
			p = modules[count].parentNode;
			while (p.parentNode && p.tagName.toUpperCase() != 'DIV') p = p.parentNode;
			p.h3 = modules[count];
			modules[count].effects = new fxExtra.HeightExtra( p, { duration: animationLength, transition: fxExtra.circ } );
			if (hc.indexOf(modules[count].code) != -1 || (hc == "" && hideOnFirstLoad)) {
				modules[count].hide = true;
				modules[count].className = "collapse";
				modules[count].effects.custom(p.scrollHeight, modules[count].offsetHeight + collapseoffset);
			} else {
				modules[count].hide = false;
				modules[count].className = "expand";
				modules[count].effects.custom(p.scrollHeight, p.offsetHeight + expandoffset);
			}
			modules[count].style.cursor = "pointer";
			
			modules[count].onclick = function() {
				this.effects.toggle();
			}
			
			count++;

		}
	}

}

function refreshColumn() {
	//alert(modules[0].effects.el.scrollHeight);
	for (i=0; i<modules.length; ++i) {
		if (modules[i].hide) modules[i].effects.el.style.height = modules[i].offsetHeight + collapseoffset + "px";
		else {
			modules[i].effects.el.style.height = "0px";
			modules[i].effects.el.style.height = modules[i].effects.el.scrollHeight + expandoffset + "px";
		}
	}
}

String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ""); };

function getcookie(name) {
	var start = document.cookie.indexOf(name+"=");
	var len = start+name.length+1;
	if ((!start) && (name != document.cookie.substring(0,name.length))) return null;
	if (start == -1) return null;
	var end = document.cookie.indexOf(";",len);
	if (end == -1) end = document.cookie.length;
	return unescape(document.cookie.substring(len,end));
}

function setcookie(name,value,expires,path,domain,secure) {
	var date = new Date();
	if (expires) {
		date.setTime(date.getTime() + expires*24*60*60*1000)
		expires = date;
	}
	var cookieString = name + "=" +escape(value) +
		( (expires) ? ";expires=" + expires.toGMTString() : "") +
		( (path) ? ";path=" + path : "") +
		( (domain) ? ";domain=" + domain : "") +
		( (secure) ? ";secure" : "");
	document.cookie = cookieString;
}

function getHiddenColumn() {
	hc = getcookie("ja-hiddencolumn");
	return (hc) ? hc : "";
}

function saveHiddenColumn() {
	c = getHiddenColumn();
	if (c == "$") c = "";
	for (i=0; i < modules.length; ++i) {
		if (modules[i].hide) {
			if (c.indexOf(modules[i].code) == -1) c += modules[i].code + " ";
		} else {
			if (c.indexOf(modules[i].code) != -1) c = c.replace(modules[i].code + " ", "");
		}
	}
	if (c == "") c = "$";
	setcookie("ja-hiddencolumn", c, 365, "/");
}

addEvent( window, 'unload', saveHiddenColumn );

function expandAll() {
	for (i=0; i<modules.length; ++i) {
		if (modules[i].hide) {
			modules[i].effects.toggle();
		}
	}
}

function collapseAll() {
	for (i=0; i<modules.length; ++i) {
		if (!modules[i].hide) {
			modules[i].effects.toggle();
		}
	}
}
