var g_helperObj = null;
var g_cmdFrame = null;
var checkMode = true;
var g_oldSelectVal = null;
var g_onLoadEvents = new Array();
var g_hookEnterKey = new Array();
var g_hookArrowKeys = new Array();
var g_keyPressed = null;
var g_doActionAfterPost = new Array();

window.onscroll = positionCmdButtons;

if (!document.all && document.getElementById) {
  document.addEventListener("keypress",handleOnKeyPress,true);
} else {
  document.onkeypress = handleOnKeyPress;
}

function handleOnKeyPress(e) {
  var keyPressed = document.layers ? e.which:document.all ? event.keyCode:e.keyCode;
  g_keyPressed = keyPressed;
  var notHandled = true;
  switch (keyPressed) {
    case 13:
      notHandled = handleEnterKey();
      break;
    case 38:
    case 40:
      g_arrowKeysPressed = true;
      notHandled = handleArrowKeys();
      break;
    default:
      break;
  }
  return notHandled;
}

function handleEnterKey() {
  if (g_hookEnterKey && g_hookEnterKey.length > 0) {
    for (var i=0; i<g_hookEnterKey.length; i++) {
      eval(g_hookEnterKey[i]);
    }
    return false;
  } else {
    return true;
  }
}

function handleArrowKeys() {
  if (g_hookArrowKeys && g_hookArrowKeys.length > 0) {
    for (var i=0; i<g_hookArrowKeys.length; i++) {
      eval(g_hookArrowKeys[i]);
    }
    return false;
  } else {
    return true;
  }
}

function setEnterKeyEvent(func) {
  if (func) {
    var exists = false;
    for (var i=0; i<g_hookEnterKey.length; i++) {
      if (g_hookEnterKey[i] == func) {
        exists = true;
        continue;
      }
    }
    if (!exists) {
      g_hookEnterKey[g_hookEnterKey.length] = func;
    }
  }
}

function hookEnterKeyForFilter() {
  var cmd = 'window.setTimeout(\'document.location="?rpp=filter"\',600);';
  setEnterKeyEvent(cmd);
}

function clearEnterKeyHook() {
  g_hookEnterKey = new Array();
}

function showForm(linkObj,pageId) {
  var upLevel = document.getElementById('upLevel');
  var pageObj = document.getElementById(pageId);
  if (linkObj && pageObj && upLevel) {
    // hide all pages
    var pages = new Array('buyPage','sellPage','rentPage','loftsPage','devPage');
    for (var i=0;i<pages.length;i++) {
      var page = document.getElementById(pages[i]);
      if (page) {
        page.style.display = 'none';
      }
    }
    // clear all menus
    var divObj = document.getElementById('frontNav');
    if (divObj) {
      var els = divObj.getElementsByTagName('SPAN');
      for (var i=0;i<els.length;i++) {
        els[i].className = els[i].className.replace("Sp","")+"Sp";
      }
    }
    // set the menu
    linkObj.parentNode.className = pageId;
    // load the frame
    var frameObj = document.getElementById(pageId+'Frame');
    var domainName = document.getElementById('domainName');
    if (domainName && frameObj && !frameObj.src) {
      frameObj.src = upLevel.value+domainName.value+'/'+pageId+'.php';
      // handle special page requirements
      switch (pageId) {
        case 'loftsPage':
          setCmdFrameSrc(upLevel.value+'shared/loadingdata.php',true);
          break;
        case 'buyPage':
        case 'rentPage':
          setCmdFrameSrc(upLevel.value+'shared/searchingdata.php',false);
          break;
      }
    } else {
      switch (pageId) {
        case 'loftsPage':
          setCmdFrameSrc(upLevel.value+'shared/loadingdata.php',false);
          break;
        case 'buyPage':
        case 'rentPage':
          setCmdFrameSrc(upLevel.value+'shared/searchingdata.php',false);
          break;
      }
    }
    // show the page
    pageObj.style.display = 'block';
    linkObj.blur();
  }
}

