//Global vairables
//variable to store first time helper message is displayed
var firsttime = true;

function init() {
	//get the elements for the 3 input boxes 
	var formerstaff = document.getElementById("formerstaff");
	var currentstaff = document.getElementById("currentstaff");
	var formerstudent = document.getElementById("formerstudent");
	var currentstudent = document.getElementById("currentstudent");
	
	//create an array of the elements for event listener
	var elements = [formerstaff, currentstaff, formerstudent, currentstudent];

	//hide them by javascript when the page initially loads:
	for(var k=0; k<elements.length; k++)
	{
		hideInputBox(elements[k]);
	}
	
	//add click listener for check boxes
	YAHOO.util.Event.addListener(elements, "click", userListener);
	
	//add form listener
	YAHOO.util.Event.addListener("alumniregistrationform", "submit", formListner);
	
	//add click listener for copy name link
	YAHOO.util.Event.addListener("copyname", "click", copyName);
	
	//add click listener for add row link
	YAHOO.util.Event.addListener("addrow", "click", addRow);
	
	//add click listener for remove row link
	YAHOO.util.Event.addListener("removerow", "click", removeRow);
	
	//run titleAuto function when page has loaded
	titleAuto();
	
	//run countryAuto function when page has loaded
	countryAuto();
	
	//unhide addrow link	
	YAHOO.util.Dom.removeClass("addrow", 'hiddendisplay');
}
//end init

	//function for check box listener
	function userListener(event) {	
		hideInputBox(this);
	}
	
	//function to hide check boxes
	function hideInputBox(elementName)
	{
		//get the span name for the input box to unhide
		var surroundSpan = elementName.id + "span";
		var formerstudent = document.getElementById("formerstudent");
		var currentstudent = document.getElementById("currentstudent");

		if(elementName.checked)
		{
			YAHOO.util.Dom.removeClass(surroundSpan, 'hiddendisplay');
			var fadein = new YAHOO.widget.Effects.Appear(surroundSpan,{seconds:1.5} );
			fadein.animate();
		}
		else
		{
			YAHOO.util.Dom.addClass(surroundSpan, 'hiddendisplay');
		}
		//hide student name box
		if((currentstudent.checked || formerstudent.checked))
		{
			YAHOO.util.Dom.removeClass('studentnamebox', 'hiddendisplay');
			YAHOO.util.Dom.removeClass('degreetablehide', 'hiddendisplay');
			var fadein2 = new YAHOO.widget.Effects.Appear('studentnamebox',{seconds:2} );
			var fadein3 = new YAHOO.widget.Effects.Appear('degreetablehide',{seconds:2} );
			fadein2.animate();
			fadein3.animate();
		}
		else
		{
			YAHOO.util.Dom.addClass('studentnamebox', 'hiddendisplay');
			YAHOO.util.Dom.addClass('degreetablehide', 'hiddendisplay');
		}
	}
	
	
//function to create title autocomplete field
function titleAuto() { 
	var titleArray = ["Associate Professor","Dr", "Miss" ,"Mr","Ms", "Mrs" ,"Professor",];
	var titleDataSource = new YAHOO.widget.DS_JSArray(titleArray);
	var titleAutoComp = new YAHOO.widget.AutoComplete("titles","titleContainer", titleDataSource);
	titleAutoComp.minQueryLength = 0;
	titleAutoComp.textboxFocusEvent.subscribe(function(){ 
		var sInputValue = YAHOO.util.Dom.get('titles').value; 
		if(sInputValue.length === 0) { 
		var oSelf = this; 
		setTimeout(function(){oSelf.sendQuery(sInputValue);},0); 
		} 
	}); 
}

//function to create country autocomplete field
function countryAuto() { 
	var countryDataSource = new YAHOO.widget.DS_JSArray(countryArray);
	 var countryAutoComp = new YAHOO.widget.AutoComplete("country","countryContainer", countryDataSource);
	  countryAutoComp.minQueryLength = 2;
	  countryAutoComp.maxResultsDisplayed = 4;
	  countryAutoComp.forceSelection = true; 
}

//function to copyname fields
function copyName(event) {
	//prevent link from working
	YAHOO.util.Event.preventDefault(event);
	//get names from text input fields
	var firstname = document.getElementById("firstname").value;
	var middlename = document.getElementById("middlename").value;
	var lastname = document.getElementById("lastname").value;
	var preferredname = document.getElementById("preferredname").value;
	//set student names the same
	YAHOO.util.Dom.get('studentfirstname').value = firstname;
	YAHOO.util.Dom.get('studentmiddlename').value = middlename;
	YAHOO.util.Dom.get('studentlastname').value = lastname;
	YAHOO.util.Dom.get('studentpreferredname').value = preferredname;
}

