function statusMsg(msg) {window.status=msg; return true;}

/*** Materials relateded functions ***/
function validateUpload()
{
   if (document.forms.materialUpload.title.value == "")
   {
      alert("No title specified!");
      document.forms.materialUpload.title.select();
      return false;
   }

   // now for the pdf itself ...
   var fileName = document.forms.materialUpload.materialPdf.value;
   if(fileName == "") {alert("No PDF specified!"); return false;}
   else if (/\.pdf$/.test(fileName)) {return true;}
   else
   {
      alert("Invalid file type, please provide a PDF document!");
      document.forms.materialUpload.materialPdf.select();
      return false;
   }
}

function openPDF(id)
{
   document.getElementById("interact").innerHTML = "<iframe src=\"./libs/procs/displayPDF.php?pdf="+id+"\" frameborder=\"0\" scrolling=\"yes\" style=\"width:100%;height:100%;\"></iframe>";
}

function validateMaterial()
{
   if (document.forms.courseMaterial.title.value == "")
   {
      alert("Material Title cannot be empty!");
      document.forms.courseMaterial.title.select();
      return false;
   }
   return true;
}

/*** Tests relateded functions ***/
function openTestWindow(tid)
{
   if (tid == void(0))
   {
	   alert("Test must be saved prior to previewing!");
	   return;
   }
   var features = "width=500,height=500,location=no,menubar=no,status=no,toolbar=no,scrollbars=yes,resizable=yes";
   win = window.open("./testPreview.php?tid="+tid,"TestPreview",features);
   return;
}

function validateTest()
{
   if (document.forms.testGenerator.title.value == "")
   {
      alert("No title specified!");
      document.forms.testGenerator.title.select();
      return false;
   }
   return true;
}

function showAnswersForm(id)
{
   var html = "<p style=\"margin:10px;\"><table width=\"95%\">";
   if (!isInt(document.forms.testGenerator.answerCount.value))
   {
      alert("Invalid answer set entry!");
      document.forms.testGenerator.answerCount.select();
      return false;
   }
   else if (parseInt(document.forms.testGenerator.answerCount.value) == 0)
   {
      alert("Answer set must be greater than zero!");
      document.forms.testGenerator.answerCount.select();
      return false;
   }
   else
   {
      var label = 65;
      var reps = 1;
      var ua = navigator.userAgent;
      var rows = (/msie/i.test(ua) ? "2" : "1");
      for (i=0; i<parseInt(document.forms.testGenerator.answerCount.value); i++)
      {
         labelStr = "";
         for (j=0; j<reps; j++) {labelStr += String.fromCharCode(label);}
         html += "<tr>";
         html += "<td style=\"width:20px; font-weight:bold;\"><b>"+labelStr+".</b></td>";
         html += "<td><textarea name=\"answer"+i+"\" rows=\""+rows+"\" class=\"textarea\" style=\"width:100%;\"></textarea></td>";
         html += "<td style=\"width:20px;\"><input type=\"radio\" name=\"correctAnswer\"></td>";
         html += "</tr>";
         reps = (label < 90 ? reps : reps+1);
         label = (label < 90 ? label+1 : 65);
      }
      html += "</table><br><br>";
      if (document.forms.testGenerator.mode.value > -1)
      {
         html += "<input type=\"button\" name=\"updateQ\" value=\"Update Question\" class=\"btn\" onmouseover=\"this.className='btn btnHov'\" onmouseout=\"this.className='btn'\" onclick=\"updateQuestion("+id+");\">&nbsp;";
         html += "<input type=\"button\" name=\"deleteQ\" value=\"Delete Question\" class=\"btn\" onmouseover=\"this.className='btn btnHov'\" onmouseout=\"this.className='btn'\" onclick=\"deleteQuestion("+id+");\">&nbsp;";
         html += "<input type=\"button\" name=\"cancelQ\" value=\"Cancel\" class=\"btn\" onmouseover=\"this.className='btn btnHov'\" onmouseout=\"this.className='btn'\" onclick=\"cancelQuestionUpdate();\">";
      }
      else
      {
         html += "<input type=\"button\" name=\"saveQ\" value=\"Save Question\" class=\"btn\" onmouseover=\"this.className='btn btnHov'\" onmouseout=\"this.className='btn'\" onclick=\"saveQuestion();\">&nbsp;";
         html += "<input type=\"button\" name=\"resetQ\" value=\"Clear Question\" class=\"btn\" onmouseover=\"this.className='btn btnHov'\" onmouseout=\"this.className='btn'\" onclick=\"clearQuestion();\">";
      }
      html += "</p>";
      document.getElementById("answerForm").innerHTML = html;
      document.forms.testGenerator.answer0.select();
   }
}

