var pnumXMLReq;

var pnumZoomLog = log4javascript.getLogger("PnumZoomFilter");
pnumZoomLog.setLevel(log4javascript.Level.ERROR);

function initPnumZoomLogging(appender, level) {
    // Should add failure logic
    if (level != null) {
        pnumZoomLog.setLevel(level);
    }
    if (appender == null) {
        appender = new log4javascript.AlertAppender();
    }
    pnumZoomLog.addAppender(appender);

}

var completionUpdateObj;

function getPNums() 
{
    var pnumQuery = "/pbostation/Filter?request=fourChar";
	//pnumXMLReq = createXMLHttpRequest();
    pnumXMLReq = new XMLRequestWrapper();
    pnumXMLReq.createXMLHttpRequest();
    var req = pnumXMLReq.getReq();
	if(req) {
        req.onreadystatechange = loadPNumsCallback;
		req.open("GET", pnumQuery, true);
		req.send(null);
	} else {
        pnumZoomLog.error("getXML: Unable to create xml request object.");
    }
}

function loadPNumsCallback() {
    if(pnumXMLReq.checkReadyState()) {
        try {
            loadPNums(filterXMLReq.getReq().responseText.split("\n"));
        } catch(e) {
            pnumZoomLog.error("update: error with pnum response " + e);
        }
    }
}


/* This script and many more are available free online at
The JavaScript Source :: http://javascript.internet.com
Created by: Ilanio :: http://www.webdeveloper.com/forum/showthread.php?t=119753 */

function loadPNums() {
    pnumZoomLog.debug("loadPNums: called");
    var newPNums
    setCompletionValues(allFeaturesManager.getAllKeys());
    
    
    // Would be nice to know if there are actually any new features.
    //setCompletionValues(allFeaturesManager.getAllKeys());
}

function zoomToPNumNew(pnumData) {
    if (pnumData) {
        var pnum = pnumData.split(",");
        if (pnum.length == 4) {
            var p = allFeaturesManager.getPoint(pnum[0].toUpperCase());
            clearFilters(false);

            var lat = parseFloat(pnum[2]);
            var lon = parseFloat(pnum[3]);
            var wmsInfo='",' + (lon - 0.05) + "," + (lon + 0.05) + "," + (lat - 0.025) + "," + (lat + 0.025) + '"';
            var lyrInfo='"0,soh_symbolfield,fid"';
            pnumZoomLog.debug("zoomToPNum: wms: " + wmsInfo);
            pnumZoomLog.debug("zoomToPNum: lyr: " + lyrInfo);
            updateDefaultSelections();
            updateMap(wmsInfo,lyrInfo);
        } else {
            pnumZoomLog.warn("Invalid pnum data: " + pnumData);
        }
    }
}

// Move me
function zoomToPNum(pnum) {
    if (pnum != null) {
        try {
            var p = allFeaturesManager.getPoint(pnum.toUpperCase());
            if (p != null ) {
                //var pVis = featureManager.getPointByAttr('code', pnum.toUpperCase());
                //if (pVis == null) {
                //    alert('Station with PNum ' + pnum.toUpperCase() + ' is currently filtered.  Adjust or clear filter and try again.');
                //} else {
                    var lat = parseFloat(p.getAttribute('lat'));
                    var lon = parseFloat(p.getAttribute('lon'));
                    //"5,-124.98,-104.35,34.8424756,45.1575244":"0,soh_symbolfield,fid"
                    //1,-106.959266,-106.4592660.5,34.44562,34.945620.5:0,soh_symbolfield,fid
                    //'"'+id + "," + minx + "," + maxx + "," + miny + "," + maxy+'"';
                    var wmsInfo='",' + (lon - 0.05) + "," + (lon + 0.05) + "," + (lat - 0.025) + "," + (lat + 0.025) + '"';
                    var lyrInfo='"0,soh_symbolfield,fid"';
                    pnumZoomLog.debug("zoomToPNum: wms: " + wmsInfo);
                    pnumZoomLog.debug("zoomToPNum: lyr: " + lyrInfo);
                    updateMap(wmsInfo,lyrInfo);
                    //updateMap should do this...
                    //updateActiveZoom(numZoomLevels);
                //}
            } else {
                alert('No station with PNum ' + pnum.toUpperCase() + ' found.');
            };
        } catch(e) {
            alert(e);
        }
    }
    return false;
}

function completionUpdate(match) {
    //pnumZoomLog.debug("completionUpdate: " + match + "::" + completionUpdateObj);
    if (completionUpdateObj != null) {
        var showCompletion = document.getElementById(completionUpdateObj);
        //pnumZoomLog.debug("completionUpdate: " + showCompletion);
        if (showCompletion != null) {
            if (match == null) {
                showCompletion.style.border='';
            } else if (match) {
                //showCompletion.src="images/indicator.white.gif";
                showCompletion.style.border='1px solid #00FF33';
            } else {
                //showCompletion.src="images/check.jpg";
                showCompletion.style.border='1px solid red';
            }
        }
    }
}

// Details can be found here:
// http://www.webdeveloper.com/forum/showthread.php?t=119753
var autoCompleteValues;
//var autoCompleteValues = new Array("albert@mail.com","steve@mail.com","beth@mail.com","harry@mail.com","barry@mail.com", "allen@mail.com", "susan@mail.com", "hal@mail.com");
//autoCompleteValues.sort();
function setCompletionValues(newValues) {
    autoCompleteValues = newValues;
    if(autoCompleteValues != null) {
        autoCompleteValues.sort();
    }
}

var prevValue='';

function Complete(obj, evt) {
  var match = null;
  
  if (obj && evt && autoCompleteValues != null && autoCompleteValues.length != 0) {
      var txt = obj.value;
      if (prevValue != txt) {
          prevValue = txt;
      
          // Since we are trying to match, we can fail to match
          match = false;
        
          var elm = (obj.setSelectionRange) ? evt.which : evt.keyCode;
        
          if (obj.createTextRange) {
            var rng = document.selection.createRange();
                if (rng.parentElement() == obj) {
                    elm = rng.text;
                    var ini = obj.value.lastIndexOf(elm);
                }
          } else if (obj.setSelectionRange) {
                var ini = obj.selectionStart;
          }
        
          for (var i = 0; i < autoCompleteValues.length; i++) {
            elm = autoCompleteValues[i].toString();
                if (elm.toLowerCase().indexOf(txt.toLowerCase()) == 0) {
                    obj.value += elm.substring(txt.length, elm.length);
                    match = true;
                    break;
                }
          }
        
          if (obj.createTextRange) {
                rng = obj.createTextRange();
                rng.moveStart("character", ini);
                rng.moveEnd("character", obj.value.length);
                rng.select();
          } else if (obj.setSelectionRange) {
                obj.setSelectionRange(ini, obj.value.length);
          }
      }
  }

  completionUpdate(match);
}


