/* ========================================================================= */
/* = Lifemapper utilities                                                  = */
/* = @author: CJ Grady                                                     = */
/* = @email: cjgrady@ku.edu                                                = */
/* = @date: May 19, 2009                                                   = */
/* =                                                                       = */
/* = @summary: Utility javascript functions                                = */
/* ========================================================================= */

function getUrlParameter(name)
   /*
   @summary: Gets a parameter from the url
   */
{
   name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
   var regexS = "[\\?&]" + name + "=([^&#]*)";
   var regex = new RegExp(regexS);
   var results = regex.exec(window.location.href);
   
   if (results == null)
   {
      ret = "";
      return ret;
   }
   else
   {
      ret = results[1].replace("%20", " ");
      return ret;
   }
}

function reloadPage()
   /*
   @summary: Reloads the current page
   */
{
   window.location.href = window.location.href;
}

function removeAllChildren(rmEl)
   /*
   @summary: Removes all children from an element
   */
{
   if (rmEl)
   {
      var len = rmEl.childNodes.length;
      
      while (rmEl.hasChildNodes())
      {
         rmEl.removeChild(rmEl.firstChild);
      }
   }
}

function getXmlHttpObject()
{
   var xmlHttp = null;
   
   try
   {
      // Firefox, Opera 8.0+, Safari
      xmlHttp = new XMLHttpRequest();
   }
   catch (e)
   {
      // Internet Explorer
      try
      {
         xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
      }
      catch (e)
      {
         xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
      }
   }
   return xmlHttp;
}

function addEvent(elem, evtType, func, capture)
{
   capture = (capture) ? capture : false;
   if (elem.addEventListener)
   {
      elem.addEventListener(evtType, func, capture);
   }
   else if (elem.attachEvent)
   {
      elem.attachEvent("on" + evtType, func);
   }
   else
   {
      // for IE/Mac, NN4, and older
      elem["on" + evtType] = func;
   }
}

function removeEvent(elem, evtType, func, capture)
{
   capture = (capture) ? capture : false;
   if (elem.removeEventListener)
   {
      elem.removeEventListener(evtType, func, capture);
   }
   else if (elem.attachEvent)
   {
      elem.detachEvent("on" + evtType, func);
   }
   else
   {
      // for IE/Mac, NN4, and older
      elem["on" + evtType] = null;
   }
}

function validateCheckPassword(pw1, pw2)
{
   if (pw1.value.length < 8)
   {
      alert("Password must be between 8 and 16 characters");
      return false;
   }
   
   if (pw1.value.length > 16)
   {
      alert("Password should be between 8 and 16 characters");
      return false;
   }
   
   if (pw1.value !== pw2.value)
   {
      alert("Passwords do not match!");
      return false;
   }
   return true;
}

function validateEmail(emailField, alertMsg)
{
   apos = emailField.value.indexOf("@");
   dotpos = emailField.value.lastIndexOf(".");
   if (apos < 1 || dotpos - apos < 2)
   {
      alert(alertMsg);
      return false;
   }
   else
   {
      return true;
   }
}

function validateRequired(field, alertMsg)
{
   with (field)
   {
      if (value.length < 1)
      {
         alert(alertMsg);
         return false;
      }
      else
      {
         return true;
      }
   }
}

function validateLength(field, minLength, maxLength)
{
   if (field.value.length < minLength)
   {
      alert("The value of " + field.name + 
            " is too short.  It must be at least " + minLength + 
            " characters.");
      return false;
   }
   else
   {
      if (field.value.length > maxLength)
      {
         alert("The value of " + field.name + 
               " is too long.  It must be at most " + maxLength + 
               " characters.");
         return false;
      }
      else
      {
         return true;
      }
   }
}

function checkEmail(emailFld)
{
   var email = emailFld.value;
   if (email.length > 0)
   {
      var url = "/findUser?email=" + email;
      var method = "GET";
      var req = getXmlHttpObject();
      req.open(method, url, true);
      req.onreadystatechange = function()
      {
         if (req.readyState == 4)
         {
            var subButton = document.getElementById("signUpButton");
            resp = req.responseText;
            var idx = resp.indexOf("Email: ");
            if (idx >= 0)
            {
               var msg = resp.substring(idx + 7, resp.length);
               alert(msg);
               document.getElementById("emailField").focus();
               subButton.disabled = true;
            }
            else
            {
               subButton.disabled = false;
            }
         }
      }
      req.send("")
   }
}

