var oldonload = window.onload;
window.onload = function() {
	if( oldonload ) oldonload;

	// Change all popup links to launch popups
	var popuplinks = getElementsByClassName( 'popup', 'a' );
	for( var i = 0; i < popuplinks.length; ++i ) {
		popuplinks[i].onclick = function() {
			window.open( this.href, 'popupwindow', 'width=750,height=370,status=0,toolbar=0,menubar=0,directories=0,resizable=0,scrollbars=1' );
			return false;
		}
	}

	// Add validation to forms
	var forms = document.getElementsByTagName( 'form' );
	for( var i = 0; i < forms.length; ++i ) {
		forms[i].onsubmit = validate;
	}

	// Change links in popups to load in new window
	if( document.getElementsByTagName( 'body' ).item(0).className.match( /\bpopup\b/ ) == 'popup' ) {
		var links = document.getElementsByTagName( 'a' );
		for( var i = 0; i < links.length; ++i ) {
			links[i].onclick = function() {
				var newwindow = window.open( this.href, 'newwindow', 'location=1,status=1,toolbar=1,menubar=1,directories=1,resizable=1,scrollbars=1' );
				return false;
			}
		}
	}

	// Change all links to external sites to launch in new window
	var links = document.getElementsByTagName( 'a' );
	for( var i = 0; i < links.length; ++i ) {
		if( links[i].className.match( /\bexternal\b/ ) != null ) {
			links[i].onclick = function() {
				var newwindow = window.open( this.href, 'newwindow', 'location=1,status=1,toolbar=1,menubar=1,directories=1,resizable=1,scrollbars=1' );
				return false;
			}
		}
	}

	// Change close links to close
	var closelinks = getElementsByClassName( 'close', 'a' );
	for( var i = 0; i < closelinks.length; ++i ) {
		closelinks[i].onclick = function() {
			window.close();
			return false;
		}
	}

}

function extractCommonId(fullId) {
	var commonId = null;
	var idx = fullId.indexOf('_');
	if (idx != -1)  // must follow naming convention: <common name>_<option name>
	{
		return fullId.substr(0, idx);
	}
	else
	{
		return null;
	}
}

function checkRadioSelected(targetId) {
	var targetFound = false;
	var fields = document.getElementsByTagName( 'input' );
	for( var i = 0; i < fields.length; ++i ) {
		var field = fields[i];
		if( field.id.substr(0, targetId.length+1) == targetId + '_' ) {
			targetFound = true;
			if (field.checked)
			{
				return true;
			}
		}
	}
	return !targetFound;
}

function getPrompt(targetId) {
	var oPrompt = document.getElementById( 'prompt_' + targetId);
	if (oPrompt)
	{
		return oPrompt.innerHTML;
	}
	else
		return '<span id="prompt_' + targetId + '"> not found.';
}

function validate() {
	var radios = new Array();
	var fields = this.getElementsByTagName( 'input' );
	for( var i = 0; i < fields.length; ++i ) {
		var field = fields[i];
		if( field.className.indexOf( 'validate' ) != -1 ) {
			switch( field.type ) {

				case 'checkbox':
					if( field.className.indexOf( 'validateChecked' ) != -1 && field.checked == false ) {
						alert( 'You must tick the box for "' + field.title + '"' );
						if( field.focus ) field.focus();
						return false;
					}
					if( field.className.indexOf( 'validateChecked' ) == -1 && field.checked == true ) {
						alert( 'You must untick the box for "' + field.title + '"' );
						if( field.focus ) field.focus();
						return false;
					}
					break;

				case 'text':
					if( field.className.indexOf( 'validateNotEmpty' ) != -1 && field.value == '' ) {
						alert( 'You must complete the "' + field.title + '" form field' );
						if( field.focus ) field.focus();
						return false;
					}
					if( field.className.indexOf( 'validateEmail' ) != -1 ) {
						var reg = new RegExp( '^[a-zA-Z0-9][a-zA-Z0-9\\.\\-+]*@[a-zA-Z0-9][a-zA-Z0-9\\.\\-+]*$' );
						if( !reg.test( field.value ) ) {
							alert( 'You must provide a valid email address in the "' + field.title + '" form field' );
							if( field.focus ) field.focus();
							return false;
						}
					}
					break;

				case 'radio':
					if( field.className.indexOf( 'validateSelect' ) != -1) {
						var commonId = extractCommonId(field.id);
						if (commonId != null)
						{
							if (!radios[commonId])  // not processed yet
							{
								radios[commonId] = checkRadioSelected(commonId);
								if (!radios[commonId]) 
								{
									alert(getPrompt(commonId) + '\nPlease select an option.');
									if( field.focus ) field.focus();
									return false;
								}
							}
						}
					}
					break;
			}
		}
	}
}



function getElementsByClassName(className, tag, elm){
	var testClass = new RegExp("(^|\\\\s)" + className + "(\\\\s|$)");
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;
	for(var i=0; i<length; i++){
		current = elements[i];
		if(testClass.test(current.className)){
			returnElements.push(current);
		}
	}
	return returnElements;
}