function hideAnswersForm()
{
   document.forms.testGenerator.question.value = "";
   document.forms.testGenerator.answerCount.value = "";
   document.getElementById("answerForm").innerHTML = "";
}

function saveQuestion()
{
   var form = document.forms.testGenerator;
   if (document.forms.testGenerator.questionSets.value == "")
   {
	  var questions = new Array();
   }
   else
   {
	  var questions = document.forms.testGenerator.questionSets.value.split("<:wceQuestion:>");
   }
   var newQ = form.question.value+"<:wceQ:>";
   var answers = new Array();
   for (i=0; i<form.elements.length; i++)
   {
      match = form.elements[i].name.match(/^answer(\d+)$/);
      if (match != null)
      {
         answerPair = form.elements[i].value+"<:wceC:>";
         answerPair += (form.correctAnswer[match[1]].checked ? "1" : "0");
         answers.push(answerPair);
      }
   }
   newQ += answers.join("<:wceA:>");
   questions.splice(form.questionIndex.selectedIndex,0,newQ);
   document.forms.testGenerator.questionSets.value = questions.join("<:wceQuestion:>");
   clearQuestion();
   document.forms.testGenerator.answerCount.value = "";
   document.getElementById("answerForm").innerHTML = "";
   updateTestPreview();
   updateIndexList();
}

function loadQuestion(id)
{
   var questions = document.forms.testGenerator.questionSets.value.split("<:wceQuestion:>");
   if (document.forms.testGenerator.questionSets.value != "")
   {
      document.forms.testGenerator.mode.value = id;
      qInfo = questions[id].split("<:wceQ:>");
      answers = qInfo[1].split("<:wceA:>");
      document.forms.testGenerator.question.value = qInfo[0];
      document.forms.testGenerator.answerCount.value = answers.length;
      showAnswersForm(id);
      for (j=0; j<answers.length; j++)
      {
         aPair = answers[j].split("<:wceC:>");
         eval("document.forms.testGenerator.answer"+j+".value = \""+aPair[0].replace(/"/,"\"")+"\";");
         if (aPair[1] > 0) {eval("document.forms.testGenerator.correctAnswer["+j+"].checked = true;");}
      }
   }
   updateIndexList();
   document.forms.testGenerator.questionIndex.selectedIndex = id;
}

function updateQuestion()
{
   if (document.forms.testGenerator.mode.value != -1 )
   {
      var id = document.forms.testGenerator.mode.value;
      var questions = document.forms.testGenerator.questionSets.value.split("<:wceQuestion:>");
      var qInfo = questions[id].split("<:wceQ:>");
      var answers = qInfo[1].split("<:wceA:>");
      var newAnswerSet = new Array();
      qInfo[0] = document.forms.testGenerator.question.value;

      for (i=0; i<document.forms.testGenerator.elements.length; i++)
      {
         match = document.forms.testGenerator.elements[i].name.match(/^answer(\d+)$/);
         if (match != null)
         {
            answerPair = document.forms.testGenerator.elements[i].value+"<:wceC:>";
            answerPair += (document.forms.testGenerator.correctAnswer[match[1]].checked ? "1" : "0");
            newAnswerSet.push(answerPair);
         }
      }
      qInfo[1] = newAnswerSet.join("<:wceA:>");
      if (id != document.forms.testGenerator.questionIndex.selectedIndex)
      {
         var temp = questions.splice(id,1);
         questions.splice(document.forms.testGenerator.questionIndex.selectedIndex,0,qInfo.join("<:wceQ:>"));
      }
      else {questions[id] = qInfo.join("<:wceQ:>");}
      document.forms.testGenerator.questionSets.value = questions.join("<:wceQuestion:>");
      updateTestPreview();
   }
   else {cancelQuestionUpdate();}
}