function switchDomain(listObj) {
  if (listObj && listObj.options) {
    var location = "../"+listObj.options[listObj.options.selectedIndex].value+"/";
    document.location = location;
  }
}

function hookList() {
  setDomainBackground();
  if (document.all && document.getElementById) {
    createHelperObj();
    var navRoot = document.getElementById("domainSelect");
    if (navRoot) {
      hookUL(navRoot);
    }
    navRoot = document.getElementById("sideMenu");
    if (navRoot) {
      hookUL(navRoot);
    }
    navRoot = document.getElementById("toolsMenu");
    if (navRoot) {
      hookUL2(navRoot);
    }
  }
  // increase the height of content page to the minimum
  var content = document.getElementById("content");
  if (content) {
    if (document.all) {
      if (content.clientHeight < 659) {
        content.style.height = "659px";
      }
    } else {
      if (content.clientHeight < 653) {
        content.style.height = "653px";
      }
    }
  }
  resizeFrame('favoriteProps');
  // execute all on load events
  if (g_onLoadEvents.length > 0) {
    for (var evt in g_onLoadEvents) {
      if (evt) {
        eval(g_onLoadEvents[evt]);
      }
    }
  }
}

function hookUL(navRoot) {
  for (var i=0; i<navRoot.childNodes.length; i++) {
    var node = navRoot.childNodes[i];
    if (node.nodeName=="LI") {
      node.onmouseover=function() {
        this.className+=" over";
        toggleCloak(this);
      }
      node.onmouseout=function() {
        this.className=this.className.replace(" over", "");
        toggleCloak(this);
      }
    }
  }
}

function hookUL2(navRoot) {
  for (var i=0; i<navRoot.childNodes.length; i++) {
    var node = navRoot.childNodes[i];
    if (node.nodeName=="LI") {
      node.onmouseover=function() {
        this.className+=" over";
      }
      node.onmouseout=function() {
        this.className=this.className.replace(" over", "");
      }
    }
  }
}

function createHelperObj() {
  if (g_helperObj == null) {
    g_helperObj = document.createElement('iframe');
    if (g_helperObj) {
      g_helperObj.style.display = 'none';
      g_helperObj.style.position = 'absolute';
      g_helperObj.setAttribute('frameBorder','0');
      g_helperObj.setAttribute('scrolling','no');
      document.body.appendChild(g_helperObj);
    }
  }
}

function getLeftPos(obj) {
  return (obj.offsetParent ?
    obj.offsetLeft + getLeftPos(obj.offsetParent):
    obj.offsetLeft);
}

function getTopPos(obj) {
  return (obj.offsetParent ?
    obj.offsetTop + getTopPos(obj.offsetParent):
    obj.offsetTop);
}

function toggleCloak(obj) {
  if (obj && g_helperObj) {
    if (g_helperObj.style.display == 'block') {
      g_helperObj.style.display = 'none';
    } else if (obj.childNodes.length > 1) {
      var ul = obj.childNodes[1];
      g_helperObj.style.top = getTopPos(ul)+'px';
      g_helperObj.style.left = getLeftPos(ul)+'px';
      g_helperObj.style.width = ul.clientWidth+'px';
      g_helperObj.style.height = ul.clientHeight+'px';
      g_helperObj.style.display = 'block';
    }
  }
}

function setDomainBackground() {
  var domainName = document.getElementById('domainName');
  var domainArea = document.getElementById('domainArea');
  var upLevel = document.getElementById('upLevel');
  if (domainName && domainArea && upLevel) {
    domainArea.style.background = 'navy url('+upLevel.value+'images/'+domainName.value+'_skyline.jpg) no-repeat right center';
  }
}

function changeCity(city) {
  if (city && city.options) {
    document.location = city.options[city.options.selectedIndex].value;
  }
}

