var g_oldErrorHandler = g_AjaxQueue.errorHandler;

function getWindowX(){
    try{
       if( typeof(window.innerWidth) == 'number' ){
          return window.innerWidth;
       } else if( document.documentElement && document.documentElement.clientWidth ) {
          return document.documentElement.clientWidth; 
       } else if( document.body && document.body.clientWidth ) {
          return document.body.clientWidth;
       } else {
          return 1024;
       }
   }catch (e){
   }
   return 1024;
}

function getWindowY(){
    try{
       if( typeof(window.innerHeight) == 'number' ){
          return window.innerHeight;
       } else if( document.documentElement && document.documentElement.clientHeight ) {
          return document.documentElement.clientHeight; 
       } else if( document.body && document.body.clientHeight ) {
          return document.body.clientHeight;
       } else {
          return 768;
       }
   }catch (e){
   }
   return 768;
}

function getScrollX(){
   if( typeof( window.pageXOffset ) == 'number' ) {
    return window.pageXOffset;
  } else if( document.body && document.body.scrollLeft ) {
    return document.body.scrollLeft;
  } else if( document.documentElement && document.documentElement.scrollLeft ) {
    return document.documentElement.scrollLeft;
  }
  return 0;
}

function getScrollY(){
   if( typeof( window.pageYOffset ) == 'number' ) {
    return window.pageYOffset;
  } else if( document.body && document.body.scrollTop ) {
    return document.body.scrollTop;
  } else if( document.documentElement && document.documentElement.scrollTop ) {
    return document.documentElement.scrollTop;
  }
  return 0;
}

function getPageX(){
   if( window.innerHeight && window.scrollMaxY ){
      return window.innerHeight + window.scrollMaxY;
   } else if( document.body.scrollHeight > document.body.offsetHeight ){
      return document.body.scrollHeight;
   } else { 
      return document.body.offsetHeight + document.body.offsetTop; 
   }
}

function EraShowFullPageWaitDialog(){
   var pWaiter = document.getElementById('enidxmls_waiter');
   if( pWaiter ) {
      EraHideFullPageWaitDialog();
   }

   var x = (getWindowX() / 2) + getScrollX();
   var y = (getWindowY() / 2) + getScrollY();

   var pDialog = document.createElement('div');
   pDialog.id = 'enidxmls_waiter';
   pDialog.style.height = getPageX() +'px';

   var pShader = document.createElement('div');
   pShader.className = 'enidxmls_shader';
   pShader.innerHTML = ' &nbsp;  ';
   pDialog.appendChild(pShader);


   var pInner = document.createElement('div');
   pInner.style.left = ((970 -659)/2) + 'px';
   pInner.style.top = (y - 200) + 'px';
   pInner.style.width = '651px';
   pInner.style.height = '370px';
   pInner.style.padding = '4px';
   pInner.style.position = 'absolute';
   pInner.style.textAlign = 'center';
   pInner.style.backgroundColor = '#ffffff';
   pInner.style.border = '1px solid #cccccc';

   pInner.innerHTML = '<div style="width:651px;height:370px;text-align:center;">'+
                         '<img src="/eraimages/idxwait.jpg" width="651" height="331">'+
                         '<br>'+
                         '<span class="B2">Please be patient while we prepare your local listings.</span>'+
                         '<br>'+
                         '<img src="/eraimages/loadingbar.gif" width="156" height="18" style="margin-top:5px;">'+
                      '</div>';
   pDialog.appendChild(pInner);
   document.body.appendChild(pDialog);
}

function EraHideFullPageWaitDialog(){
   document.body.removeChild(document.getElementById('enidxmls_waiter'));
}

