/*
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.TCG = {}; //namespace container & global variable definer

//begin HTTP Request functions ******************************

TCG.OpenAsyncRO = function (ROIdx)
{
  if (TCG.SystemFailed)
  {
    return;
  }
  TCG.ROTryCountArr[ROIdx] = 0;
  TCG.ROStatusArr[ROIdx] = false;
  TCG.TryOpenAsyncRO(ROIdx);
  if (!TCG.ROStatusArr[ROIdx])
  {
    TCG.ROTryCountArr[ROIdx]++;
    setTimeout("TCG.TryOpenAsyncRO("+ROIdx+")",1000);
  }
  return;  
};
TCG.TryOpenAsyncRO = function (ROIdx)
{
  if (TCG.SystemFailed)
  {
    return;
  }
  ROHandle = TCG.ROHandleArr[ROIdx];
  try
  {
    if (ROHandle.readyState == 4 || ROHandle.readyState == 0)
    {
      ROHandle.open("POST",TCG.ROSourceArr[ROIdx], true);
      ROHandle.setRequestHeader('Content-Type',
          'application/x-www-form-urlencoded');
      ROHandle.setRequestHeader("Content-length", TCG.ROSendDataArr[ROIdx].length);
      ROHandle.setRequestHeader("Connection", "close");
      ROHandle.onreadystatechange = function (){TCG.GetROResponse(ROIdx);};
      ROHandle.send(TCG.ROSendDataArr[ROIdx]);
      TCG.ROStatusArr[ROIdx] = true;
    }
  }
  catch(err)
  {
    TCG.ROStatusArr[ROIdx] = false;
  }
  if (!TCG.ROStatusArr[ROIdx] && TCG.ROTryCountArr[ROIdx] > 0)
  {
    TCG.SystemFailed = true;
    alert("System Failure! Failed to open HTTP Request(" + ROIdx +"): " + 
          ROHandle.readyState + "/" + ROHandle.statusText + "/" + ROHandle.status)  
  }
  return;
};
TCG.GetROResponse = function (ROIdx)
{
  var ROHandle;
  
  if (TCG.SystemFailed)
  {
    return;
  }
  ROHandle = TCG.ROHandleArr[ROIdx];
  if (ROHandle.readyState == 4) // transaction has completed
  {  
    if (ROHandle.status == 200) // transaction completed successfully
    {
      TCG.ROResponse(ROIdx);
    }
    else // a HTTP status different than 200 signals an error
    {
      TCG.SystemFailed = true;
      alert("System Failure! Failed to get HTTP Request response: " + 
            ROHandle.readyState + "/" + ROHandle.statusText + "/" + ROHandle.status);
    }
  }
  return;
};
TCG.CreateRO = function (ROIdx)
{
  if (TCG.ROHandleArr[ROIdx] || TCG.SystemFailed)
  {
    return;
  }
  TCG.ROTryCountArr[ROIdx] = 0;
  TCG.ROHandleArr[ROIdx] = false;
  TCG.TryCreateRO(ROIdx);
  if (!TCG.ROHandleArr[ROIdx])
  {
    TCG.ROTryCountArr[ROIdx]++;
    setTimeout("TCG.TryCreateRO("+ROIdx+")",1000);
  }
  return;
};
TCG.TryCreateRO = function (ROIdx)
{
  var CatchErr = "";
  
  if (TCG.SystemFailed)
  {
    return;
  }
  try 
  {
    TCG.ROHandleArr[ROIdx] = new XMLHttpRequest();
  } 
  catch (err) 
  {
    try 
    {
      TCG.ROHandleArr[ROIdx] = new ActiveXObject("Msxml2.XMLHTTP");
    } 
    catch (err)
    {
      try 
      {
        TCG.ROHandleArr[ROIdx] = new ActiveXObject("Microsoft.XMLHTTP");
      } 
      catch (err) 
      {
        TCG.ROHandleArr[ROIdx] = false;
      }
    }
  }
  if (!TCG.ROHandleArr[ROIdx] && TCG.ROTryCountArr[ROIdx] > 0)
  {
    TCG.SystemFailed = true;
    alert("System Failure! Failed to create HTTP Request Object: " + ROIdx)  
  }
  return;
};
TCG.ROResponse = function (ROIdx)
{
  var ROHandle = TCG.ROHandleArr[ROIdx];
  TCG.ROResponseArr[ROIdx] = ROHandle.responseText;
  eval(TCG.ROFunctionArr[ROIdx]);
}

//end HTTP Request functions ********************************

// begin DOM functions ************************************
TCG.$ = function (Element_ID)
{
  if (document.getElementById(Element_ID))
  {
    return document.getElementById(Element_ID);
  }
  else
  {
    alert(Element_ID);
    return null;
  }
};
TCG.$s = function (Element_ID)
{
  if (document.getElementById(Element_ID))
  {
    return document.getElementById(Element_ID).style;
  }
  else
  {
    alert(Element_ID);
    return null;
  }
  //return document.getElementById(Element_ID).style;
};
TCG.$sv = function (Element_ID,IsVisible)
{
  if (arguments.length == 2)
  {  
    document.getElementById(Element_ID).style.visibility = 
        (IsVisible) ? "visible" : "hidden";
    return;        
  }
  else
  {
    return document.getElementById(Element_ID).style.visibility;
  }
}
// begin misc. functions ************************************

TCG.SystemFailure = function ()
{
  TCG.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;'>Webmaster@TechCombine.com</span>\n"+
    "          </h4>\n"+
    "         </div>\n"+
    "       </div>\n"+
    "    </td>\n"+
    "  </tr>\n" +
    "</table>\n";
};
TCG.BoxIsChecked = function (ChkBxID)
{
  var StateOn = false;
  var ChkBxEle = TCG.$(ChkBxID);
  if (ChkBxEle.getAttribute("checked") == true || ChkBxEle.checked)
  {
    StateOn = true;
  }
  return StateOn;
};
TCG.CheckTheBox = function (ChkBxID,StateOn)
{
  var ChkBxEle = TCG.$(ChkBxID);
  ChkBxEle.removeAttribute("checked");
  ChkBxEle.checked = false;
  if (StateOn)
  {
    ChkBxEle.setAttribute("checked","true");
    ChkBxEle.checked = true;
  }
};
TCG.trim = function (inptext)
{
  return (inptext+"").replace(/^\s+|\s+$/g, '');
};
TCG.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;
};
TCG.ValidateEmail = function (EmailInp)
{
  var OK = true;
  var RE = new RegExp("^[\_]*([a-z0-9]+(\.|\_*)?)+@([a-z][a-z0-9\-]+(\.|\-*\.))+[a-z]{2,6}$");
  OK = (!EmailInp.match(RE) ? false : true);
  return OK;
};
TCG.InitArr = function (Len,Val)
{
  var Arr,i;
  
  Arr = new Array(Len);
  for (i = 0; i < Len; i++)
  { 
    Arr[i] = Val;
  }
  return Arr;
};

TCG.SetOpacity = function (ElementID,Opacity) // moz values 0.0 - 1.0
{
  var ElementStyle,OpacityX100;
  Opacity = (Opacity > 1) ? 1 : Opacity;
  Opacity = (Opacity < 0) ? 0 : Opacity;
  ElementStyle = TCG.$s(ElementID);
  OpacityX100 = Math.round(Opacity * 100);
  if (TCG.WhichBrowserVersion() == "ie8")
  {   
    ElementStyle.filter ="progid:DXImageTransform.Microsoft.Alpha(opacity="+OpacityX100+")";
  }
  else
  {
    ElementStyle.filter = "alpha(opacity="+OpacityX100+")";
  }
  ElementStyle.opacity = Opacity;
}
TCG.BrowserSize = function (DefaultWidth,DefaultHeight) {
  if (arguments.length == 0)
  {
    var DefaultWidth = 800;
    var DefaultHeight = 600;
  }
  var BrowserWidth = 0, BrowserHeight = 0;
  if (window.innerWidth > 0) //typeof(window.innerWidth ) == 'number'
  {
    //Non-IE
    BrowserWidth = window.innerWidth;
    BrowserHeight = window.innerHeight;
  } 
  else if (document.documentElement && 
            (document.documentElement.clientWidth || 
              document.documentElement.clientHeight))
  {
    //IE 6+ in 'standards compliant mode'
    BrowserWidth = document.documentElement.clientWidth;
    BrowserHeight = document.documentElement.clientHeight;
  }
  else if (document.body && 
            ( document.body.clientWidth || 
              document.body.clientHeight))
  {
    //IE 4 compatible
    BrowserWidth = document.body.clientWidth;
    BrowserHeight = document.body.clientHeight;
  }
  if (BrowserWidth == 0 || BrowserHeight == 0)
  {
    BrowserWidth = DefaultWidth;
    BrowserHeight = DefaultHeight;
  }
  return {Width:BrowserWidth,Height:BrowserHeight};
};
TCG.WhichBrowser = function (BrowserCodes) 
{ 
  var App = navigator.appName.toLowerCase();
  var AppCode = "??";
  if (App.indexOf("internet explorer") >= 0)
  {
    AppCode = "ie";
  }
  else if (App.indexOf("netscape") >= 0)
  {
    AppCode = "ns";
  }
  else if (App.indexOf("opera") >= 0)
  {
    AppCode = "op";
  } 
  if (arguments.length == 1)
  {
    var IsBrowser = (BrowserCodes.indexOf(AppCode) >=0) ? true : false;
    return IsBrowser;
  }
  else
  {
    return AppCode;
  }
};
TCG.WhichBrowserVersion = function (BrowserCodes) 
{
  var App,AppCode,BVersion; 
  BVersion = "";
  
  App = navigator.appName.toLowerCase();
  AppCode = "?";
  if (App.indexOf("internet explorer") >= 0)
  {
    AppCode = "ie";
  }
  else if (App.indexOf("netscape") >= 0)
  {
    AppCode = "ns";
  }
  else if (App.indexOf("opera") >= 0)
  {
    AppCode = "op";
  }
  AppCode = AppCode + TCG.GetBrowserVersion(AppCode); 
  if (arguments.length == 1)
  {
    BrowserCodes = BrowserCodes + "/";
    AppCode = AppCode + "/";
    var IsBrowser = (BrowserCodes).indexOf(AppCode >=0) ? true : false;
    return IsBrowser;
  }
  else
  {
    return AppCode;
  }  
};
TCG.GetBrowserVersion = function (AppCode)
{
  var Vers,UAgent,RE;

  Vers = "";
  if (AppCode == "ie")
  {
    UAgent = navigator.userAgent;
    RE  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
    if (RE.exec(UAgent) != null)
    {
      Vers = parseInt(RegExp.$1,10) + "";
    }
  }
  else
  {
    Vers = parseInt(navigator.appVersion,10) + "";
  }
  return Vers;
};

TCG.debug = function (What)
{
  document.getElementById("debug").innerHTML = What;
}
