/*

test if string is empty

*/

function isEmpty(inputStr) {

	if (inputStr == null || inputStr == "") {

		return true;

	}

	return false;

}



/*

test if variable is a positive integer

*/

function isPosInteger(inputVal) {

	var inputStr = inputVal.toString();

	for (var i=0; i <inputStr.length; i++) {

		var karakter = inputStr.charAt(i);

		if (karakter<"0" || karakter>"9") {

			return false;

		}

	}

	return true;

}



/*

test if variable is an integer

*/

function isInteger(inputVal) {

	var inputStr = inputVal.toString();

	for (var i=0; i<inputStr.length; i++) {

		var karakter = inputStr.charAt(i);

		if (i==0 && karakter=="-") {

			continue;

		}

		if (karakter < "0" || karakter > "9") {

			return false;

		}

	}

	return true;

}



/*

test if variable is a number

*/

function isNumber(inputVal) {

	var punt = false;

	var inputStr = inputVal.toString();

	for (var i=0; i <inputStr.length; i++) {

		var karakter = inputStr.charAt(i);

		if (i==0 && karakter == "-") {

			continue;

		}

		if (karakter=="." && !punt) {

			punt = true;

			continue;

		}

		if (karakter<"0" || karakter>"9") {

			return false;

		}

	}

	return true;

}



/*

test if a variable is an email address

*/

function isEmail(str) {

  // are regular expressions supported?

  var supported = false;

  if (window.RegExp) {

    var tempStr = "a";

    var tempReg = new RegExp(tempStr);

    if (tempReg.test(tempStr)) supported = true;

  }

  if (!supported) 

    return (str.indexOf(".") > 2) && (str.indexOf("@") > 0);

  var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");

  var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");

  return (!r1.test(str) && r2.test(str));

}



function hasExtension(str, extensions){

	while(str.indexOf("\\") != -1){

		str = str.slice(str.indexOf("\\") + 1);

	}

	var extension = str.slice(str.indexOf(".")).toLowerCase();

	for(var i = 0; i < extensions.length; i++){

		if(extensions[i] == extension){

			return true; 

		}

	}

	return false;

}



/*

selects a field

must be called using setTimeOut() (IE bug)

ex: setTimeout("doSelect(document.forms['" + fld.form.name + "'].elements['" + fld.name + "'])", 0);

*/

function doSelect(veld) {

	if(veld.type=="text" || veld.type=="textarea"){

		veld.focus();

		veld.select();

	}

}



/*

allows only numerical input in a field

connect to onkeypress event handler of field

example: onkeypress="return numbersOnly(event)"

*/

function numbersOnly(evt, pointIsAllowed) {

	evt = (evt) ? evt : window.event;

	var charCode = (evt.charCode) ? evt.charCode : ((evt.which) ? evt.which : evt.keyCode);

	if(pointIsAllowed && charCode == 46){

		return true;

	}

	if (charCode > 31 && (charCode < 48 || charCode > 57)) {

		return false;

	}

	return true;

}



/*

test if a string is a date in the format DD/MM/YYYY

*/

function isDateDDMMYYYY(date){

	if(isEmpty(date)){

		return false;

	}

	var datePieces = date.split('/');

	if(datePieces.length!=3){ return false; }

	for(var i=0; i<datePieces.length; i++){

		if(!isPosInteger(datePieces[i])){

			return false;

		}

	}

	var tempDate = new Date(datePieces[2], datePieces[1]-1, datePieces[0]);

	var datesAreSame = (datePieces[0] == tempDate.getDate()) && (datePieces[1] == tempDate.getMonth()+1) && (datePieces[2] == tempDate.getFullYear()) ;

	return datesAreSame;

}



/*

test if a string is a date in the format HH:MM

*/

function isTimeHHMM(time){

	if(isEmpty(time)){

		return false;

	}

	var timePieces = time.split(':');

	if(timePieces.length!=2){ return false;	}

	for(var i=0; i<timePieces.length; i++){

		if(!isPosInteger(timePieces[i])){

			return false;

		}

	}

	var tempDate = new Date();

	tempDate.setHours(timePieces[0]);

	tempDate.setMinutes(timePieces[1]);

	var timesAreSame = (timePieces[0] == tempDate.getHours()) && (timePieces[1] == tempDate.getMinutes()) ;

	return timesAreSame;

}



/*

requires selecting an option from a radio button group

*/

function radioGroupHasSelection(radioGroup) {

	for (var i = radioGroup.length-1; i > -1; i--) {

		if (radioGroup[i].checked) {

			return true;

		}

	}

	return false;

}