function doIDXSearchFromForm( pForm )
{
   if ( !pForm ) return true;

   if ( pForm.MLSXP.value != '' && pForm.MLSXP.value != 'Enter Express Code or MLS/Listing ID#' ) {
      return pForm.submit();
   }

   if (pForm.City.value != "") {
      if (pForm.State[pForm.State.selectedIndex].value == "") {
         alert("Please select a state to search");
         return false;
      }
   }
   if (pForm.County.value != "") {
      if (pForm.State[pForm.State.selectedIndex].value == "") {
         alert("Please select a state to search");
         return false;
      }
   }

   if ( (pForm.City.value == "") && (pForm.County.value == "") && 
        ((pForm.MLSXP.value == "") || (pForm.MLSXP.value == "Enter Express Code or MLS/Listing ID#")) &&
        (pForm.Zip.value == "")) {
      alert("Please enter an Express Code, MLS/Listing ID#, City, County, or Zip Code to search by");
      return false;
   }

   //do idx search handler call
   var parms = '';
   parms += 'City=' + escape(pForm.City.value);
   parms += '&County=' + escape(pForm.County.value);
   parms += '&State=' + escape(pForm.State[pForm.State.selectedIndex].value);
   parms += '&Zip=' + escape(pForm.Zip.value);

   //additional search parameters
   var addl = '';
   if( pForm.Bedrooms && (pForm.Bedrooms.value > 0) ) {
      parms += '&Bedrooms='+ escape(pForm.Bedrooms.value);
   }
   if( pForm.Bathrooms && (pForm.Bathrooms.value > 0) ) {
      parms += '&Bathrooms='+ escape(pForm.Bathrooms.value);
   }
   if( pForm.Minsqft && (pForm.Minsqft.value > 0) ) {
      parms += '&Minsqft='+ escape(pForm.Minsqft.value);
   }
   if( pForm.MinimumPrice && (pForm.MinimumPrice.value > 0) ) {
      parms += '&MinimumPrice='+ escape(pForm.MinimumPrice.value);
   }
   if( pForm.MaximumPrice && (pForm.MaximumPrice.value < 999999999) ) {
      parms += '&MaximumPrice='+ escape(pForm.MaximumPrice.value);
   }
   parms += '&roe=true';

   doENIDXChooser( parms );   
   return false;
}

function doENIDXChooser( strSearch ){
   EraShowFullPageWaitDialog();

   //container div
   var pContainer = document.createElement('div');
   pContainer.id = 'enidxmls_chooser';
   pContainer.style.display = 'none';
   pContainer.style.height = getPageX() +'px';

   //opacity div
   var pShader = document.createElement('div');
   pShader.className = 'enidxmls_shader';
   pShader.innerHTML = ' &nbsp;  ';
   pContainer.appendChild(pShader);

   //get screen sizes
   //var x = (getWindowX() / 2) + getScrollX() - 303;
   // 
   var x = ((970 - 303)/2);
   var y = (getWindowY() / 2) + getScrollY() - 139;

   //header
   var pHeader = document.createElement('div');
   pHeader.id = 'enidxmls_header';
   var pLeft = document.createElement('div');
   pLeft.className = 'lt';
   pHeader.appendChild(pLeft);
   var pMiddle = document.createElement('div');
   pMiddle.className = 'middle';
   pMiddle.id = 'enidxmls_headermid';
   pMiddle.innerHTML = ' &nbsp; IDX Site Listings';
   var pCloser = document.createElement('span');
   pCloser.className = 'closer';
   var pA = document.createElement('a');
   pA.setAttribute('href', 'Javascript:closeENIDXChooser();');
   pA.innerHTML = 'X';
   pCloser.appendChild(pA);
   pMiddle.appendChild(pCloser);
   pHeader.appendChild(pMiddle);
   var pRight = document.createElement('div');
   pRight.className = 'rt';
   pHeader.appendChild(pRight);
   pHeader.style.left = x + 'px';
   pHeader.style.top = y + 'px';
   pContainer.appendChild(pHeader);

   //mls display
   var pMLSContainer = document.createElement('div');
   pMLSContainer.id = 'enidxmls_container';
   pMLSContainer.style.left = x + 'px';
   pMLSContainer.style.top = y + 26 + 'px';

   //iframe
   var pFrame = document.createElement('iframe');
   pFrame.frameBorder = '0';
   pFrame.setAttribute('width',             '100%');
   pFrame.setAttribute('height',            '100%');
   pFrame.setAttribute('allowtransparency', 'true');
   pFrame.src = '/erabin/enidxmlssearch?'+ strSearch;
   pMLSContainer.appendChild(pFrame);

   pContainer.appendChild(pMLSContainer);

   //add to page
   document.body.appendChild(pContainer);
}

function closeENIDXChooser(){
   document.body.removeChild(document.getElementById('enidxmls_chooser'));
}

