addLoadListener(init);

// validation

function init()
{
  document.getElementById("quoteRequestForm").onsubmit = validateFields;

  return true;
}

// check input boxes
function markError(elementToCheck, errorMsgText, errorTagID, boolErrPresent)
{
  var errorSpan = document.getElementById(errorTagID); // find span tag containing error msg
  if (boolErrPresent)
  {
    if (errorSpan == null) // if no span tag, create one
    {
         var errorMessage = document.createTextNode("DummyText");
         errorMessage.nodeValue = errorMsgText;
         errorSpan = document.createElement("span");

         errorSpan.appendChild(errorMessage);
         errorSpan.className = "errorMsg";
	     errorSpan.id = errorTagID;

         var fieldLabel = elementToCheck.previousSibling;

         while (fieldLabel.nodeName.toLowerCase() != "label")
         {
            fieldLabel = fieldLabel.previousSibling;
         }

         fieldLabel.appendChild(errorSpan);
     }

  } else { // if span tag, clear it
      var errorSpan = document.getElementById(errorTagID);
      if (!(errorSpan == null))
      {
         var parent = errorSpan.parentNode;
         parent.removeChild(errorSpan);
      }
    }
}

// check if radio buttons selected for each group
function markErrorRadio(radioGroup, categoryTitle, errorMsgText, errorTagID, boolClearFlag)
{
   var boolOptionSelected = false;
   for (var i = 0; i < radioGroup.length; i++)
   {
     if (radioGroup[i].checked == true)
     {
       boolOptionSelected = true;
       break;
     }
   }
   
   var errorSpan = document.getElementById(errorTagID);
   if ( (!(boolOptionSelected)) && (!(boolClearFlag)) )
   {
      if (errorSpan == null)
      {
         var errorMessage = document.createTextNode("Dummy");
         errorMessage.nodeValue = errorMsgText;
         errorSpan = document.createElement("span");

         errorSpan.appendChild(errorMessage);
         errorSpan.className = "red";
	     errorSpan.id = errorTagID;

         var elementToCheck = document.getElementById(categoryTitle);
         elementToCheck.appendChild(errorSpan);
      }

  } else {
      var errorSpan = document.getElementById(errorTagID);
      if (!(errorSpan == null))
      {
         var parent = errorSpan.parentNode;
         parent.removeChild(errorSpan);
      }
  }
  return boolOptionSelected;
}

// check empty input boxes for other radio button
function markErrorEntry (radioToCheck, elementToCheck, categoryTitle, errorMsgText, errorTagID)
{
  var errorSpan = document.getElementById(errorTagID);
  var boolClearError = true;
  var boolReturnVal = false;
  
  if (radioToCheck.checked)
  {
     //Is the entry box blank?
     if (elementToCheck.value == "" || /^\s+$/.test(elementToCheck.value))
	 {  //Yes it is blank, create span tag with error msg
        if (errorSpan == null)
        {
          var errorMessage = document.createTextNode("Dummy");
          errorMessage.nodeValue = errorMsgText;
          errorSpan = document.createElement("span");

          errorSpan.appendChild(errorMessage);
          errorSpan.className = "red";
	      errorSpan.id = errorTagID;

          var elementToMark = document.getElementById(categoryTitle);
          elementToMark.appendChild(errorSpan);
       }
		  return false;
  	 }
  }

  	if (!(errorSpan == null))
  	{
     var parent = errorSpan.parentNode;
     parent.removeChild(errorSpan);
  	}

  	return true;
}

