
//  -----------------------------------------------------------------
//    Notes:	The purpose of this Javascript File provide an api interface for mapAsheville
//    Global Variables Delcared:         
//           NONE
//
//    Arguments:   
//    Returns:	N/A
//  	
//   -----------------------------------------------------------------
//    Orginization:	City of Asheville IT Services
//    Original Code: 	Dave Michelson 10/30/2006
//    Last Update:	Dave Michelson 10/30/2006
//                     	Dave Michelson 11/27/2006 - fixed map service change
//                     	Dave Michelson 11/27/2006 - forgot street and geocode get map
//                     	Dave Michelson 6/27/2007 - Sec for dhcp
//                     	Dave Michelson 8/16/2007 - code for afr hydrant mapping
//                     	Dave Michelson 8/27/2007 - code for sanitation look up by can
//                     	Dave Michelson 10/24/2007 - fixed fire fox bug
//

  var isNav = (navigator.appName.indexOf("Netscape")>=0);
  var isIE = (navigator.appName.indexOf("Internet Explorer")>=0);

   var mSrch = '';
   var mGoType = '';

  //function to create window pop-up
  function PopOut(sSite,sURL,sTitle,iHeight,iWidth,ynScroll,ynResize,ynDir,ynStatus,ynMenu,ynHist) {
    var objWin;
    //objWin = window.open(sURL, sTitle, "height="+iHeight+",width="+iWidth+",scrollbars="+ynScroll+",resizable="+ynResize+",directories="+ynDir+",status="+ynStatus+",menubar="+ynMenu+",copyhistory="+ynHist+"" );
    objWin = window.open("", sTitle, "height="+iHeight+",width="+iWidth+",scrollbars="+ynScroll+",resizable="+ynResize+",directories="+ynDir+",status="+ynStatus+",menubar="+ynMenu+",copyhistory="+ynHist+"" )
    mText = '<form action="'+sSite+'" method="post" id="xml" name="xml" ><input type="hidden" name="PREXML" value="'+sURL+'" /></form>';
    objWin.document.write(mText);
    window.setTimeout( function(){objWin.document.getElementById("xml").submit();},100) 
    objWin.document.close();
  }

  function autoSubmit( e , mType , userIP , mSite , mApp , chck )
  {
    var keynum;
    var keychar;
    var numcheck;

    if(window.event){
      keynum = e.keyCode;
    }else if(e.which){
      keynum = e.which;
    }

    if (keynum == 13 && chck == 'yes'){
      getMap( mType , userIP , mSite , mApp);
    }

  }

  function setSearchType( mVal )
  {
    mSrch = mVal;
  }

  function setGoType( mVal )
  {
    mGoType = mVal;
        //make working images visibile
        switch ( mGoType )
        {
          case 'MATCHSANITATION':
            break;
          case 'MAPSIMPLESEARCH':
            break;
          case 'MATCHSIMPLESEARCH':
            if(document.getElementById('SelectWorkingIMG')){document.getElementById('SelectWorkingIMG').style.visibility='visible';}
            mStr = 'Retrieving Matches, please be patient!';
            if(document.getElementById('myResultsMSG')){document.getElementById('myResultsMSG').innerHTML = mStr;}
            break;
          case 'MATCHNEIGHBORHOOD':
            if(document.getElementById('NieghborhoodIMG')){document.getElementById('NieghborhoodIMG').style.visibility='visible';}
            break;
          case 'MATCHAFRREPORTAREAS':
            break;
          case 'MATCHPROJECTS':
            break;
          case 'MATCHPROJECT':
            break;
          case 'MATCHZSIMPLESEARCH':
            break;
          case 'default':
            if(document.getElementById('SelectComboWorkingIMG')){document.getElementById('SelectComboWorkingIMG').style.visibility='visible';}
            //build searching message
            mStr = 'Retrieving Matches, please be patient!';
            if(document.getElementById('myResultsMSG')){document.getElementById('myResultsMSG').innerHTML = mStr;}
            break;
        }
        
  }

  //send and XML request to ArcIMS Server
  function SendPost( url , mXML ) {

   if (window.XMLHttpRequest) { // Non-IE browsers
      req = new XMLHttpRequest();
      req.onreadystatechange = ReturnResponse;
      try {
        req.open("POST", url, true);
      } catch (e) {
        alert(e);
      }
      req.send(mXML);
    } else if (window.ActiveXObject) { // IE
      
      req = new ActiveXObject("Microsoft.XMLHTTP");
      if (req) {
        //prompt('',url);
        req.onreadystatechange = ReturnResponse;
        req.open("POST", url , true);
        req.send(mXML);
      }
    }
  }

  function ReturnResponse() {

    if (req.readyState == 4) { // Complete
      if (req.status == 200) { // OK response
        var theXML;
        theXML = req.responseText;
        theXML = theXML.replace( /html/  , '' );
        theXML = theXML.replace( /body/ , '' );
        theXML = theXML.replace( /\<\/\>/g , '' );
        switch ( mGoType )
        {
          case 'MATCHSANITATION':
            document.getElementById('myResults').innerHTML = theXML;
            break;
          case 'MAPSIMPLESEARCH':
            //mURL = 'map.asp?PREXML='+theXML;
            mURL = theXML;
            mSite = 'map.asp';
            mTitle = 'mapAsheville';
            var mTitle = PopOut( mSite , mURL , mTitle ,'500', '750' ,'yes', 'yes' , 'no' , 'no' , 'no' , 'no' );
            break;
          case 'MATCHSIMPLESEARCH':
            document.getElementById(mSrch+'R').innerHTML = theXML;
            if(document.getElementById('SelectWorkingIMG')){document.getElementById('SelectWorkingIMG').style.visibility='hidden';}
            if(document.getElementById('myResultsMSG')){document.getElementById('myResultsMSG').innerHTML = 'Search Complete!';}
            break;
          case 'MATCHNEIGHBORHOOD':
            document.getElementById('txtNieghborhood').innerHTML = theXML;
            if(document.getElementById('NieghborhoodIMG')){document.getElementById('NieghborhoodIMG').style.visibility='hidden';}
            break;
          case 'MATCHAFRREPORTAREAS':
            document.getElementById('txtReportAreas').innerHTML = theXML;
            break;
          case 'MATCHPROJECTS':
            document.getElementById('txtProjects').innerHTML = theXML;
            break;
          case 'MATCHPROJECT':
            document.getElementById('txtProject').innerHTML = theXML;
            break;
          case 'MATCHZSIMPLESEARCH':
            document.getElementById('txtGeocodeAddressR').innerHTML = theXML;
            break;
          case 'default':
            document.getElementById('myResults').innerHTML = theXML;
            if(document.getElementById('SelectComboWorkingIMG')){document.getElementById('SelectComboWorkingIMG').style.visibility='hidden';}
            if(document.getElementById('myResultsMSG')){document.getElementById('myResultsMSG').innerHTML = 'Search Complete!';}
            break;
        }
        
      } else
      {       
        id='myResults';
        mStr = "";
         
        if(mGoType.indexOf('SIMPLESEARCH',0)>0)
        {
          id=mSrch+'R';
         
          mStr = 'ERROR: ' + req.statusText;
          mStr = '<select id="'+mSrch+'" class="textblackvsmbold"  type="select" size="5"  style="width:250px" ><option>' + mStr;
          mStr = mStr+'</select>';
        }
        if(mGoType.indexOf('SANITATION',0)>0)
        {
          id='myResults';
          mStr = 'ERROR: ' + req.statusText;
          mStr = '<span>' + mStr +'</span>';
        }
        if(mGoType.indexOf('PROJECTS',0)>0)
        {
          id='txtProjects';
          mStr = 'ERROR: ' + req.statusText;
          mStr = '<span>' + mStr +'</span>';
        }
        if(mGoType.indexOf('PROJECT',0)>0)
        {
          id='txtProject';
          mStr = 'ERROR: ' + req.statusText;
          mStr = '<span>' + mStr +'</span>';
        }
        if(mGoType.indexOf('default',0)>0)
        {
          id='myResults';
          mStr = 'ERROR: ' + req.statusText;
          mStr = '<select id="'+mSrch+'" class="textblackvsmbold"  type="select" size="5"  style="width:250px" ><option>' + mStr;
          mStr = mStr+'</select>';
        }
        document.getElementById(id).innerHTML = mStr;
      }
    }
  }

  function getCBOValue( cboOBJ , txtname , doStrip )
  {
    if (typeof(cboOBJ ) != 'object' ){cboOBJ=document.getElementById(cboOBJ)}
    var IDX = cboOBJ.selectedIndex;
    var mVal = cboOBJ.options[IDX].text;

    if ( doStrip )
    {
      var mStartStr = "[ ";
      var mEndStr = " ]";
      var mEndPos;
      var mStartPos = mVal.indexOf( mStartStr );

      while (mStartPos > -1) {
        mEndPos = mVal.indexOf( mEndStr );
        rStr = mVal.substr( mStartPos , ( mEndPos - mStartPos ) + ( mEndStr.length ) );
        mVal = mVal.replace( rStr , " ");
        mStartPos = mVal.indexOf( mStartStr , 0 );
      }

      mVal = mVal.replace( /,   ,/g , ',');
      mVal = mVal.replace(/^\s*|\s*$/g,"");
      mVal = mVal.replace(/^\s*|\s*$/g,"");

      mStartPos = mVal.indexOf( ',' );
      if ( mStartPos == 0 ) {
        mVal = mVal.substr( 1 , mVal.length - 1 );       
      }
    }
    var txtOBJ = document.getElementById(txtname)
    txtOBJ.value = mVal;
    
    return mVal;
  }

  function getValueVal( mOBJ )
  {
   
    if (typeof(mOBJ) != 'object' ){mOBJ=document.getElementById(mOBJ)}
    var IDX = mOBJ.selectedIndex;
    var ClickVal;
    if ( IDX == -1 ){ IDX = 0 }
    if (IDX > -1 ) {
      ClickVal = mOBJ.options[IDX].value;
    }else{
      ClickVal = '';
    }
      
    return ClickVal;
  }


  function getValue( mOBJ )
  {
    
    //mOBJ='cboOldPinResult'
    if (typeof(mOBJ) != 'object' ){mOBJ=document.getElementById(mOBJ)}
    var IDX = mOBJ.selectedIndex;
    var ClickVal;
    if ( IDX == -1 ){ IDX = 0 }
    if (IDX > -1 ) {
      ClickVal = mOBJ.options[IDX].text;
    }else{
      ClickVal = '';
    }
    
    return ClickVal;
  }

  function removeSpecialCharacters( mStr )
  {

    var RetVal;

    RetVal =  mStr;
    RetVal = RetVal.replace(/[^A-Za-z0-9\&\(\),\s]/g,'');
    RetVal = RetVal.replace( /\&/g , '*' );
    return RetVal;
  }

  function removeSpecialTwo( mStr )
  {
    var RetVal;
    RetVal =  mStr;
    RetVal = RetVal.replace( /\&/g , '[amp]' );

    return RetVal;
  }


  function toProperCase(s)
  {
    return s.toLowerCase().replace(/^(.)|\s(.)/g, 
    function($1) { return $1.toUpperCase(); });
  }



  function fixStreetType( mStr )
  {
    //isntiate varriables
    var RetVal;
    var objRegExp;

    RetVal =  mStr;




    //********************Start grouped matches********************

    //place and plaza
    objRegExp = /(\spla$)|(\spl$)/gi;
    RetVal = RetVal.replace(objRegExp ," P")

    //cove and court
    objRegExp = /(\sco$)/gi;
    RetVal = RetVal.replace(objRegExp ," C")

    //hill and highway
    objRegExp = /(\shi$)/gi;
    RetVal = RetVal.replace(objRegExp ," H")

    //trace and trail
    objRegExp = /(\stra$)|(\str$)/gi;
    RetVal = RetVal.replace(objRegExp ," T")

    //Crossing
    objRegExp = /(\sc$)/gi;
    RetVal = RetVal.replace(objRegExp ," x")

    //park and parkway
    objRegExp = /(\spark$)|(\spar$)|(\spa$)/gi;
    RetVal = RetVal.replace(objRegExp ," P")

    //creek and crescent
    objRegExp = /(\scre$)/gi;
    RetVal = RetVal.replace(objRegExp ," CR")


    //********************End grouped matches********************


    //********************Start single matches********************

    //alley
    objRegExp = /(\salley$)|(\salle$)|(\sall$)/gi; 
    RetVal = RetVal.replace(objRegExp ," ALY")

    //avenue
    objRegExp = /(\savenue$)|(\savenu$)|(\saven$)|(\sav$)/gi; 
    RetVal = RetVal.replace(objRegExp ," AVE")

    //Boulevard
    objRegExp = /(\sboulevard$)|(\sboulevar$)|(\sbouleva$)|(\sboulev$)|(\sboule$)|(\sbou$)|(\sbo$)/gi;
    RetVal = RetVal.replace(objRegExp ," BLVD")

    //bridge
    objRegExp = /(\sbridge$)|(\sbridg$)|(\sbrid$)|(\sbri$)/gi;
    RetVal = RetVal.replace(objRegExp ," BR")

    //court
    objRegExp = /(\scourt$)|(\scour$)|(\scou$)|(\scou$)/gi; 
    RetVal = RetVal.replace(objRegExp ," CT")

    //cove
    objRegExp = /(\scove$)|(\scov$)/gi; 
    RetVal = RetVal.replace(objRegExp ," CV")

    //circle
    objRegExp = /(\scircle$)|(\scircl$)|(\scirc$)|(\sci$)/gi;
    RetVal = RetVal.replace(objRegExp ," CIR")

    //crescent
    objRegExp = /(\screscent$)|(\screscen$)|(\scresce$)|(\scresc$)/gi;
    RetVal = RetVal.replace(objRegExp ," CRES")

    //creek
    objRegExp = /(\screek$)|(\scree$)/gi;
    RetVal = RetVal.replace(objRegExp ," CRK")

    //crossing
    objRegExp = /(\scrossing$)|(\scrossin$)|(\scrossi$)|(\scrossi$)|(\scross$)|(\scros$)|(\scro$)|(\scr$)/gi;
    RetVal = RetVal.replace(objRegExp ," XING")

    //Drive
    objRegExp = /(\sdrive$)|(\sdriv$)|(\sdri$)/gi;
    RetVal = RetVal.replace(objRegExp ," DR")

    //extenstion
    objRegExp = /(\sextension$)|(\sextensio$)|(\sextensi$)|(\sextens$)|(\sextens$)|(\sexten$)|(\sexte$)|(\sex$)/gi;
    RetVal = RetVal.replace(objRegExp ," EXT")

    //ESTATES
    objRegExp = /(\sestates$)|(\sestate$)|(\sestat$)|(\sesta$)/gi;
    RetVal = RetVal.replace(objRegExp ," EST")

    //gardens
    objRegExp = /(\sgardens$)|(\sgarden$)|(\sgarde$)|(\sgarde$)|(\sgard$)|(\sgar$)|(\sga$)/gi;
    RetVal = RetVal.replace(objRegExp ," GDN")

    //glens
    objRegExp = /(\sglens$)|(\sglen$)|(\sgle$)/gi;
    RetVal = RetVal.replace(objRegExp ," GLN")

    //groves
    objRegExp = /(\sgroves$)|(\sgrove$)|(\sgrov$)|(\sgro$)/gi;
    RetVal = RetVal.replace(objRegExp ," GRV")

    //Haven
    objRegExp = /(\shaven$)|(\shave$)|(\shav$)|(\sha$)/gi;
    RetVal = RetVal.replace(objRegExp ," HVN")

    //HEIGHTS
    objRegExp = /(\sheights$)|(\sheight$)|(\sheigh$)|(\sheig$)|(\shei$)|(\she$)/gi;
    RetVal = RetVal.replace(objRegExp ," HTS")
           
    //Highway
    objRegExp = /(\shighway$)|(\shighwa$)|(\shighw$)|(\shigh$)|(\shig$)/gi;
    RetVal = RetVal.replace(objRegExp ," HWY")

    //hill
    objRegExp = /(\shill$)|(\shil$)/gi; 
    RetVal = RetVal.replace(objRegExp ," HL")

    //hollow
    objRegExp = /(\shollow$)|(\shollo$)|(\sholl$)/gi;
    RetVal = RetVal.replace(objRegExp ," HOLW")

    //knoll
    objRegExp = /(\sknolls$)|(\sknoll$)|(\sknol$)|(\skno$)/gi;
    RetVal = RetVal.replace(objRegExp ," KNL")

    //Lane
    objRegExp = /(\slane$)|(\slan$)|(\sla$)/gi; 
    RetVal = RetVal.replace(objRegExp ," LN")

    //Landing
    objRegExp = /(\slanding$)|(\slandin$)|(\slandi$)|(\sland$)/gi; 
    RetVal = RetVal.replace(objRegExp ," LNDG")

    //meadows
    objRegExp = /(\smeadows$)|(\smeadow$)|(\smeado$)|(\smead$)|(\smea$)|(\sme$)/gi; 
    RetVal = RetVal.replace(objRegExp ," MDW")

    //parkway
    objRegExp = /(\sparkway$)|(\sparkwa$)|(\sparkw$)/gi;
    RetVal = RetVal.replace(objRegExp ," PKWY")

    //place
    objRegExp = /(\splace$)|(\splac$)/gi;
    RetVal = RetVal.replace(objRegExp ," PL")

    //plaza
    objRegExp = /(\splaza$)|(\splaz$)/gi; 
    RetVal = RetVal.replace(objRegExp ," PZ")

    //point
    objRegExp = /(\spoint$)|(\spoin$)|(\spoi$)|(\spo$)|(\spo$)/gi; 
    RetVal = RetVal.replace(objRegExp ," PT")

    //ridge
    objRegExp = /(\sridge$)|(\sridg$)|(\srid$)|(\sri$)/gi; 
    RetVal = RetVal.replace(objRegExp ," RDG")

    //Road
    objRegExp = /(\sroad$)|(\sroa$)|(\sro$)/gi; 
    RetVal = RetVal.replace(objRegExp ," RD")

    //square
    objRegExp = /(\ssquare$)|(\ssquar$)|(\ssqua$)|(\ssqu$)/gi; 
    RetVal = RetVal.replace(objRegExp ," SQ")

    //Street
    objRegExp = /(\sstreet$)|(\sstree$)|(\sstre$)|(\sstr$)|(\sstr$)/gi;
    RetVal = RetVal.replace(objRegExp ," ST")

    //summit
    objRegExp = /(\ssummit$)|(\ssummi$)|(\ssumm$)|(\ssumm$)|(\ssum$)|(\ssu$)/gi;
    RetVal = RetVal.replace(objRegExp ," SMT")

    //terrace
    objRegExp = /(\sterrace$)|(\sterrac$)|(\sterra$)|(\sterr$)|(\ste$)/gi;
    RetVal = RetVal.replace(objRegExp ," TER")

    //trace
    objRegExp = /(\strace$)|(\strac$)/gi;
    RetVal = RetVal.replace(objRegExp ," TRCE")

    //trail
    objRegExp = /(\strail$)|(\strai$)/gi;
    RetVal = RetVal.replace(objRegExp ," TRL")

    //valley
    objRegExp = /(\svalley$)|(\svalle$)|(\svall$)|(\sval$)|(\sva$)/gi;
    RetVal = RetVal.replace(objRegExp ," VLY")

    //view
    objRegExp = /(\sview$)|(\svie$)|(\svi$)/gi;
    RetVal = RetVal.replace(objRegExp ," VW")


    //********************End single matches********************


    return RetVal;
  }

  function getMap( mType,UserIP,mSite,mApp)
  {
     if (mSrch != '')
     {
       if (mType == 'PIN')
       {
           var mCboStr = toProperCase( mType );
           var mCboVal = getValue (document.getElementById('cbo'+mCboStr+'Result'));
           if ( mCboVal == 'N/A' ){
             alert('Nothing to Search!');
             return;
           }
           if ( mCboVal.length < 2 ){
             alert('Nothing to Search!');
             return;
           }
         setSearchType( 'txtSearchPin' );
         var mVal = document.getElementById(mSrch).value;
         mVal = mVal.replace( /\./g , '' );
         mVal = mVal.replace( /-/g , '' );
         mVal = removeSpecialCharacters( mVal );
         
       }

       if (mType == 'OLDPIN')
       {
           var mCboStr = toProperCase( mType );          
           var mCboID = document.getElementById('cboOldpinResult').id
           var mCboVal = getValue (mCboID);
           if ( mCboVal == 'N/A' ){
             alert('Nothing to Search!');
             return;
           }
           if ( mCboVal.length < 2 ){
             alert('Nothing to Search!');
             return;
           }
         setSearchType( 'txtSearchOldPin' );
         var mVal = document.getElementById(mSrch).value;
         mVal = mVal.replace( /\./g , '' );
         mVal = mVal.replace( /-/g , '' );
         mVal = removeSpecialCharacters( mVal );
         
       }


       if (mType == 'OWNER')
       {
           var mCboStr = toProperCase( mType );
           var mCboVal = getValue (document.getElementById('cbo'+mCboStr+'Result'));
           if ( mCboVal == 'N/A' ){
             alert('Nothing to Search!');
             return;
           }
           if ( mCboVal.length < 2 ){
             alert('Nothing to Search!');
             return;
           }
         setSearchType( 'txtSearchOwner' );
         var mVal = document.getElementById(mSrch).value;
         mVal = removeSpecialCharacters( mVal );
       }

       if (mType == 'ADDRESS')
       {
           var mCboStr = toProperCase( mType );
           var mCboVal = getValue (document.getElementById('cbo'+mCboStr+'Result'));
           if ( mCboVal == 'N/A' ){
             alert('Nothing to Search!');
             return;
           }
           if ( mCboVal.length < 2 ){
             alert('Nothing to Search!');
             return;
           }
         setSearchType( 'txtSearchAddress' );
         var mVal = document.getElementById(mSrch).value;
         mVal = removeSpecialCharacters( mVal );
         mVal = fixStreetType(mVal);
       }

       if (mType == 'STREET')
       {
         var mCboStr = toProperCase( mType );
         var mCboVal = getValue (document.getElementById('cbo'+mCboStr+'Result'));
           if ( mCboVal == 'N/A' ){
             alert('Nothing to Search!');
             return;
           }
           if ( mCboVal.length < 2 ){
             alert('Nothing to Search!');
             return;
           }
         setSearchType( 'txtSearchStreet' );
         var mVal = document.getElementById(mSrch).value;
         mVal = removeSpecialCharacters( mVal );
         mVal = fixStreetType(mVal);

       }


       if (mType == 'GEOCODE')
       {
         setSearchType( 'txtGeocodeAddress' );
         var mValOne = removeSpecialCharacters( document.getElementById(mSrch).value ); 
         var mValTwo = removeSpecialCharacters( getValue( document.getElementById('cboZipCode') )  ); 
         var mVal = '[ADDRESS]=' + mValOne + ';[ZIPCODE]=' + mValTwo ;
       }


       if (mVal != '')
       {
        
         setGoType( 'MAPSIMPLESEARCH' );
         if ( UserIP.indexOf('192.168.',0) > -1 ){
           SendPost(mSite+'?APPLICATION='+mApp+'&IP='+UserIP+'&GETRESULTS='+mType+'&VALUE='+mVal+'&MAPSERVICE='+getValue( "cboMapService" ),'');
         }else{
           if ( UserIP.indexOf('10.16.',0) > -1 ){SendPost(mSite+'?APPLICATION='+mApp+'&IP='+UserIP+'&GETRESULTS='+mType+'&VALUE='+mVal+'&MAPSERVICE='+getValue( "cboMapService" ),''); //ma_testparcels',''); //
           }else{
             if ( UserIP.indexOf('10.15.',0) > -1 ){SendPost(mSite+'?APPLICATION='+mApp+'&IP='+UserIP+'&GETRESULTS='+mType+'&VALUE='+mVal+'&MAPSERVICE='+getValue( "cboMapService" ),'');
             }else{
               SendPost(mSite+'?APPLICATION='+mApp+'&IP='+UserIP+'&GETRESULTS='+mType+'&VALUE='+mVal,'');
             }
           }
         }
       }else{alert('Nothing to Search!');}

     }else{alert('Nothing to Search!');}
  }