function toggleStatusMessage(mode) {
  if (g_cmdFrame) {
    if (mode && mode == 'off') {
      g_cmdFrame.style.display = "none";
    }
    else if (g_cmdFrame.style.display == "block") {
      g_cmdFrame.style.display = "none";      
    } else {
      var scrollHeight = 0;
      if (document.body.scrollTop) {
        scrollHeight = document.body.scrollTop;
      } else if (window.pageYOffset) {
        scrollHeight = window.pageYOffset;
      }
      g_cmdFrame.style.top = ((document.body.clientHeight-60)/2+scrollHeight)+"px";
      g_cmdFrame.style.left = ((document.body.clientWidth-300)/2)+"px";
      g_cmdFrame.style.display = "block";
    }
  }
}

function setCmdFrameSrc(source,display) {
  if (g_cmdFrame == null) {
    g_cmdFrame = document.createElement("iframe");
  }
  if (g_cmdFrame && source) {
    g_cmdFrame.style.position = "absolute";
    g_cmdFrame.setAttribute("frameBorder","0");
    g_cmdFrame.setAttribute("scrollObj","no");
    g_cmdFrame.id = "cmdFrame";
    g_cmdFrame.width = "300px";
    g_cmdFrame.height = "60px";
    var scrollHeight = 0;
    if (document.body.scrollTop) {
      scrollHeight = document.body.scrollTop;
    } else if (window.pageYOffset) {
      scrollHeight = window.pageYOffset;
    }
    g_cmdFrame.style.top = ((document.body.clientHeight-60)/2+scrollHeight)+"px";
    g_cmdFrame.style.left = ((document.body.clientWidth-300)/2)+"px";
    g_cmdFrame.src = source;
    if (display) {
      g_cmdFrame.style.display = "block";
    } else {
      g_cmdFrame.style.display = "none";
    }
    if (!document.getElementById("cmdFrame")) {
      document.body.appendChild(g_cmdFrame);
    }
  }
}

function refreshFavoritesFrame() {
  var favs = document.getElementById('favoriteProps');
  if (favs) {
    var temp = favs.src+'?rnd='+Math.random();
    favs.src = temp;
  }
}

function resizeFrame(frameId) {
  if (frameId) {
    var frameObj = document.getElementById(frameId);
    var divObj = document.getElementById('content');
    if (frameObj && divObj) {
      frameObj.style.height = (divObj.clientHeight+1)+"px";
    }
  }
}

function changeSort(listObj) {
  if (listObj && listObj.options) {
    document.location = '?sortBy='+listObj.options[listObj.selectedIndex].value;
  }
}

function dspMsg(messageId) {
  switch (messageId) {
    case 1:
      alert("You are required to log in or register before viewing property details.");
      break;
    case 2:
      alert("You are required to log in or register before viewing all property details.");
      break;
    case 3:
      alert("You are required to log in or register before scheduling a showing.");
      break;
    case 4:
      alert("You are required to log in or register before adding to favorites.");
      break;
    case 5:
      alert("You are required to log in or register before printing property details.");
      break;
  }
}

function confirmChange() {
  return confirm("Are you sure you want to change this value?");
}

function duplicateValue(src,dest) {
  src = document.getElementById(src);
  dest = document.getElementById(dest);
  if (src && dest) {
    dest.value = src.value;
  }
}

function focusField(fieldName) {
  var fieldObj = document.getElementById(fieldName);
  if (fieldObj && (fieldObj.type=='text' || fieldObj.type=='password')) {
    var r = null;
    if (fieldObj.createTextRange) {
      r = fieldObj.createTextRange();
    } else if (fieldObj.createRange) {
      r = fieldObj.createRange();
    }
    if (r) {
      r.moveStart('character',fieldObj.value.length);
      r.select();
    }
    fieldObj.focus();
  }
}

function toggleChecks(formName,exceptions) {
  if (formName) {
    var formObj = document.getElementById(formName);
    if (formObj) {
      var checks = formObj.getElementsByTagName("input");
      for (var i=0;i<checks.length;i++) {
        var cb = checks[i];
        if (cb && cb.type == "checkbox") {
          if (exceptions) {
            var regex = new RegExp(cb.id,"gi");
            if (!regex.test(exceptions)) {
              cb.checked = checkMode;
            }
          } else {
            cb.checked = checkMode;
            highlightRow(cb);
          }
        }
      }
      checkMode = !checkMode;
    }
  }
}