function finishENIDXChooserDisplay(){
   EraHideFullPageWaitDialog();
   var pPopup = document.getElementById('enidxmls_chooser');
   if( pPopup ) {      
      pPopup.style.display = 'block';
   }
}

function resizeENIDXDialog( iNewHeight, iNewWidth ){
   //get screen sizes
   //var x = (getWindowX() / 2) + getScrollX() - (iNewWidth / 2);
   // 
   var x = ((970 - iNewWidth) / 2);
   var y = (getWindowY() / 2) + getScrollY() - 239;

   //resize header div
   var pHeader = document.getElementById( 'enidxmls_header' );
   if( pHeader ) {
       pHeader.style.width = iNewWidth + 27 + 'px';
       pHeader.style.left = x + 'px';
       pHeader.style.top = y + 'px';
   }

   //resize header middle div
   var pMiddle = document.getElementById( 'enidxmls_headermid' );
   if( pMiddle ) {
       pMiddle.style.width = iNewWidth + 13 + 'px';
   }

   //resize content div
   var pContent = document.getElementById( 'enidxmls_container' );
   if( pContent ) {
       pContent.style.width = iNewWidth + 25 + 'px';
       pContent.style.height = iNewHeight + 'px';
       pContent.style.left = x + 'px';
       pContent.style.top = y + 26 + 'px';
   }
}

function handleENIDXRedirect(strUrl, strPostData, bRedirectOnError){
   //define callback
   var fCallback = function(pAjaxReq){
      var pForm = null;
      if(pAjaxReq.readyState == 4) {
         var bError = true;
         if( pAjaxReq.status == 200) {
            var strResult = getNodeValue(pAjaxReq.responseXML, 'results');
            if( strResult && strResult == 'success') {
               var strURL   = getNodeValue(pAjaxReq.responseXML, 'url');
               var strQuery = getNodeValue(pAjaxReq.responseXML, 'query');
               if( strURL != '' ){
                  pForm = document.getElementById('enidxsearchhandlerform');
                  if( pForm ) {
                     pForm.action = strURL;
                     pForm.query.value = strQuery;
                     pForm.submit();
                     bError = false;
                  }
               }
            }
         }
         g_AjaxQueue.errorHandler = g_oldErrorHandler;

         if( bError ) EraHideFullPageWaitDialog();
         if( bError && bRedirectOnError ) {
            pForm = document.QuickSearchForm;
            if( !pForm ) {
               pForm = document.searchform;
            }

            if( pForm ) pForm.submit();
         }
         if( bError && !pForm ) {
            var strError = getNodeValue(pAjaxReq.responseXML, 'message');
            alert(strError);
         }
      }
   }
   EraShowFullPageWaitDialog();
   g_oldErrorHandler = g_AjaxQueue.errorHandler;
   g_AjaxQueue.errorHandler = enIdxOnError;

   g_AjaxQueue.schedule('enidxmlsurl', strUrl, fCallback, true, true, strPostData );
   return false;
}

function enIdxOnError( e )
{
   EraHideFullPageWaitDialog();
   alert("I'm sorry, but your request to view local listings could not be processed.\n\nYou may try your request again, or if you continue to have problems please contact ERA for assistance.\n\n" + e.message);   
}

function doENIDXRedirect( lMLSID, strZips, strAddl, bRedirectOnError ){
   var strUrl = '/ajaxservlet/enidx/getmlsurl';
   var strPostData = 'mlsid='+ lMLSID +'&z='+ escape(strZips) +'&addl=' + escape(strAddl);
   return handleENIDXRedirect(strUrl, strPostData, bRedirectOnError);
}

function doENIDXRedirectByCity( lMLSID, strCities, strAddl, bRedirectOnError ){
   var strUrl = '/ajaxservlet/enidx/getmlsurl';
   var strPostData = 'mlsid='+ lMLSID +'&c='+ escape(strCities) +'&addl=' + escape(strAddl);
   return handleENIDXRedirect(strUrl, strPostData, bRedirectOnError);
}

function handleENIDXErrorForm(){
   var pForm = document.QuickSearchForm;
   if( !pForm ) {
      pForm = document.searchform;
   }

   if( pForm ) pForm.submit();
}