function checkUserName(userIdFld)
{
   var usrId = userIdFld.value;
   if (usrId.length > 0)
   {
      var url = "/findUser?userId=" + usrId;
      var method = "GET";
      var req = getXmlHttpObject();
      req.open(method, url, true);
      req.onreadystatechange = function()
      {
         if (req.readyState == 4)
         {
            var subButton = document.getElementById("signUpButton");
            resp = req.responseText;
            var idx = resp.indexOf("User: ");
            if (idx >= 0)
            {
               var msg = resp.substring(idx + 6, resp.length);
               alert(msg);
               document.getElementById("userIdField").focus();
               subButton.disabled = true;
            }
            else
            {
               subButton.disabled = false;
            }
         }
      }
      req.send("")
   }
}

function validateNewUser(thisform)
{
   if (validateRequired(thisform.userId, "User Id is required") === false ||
       validateLength(thisform.userId, 1, 20) === false)
   {
      thisform.userId.focus();
      return false;
   }
   if (validateRequired(thisform.email, "Email is required") === false ||
       validateLength(thisform.email, 1, 100) === false)
   {
      thisform.email.focus();
      return false;
   }
   if (validateEmail(thisform.email, "Email address is not valid!") === false)
   {
      thisform.email.focus();
      return false;
   }
   if (validateRequired(thisform.firstName, "First name is required") === false ||
       validateLength(thisform.firstName, 1, 50) === false)
   {
      thisform.firstName.focus();
      return false;
   }
   if (validateLength(thisform.institution, 0, 255) === false)
   {
      thisform.institution.focus();
      return false;
   }
   if (validateLength(thisform.lastName, 0, 50) === false)
   {
      thisform.lastName.focus();
      return false;
   }
   if (validateLength(thisform.phone, 0, 20) === false)
   {
      thisform.phone.focus();
      return false;
   }
   if (validateLength(thisform.address1, 0, 255) === false)
   {
      thisform.address1.focus();
      return false;
   }
   if (validateLength(thisform.address2, 0, 255) === false)
   {
      thisform.address2.focus();
      return false;
   }
   if (validateLength(thisform.address3, 0, 255) === false)
   {
      thisform.address3.focus();
      return false;
   }
   if (validateRequired(thisform.pword1, "Please enter a password") === false)
   {
      thisform.pword1.focus();
      return false;
   }
   if (validateRequired(thisform.pword2, "Please confirm password") === false)
   {
      thisform.pword2.focus();
      return false;
   }
   if (validateCheckPassword(thisform.pword1, thisform.pword2) === false)
   {
      thisform.pword1.focus();
      return false;
   }
   if (thisform.tos.checked === false)
   {
      alert("Please read the Lifemapper Terms of Service.");
      return false;
   }
   return true;
}

function hideCal(containerId)
{
   var calContainer = document.getElementById(containerId);
   calContainer.style.display = "none";
}

function showCal(containerId)
{
   var calContainer = document.getElementById(containerId);
   calContainer.style.display = "block";
}

function LM_cal(textId, calId, containerId)
{
   this.onSelect = function(event, args, me)
   {
      var selDate = me.getSelectedDates()[0];
      var yearStr = selDate.getFullYear();
      var monthStr = selDate.getMonth();
      monthStr = monthStr + 1;
      if (monthStr < 10)
      {
         monthStr = "0" + monthStr;
      }
      
      var dayStr = selDate.getDate();
      if (dayStr < 10)
      {
         dayStr = "0" + dayStr;
      }
      var dateStr = yearStr + "-" + monthStr + "-" + dayStr;

      var fld = document.getElementById(textId);
      fld.value = dateStr;

      hideCal(containerId);
   };
   
   this.init = function() 
   {
      YAHOO.example.calendar.cal1 = new YAHOO.widget.Calendar(calId, containerId, {close: true});
      YAHOO.example.calendar.cal1.selectEvent.subscribe(this.onSelect, YAHOO.example.calendar.cal1);
      YAHOO.example.calendar.cal1.render();
   };
   return this;
}

