var Util = new Object();

Util.Menu = new function() {

	this.over = function(element) {
		if(!element.initiated){
			element.onmouseout = function() {
				Util.Menu.out(this);
			}
			element.initiated = true;
		}
		element.firstChild.src = element.firstChild.src.replace(/.png/g, "_sel.png");
	}
	this.out = function(element) {
		element.firstChild.src = element.firstChild.src.replace(/_sel/g, "");
	}

}
Util.writer = function(string) {
	document.write(string);
}

Util.flash = function(url, width, height, background, name, id, flashvars) {
	var string = '';
	background = background ? background : "#000000";
	name = name ? name : "flash_" + new Date().getHours() + "_" + new Date().getMinutes() + "_" + new Date().getMilliseconds();
	id = id ? id : name;

	if(Util.explorer()) {
		string += '<object id="'+name+'" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="'+width+'" height="'+height+'" name="'+name+'" align="middle">';
		string += '<param name="allowScriptAccess" value="always" />';
		string += '<param name="movie" value="'+url+'" />';
		string += '<param name="quality" value="high" />';
		string += '<param name="bgcolor" value="'+background+'" />';
		string += '<param name="wmode" value="transparent" />';
		string += '<param name="menu" value="false" />';
		string += '<param name="scale" value="noscale" />';
		string += '<param name="type" value="application/x-shockwave-flash" />';
		if(flashvars) {
			string += '<param name="FlashVars" value="varpath='+flashvars+'" />'
		}
		string += '</object>';
	}
	else {
		string += '<embed id="'+name+'" src="'+url+'"';
		string += ' menu="false"';
		string += ' scale="noscale"';
		string += ' quality="high"';
		string += ' bgcolor="'+background+'"';
		string += ' wmode="transparent"';
		string += ' width="'+width+'"';
		string += ' height="'+height+'"';
		string += ' name="'+name+'"';
		string += ' align="middle"';
		string += ' autoPlay="true"';
		string += ' allowScriptAccess="always"';
		if(flashvars) {
			string += ' FlashVars="varpath='+flashvars+'"'
		}
		string += ' type="application/x-shockwave-flash"';
		string += ' pluginspage="http://www.adobe.com/go/getflashplayer" />';
	}
	return string;
}

// Compiles mailto link based on name and domain
Util.otliam = function(name, domain){
	document.write('<a onclick="Util.otliamNoise(\''+name+'\', \''+domain+'\')" style="cursor:pointer;">'+name+"<span>@</span>"+domain+'</a>');
}
Util.otliamNoise = function(name, domain){
	location.href = "mailto:"+name+"@"+domain;
}


Util.quicktime = function(url, width, height, name, id) {
	var string;
	name = name ? name : "quicktime_" + new Date().getHours() + "_" + new Date().getMinutes() + "_" + new Date().getMilliseconds();
	id = id ? id : name;

	string = '<div class="object">';
	if(Util.explorer()) {
		string += '<object width="'+width+'" height="'+height+'" classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab">';
		string += '<param name="src" value="'+url+'" />';
		string += '<param name="type" value="video/quicktime">';
		string += '<param name="controller" value="true" />';
		string += '<param name="autoplay" value="true" />';
		string += '<param name="scale" value="tofit" />';
		string += '</object>';
	}
	else {
		string += '<embed src="'+url+'" width="'+width+'" height="'+height+'" type="video/quicktime" controller="true" autoplay="true" scale="tofit" cache="true" pluginspage="http://www.apple.com/quicktime/download/" />';
	}
	string += '</div>';

	return string;
}

// Browser definition utilities
Util.explorer = function() {
	return (document.all) ? true : false;
}
Util.safari = function() {
	return (navigator.appVersion.indexOf("Safari") >= 0) ? true : false;
}
Util.firefox = function() {
	return (navigator.userAgent.indexOf("Firefox") >= 0) ? true : false;
}
Util.opera = function() {
	return (navigator.userAgent.indexOf("Opera") >= 0) ? true : false;
}
// kills click (to prevent click from invoking other events)
Util.nonClick = function(event) {
	event = event ? event : window.event;
	if(event.preventDefault) {event.preventDefault();}
	if(event.stopPropagation) {event.stopPropagation();}
	event.returnValue = false;
	event.cancelBubble = true;
}

// X-Browser add/remove event handlers
Util.addEventHandler = function(element, type, action) {
	if(Util.explorer()) {
		element.attachEvent("on" + type, action);
	}
	else {
		element.addEventListener(type, action, false);
	}
}
Util.removeEventHandler = function(element, type, action) {
	if(Util.explorer()) {
		element.detachEvent("on" + type, action);
	}
	else {
		element.removeEventListener(type, action, false);
	}
}

Util.Onload = new function() {

	// actions to be preformed on onload
	this.actions = new Array();

	// forwarding function (onload event happens on window object)
	this.onloadCatcher = function(event) {
		Util.Onload.execute(event);
	}

	// add new funtion to onload 
	this.addAction = function(action) {

		// start catching event
		if(!this.actions.length) {
			Util.addEventHandler(window, "load", this.onloadCatcher);
		}
		// add action
		this.actions[this.actions.length] = action;
	}

	// execute added function on onload
	this.execute = function() {
		var i, action;

		// functions kept in actions array
		for(i = 0; action = this.actions[i]; i++) {

			// decide type and execute accordingly
			if(typeof(action) == "function") {
				action();
			}
			else {
				eval(action);
			}
		}
	}
}

// Get elements in optional content with classname (default content is content)
Util.getElementsByClassName = function(classname, content) {
	var element, i, elements, regexp, return_array;
	return_array = new Array();
	elements = content ? (typeof(content) == "string" ? document.getElementById(content).getElementsByTagName("*") : content.getElementsByTagName("*")) : document.getElementById("content").getElementsByTagName("*");
	// IE < 6 needs a bit of help getting elements
	elements = elements.length ? elements : (Util.explorer() ? document.all : elements);
	regexp = new RegExp("(^|\\s)" + classname + "(\\s|$|\:)");
	for(i = 0; element = elements[i]; i++) {
		if(regexp.test(element.className)) {
			return_array[return_array.length] = element;
		}
	}
	return return_array;
}
// Check for type definition of element. Defined by identifier:type
Util.getTypeDefinitionByClassName = function(identifier, element) {
	var regexp = new RegExp(identifier+":[?=\\w/\\#~:.?+=?&%@!\\-]*");
	if(element.className.match(regexp)) {
		return element.className.match(regexp)[0].replace(identifier+":", "");
	}
	return false;
}

Util.initVideo = function(element) {

	var details = this.getTypeDefinitionByClassName("quicktime", element).split(":");
	element.innerHTML = Util.quicktime(details[0], details[1], details[2]);
	element.onclick = null;

}