function addEvent(elm, evType, fn, useCapture){
	if(elm.addEventListener){
		elm.addEventListener(evType, fn, useCapture);
		return true;
	}else if (elm.attachEvent){
		var r = elm.attachEvent('on' + evType, fn);
		return r;
	}else{
		elm['on' + evType] = fn;
	}
}

function popUpWin(url, name, type, strWidth, strHeight){		
	type = type.toLowerCase();
	
	if (type == "fullscreen"){
		strWidth = screen.availWidth;
		strHeight = screen.availHeight;
	}
	var tools="";
	if (type == "standard") tools = "resizable,toolbar=yes,location=yes,scrollbars=yes,menubar=yes,width="+strWidth+",height="+strHeight+",top=0,left=0";
	if (type == "console" || type == "fullscreen") tools = "resizable,toolbar=no,location=no,scrollbars=no,width="+strWidth+",height="+strHeight+",left=0,top=0";
	var newWindow = window.open(url, name, tools);
	newWindow.focus();
}

function doPopUp(e) {
	//set defaults - if nothing in rel attrib, these will be used
	var t = "standard";
	var w = "780";
	var h = "580";
	var n = "newWin";
	//look for parameters
	attribs = this.rel.split(" ");
	if (attribs[1]!=null) {t = attribs[1];}
	if (attribs[2]!=null) {w = attribs[2];}
	if (attribs[3]!=null) {h = attribs[3];}
	if (attribs[4]!=null) {n = attribs[4];}
	//call the popup script
	popUpWin(this.href,n,t,w,h);
	//cancel the default link action if pop-up activated
	if (window.event) {
		window.event.returnValue = false;
		window.event.cancelBubble = true;
	}  else if (e)  {
		e.stopPropagation();
		e.preventDefault();
	}
}

function findPopUps() {
	var popups = document.getElementsByTagName("a");
	for (i=0;i<popups.length;i++) {
		if (popups[i].rel && popups[i].rel.indexOf("popup")!=-1) {
			// attach popup behaviour
			popups[i].onclick = doPopUp;
			// add popup indicator
			if (popups[i].rel.indexOf("noicon")==-1) {
				popups[i].style.backgroundImage = "http://www.norrishighlands.com/images/icon.pop-up.gif";
				popups[i].style.backgroundPosition = "left center";
				popups[i].style.backgroundRepeat = "no-repeat";
				popups[i].style.paddingLeft = "15px";
			}
			// add info to title attribute to alert fact that it's a pop-up window
			popups[i].title = popups[i].title + " [Opens in pop-up window]";
		}
	}
}

function styleInputs() {
	var inputs = document.getElementsByTagName("input");
	if(inputs.length > 0) {
		for(var i=0; i<inputs.length; i++) {
			if(inputs[i].type && inputs[i].type=='text') {
				inputs[i].className = 'themed-form-element';
				inputs[i].onmouseover = function () {
					this.className = 'themed-form-element-hover';
				};
				inputs[i].onmouseout = function () {
					this.className = 'themed-form-element';
				};
			}
		}
	}
	var selects = document.getElementsByTagName("select");
	if(selects.length > 0) {
		for(var i=0; i<selects.length; i++) {
			selects[i].className = selects[i].className+' themed-form-element';
		}
	}
}

function activateHovers () {
	var divs = document.getElementsByTagName("div");
	if(divs.length > 0) {
		for(var i=0; i<divs.length; i++) {
			if(divs[i].className && divs[i].className=='article-headline') {
				divs[i].className = 'article-headline headline-mouseout';
				divs[i].onmouseover = function () {
					this.className = 'article-headline headline-mouseover';
				};
				divs[i].onmouseout = function () {
					this.className = 'article-headline headline-mouseout';
				};
			}
		}
	}
}
/**
 * MAKES USE OF THE FOLLOWING CSS:
 * .hidden {display:none;}
 * .shown {display:block;}
 *
 * MAKES USE OF THE FOLLOWING TAG SYNTAX
 * <select id="{form_id}-{name}-source" name="{name}-source[]" class="multi-select" multiple="multiple">
 *  <option class="default">{source_indicator}</option>
 *  <option value="{value}" class="shown">{description}</option>
 *  <option value="{value}" class="hidden">{description}</option>
 * </select>
 * <select id="{form_id}-{name}-destination" name="{name}-destination[]" class="multi-select" multiple="multiple">
 *  <option class="default">{destination_indicator}</option>
 *  <option value="{value}" class="shown">{description}</option>
 *  <option value="{value}" class="hidden">{description}</option>
 * </select>
 */

function makeMultiSelects () {
	var selects = document.getElementsByTagName('select'), num=selects.length, frm = null;

	if(num > 0) {
		for(var i=0; i<num; i++) {
			if(selects[i].className && selects[i].className=='multi-select' && selects[i].id && selects[i].id.length > 0) {
				var parts = selects[i].id.split('-');
				var src = selects[i];
				var dst = document.getElementById(parts[0]+'-'+parts[1]+'-destination');
				src.destination = dst;
				dst.source = src;
				var src_opts = src.getElementsByTagName('option'), src_opts_num=src_opts.length;
				var dst_opts = dst.getElementsByTagName('option'), dst_opts_num=dst_opts.length;
				for(var i=0; i<src_opts_num; i++) {
					if(dst_opts[i].className && dst_opts[i].className != 'default') {
						src_opts[i].parent = src;
						src_opts[i].position = i;
						src_opts[i].ondblclick = set_destination;
					}
				}
				for(var i=0; i<dst_opts_num; i++) {
					if(dst_opts[i].className && dst_opts[i].className != 'default') {
						dst_opts[i].parent = dst;
						dst_opts[i].position = i;
						dst_opts[i].ondblclick = set_source;
					}
				}
				if(frm && frm != null && frm.multiselects && frm.multiselects.length > 0) {
					frm.multiselects[frm.multiselects.length] = dst.id;
				} else {
					frm = document.getElementById(parts[0]);
					frm.multiselects = new Array();
					frm.multiselects[0] = dst.id;
				}
			}
		}
	}
}
function set_source () {
	this.className = 'hidden';
	this.parent.source.options[this.position].className = 'shown';
}
function set_destination () {
	this.className = 'hidden';
	this.parent.destination.options[this.position].className = 'shown';
}
function selectForSubmission (destination_multiselect_id) {
	var chosen = document.getElementById(destination_multiselect_id);
	if(chosen && chosen.options && chosen.options.length > 0) {
		var num = chosen.options.length;
		for(var i=0; i<num; i++) {
			if(chosen.options[i].className && chosen.options[i].className == 'shown') {
				chosen.options[i].selected = true;
			} else {
				chosen.options[i].selected = false;
			}
		}
	}
}

function enhance () {
	findPopUps();
	makeMultiSelects();
	styleInputs();
	activateHovers();
	try {
		if(launchValidators) {
			if(typeof(launchValidators) == 'function') {
				launchValidators();
			}
		}
	} catch (e) {
		//nothing here
	}
}

addEvent(window, 'load', enhance, false);