function deleteQuestion(id)
{
   if (document.forms.testGenerator.questionSets.value != "" && confirm("Delete this question?"))
   {
      var newQuestions = new Array();
      var questions = document.forms.testGenerator.questionSets.value.split("<:wceQuestion:>");
      for (i=0; i<questions.length; i++)
      {
         if (i != id) {newQuestions.push(questions[i]);}
      }
      document.forms.testGenerator.questionSets.value = newQuestions.join("<:wceQuestion:>");
      updateTestPreview();
      hideAnswersForm();
      if (document.forms.testGenerator.mode.value > -1) {document.forms.testGenerator.mode.value = -1;}
   }
}

function cancelQuestionUpdate()
{
   hideAnswersForm();
   document.forms.testGenerator.mode.value = -1;
   updateIndexList();
}

function clearQuestion()
{
   document.forms.testGenerator.question.value = "";
   for (i=0; i<document.forms.testGenerator.correctAnswer.length; i++)
   {
      document.forms.testGenerator.correctAnswer[i].checked = false;
   }
   for (i=0; i<document.forms.testGenerator.elements.length; i++)
   {
      e = document.forms.testGenerator.elements[i];
      if (/^answer\d+$/.test(e.name)) {e.value = "";}
   }
}

function updateTestPreview()
{
   var content = "<p class=\"label\" style=\"font-size:14px;\">Existing test questions ...</p>";
   if (document.forms.testGenerator.questionSets.value != "")
   {
      var questions = document.forms.testGenerator.questionSets.value.split("<:wceQuestion:>");
      for (i=0; i<questions.length; i++)
      {
		 if (questions[i] != "")
		 {
			 qNum = i+1;
			 qInfo = questions[i].split("<:wceQ:>");
			 answers = qInfo[1].split("<:wceA:>");
			 content += (i % 2 == 0 ? "<p style=\"padding:5px;\">" : "<p style=\"padding:5px;background-color:#f7f7de;\">");
			 content += "<b>"+qNum+".&nbsp;"+qInfo[0]+"</b><br>";
			 content += "<table>";
			 aNum = 65;
			 reps = 1;
			 for (j=0; j<answers.length; j++)
			 {
				aPair = answers[j].split("<:wceC:>");
				aLabel = (aPair[1] > 0 ? "<font style=\"color:#930;font-weight:bold;\">" : "");
				font = (aPair[1] > 0 ? "</font>" : "");
				for (k=0; k<reps; k++) {aLabel += String.fromCharCode(aNum);}
				content += "<tr><td sytle=\"width:200px;\">&nbsp;</td>";
				content += "<td><b>"+aLabel+".&nbsp;</b>"+aPair[0]+font+"</td></tr>";
				reps = (aNum < 90 ? reps : reps+1);
				aNum = (aNum < 90 ? aNum+1 : 65);
			 }
			 content += "</table>";
			 content += "[&nbsp;<a href=\"javascript:deleteQuestion("+i+");\" onmouseover=\"return statusMsg('Delete question');\" onmouseout=\"return statusMsg('');\"><img src=\"./images/delete.gif\" border=\"0\">Delete</a>&nbsp;]";
			 content += "&nbsp;&nbsp;";
			 content += "[&nbsp;<a href=\"javascript:loadQuestion("+i+");\" onmouseover=\"return statusMsg('Edit question');\" onmouseout=\"return statusMsg('');\"><img src=\"./images/edit.gif\" border=\"0\">Edit</a>&nbsp;]";
			 content += "</p>";
		 }
      }
   }
   else {content += "<p>No associated questions.</p>";}
   document.getElementById("content").innerHTML = content;
}