//function to add row to degree table
function addRow(event) {
	//prevent link from working
	YAHOO.util.Event.preventDefault(event);
	//get number of rows in the tbody section of table
	var rows = YAHOO.util.Dom.getChildren('degreeTableBody');	
	rowID = rows.length + 1;
	
	//get the <tbody> element so we can add child rows
	var dTable = document.getElementById('degreeTableBody');	
	var tr = document.createElement('tr');
	dTable.appendChild(tr); 		
	//give this new <tr> an row ID
	tr.setAttribute('id', 'row'+rowID);
	//array for input boxes
	var row = ["degree","yearofstudy","yearcompleted","schoolfaculty"];
	
	for(var x=0; x < row.length; x++)
	{
		var input = document.createElement('input');
		input.setAttribute('name', row[x]+rowID);
		input.setAttribute('id', row[x]+rowID);

		if(row[x]=="moreinfoalumni")
		{
			input.setAttribute('type', 'checkbox');
			input.setAttribute('value', 'yesmoreinfoalumni'+rowID);
		}
		else
		{
			input.setAttribute('type', 'text');
		}
		
		var td = document.createElement('td');
		td.appendChild(input);
		tr.appendChild(td);
		YAHOO.util.Dom.addClass(row[x]+rowID, row[x] + "Text");

}
	
	
	//if there are more than two rows, display the removerow link
	if(rowID > 2)
	{
		YAHOO.util.Dom.removeClass('removerow', 'hiddendisplay');
	}
	
	//animate row addition
	var fadein = new YAHOO.widget.Effects.Appear('row'+rowID,{seconds:3} );
	fadein.animate();

	//function to show/hide links depending on number of rows
	displayTableLinks();
}

//function to remove row from degree table
function removeRow(event) {
	//prevent link from working
	YAHOO.util.Event.preventDefault(event);
	
	var dTable = document.getElementById('degreeTableBody');
	//remove row if there are more than 2 rows
	if(YAHOO.util.Dom.getChildren(dTable).length > 2)
	{
		dTable.removeChild(YAHOO.util.Dom.getLastChild(dTable));	
	}
	
	//function to show/hide links depending on number of rows
	displayTableLinks();

}
//function to display table link buttons
function displayTableLinks(){

	//get number of rows in the tbody section of table
	var rows = YAHOO.util.Dom.getChildren('degreeTableBody');	
	
	if(rows.length > 4)
	{
		YAHOO.util.Dom.addClass('addrow', 'hiddendisplay');
	}
	if(rows.length < 5)
	{
		YAHOO.util.Dom.removeClass('addrow', 'hiddendisplay');
	}
	if(rows.length < 3)
	{
		YAHOO.util.Dom.addClass('removerow', 'hiddendisplay');
	}
}

//Form validation variables
var FormValidation =
{
  rules:
  {
    required: /./,
    requiredNotWhitespace: /\S/,
    positiveInteger: /^\d*[1-9]\d*$/,
    positiveOrZeroInteger: /^\d+$/,
    integer: /^-?\d+$/,
    decimal: /^-?\d+(\.\d+)?$/,
    email: /^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$/,
    telephone: /^(\+\d+)?( |\-)?(\(?\d+\)?)?( |\-)?(\d+( |\-)?)*\d+$/
  },

  errors:
  {
    required: "Please fill in this required field.",
    requiredNotWhitespace: "Please fill in this required field.",
    positiveInteger: "This field may only contain a positive whole number.",
    positiveOrZeroInteger: "This field may only contain a non-negative whole number.",
    integer: "This field may only contain a whole number.",
    decimal: "This field may only contain a number.",
    email: "Please enter a valid email address into this field.",
    telephone: "Please enter a valid telephone number into this field."
  }
};

//Validate the form
function formListner(event){
	
	var fields = this.elements;
    
    for (var i = 0; i < fields.length; i++)
    {   
	  YAHOO.util.Dom.removeClass(fields[i], 'textboxhighlight');
	  var className = fields[i].className;
      var classRegExp = /(^| )(\S+)( |$)/g;
      var classResult;
      
      while (classResult = classRegExp.exec(className))
      {
        var oneClass = classResult[2];
        var rule = FormValidation.rules[oneClass];
        if (typeof rule != "undefined")
        {
          if (!rule.test(fields[i].value))
          {
            fields[i].focus();
            YAHOO.util.Dom.addClass(fields[i], 'textboxhighlight');  
			alert(FormValidation.errors[oneClass]);
            YAHOO.util.Event.preventDefault(event);
            return;
          }
        }
      }
    }
 	
}

YAHOO.util.Event.addListener(window, 'load', init); 