/*
All program code, including but not limited to html, xhtml,  javascript, php, and css contained herein is copyrighted by Magic Lamp Computing, LLC.
Any use of this code without express written approval of Magic Lamp Computing, LLC is prohibited.
*/

window.MLC = {}; //namespace container & global variable definer

//begin HTTP Request functions ******************************

MLC.OpenAsyncRO = function (ROIdx)
{
  if (MLC.SystemFailed || MLC.ROStatusArr[ROIdx] == "OK")
  {
    MLC.ROTryCountArr[ROIdx] = false;
    clearTimeout(MLC.ROTimerArr[ROIdx]);
    MLC.ROStatusArr[ROIdx] = "";
    return;
  }
  if (!MLC.ROTryCountArr[ROIdx])
  {
    MLC.ROTryCountArr[ROIdx] = 0;
    MLC.ROStatusArr[ROIdx] = "";
  }
  if (MLC.ROTryCountArr[ROIdx] > 1)
  {
    if (MLC.ConfirmTryAgain(MLC.ROStatusArr[ROIdx]))
    {
      MLC.ROTryCountArr[ROIdx] = 0;
    }
    else
    {
      return;
    }
  }
  MLC.TryOpenAsyncRO(ROIdx);
  if (MLC.ROStatusArr[ROIdx] != "OK")
  {
    MLC.ROTimerArr[ROIdx] = setTimeout("MLC.OpenAsyncRO("+ROIdx+")",1000);
  }
  else
  {
    MLC.ROTryCountArr[ROIdx] = false;
    clearTimeout(MLC.ROTimerArr[ROIdx]);
    MLC.ROStatusArr[ROIdx] = "";
  }
}
MLC.TryOpenAsyncRO = function (ROIdx)
{
  MLC.ROTryCountArr[ROIdx]++;
  MLC.ROStatusArr[ROIdx] = "OK";
  ROHandle = MLC.ROHandleArr[ROIdx];
  try
  {
    if (ROHandle)
    {
      if (ROHandle.readyState == 4 || ROHandle.readyState == 0)
      {
        ROHandle.open(MLC.ROMethodArr[ROIdx],MLC.ROSourceArr[ROIdx], true);
        ROHandle.setRequestHeader('Content-Type',
            'application/x-www-form-urlencoded');
        ROHandle.setRequestHeader("Content-length", MLC.ROSendDataArr[ROIdx].length);
        ROHandle.setRequestHeader("Connection", "close");
        ROHandle.onreadystatechange = function (){MLC.GetROResponse(ROIdx);};
        ROHandle.send(MLC.ROSendDataArr[ROIdx]);
      }
      else
      {
        MLC.ROStatusArr[ROIdx] = "TryOpenAsyncRO-1: " + ROHandle.readyState + "/" +
                                    ROHandle.statusText + "/" + ROHandle.status;
      }
    }
    else
    {
      MLC.ROStatusArr[ROIdx] = "Undefined XMLHttp Request Object!";
    }
  }
  catch(err)
  {
  }
  return;
}
MLC.GetROResponse = function (ROIdx)
{

  if (MLC.SystemFailed || MLC.ROStatusArr[ROIdx] == "OK")
  {
    MLC.ROTryCountArr[ROIdx] = false;
    clearTimeout(MLC.ROTimerArr[ROIdx]);
    MLC.ROStatusArr[ROIdx] = "";
    return;
  }
  if (!MLC.ROTryCountArr[ROIdx])
  {
    MLC.ROTryCountArr[ROIdx] = 0;
    MLC.ROStatusArr[ROIdx] = "";
  }
  if (MLC.ROTryCountArr[ROIdx] > 1)
  {
    if (MLC.ConfirmTryAgain(MLC.ROStatusArr[ROIdx]))
    {
      MLC.ROTryCountArr[ROIdx] = 0;
    }
    else
    {
      return;
    }
  }
  MLC.TryGetROResponse(ROIdx);
  if (MLC.ROStatusArr[ROIdx] != "OK")
  {
    MLC.ROTimerArr[ROIdx] = setTimeout("TryGetMLC.ROResponse("+ROIdx+")",1000);
  }
  else
  {
    MLC.ROTryCountArr[ROIdx] = false;
    clearTimeout(MLC.ROTimerArr[ROIdx]);
    MLC.ROStatusArr[ROIdx] = "";
  }
}
MLC.TryGetROResponse = function (ROIdx)
{
  try {
    MLC.ROTryCountArr[ROIdx]++;
    MLC.ROStatusArr[ROIdx] = "OK";
    if (MLC.ROHandleArr[ROIdx].readyState == 4)// transaction has completed
    {
      ROHandle = MLC.ROHandleArr[ROIdx];
      if (ROHandle.status == 200) // transaction completed successfully
      {
        MLC.ROResponse(ROIdx);
      }
      else // a HTTP status different than 200 signals an error
      {
        MLC.ROStatusArr[ROIdx] = "TryGetROResponse-1: " + ROHandle.readyState + "/" +
                                    ROHandle.statusText + "/" + ROHandle.status;
      }
    }
  }
  catch(err)
  {
  }
  return;
}
MLC.CreateRO = function (ROIdx)
{
  if (MLC.ROHandleArr[ROIdx] || MLC.SystemFailed)
  {
    return;
  }
  if (!MLC.ROTryCountArr[ROIdx])
  {
    MLC.ROTryCountArr[ROIdx] = 0;
  }
  if (MLC.ROTryCountArr[ROIdx] > 1)
  {
    if (MLC.ConfirmTryAgain("The server did not respond properly to a request\n" +
                        "to create an XMLHttp Request Object."))
    {
      MLC.ROTryCountArr[ROIdx] = 0;
    }
    else
    {
      return;
    }
  }
  if (!MLC.ROHandleArr[ROIdx])
  {
    MLC.TryCreateRO(ROIdx);
  }
  if (!MLC.ROHandleArr[ROIdx])
  {
    MLC.ROTimerArr[ROIdx] = setTimeout("MLC.CreateRO("+ROIdx+")",1000);
  }
  else
  {
    MLC.ROTryCountArr[ROIdx] = false;
    clearTimeout(MLC.ROTimerArr[ROIdx]);
  }
}
MLC.TryCreateRO = function (ROIdx)
{
  var CatchErr = ""
  if (MLC.SystemFailed)
  {
    return;
  }
  MLC.ROTryCountArr[ROIdx]++;

  if(window.ActiveXObject) //running Internet Explorer
  {
    try
    {
      MLC.ROHandleArr[ROIdx] = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch (err1)
    {
      CatchErr= err1.number + "/" + err1.message + err1.description;
      MLC.ROHandleArr[ROIdx] = false;
    }
  }
  else // running Mozilla or other browsers
  {
    try
    {
      MLC.ROHandleArr[ROIdx] = new XMLHttpRequest();
    }
    catch (err2)
    {
      CatchErr= err2.number + "/" + err2.message + err2.description;
      MLC.ROHandleArr[ROIdx] = false;
    }
  }
  if (CatchErr != "")
  {
    alert(CatchErr);
  }
  return;
}
MLC.ROResponse = function (ROIdx)
{
  var ROHandle = MLC.ROHandleArr[ROIdx];
  MLC.ROResponseArr[ROIdx] = ROHandle.responseText;
  switch (ROIdx)
  {
    case MLC.AccountMaintenanceROIdx:
      MLC.MaintainCustomerAccount2();
      break;
  }
}

//end HTTP Request functions ********************************

// begin DOM functions ************************************
MLC.$ = function (Element_id)
{
  return document.getElementById(Element_id);
}
MLC.$s = function (Element_id)
{
  return MLC.$(Element_id).style;
}
// begin misc. functions ************************************
MLC.ConfirmTryAgain = function (Err)
{
  var TryAgain = confirm("Server Error: The server responded with an error condition:\n" +
                         Err + "\n\n" + "The server might be busy or can not respond \n" +
                         "fast enough to your requests.\n\n" + "Click 'OK' to try again?\n\n" +
                         "Clicking 'cancel' will cause the application to shut down!");
  if (!TryAgain)
  {
    MLC.SystemFailure();
  }
  return TryAgain;
}
MLC.SystemFailure = function ()
{
  MLC.SystemFailed = true;
  document.body.innerHTML =
    "<table align='center'>\n" +
    "  <tr>\n" +
    "    <td>\n" +
    "      <div style='height:400px;width:600px;background:#FFFFFF;border:2px solid blue;'>\n"+
    "        <div style='margin: 100px 50px 0px 50px;'>\n"+
    "          <h3 style='color: blue;'>Las Vegas Nevada Real Estate 1<h3>\n"+
    "          <h4 style='color: black;'>\n"+
    "              Due to a serious system or server failure, this application \n"+
    "              was shut down. Try to execute the application again.  If you continue to \n"+
    "              have problems, please contact the Webmaster by email at: <br /><br /> \n"+
    "              <span style='color: red;'>MagicLampComputing@gmail.com</span>\n"+
    "          </h4>\n"+
    "         </div>\n"+
    "       </div>\n"+
    "    </td>\n"+
    "  </tr>\n" +
    "</table>\n";
}
MLC.DisableInput = function (InputID,StateOn)
{
  var InputEle = MLC.$(InputID);
  InputEle.disabled = false;
  InputEle.removeAttribute("disabled");
  if (StateOn)
  {
    InputEle.setAttribute("disabled","true");
    InputEle.disabled = true;
  }
}
MLC.BoxIsChecked = function (ChkBxID)
{
  var StateOn = false;
  var ChkBxEle = MLC.$(ChkBxID);
  if (ChkBxEle.getAttribute("checked") == true || ChkBxEle.checked)
  {
    StateOn = true;
  }
  return StateOn;
}
MLC.CheckTheBox = function (ChkBxID,StateOn)
{
  var ChkBxEle = MLC.$(ChkBxID);
  ChkBxEle.removeAttribute("checked");
  ChkBxEle.checked = false;
  if (StateOn)
  {
    ChkBxEle.setAttribute("checked","true");
    ChkBxEle.checked = true;
  }
}
MLC.WhichRadioChecked = function (RadioName)
{
  var RadioID = "";
  var TagArr = document.getElementsByTagName("input");
  for (var i=0; i<TagArr.length; i++)
  {
    if (TagArr[i].getAttribute("type") == "radio")
    {
      if (TagArr[i].getAttribute("name") == RadioName)
      {
        if (TagArr[i].getAttribute("checked") == true || TagArr[i].checked)
        {
          RadioID = TagArr[i].getAttribute("id");
          break;
        }
      }
    }
  }
  return RadioID;
}
MLC.CheckTheRadio = function (RadioName,RadioID)
{
  var TagArr = document.getElementsByTagName("input");
  for (var i=0; i<TagArr.length; i++)
  {
    if (TagArr[i].getAttribute("type") == "radio")
    {
      if (TagArr[i].getAttribute("name") == RadioName)
      {
        TagArr[i].checked = false;
        TagArr[i].removeAttribute("checked");
        if (TagArr[i].getAttribute("id") == RadioID)
        {
            TagArr[i].setAttribute("checked","true");
            TagArr[i].checked = true;
        }
      }
    }
  }
}
MLC.OptionIsSelected = function (OptionID)
{
  var StateOn = false;
  var OptionEle = MLC.$(OptionID);
  if (OptionEle.getAttribute("selected") == true || OptionEle.selected)
  {
    StateOn = true;
  }
  return StateOn;
}
MLC.SelectOption = function (OptionName,Attribute,AttributeValue)
{
  var TagArr = document.getElementsByTagName("option");
  var OptionSelected = false;
  for (var i=0; i<TagArr.length; i++)
  {
    if (TagArr[i].getAttribute("name") == OptionName)
    {
      TagArr[i].selected = false;
      TagArr[i].removeAttribute("selected");
      if (TagArr[i].getAttribute(Attribute) == AttributeValue && !OptionSelected)
      {
        TagArr[i].setAttribute("select","true");
        TagArr[i].selected = true;
        OptionSelected = true;
      }
    }
  }
}
MLC.WhichOptionSelected = function (OptionName)
{
  var OptionID = "";
  var TagArr = document.getElementsByTagName("option");
  for (var i=0; i<TagArr.length; i++)
  {
    if (TagArr[i].getAttribute("name") == OptionName)
    {
      if (TagArr[i].getAttribute("selected") == true || TagArr[i].selected)
      {
        OptionID = TagArr[i].getAttribute("id");
        break;
      }
    }
  }
  return OptionID;
}
MLC.DisableControls = function (ControlIdArr)
{
  var ControlEle = "";
  OnclickArr = new Array(0);
  for (var i=0; i<ControlIdArr.length; i++)
  {
    ControlEle = MLC.$(ControlIdArr[i]);
    OnclickArr[i] = ControlEle.getAttribute("onclick");
    ControlEle.setAttribute("onclick","alert('not available now');");
    ControlEle.style.filter = "alpha(opacity=30)";
    //ControlEle.style.-moz-opacity = "0.3";
    ControlEle.style.opacity = "0.3";
  }
  return OnclickArr;
}
MLC.EnableControls = function (ControlIdArr,OnclickArr)
{
  var ControlEle = "";
  for (var i=0; i < ControlIdArr.length; i++)
  {
    ControlEle = MLC.$(ControlIdArr[i]);
    if (!OnclickArr[i])
    {
      ControlEle.setAttribute("onclick","");
    }
    else
    {
      ControlEle.setAttribute("onclick",OnclickArr[i]);
    }
    //ControlEle.style.filter = "alpha(opacity=100)";
    ControlEle.style.filter = "";
    //ControlEle.style.-moz-opacity = "1.0";
    ControlEle.style.opacity = "";
  }
}
MLC.trim = function (inptext)
{
  return (inptext+"").replace(/^\s+|\s+$/g, '');
}
MLC.StrExtract = function (StrInp,StartTok,EndTok,Offset)
{
  var StrOut = "";
  var Offset = (!Offset) ? 0 : Offset;
  var StartPos = StrInp.indexOf(StartTok,Offset);
  var EndPos = 0;
  if (StartPos > -1)
  {
    StartPos = StartPos + StartTok.length;
    EndPos = StrInp.indexOf(EndTok,StartPos);
    if (EndPos > StartPos)
    {
      StrOut = StrInp.substring(StartPos,EndPos);
    }
  }
  return StrOut;
}
MLC.StrReplace = function (StrInp,SearchStr,ReplacementStr,Offset)
{
  var StrOut = StrInp;
  var Offset = (!Offset) ? 0 : Offset;
  var StartPos = StrInp.indexOf(SearchStr,Offset);
  if (StartPos > -1)
  {
    var EndPos = StartPos + SearchStr.length;
    var Part1 = StrInp.substring(0,StartPos);
    var Part2 = StrInp.substring(EndPos);
    StrOut = Part1 + ReplacementStr + Part2;
  }
  return StrOut;
}
MLC.ValidateStr = function (Str,OtherValidChrs)
{
  // validates for numbers, lower & uppercase letters and '_' and any OtherValidChrs
  var Valid = true;
  var ACode = 0;
  OtherValidChrs =  (OtherValidChrs == null) ? "" : OtherValidChrs;
  for (i=0; i<Str.length; i++)
  {
    ACode = Str.charCodeAt(i);
    if (OtherValidChrs.indexOf(Str.charAt(i)) < 0)
    {
      if (!((ACode >= 48 && ACode <= 57) || (ACode >= 65 && ACode <= 90) ||
            (ACode >= 97 && ACode <= 122) || (ACode == 95)))
      {
        Valid = false;
      }
    }
  }
  return Valid;
}
MLC.Dec2RGBHex = function (DecStr)
{
  var IntNum = parseInt(DecStr);
  var HexStr = IntNum.toString(16);
  HexStr = (HexStr.length == 1) ? "0" + HexStr : HexStr;
  return HexStr.toUpperCase();
}
MLC.HTMLRGB2HexColor = function (RGBColor)
{
  var HexColor = RGBColor;
  RGBColor = MLC.StrExtract(RGBColor.toLowerCase(),"rgb(",")",0)
  if (RGBColor.length > 0)
  {
    var RGBColorArr = RGBColor.split(",");
    var HexColor = "#"+Dec2RGBHex(RGBColorArr[0]) + Dec2RGBHex(RGBColorArr[1]) + Dec2RGBHex(RGBColorArr[2]);
  }
  return HexColor;
}
MLC.BaseFileName = function (FileSpec)
{
  var Pos = FileSpec.lastIndexOf("/");
  if (Pos < 0)
  {
    return FileSpec;
  }
  else
  {
    return FileSpec.substring(Pos + 1);
  }
}
MLC.WholeDollars = function (NbrIn)
{
	 NbrIn = parseInt(NbrIn)+"";
	 var rgx = /(\d+)(\d{3})/;
	 while (rgx.test(NbrIn))
  {
		  NbrIn = NbrIn.replace(rgx, '$1' + ',' + '$2');
  }

	return "$" + NbrIn;
}
MLC.Nbr2HundrethsStr = function (NbrIn,ReformWholeNbr)
{
	if (arguments.length == 1)
  {
    ReformWholeNbr = false;
  }
  var NbrStr = (Math.round(NbrIn*100)/100).toString(10);
  var Pos = NbrStr.indexOf(".");
  if (Pos < 0)
  {
    if (ReformWholeNbr)
    {
      NbrStr = NbrStr + ".00";
    }
  }
  else if (Pos == 0)
  {
    NbrStr = "0" + (NbrStr + "00").substring(0,3);
  }
  else //(NbrStr.indexOf(".") > 0)
  {
    NbrStr = NbrStr.substring(0,Pos+1) +
             (NbrStr.substring(Pos+1)+"00").substring(0,2);
  }
	return NbrStr;
}
MLC.FormatDate = function (DateInp,DateFormat)
{
  var MMMarr =  new Array("Jan","Feb","Mar","Apr","May","Jun",
                          "Jul","Aug","Sep","Oct","Nov","Dec");
  var DateOut = "";
  //DateInp is js date object created by Date()
  switch (DateFormat)
  {
    case "mdyt": // e.g. Aug 12, 2001 10:20:05 am
      var mmm = MMMarr[DateInp.getMonth()];
      var dd =  MLC.LeadingZeros(DateInp.getDate(),2);
      var yyyy = DateInp.getFullYear() + "";
      var hrs = DateInp.getHours();
      var ampm = "";
      if (hrs < 12)
      {
        ampm = "am";
      }
      else
      {
        hrs = (hrs-12);
        ampm = "pm";
      }
      hrs = MLC.LeadingZeros(hrs,2);
      var min = MLC.LeadingZeros(DateInp.getMinutes(),2);
      var sec = MLC.LeadingZeros(DateInp.getSeconds(),2);
      DateOut = mmm + " " + dd + ", " + yyyy  + " " +
                hrs + ":" + min + ":" + sec + ampm;
      break;
    case "dmy": // e.g.  20Mar2000

      var dd = MLC.LeadingZeros(DateInp.getDate(),2);
      var mmm = MMMarr[DateInp.getMonth()];
      var yyyy = DateInp.getFullYear() + "";
      DateOut = dd + mmm + yyyy;
      break;
    case "y-m-d": // e.g. 2002-06-25
      var dd = MLC.LeadingZeros(DateInp.getDate(),2);
      var mm = MLC.LeadingZeros(DateInp.getMonth()+1,2);
      var yyyy = DateInp.getFullYear()+"";
      DateOut = yyyy + "-" + mm + "-" + dd;
      break;
    case "y-m-d-h-m-s": // e.g. 2002-06-25 14:40:35
      var dd = MLC.LeadingZeros(DateInp.getDate(),2);
      var mm = MLC.LeadingZeros(DateInp.getMonth()+1,2);
      var yyyy = DateInp.getFullYear()+"";
      var hrs = LeadingZeros(DateInp.getHours(),2);
      var min = LeadingZeros(DateInp.getMinutes(),2);
      var sec = LeadingZeros(DateInp.getSeconds(),2);
      DateOut = yyyy + "-" + mm + "-" + dd + " " + hrs + ":" + min + ":" + sec;
      break;
    default:
      DateOut = DateInp.toString;
  }
  return DateOut;
}
MLC.LeadingZeros = function (numinp,outlen,increment)
{
  if (arguments.length == 1)
  {
    putlen = 2;
    increment = 0;
  }
  else if (arguments.length == 2)
  {
    increment = 0;
  }
  numinp = numinp + increment;
  var padded = Math.pow(10,outlen);
  var numoutstr = "";
  numinp = numinp + 0;
  if (padded <= numinp)
  {
    numoutstr = numinp + "";
  }
  else
  {
    padded = padded + numinp;
    padded = padded + "";
    numoutstr = padded.substring(1);
  }
  return numoutstr;
}
MLC.ToTitleCase = function (StrIn)
{
  StrArr = StrIn.split(" ");
  for (i in StrArr)
  {
    StrArr[i] = StrArr[i].substring(0,1).toUpperCase() + StrArr[i].substring(1).toLowerCase();
  }
  return StrArr.join(" ");
}
MLC.PrintFrame = function (FrameName)
{
  var HoldWidth = MLC.$(FrameName).style.width;
  var HoldHeight = MLC.$(FrameName).style.height;

  MLC.$(FrameName).style.width = "7.5in";
  MLC.$(FrameName).style.height = "10in";

  if (typeof(document[FrameName]) == "undefined") //FireFox
  {
    window.frames[FrameName].focus();
    window.frames[FrameName].print();

  }
  else //I.E.
  {
    document[FrameName].focus();
    document[FrameName].print();
  }
  MLC.$(FrameName).style.width = HoldWidth;
  MLC.$(FrameName).style.height = HoldHeight;
}
MLC.UserDir = function ()
{
  return "ibizpage/" + MLC.LoginID;
}
MLC.BrowserIsMSIE = function ()
{
  if (navigator.appName.toLowerCase().indexOf("internet explorer") >= 0)
  {
    return true;
  }
  else
  {
    return false;
  }
}
MLC.mlsScrollToXY = function (wdw,x,y)
{
  if (!wdw.scrollTo)
  {
    wdw.document.body.scrollTo(x,y); //I.E.
  }
  else
  {
     wdw.scrollTo(x,y); //Mozilla/Firefox
  }
}