function updateIndexList()
{
/*
   if (document.forms.testGenerator.questionSets.value == "")
   {
	  var questions = new Array();
   }
   else
   {
	  var questions = document.forms.testGenerator.questionSets.value.split("<:wceQuestion:>");
   }
*/
   var questions = document.forms.testGenerator.questionSets.value.split("<:wceQuestion:>");
   var listHTML = "<select size=\"1\" name=\"questionIndex\" class=\"input\">";
   for (i=1; i<=questions.length; i++) {listHTML += "<option value=\""+i+"\">"+i+"</option>";}
   if (document.forms.testGenerator.mode.value < 0)
   {
      var end = questions.length+1;
      listHTML += "<option value=\""+end+"\" selected>End</option>";
   }
   listHTML += "</select>&nbsp;of "+questions.length;
   document.getElementById("indexList").innerHTML = listHTML;
}


/*** Course relateded functions ***/
function validateCourse()
{
   if (document.forms.course.title.value == "")
   {
      alert("No title specified!");
      document.forms.course.title.select();
      return false;
   }
   if (document.forms.course.courseNumber.value == "")
   {
      alert("No course number specified!");
      document.forms.course.courseNumber.select();
      return false;
   }
   if (document.forms.course.credits.value != "" && !isInt(document.forms.course.credits.value))
   {
      alert("Invalid credits entry!");
      document.forms.course.credits.select();
      return false;
   }
   return true;
}

/*** Account relateded functions ***/
function validateAccount()
{
   if (document.forms.account.firstName.value == "")
   {
      alert("No first name specified!");
      document.forms.account.firstName.select();
      return false;
   }
   if (document.forms.account.lastName.value == "")
   {
      alert("No last name specified!");
      document.forms.account.lastName.select();
      return false;
   }
   if (document.forms.account.email.value == "")
   {
      alert("No email specified!");
      document.forms.account.email.select();
      return false;
   }
   if (!isValidEmail(document.forms.account.email.value))
   {
      alert("Invalid email specified!");
      document.forms.account.email.select();
      return false;
   }
   if (document.forms.account.zip.value != "" && !isValidZip(document.forms.account.zip.value))
   {
      alert("Invalid zip specified!");
      document.forms.account.zip.select();
      return false;
   }
   if (document.forms.account.aid.value == "" && document.forms.account.pw1.value == "" && document.forms.account.pw2.value)
   {
      alert("No password specified!");
      document.forms.account.pw2.value = "";
      document.forms.account.pw1.select();
      return false;
   }
   if (document.forms.account.aid.value != "")
   {
	   if (document.forms.account.pw1.value != document.forms.account.pw2.value)
	   {
		  alert("Password and validation do not match!");
		  document.forms.account.pw2.value = "";
		  document.forms.account.pw1.select();
		  return false;
	   }
	   if (document.forms.account.pw1.value != "" && document.forms.account.pw1.value.length < 5)
	   {
		  alert("Passwords must be 5 or more characters in length!");
		  document.forms.account.pw1.select();
		  return false;
	   }
   }
   return true;
}

function formatState(e)
{
   if (e.value == "") {return true;}
   if (!isValidState(e.value))
   {
      alert("Invalid state specified!");
      e.select();
      return false;
   }
   else {e.value = e.value.toUpperCase();}
   return true;
}

function formatPhone(e)
{
   if (e.value == "") {return true;}
   var formatted = isValidPhone(e.value);
   if (formatted == "")
   {
      alert("Invalid phone specified!");
      e.select();
      return false;
   }
   else {e.value = formatted;}
   return true;
}