function isWhitespace(charToCheck) {
	var whitespaceChars = " \t\n\r\f";
	return (whitespaceChars.indexOf(charToCheck) != -1);
}

function trim(fld) {
	var str = fld.value;
	for(var k = 0; k < str.length && isWhitespace(str.charAt(k)); k++);
	str = str.substring(k, str.length);
	for(var j=str.length-1; j>=0 && isWhitespace(str.charAt(j)) ; j--);
	str = str.substring(0,j+1);
	fld.value = str;
}

function removeSpaces(fld) {
	var str = fld.value;
	var tstr = "";
	str = '' + str;
	splitstr = str.split(" ");
	for(i = 0; i < splitstr.length; i++)
	tstr += splitstr[i];
	fld.value = tstr;
}

function validateForm(id) {
	var frm = document.getElementById(id);
	var fld = frm.elements;
	var pass = true;
	var error_msg = '';
	
	for (var i = 0; i < fld.length; i++) {
		var t = (fld[i].title != '') ? fld[i].title : fld[i].name;
	
		switch (fld[i].alt) {
		case 'mandatory-text':
			trim(fld[i]);
			if (fld[i].value == '') pass = false;
			error_msg = t + ' must not be blank.';
			break;
			
		case 'mandatory-integer':
			trim(fld[i]);
			var regExNum = /^[0-9]+$/;
			if (fld[i].value == '' || !regExNum.test(fld[i].value)) pass = false;
			error_msg = t + ' must contain a numeric value [0-9].';
			break;
			
		case 'mandatory-decimal':
			trim(fld[i]);
			var regExDec = /^[\d]+\.*[\d]*$/;
			if (fld[i].value == '' || !regExDec.test(fld[i].value)) pass = false;
			error_msg = t + ' must contain a decimal value e.g. 10.23.';
			break;
			
		case 'mandatory-username':
			trim(fld[i]);
			var regExName = /^\w+$/;
			if (fld[i].value == '' || fld[i].value.length < 3 || !regExName.test(fld[i].value)) pass = false;
			error_msg = t + ' must contain at least 3 alphanumeric characters, without spaces or special characters.';
			break;
			
		case 'mandatory-email':
			trim(fld[i]);
			var regExEmail = /^[\w\+\\'\.-]+@[\w\\'\.-]+\.[a-zA-z]{2,}$/;
			if (fld[i].value == '' || !regExEmail.test(fld[i].value)) pass = false;
			error_msg = t + ' must contain @ and a valid domain suffix e.g. name@domain.com.';
			break;
			
		case 'mandatory-time':
			removeSpaces(fld[i]);
			var regExEmail = /^(\d|1[0-2]):[0-5]\d[ap]m$/;
			if (fld[i].value == '' || !regExEmail.test(fld[i].value.toLowerCase())) pass = false;
			error_msg = t + ' must be a valid time format e.g. 9:30am.';
			break;
			
		case 'mandatory-checkbox':
			var input_arr = document.getElementById(id).elements;
			var c = 0;
			for (var j = 0; j < input_arr.length; j++) {
				if (input_arr[j].className == fld[i].className && input_arr[j].checked == true) c++;
			}
			if (c == 0) pass = false;
			error_msg = t + ' must have at least one option checked.';
			break;
			
		case 'mandatory-radio':
			var input_arr = document.getElementById(id).elements;
			var c = 0;
			for (var j = 0; j < input_arr.length; j++) {
				if (input_arr[j].name == fld[i].name && input_arr[j].checked == true) c++;
			}
			if (c == 0) pass = false;
			error_msg = t + ' must have one option checked.';
			break;
			
		default:
			if (fld[i].id.substring(0,9) == 'mandatory') {
				if (fld[i].options[fld[i].selectedIndex].value == '') pass = false;
				error_msg = t + ' must have one option selected.';
			}
		}
		
		if (fld[i].type != 'submit' && fld[i].type != 'reset' && fld[i].type != 'button') {
			fld[i].className = '';
		}
					
		if (!pass) {
			alert(error_msg);
			fld[i].className = 'validation-failed';
			fld[i].focus();
			return false;
		}	
	}
	
	return true;
}

function clickRow() {
	if (document.getElementById) {
		var tables = document.getElementsByTagName('table');
		
		for (var i = 0; i < tables.length; i++) {
			if (tables[i].id == 'datatable' && tables[i].className != 'no_follow') {
				var trs = tables[i].getElementsByTagName('tr');
				
				for(var j = 0; j < trs.length; j++) {
					trs[j].onclick = function() {
						var tra = this.getElementsByTagName('a');
						if (tra.length > 0) location.href = tra[0].href;
					}
				}
			}
		}
	}
}

function confirmDelete() {
	var t = prompt('Are you sure you want to DELETE this? Type "yes" to confirm.','');
	if (t == null || t.toLowerCase() != 'yes') return false;
	return true;
}

function confirmClose() {
	var t = prompt('CLOSE this thread? Type "yes" to confirm.','');
	if (t == null || t.toLowerCase() != 'yes') return false;
	return true;
}

function confirmReopen() {
	var t = prompt('RE-OPEN this thread? Type "yes" to confirm.','');
	if (t == null || t.toLowerCase() != 'yes') return false;
	return true;
}

function confirmAction(p) {
	var t = prompt('Are you sure you want to ' + p + ' the selected items? Type "yes" to confirm.','');
	if (t == null || t.toLowerCase() != 'yes') return false;
	return true;
}

function confirmDeactive() {
	var t = prompt('Are you sure you want to DEACTIVATE this user? Type "yes" to confirm.','');
	if (t == null || t.toLowerCase() != 'yes') return false;
	return true;
}

function selectAllItems() {
	var elem = document.getElementsByTagName("input");
	var k = 1;
	for (var i=0; i<elem.length; i++) {
		if (elem[i].className=="CheckDocID") {
			document.forms["selection_form"]["CheckDocID"+k].checked = document.forms["selection_form"]["CheckAll"].checked;
			k++;
		}
	}
}

/** Post Link box: URL validator function **/
var urlRegex = new Object() ;
urlRegex.urlProtocol = /^(\w+):\/\/(?=.)/gi ;
function validateURL(protocol, url)
{
	var strURL = document.getElementById(url).value ;
	var strProtocol = urlRegex.urlProtocol.exec( strURL ) ;

	if ( strProtocol ) {
		strURL = strURL.substr( strProtocol[0].length ) ;
		document.getElementById(url).value = strURL ;
		document.getElementById(protocol).value = strProtocol[0].toLowerCase() ;
	}
}
