function createClient() {
 try {
  client = window.XMLHttpRequest ? new XMLHttpRequest() : 
       new ActiveXObject("Microsoft.XMLHTTP");
 } catch (e) { 
  alert("Sorry, your browser is not AJAX-enabled!"); 
 }
}


function genericUpdate(receiverid, script, query) {
 client.onreadystatechange = function() { callback_genericUpdate(receiverid); };
 client.open('GET',script+"?"+query,true); 
 client.send(null);
}
 
function callback_genericUpdate(receiverid)
{
 if (client.readyState == 4) 
 {
	if (client.status == 200) 
	{
		document.getElementById(receiverid).innerHTML = client.responseText;
  	} 
	else 
	{
                document.getElementById(receiverid).innerHTML = 'There was a problem with the request.';
        }
	createClient();
 }
}
 

var blank = 0;
// generic function to validate form fields
// type: 1 = string, 2 = int, 3 = select, 4 = email

function validateFormField (id1, type) {
	for (i=0; i<id1.length; i++)
	{
		if (type[i] == 1)
		{
			validateString(id1[i]);
		}
		if (type[i] == 2)
		{
			validateInt(id1[i]);
		}
		if (type[i] == 3)
		{
			validateSelect(id1[i]);
		}
		if (type[i] == 4)
		{
			validateEmail(id1[i]);
		}
                if (type[i] == 5)
		{
			validateCourse(id1[i]);
		}
		if (blank == 1)
		{
			blank = 0;
			return false;
		}
	}
			
}

function validateString(id1)
{
	if (document.getElementById(id1).value.trim() == "")
	{ 
		alert("The following field is required and has not been completed: " + id1);
		document.getElementById(id1).focus();
		blank = 1;
	}
}

function validateInt(id1)
{
	if (document.getElementById(id1).value.trim() == "" || isNaN(document.getElementById(id1).value)==true || Math.ceil(document.getElementById(id1).value)!=document.getElementById(id1).value)
	{
		alert("The following field must be an Integer : " + id1);
		document.getElementById(id1).focus();
		blank = 1;
	} 
}

function validateCourse(id1)
{
	if (document.getElementById(id1).value.trim() == "" || isNaN(document.getElementById(id1).value)==true || Math.ceil(document.getElementById(id1).value)!=document.getElementById(id1).value)
	{
		alert("The choose at least one Course and LMS");
		document.getElementById(id1).focus();
		blank = 1;
	} 
}

function validateSelect(id1)
{
	if ((document.getElementById(id1).value == 0) || (document.getElementById(id1).value == ""))
	{ 
		alert("The following field is required and has not been completed: " + id1);
		document.getElementById(id1).focus();
		blank = 1;
	}
}

function validateEmail(id1)
{
 regex = /^([^,></=\.\"\'?@]+(\.[^,></=\.\"\'?@]+)*)+@+([^,><\"\.']+\.)+[a-zA-Z]{2,5}$/;
 if(!document.getElementById(id1).value.match(regex)){
 	alert("Invalid email format");
 	blank = 1;
 }
}
String.prototype.trim = function ()
{
	return this.replace(/^\s+|\s+$/g, '') ;
}

function validateFieldSize (id2, size)
{
	for (i=0; i<id2.length; i++)
	{
		if (document.getElementById(id2[i]).value.length != size[i])
		{
			alert(id2[i]+" needs to be "+size[i]+" characters.");
			document.getElementById(id2[i]).focus();
			return false;
		}
	}
}

function validateRegisterForm(id1, type2, id2, size)
{
	if ((validateFormField (id1, type2) == false) || (validateFieldSize (id2, size) == false))
	{
		return false;
	}
}

function confirmSubmit(msg) {
	var agree=confirm(msg);
	if (agree)
		return true ;
	else
		return false ;
}


function autoTab (object1, length1, object2)
{
	if (document.getElementById(object1).value.length == length1)
	{
		document.getElementById(object2).focus();
	}
}

var rowIndexLookup = new Array();

function addCourse(value)
{
	if (document.getElementById('course').value != 0 && document.getElementById('lms').value != 0)
	{
                        myTable = document.getElementById('coursetable');
			nRow = myTable.insertRow(-1);
                        cell0 = nRow.insertCell(0);
			cell0.innerHTML = '<td><input type="hidden" name="queueCourse[]" value="'+value+'"> '+value+'   [<a href="javascript:deleteRow('+rowIndexLookup.length+');">remove</a>]</td>';
			rowIndexLookup[rowIndexLookup.length] = nRow.rowIndex;
                        setqueuetest();
	}
}
function deleteRow(rIndex)
{
	myTable = document.getElementById('coursetable');
	var i = 0;
	var rowIndex = rowIndexLookup[rIndex];
	for(i = rIndex; i < rowIndexLookup.length; i++)
	{
		rowIndexLookup[i]--;
	}
	return myTable.deleteRow(rowIndex)
	// > fix up colouring
}

function checkqueuetest()
{
       if (document.getElementById('role').value == 3)
       {
              document.getElementById('queuetest').value = '';
       }
}

function setqueuetest()
{
       document.getElementById('queuetest').value = 1;
}