function setContentWidth(width) {
  var content = document.getElementById('content');
  if (content) {
    content.style.width = width+'px';
  }
}

function setCheckbox(fieldId,mode) {
  if (fieldId) {
    var fieldObj = document.getElementById(fieldId);
    if (fieldObj) {
      fieldObj.checked = mode;
    }
  }
}

function setContentHeight(childDivName) {
  var content = document.getElementById("content");
  var childObj = document.getElementById(childDivName);
  if (content && childObj) {
    content.style.height = childObj.clientHeight + 30;
  }
}

function toggleClientInfo(areaName,mode) {
  if (areaName) {
    var displayStr = 'inline';
    if (!document.all) {
      displayStr = 'table-row';
    }
    var els = document.getElementsByTagName('tr');
    for (var i=0;i<els.length;i++) {
      if (els[i].id == areaName) {
        if (mode === false) {
          els[i].style.display = 'none';
        }
        else if (mode === true || els[i].style.display == 'none' || els[i].style.display == '' || els[i].style.display == null) {
          els[i].style.display = displayStr;
        } else {
          els[i].style.display = 'none';
        }
      }
    }
    if (!document.all) {
      setContentHeight('frontPage');
    }
  }
  positionCmdButtons();
}

function positionCmdButtons() {
  window.setTimeout("moveSideCmdbuttons()",200);
}

function moveSideCmdbuttons() {
  var cmdButtons = document.getElementById('sideCmdButtons');
  if (cmdButtons) {
    var scrollHeight = 0;
    if (document.body.scrollTop) {
      scrollHeight = document.body.scrollTop;
    } else if (window.pageYOffset) {
      scrollHeight = window.pageYOffset;
    }
    cmdButtons.style.top = scrollHeight;
  }
}

function closeOneTab(id) {
  var enabled = document.getElementById(id+'Enabled');
  var error = document.getElementById(id+'Error');
  if (enabled || error) {
    doLoadModule(id,false);
  }
}

function highlightRow(cbObj) {
  if (cbObj && cbObj.type == 'checkbox') {
    var lastColor = cbObj.parentNode.parentNode.color;
    var color = "#ffffff";
    if (lastColor != null) {
      color = lastColor;
    }
    if (cbObj.checked) {
      color = "#ffffd0";
    }
    var children = cbObj.parentNode.parentNode.children;
    cbObj.parentNode.parentNode.color = children[0].style.backgroundColor;
    for (var i=0;i<children.length;i++) {
      children[i].style.backgroundColor = color;
    }
  }
}

function displayAddtlFilter(objName) {
  var obj = document.getElementById(objName);
  if (obj && obj.options) {
    var spans = obj.parentNode.getElementsByTagName('span');
    if (spans && spans.length > 0) {
      for (var i=0;i<spans.length;i++) {
        if (spans[i].id == 'sp_'+obj.options[obj.options.selectedIndex].value) {
          spans[i].style.display = 'inline';
        } else {
          spans[i].style.display = 'none';
        }
      }
    }
  }
}

function sendEmailLink(fieldId,addComms) {
  if (fieldId) {
    var fieldObj = document.getElementById(fieldId);
    if (fieldObj) {
      var addr = '';
      switch (fieldObj.type) {
        case 'text':
        case 'hidden':
        case 'textarea':
          addr = fieldObj.value;
          break;
        case 'select-one':
          addr = fieldObj.options[fieldObj.options.selectedIndex].value;
          break;
      }
      if (addr.length > 0) {
        if (addComms) {
          addToCommsLog(2,addComms,addr);
        }
        window.open('mailto:'+addr);
      } else {
        alert('No email address!');
      }
    }
  }
}

function selectListByValue(fieldId,value) {
  if (fieldId && value) {
    var fieldObj = document.getElementById(fieldId);
    if (fieldObj && fieldObj.options) {
      for (var i=0;i<fieldObj.options.length;i++) {
        if (fieldObj.options[i].value == value) {
          fieldObj.options.selectedIndex = i;
          break;
        }
      }
    }
  }
}

