var dom_timer;
/*var ammap;*/

/**
 * addEventListener
 * cross browser event listener.
 */
function addEventListener(el, et, h, c) {
	if (el.addEventListener) {
		el.addEventListener(et, h, c);
	}
	else if (el.attachEvent) {
		el['on' + et] = h;
	}
}

/**
 * removeEventListener
 * cross browser event listener removal.
 */
function removeEventListener(el, et, c) {
	if (el.addEventListener) {
		el.removeEventListener(et, arguments.callee, c);
	}
	else if (el.attachEvent) {
		el['on' + et] = function() {};
	}
}

/**
 * getElementsByClass
 * gets elements by their class name.
 */
function getElementsByClass(needle, area) {
	area = area || document;
	var my_array = area.getElementsByTagName('*');
	var retvalue = [];
	var j = 0;

	for (var i = 0; i < my_array.length; i++) {
		var c = ' ' + my_array[i].className + ' ';
		if (c.indexOf(' ' + needle + ' ') !== -1) {
			retvalue[j++] = my_array[i];
		}
	}
	
	return retvalue;
}

/**
 * hasClass
 * check if an element has a specified class.
 */
function hasClass(el, str) {
	var rx = new RegExp('(^|\\s)' + str + '(\\s|$)');
	return (el.className && el.className.match(rx));
}

/**
 * getEmptyFields
 * returns details on empty fields on a form.
 */
function getEmptyFields(frm) {
	var fields = getElementsByClass('mandatory', frm);
	var mandatory_txt;
				
	if (fields.length > 0) {
		mandatory_txt = ' mandatory';
	} else {
		fields = frm.getElementsByTagName('*');
		mandatory_txt = '';
	}
	
	var empty = 0;
	
	for (var f = 0; f < fields.length; f++) {
		if (fields[f].value === '' && fields[f].nodeName !== 'LI') {
			if ( (mandatory_txt !== '' && hasClass(fields[f], 'mandatory')) || (mandatory_txt === '' && !hasClass(fields[f], 'mandatory')) ) {
				empty++;
			}
		}
	}
	
	return {'count':empty, 'mandatory_txt':mandatory_txt};
}

/**
 * checkFormFields
 * quick client-side validation to check that no fields on a form are left empty.
 */

function checkFormFields(byClass, area) {
	area = area || 'core';
	var forms = getElementsByClass(byClass, document.getElementById(area));
	
	if (forms.length > 0) {
		for (var i = 0; i < forms.length; i++) {
			addEventListener(forms[i], 'submit', function(e) {
				e = (e) ? e : window.event;
				
				var empty = getEmptyFields(this);
				
				if (empty.count>0) {
					alert('Please fill out all' + empty.mandatory_txt + ' fields on the form.');
					
					if (e.stopPropagation) {
						e.stopPropagation();
					}
					
					if (e.preventDefault) {
						e.preventDefault();
					} else {
						e.returnValue = false;
					}
				}
			}, false);
		}
	}
}

/**
 * init()
 * initialise JS when DOM loaded (quicker than window.onload for Moz/Webkit/IE/Opera9+)
 * ref: http://dean.edwards.name/weblog/2006/06/again/#comment5338
 **/

function init() {
	if (arguments.callee.done) {
		return;
	}
	
	arguments.callee.done = true;
	
	if (dom_timer) {
		clearInterval(dom_timer);
	}
	
	checkFormFields('box');
	
	// submit news selection onchange
	/*var news_select = document.getElementById('news-select');
	if (news_select) {
		addEventListener(news_select, 'change', function(e) {
			e = (e) ? e : window.event;
			
			document.getElementById('form-news-select').submit();
			
		}, false);
	}*/
	
	/*
	// add ammap to page using SWFObject.
	if (document.getElementById('ammap')) {
		ammap = new SWFObject("/swf/ammap/ammap.swf", "flash_ammap", "722", "482", "8", "#ffffff");
		ammap.addParam("wmode", "transparent");
		ammap.addVariable("path", "/swf/ammap/");
		ammap.addVariable("settings_file", escape("/xml/ammap_settings.xml"));
		ammap.addVariable("data_file", escape("/xml/ammap_data.xml"));
		ammap.write('ammap');
	}
	*/
	
	/*
	if (typeof sIFR == "function") {
		sIFR.replaceElement(
			".box legend span",
			named({
				sFlashSrc: '/swf/cocon.swf',
				sColor: '#223344',
				sWmode: 'transparent'
			})
		);
		
		sIFR.replaceElement(
			".box h2,.box h3,.box h4,.box h5,.box h6",
			named({
				sFlashSrc: '/swf/cocon.swf',
				sColor: '#223344',
				sWmode: 'transparent'
			})
		);
	}
	*/
}

if (document.addEventListener) {
	document.addEventListener("DOMContentLoaded", init, false);
}

/*@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();
		}
	};
/*@end @*/

if (/WebKit/i.test(navigator.userAgent)) {
	dom_timer = setInterval(function() {
		if (/loaded|complete/.test(document.readyState)) {
			init();
		}
	}, 10);
}

window.onload = init;