// validate fields with this data
function validateFields()
{
  var boolFormOk = true;
  var boolUserEntryError = true;
  
  //Event type Check
  var eventType = document.forms["quoteRequestForm"]["event-type"];
  boolUserEntryError = (eventType.value == "" || /^\s+$/.test(eventType.value));
  
  markError(eventType, "Please enter your event type", "eventError", boolUserEntryError);
  boolFormOk = ((boolFormOk) && (!(boolUserEntryError)));

  //Event date Check
  var eventDate = document.forms["quoteRequestForm"]["event-date"];
  boolUserEntryError = (eventDate.value == "" || /^\s+$/.test(eventDate.value));
  
  markError(eventDate, "Please enter your event date", "dateError", boolUserEntryError);
  boolFormOk = ((boolFormOk) && (!(boolUserEntryError)));

  //Event location Check
  var eventLocation = document.forms["quoteRequestForm"]["event-location"];
  boolUserEntryError = (eventLocation.value == "" || /^\s+$/.test(eventLocation.value));
  
  markError(eventLocation, "Please enter your event location", "dateError", boolUserEntryError);
  boolFormOk = ((boolFormOk) && (!(boolUserEntryError)));

  //Name Check
  var name = document.forms["quoteRequestForm"]["name"];
  boolUserEntryError = (name.value == "" || /^\s+$/.test(name.value));
  
  markError(name, "Please enter your name", "nameError", boolUserEntryError);
  boolFormOk = ((boolFormOk) && (!(boolUserEntryError)));

  //Email check
  var textField = document.forms["quoteRequestForm"]["email"];
  boolUserEntryError = (!/^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$/.test(textField.value));
  
  markError(textField, "Please enter a valid email", "emailError", boolUserEntryError);
  boolFormOk = ((boolFormOk) && (!(boolUserEntryError)));

  //Phone check
  var phone = document.forms["quoteRequestForm"]["phone"];
  boolUserEntryError = (!/^(\(\d+\) ?)?(\d+[\- ])*\d+$/.test(phone.value));
  
  markError(phone, "Please enter a valid phone number", "phoneError", boolUserEntryError);
  boolFormOk = ((boolFormOk) && (!(boolUserEntryError)));
  
  //Video package check
  var videoPackageGroup = document.forms["quoteRequestForm"]["package-type"];
  
  boolUserEntryError = markErrorRadio(videoPackageGroup, "videoTitle", "Please select your video package", "videoPackageError", false);
  boolFormOk = ((boolFormOk) && (boolUserEntryError));
       
  //Source check
  var sourceGroup = document.forms["quoteRequestForm"]["source"];
  
  boolUserEntryError = markErrorRadio(sourceGroup, "sourceTitle", "Please select how you heard about us", "sourceError", false);
  boolFormOk = ((boolFormOk) && (boolUserEntryError));
  
// Check input box for other radio button

  //Other source check
  var checkOtherSource = document.getElementById("other");
  var sourceInfo = document.forms["quoteRequestForm"]["other-source"];
  
  boolUserEntryError = markErrorEntry(checkOtherSource, sourceInfo, "sourceTitle", "Please let us where else you found us", "checkOtherSourceError");
  boolFormOk = ((boolFormOk) && (boolUserEntryError));


  // Print msg to alert user of missing fields
  if (!boolFormOk)
  { 
    var errorSpan = document.getElementById("submitError");
  	if (errorSpan == null)
    {
         var errorMessage = document.createTextNode("Please fill in the missing details below");
         errorSpan = document.createElement("span");

         errorSpan.appendChild(errorMessage);
         errorSpan.className = "red";
	     errorSpan.id = "submitError";

         var elementToCheck = document.getElementById("submitInfo");
         elementToCheck.appendChild(errorSpan);
	}
  } 
  
  return boolFormOk;
  
}

// Load functions on page load
function addLoadListener(fn)
{
  if (typeof window.addEventListener != 'undefined')
  {
    window.addEventListener('load', fn, false);
  }
  else if (typeof document.addEventListener != 'undefined')
  {
    document.addEventListener('load', fn, false);
  }
  else if (typeof window.attachEvent != 'undefined')
  {
    window.attachEvent('onload', fn);
  }
  else
  {
    var oldfn = window.onload;
    if (typeof window.onload != 'function')
    {
      window.onload = fn;
    }
    else
    {
      window.onload = function()
      {
        oldfn();
        fn();
      };
    }
  }
}