/*
 * $Archive: /Direct Affect/Van Metre Homes/web/admin/clientlibrary/editorutil.js $
 * $Date: 8/02/04 5:55p $
 * $Revision: 2 $
 * $Author: Prodgers $
 */
String.prototype.trim  = function () { return this.ltrim().rtrim() }
String.prototype.ltrim = function () { return this.replace(/^\s+/g, '') }
String.prototype.rtrim = function () { return this.replace(/\s+$/g, '') }

function editorUrl(nextUrl, returnUrl)
{
   if (typeof(nextUrl) != "undefined")
      return nextUrl;
   else if (typeof(returnUrl) != "undefined")
      return returnUrl;
   else
      return "";
}

function editorSave(nextUrl)
{
   var form = document.forms[0];
   var doSubmit = true;

   if (typeof(saveHook) == "function")
      doSubmit = saveHook(form);
   if (doSubmit)
   {
      form._nextUrl.value = editorUrl(nextUrl, "");
      form._actionSave.value = 1;
      form.submit();
   }
   return doSubmit;
}

function editorCancel(cancelViaSubmit, nextUrl)
{
   if (nextUrl)
      nextUrl = escape(nextUrl);
   var form = document.forms[0];
   var cancelUrl = editorUrl(nextUrl, returnUrl);

   if ((typeof(recordLabel) == "undefined") || (recordLabel == ""))
      recordLabel = "record";
   if (IsFormChanged(form) && confirm("You have modified this " + recordLabel + ".\nClick OK to save the changes, click Cancel to leave without saving."))
   {
      return editorSave(cancelUrl);
   }
   else if (!cancelViaSubmit)
   {
      if (cancelUrl)
         window.location = cancelUrl;
   }
   else
   {
      form._nextUrl.value = cancelUrl;
      form._actionCancel.value = 1;
      form.submit();
   }
   return false;
}

function editorDelete(nextUrl)
{
   var form = document.forms[0];

   if ((typeof(recordLabel) == "undefined") || (recordLabel == ""))
      recordLabel = "record";
   if (confirm("Are you sure you want to delete this " + recordLabel + "?"))
   {
      form._nextUrl.value = editorUrl(nextUrl, returnUrl);
      form._actionDelete.value = 1;
      form.submit();
   }
   return false;
}

function editorLeavePage(lockId, nextUrl)
{
   var form = document.forms[0];
   var bFormChanged = IsFormChanged(form);
   var cancelUrl = editorUrl(nextUrl, returnUrl);
   
   if ((typeof(recordLabel) == "undefined") || (recordLabel == ""))
      recordLabel = "record";

   if (lockId < 0)  // Read-only: can go directly to new page
   {
      if (cancelUrl)
         window.location = cancelUrl;
   }
   else if (lockId == 0) // New record: force save before going to new page
   {
      return editorSave(cancelUrl);
   }
   else if (IsFormChanged(form) && confirm("You have modified this " + recordLabel + ".\nClick OK to save the changes, click Cancel to leave without saving."))
   {
      return editorSave(cancelUrl);
   }
   else
   {
      form._nextUrl.value = cancelUrl;
      form._actionCancel.value = 1;
      form.submit();
   }
   return false;
}

function checkDateFormat(dateInput)
{
    if (typeof(dateInput) != 'undefined')
    {
        var dateValue = dateInput.value;
        var dateStr = dateValue.trim();
        if (dateStr == '')
           dateInput.value = '';
        else
        {
            if (!validateDate(dateStr))
            {
               alert("The date that you have entered is invalid. Please reenter a valid date in one of the following forms:\n    MM/DD/YYYY, MM-DD-YYYY, DD Month YYYY, or Month DD[,] YYYY");
               dateInput.focus();
               return false;
            }
        }
    }
    return true;
}

function validateDate(dateStr)
{
    // Check for MM/DD/YYYY or MM-DD-YYYY format
    if (/^\d{1,2}[-\/]\d{1,2}[-\/]\d{4}$/.test(dateStr))
        return true;

    if (/^\d{1,2} ([A-Za-z]+) \d{4}$/.test(dateStr) ||    // DD Month YYYY
        /^([A-Za-z]+) \d{1,2},? \d{4}$/.test(dateStr))  // Month DD[,] YYYY
    {
        // Format is good, but make sure the month name is recognized
        var legalMonths = {
            "january" : 1, "february" : 1, "march"     : 1, "april"   : 1, "may"      : 1, "june"     : 1,
            "july"    : 1, "august"   : 1, "september" : 1, "october" : 1, "november" : 1, "december" : 1,
            "jan"     : 1, "feb"      : 1, "mar"       : 1, "apr"     : 1, "jun"      : 1, "jul"      : 1,
            "aug"     : 1, "sep"      : 1, "oct"       : 1, "nov"     : 1, "dec"      : 1
        };
        var monthStr = RegExp.$1.toLowerCase();
        return legalMonths[monthStr];
    }

    return false;
}

function checkTimeFormat(timeInput)
{
    if (typeof(timeInput) != 'undefined')
    {
        var timeValue = timeInput.value;
        var timeStr = timeValue.trim();
        if (timeStr == '')
           timeInput.value = '';
        else
        {
            if (!validateTime(timeStr))
            {
               alert("The time that you have entered is invalid. Please reenter a valid time in one of the following forms:\n    HH:MM (24 hour) or HH:MM [AM/PM] (12 hour)");
               timeInput.focus();
               return false;
            }
        }
    }
    return true;
}

function validateTime(timeStr)
{
    // Allows times in formats HH:MM and HH:MM AM/PM
    var hour = -1;
    var minute = -1;
    var timeArray = timeStr.split(':');
    if ((timeArray != null) && (timeArray.length == 2))
    {
        hour = parseInt(timeArray[0], 10);
        var minuteStr = timeArray[1];
       var timeArray = minuteStr.split(' ');
       if (timeArray != null)
       {
          minute = parseInt(timeArray[0], 10);
          for (i = 1; i < timeArray.length; i++)
          {
             var val = timeArray[i].trim();
             if (val)
             {
                if ((val == "PM") || (val == "P.M.") || (val == "pm") || (val == "p.m."))
                {
                   if (hour < 12)
                      hour += 12;
                }
                else if (!((val == "AM") || (val == "A.M.") || (val == "am") || (val == "a.m.")))
                   return false;
             }
          }
       }
   }
    return ((hour >= 0) && (hour <= 23) && (minute >= 0) && (minute <= 59));
}

   
function checkSelect(selectName)
{
   var theSelect = eval("document.forms[0]." + selectName);
   if (typeof(theSelect) != 'undefined')
   {
      if (theSelect.options[theSelect.selectedIndex].value <= 0)
         return false;
   }
   return true;
}
   
