﻿                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
//whitepace above bec of compression issue, do not remove                                                                                                    
//Julian Robichaux-http://www.nsftools.com/tips/ZipLookupTest.htm
var queryField; var globalDiv; var searchHiddenControl;
var queryField1; var globalDiv1; var searchHiddenControl1;
var queryFieldActive; var searchHiddenControlActive;
var divName = "querydiv"; var ifName = "queryiframe";
var searchHiddenControlID = "txtSearchAutoCompleteHidden";
var txtSearchAutoCompleteID = "txtSearchAutoComplete";
var quit = false; 
var lastVal = ""; 
var val = "";
var cache = new Object();
var cache1 = new Object();
var divFormatted = false;
var divFormatted1 = false; 
var DIV_BG_COLOR = "#ffffff"; 
var DIV_HIGHLIGHT_COLOR = "#CCCCCC"; 
var bInitQueryCodeComplete = false;
var bInitQueryCodeComplete1 = false;
var TimerID = null;
var UserStartedTyping = false;
var IsVideoSearch = false;
var isVersionEx = false;

function txtSearchAutoCompleteOnFocusHandler1()
{
    if (bInitQueryCodeComplete1) {
        if (TimerID == null)
            TimerID = setInterval("mainLoop()", 100);
        searchHiddenControlActive = searchHiddenControl1;
        queryFieldActive = queryField1;
        divName = "querydiv1";
        ifName = "queryiframe1";
        isVersionEx = true;
    }
}

function txtSearchAutoCompleteOnFocusHandler() {
    if (bInitQueryCodeComplete) {
        if (TimerID == null)
            TimerID = setInterval("mainLoop()", 100);
        searchHiddenControlActive = searchHiddenControl;
        queryFieldActive = queryField;
        divName = "querydiv";
        ifName = "queryiframe";
        isVersionEx = false;
    }
}

function InitQueryCode(isInstance2)
{
    if (isInstance2) {
        searchHiddenControl1 = document.getElementById(searchHiddenControlID + "1");
        queryField1 = document.getElementById(txtSearchAutoCompleteID + "1");
        if (searchHiddenControl1 && queryField1) {
            queryField1.onblur = hideDiv;
            queryField1.onkeydown = keypressHandler;
            bInitQueryCodeComplete1 = true;
        }
    }
    else {
        searchHiddenControl = document.getElementById(searchHiddenControlID);
        queryField = document.getElementById(txtSearchAutoCompleteID);

        searchHiddenControlActive = searchHiddenControl;
        queryFieldActive = queryField;
        if (searchHiddenControl && queryField) {
            queryField.onblur = hideDiv;
            queryField.onkeydown = keypressHandler;
            addToCache("", new Array());
            bInitQueryCodeComplete = true;
            if ((TimerID == null) && UserStartedTyping)
                TimerID = setInterval("mainLoop()", 100);
        }
    }
}

function addToCache (queryString, resultArray1)
{
	if (queryString.length > 0)	{
		if(resultArray1.length == 0)
			return;
    }

    if (isVersionEx)
        cache1[queryString.toLowerCase()] = new Array(resultArray1); 
	else
        cache[queryString.toLowerCase()] = new Array(resultArray1); 
}

mainLoop = function() 
{
    if(quit == false)
    {
      val = escape(queryFieldActive.value);
      val = unescape(queryFieldActive.value);
  
      if(val.length == 0)
      {
        showDiv(false);
        lastVal = val;
        return true;
      }
  
      if(lastVal != val)
      {
        var cacheResult;
        if (isVersionEx)
            cacheResult = cache1[val.toLowerCase()];
        else
            cacheResult = cache[val.toLowerCase()];
        if (cacheResult)
        {
            showQueryDiv(val, cacheResult[0]);
        }
        else
        {
            Query(val);
        }
        lastVal = val;
        queryFieldActive.focus();
       }
    return true;
  }
};

function getDiv (divID)
{
    if (isVersionEx) {
        if (!globalDiv1) {
            if (!document.getElementById(divID)) {
                var newNode = document.createElement("div");
                newNode.setAttribute("id", divID);
                document.body.appendChild(newNode);
            }

            globalDiv1 = document.getElementById(divID);
            var x = queryFieldActive.offsetLeft;
            var y = queryFieldActive.offsetTop + queryFieldActive.offsetHeight;
            var parent = queryFieldActive;
            while (parent.offsetParent) {
                parent = parent.offsetParent;
                x += parent.offsetLeft;
                y += parent.offsetTop;
            }

            if (!divFormatted1) {
                globalDiv1.style.backgroundColor = DIV_BG_COLOR;
                globalDiv1.style.border = "1px solid #666666";
                globalDiv1.className = "AC_SearchDiv";
                globalDiv1.style.position = "absolute";
                globalDiv1.style.left = x + "px";
                globalDiv1.style.top = y + "px";
                globalDiv1.style.visibility = "hidden";
                globalDiv1.style.zIndex = 10000;

                divFormatted1 = true;
            }
        }
        return globalDiv1;
    }
    else {
        if (!globalDiv) {
            if (!document.getElementById(divID)) {
                var newNode = document.createElement("div");
                newNode.setAttribute("id", divID);
                document.body.appendChild(newNode);
            }

            globalDiv = document.getElementById(divID);
            var x = queryFieldActive.offsetLeft;
            var y = queryFieldActive.offsetTop + queryFieldActive.offsetHeight;
            var parent = queryFieldActive;
            while (parent.offsetParent) {
                parent = parent.offsetParent;
                x += parent.offsetLeft;
                y += parent.offsetTop;
            }

            if (!divFormatted) {
                globalDiv.style.backgroundColor = DIV_BG_COLOR;
                globalDiv.style.border = "1px solid #666666";
                globalDiv.className = "AC_SearchDiv";
                globalDiv.style.position = "absolute";
                globalDiv.style.left = x + "px";
                globalDiv.style.top = y + "px";
                globalDiv.style.visibility = "hidden";
                globalDiv.style.zIndex = 10000;

                divFormatted = true;
            }
        }
        return globalDiv;
    }
}

function showQueryDiv (queryString, resultArray1) 
{
  var div = getDiv(divName);
  
  // remove any results that are already there
  while (div.childNodes.length > 0)
    div.removeChild(div.childNodes[0]);
  
  if(!isVersionEx && document.getElementById("rad-search-type-video").checked)
  {
    showDiv(false);
    return;
  }
  
  // add an entry for each of the results in the resultArray
  for (var i = 0; i < resultArray1.length; i++)
  {
    // each result will be contained within its own div
    var result = document.createElement("div");
    result.style.cursor = "pointer";
    result.style.padding = "3px 0px 3px 0px";
    _unhighlightResult(result);
    result.onmousedown = selectResult;
    result.onmouseover = highlightResult;
    result.onmouseout = unhighlightResult;

    var resArray = resultArray1[i].split("~");
    var result1 = document.createElement("span");
    result1.className = "AC_left";
    result1.innerHTML = resArray[0];
    
    var result2 = document.createElement("span");
    result2.className = "AC_right";
  
    var object_code = resArray[1];
    var object_type;
     
    switch (object_code) {
        case "c":
            object_type = "Celebrity";
            break;
        case "m":
            object_type = "Movie";
            break;
        case "s":
            object_type = "TV Show";
            break;
        default: //assume sportsteam, which could be all sorts of strings, need a better approach from DB
            object_type = object_code;
            break;
            }

    if (resArray[3] == '') {
      if(!isVersionEx)  
        result2.innerHTML = "("+object_type+")";
    }
    else {
        if (!isVersionEx)
            result2.innerHTML = "(" + object_type + " - " + resArray[3] + ")";
        else
            result2.innerHTML = "(" + resArray[3] + ")";
    }

    if (object_code.length > 1)
        object_code = "g";
        
    var result3 = document.createElement("span");
    result3.className = "AC_hidden";
    result3.style.visibility = "hidden";
    result3.innerHTML = object_code + resArray[2];
    
    result.appendChild(result1);
    result.appendChild(result2);
    result.appendChild(result3);
    div.appendChild(result);
  }
  
  // if this resultset isn't already in our cache, add it
  var isCached;
  if(isVersionEx)
      isCached = cache1[queryString.toLowerCase()];
  else
      isCached = cache[queryString.toLowerCase()];
  if (!isCached)
    addToCache(queryString, resultArray1);
  
  // display the div if we had at least one result
  if (resultArray1.length > 0)
    showDiv(true);
  else
    showDiv(false);
}

function selectResult()
{
  _selectResult(this, true);
}

function _selectResult(item, bDoSubmit)
{
  var spans = item.getElementsByTagName("span");

  if (spans) {
    queryFieldActive.value = unescapeHTML(spans[0].innerHTML);
    searchHiddenControlActive.value = spans[2].innerHTML;
    if (isVersionEx)
        document.getElementById("btnAutocAddFav").disabled = "";
    lastVal = val = queryFieldActive.value;
    showDiv(false);
    quit = true;
    if (bDoSubmit)
        submitForm();
    return;
  }
}

//called when a user mouses over a lookup result
function highlightResult()
{
  _highlightResult(this);
}

// highlights the selected result
function _highlightResult(item)
{
  item.style.backgroundColor = DIV_HIGHLIGHT_COLOR;
}

// called when a user mouses away from a lookup result
function unhighlightResult()
{
  _unhighlightResult(this);
}

// unhighlights the selected result
function _unhighlightResult(item)
{
  item.style.backgroundColor = DIV_BG_COLOR;
}

function showDiv (show)
{
  var div = getDiv(divName);
  if (show){
    div.style.visibility = "visible";
    }
  else{
    div.style.visibility = "hidden";
  }
  adjustiFrame();
}

function hideDiv ()
{
  showDiv(false);
}

function adjustiFrame()
{
    if (!document.getElementById(ifName)) {
        var newNode = document.createElement("iFrame");
        newNode.setAttribute("id", ifName);
        newNode.setAttribute("src", "javascript:false;");
        newNode.setAttribute("scrolling", "no");
        newNode.setAttribute("frameborder", "0");
        document.body.appendChild(newNode);
    }

    iFrameDiv = document.getElementById(ifName);
    var div = getDiv(divName);

    try {
        iFrameDiv.style.position = "absolute";
        iFrameDiv.style.width = div.offsetWidth + 'px';
        iFrameDiv.style.height = div.offsetHeight + 'px';
        iFrameDiv.style.top = div.style.top;
        iFrameDiv.style.left = div.style.left;
        iFrameDiv.style.zIndex = div.style.zIndex - 1;
        iFrameDiv.style.visibility = div.style.visibility;
    } catch (e) {
    }
}

function keypressHandler (evt)
{
  quit = false;
  UserStartedTyping = true;
  if (bInitQueryCodeComplete && (TimerID == null))
        TimerID = setInterval("mainLoop()", 100);

  var div = getDiv(divName);
 // don't do anything if the div is hidden - unsure why this code was commented?
 // if (div.style.visibility == "hidden") return true;
 
 // make sure we have a valid event variable
  if(!evt && window.event) {
    evt = window.event;
  }

  var key = evt.keyCode;
  // if this key isn't one of the ones we care about, just return
  var KEYUP = 38;  var KEYDOWN = 40;  var KEYENTER = 13;  var KEYTAB = 9;
  
  if ((key != KEYUP) && (key != KEYDOWN) && (key != KEYENTER) && (key != KEYTAB))
    {
        searchHiddenControlActive.value = "";
        if (isVersionEx)
            document.getElementById("btnAutocAddFav").disabled = "disabled";
        return true;
    }

  // get the span that's currently selected, and perform an appropriate action
  var selNum = getSelectedSpanNum(div);
  var selSpan = setSelectedSpan(div, selNum);
  
  if (key == KEYENTER) 
  { 
    if (selSpan)
        _selectResult(selSpan, false); //don't submit yet
    submitForm();
    evt.cancelBubble=false;
    return false;
    } 
  else if (key == KEYTAB)
  {
   if (selSpan)
        _selectResult(selSpan, false);
   evt.cancelBubble=false;
   return true;
  }
  else {
    if (key == KEYUP){
      selSpan = setSelectedSpan(div, selNum - 1);
      }
    if (key == KEYDOWN){
      selSpan = setSelectedSpan(div, selNum + 1);
      }
    if (selSpan){
      _highlightResult(selSpan);
      }
  }
  showDiv(true);
  return true;
}

function getSelectedSpanNum (div)
{
  var count = -1;
  var spans = div.getElementsByTagName("div");
  if (spans) {
    for (var i = 0; i < spans.length; i++) {
      count++;
      if (spans[i].style.backgroundColor != div.style.backgroundColor)
        return count;
    }
  }
  return -1;
}

function setSelectedSpan (div, spanNum)
{
  var count = -1;
  var thisSpan;
  var spans = div.getElementsByTagName("div");
  if (spans) {
    for (var i = 0; i < spans.length; i++) {
      if (++count == spanNum) {
        _highlightResult(spans[i]);
        thisSpan = spans[i];
      } else {
        _unhighlightResult(spans[i]);
      }
    }
  }
  return thisSpan;
}

  function unescapeHTML(text) {
    var div = document.createElement('div');
    div.innerHTML = stripTags(text);
    return div.childNodes[0] ? div.childNodes[0].nodeValue : '';
  }

  function stripTags (text){
    return text.replace(/<\/?[^>]+>/gi, '');
  }
 
var xmlHttpAC = null;

function Query(q)
{
    var strUrl = "/Script/ajax_callbacks/autocomplete.ashx?q=" + q;
    if (isVersionEx)
        strUrl += "&t=s&c=5";
	xmlHttpAC = GetXmlHttpObject(ACEvent);
	if(xmlHttpAC!=null)
	{
		xmlHttpAC.open("GET", strUrl , true);
		xmlHttpAC.send(null);
	}
}

function ACEvent()
{
	if (xmlHttpAC.readyState==4 || xmlHttpAC.readyState=="complete")
	{
	    var strText = xmlHttpAC.responseText;    
	    var resultArr;

	    if (strText != null)
	        {
	        resultArr = strText.split("|");          
            var q = resultArr[0];
            resultArr.shift();
            showQueryDiv(q, resultArr);
            }
        return;            
	}
}

function submitForm()
{
  var submitPage = "";
  var gSearchUri = WWWBaseUrl + "/search/index.aspx?keyword=";
  var gCelebUri = WWWBaseUrl + "/detail/celebrity.aspx?tvobjectid={0}";
  var gMovieUri = WWWBaseUrl + "/detail/movie.aspx?tvobjectid={0}";
  var gTVShowUri = WWWBaseUrl + "/detail/tv-show.aspx?tvobjectid={0}";
  var gSportsUri = WWWBaseUrl + "/detail/sports.aspx?tvobjectid={0}";
  var queryFieldVal = queryFieldActive.value;
  var objectID;
  
  if (isVersionEx) {
      return;
  }
  
  
  var OmnitureText = "searchbox:autocomplete-click:" + queryFieldVal;
  if(document.getElementById("rad-search-type-video").checked)
    IsVideoSearch = true;
    
  queryFieldVal = EncodeCrossBrowser(queryFieldVal);
  
  if(IsVideoSearch)
    submitPage = OvgBaseUrl + "results.aspx?primary=SEARCH&searchvalue=" + queryFieldVal;
  else if (searchHiddenControl && searchHiddenControl.value)
  {
      var objectType = searchHiddenControl.value.substr(0,1);
      objectID = searchHiddenControl.value.substr(1);

      switch(objectType){
        case "c":
            submitPage = gCelebUri.replace("{0}", objectID);
            break;
        case "m":
            submitPage = gMovieUri.replace("{0}", objectID);
            break;
        case "s":
            submitPage = gTVShowUri.replace("{0}", objectID);
            break;
        case "g":
            submitPage = gSportsUri.replace("{0}", objectID);
            break;
         default:
            submitPage = gSearchUri + queryFieldVal; 
            OmnitureText = "searchbox:search"
            break;
        }
  }  
  else  
  { 
    submitPage = gSearchUri + queryFieldVal; 
    OmnitureText = "searchbox:search"
  }
  
  try { om_collect_link("www", OmnitureText); } 
  catch(e) { }
  window.location=submitPage;
  return false;
}

if (window.attachEvent) 
   { window.attachEvent("onload", function() {InitQueryCode(0);}); } 
else
{ window.addEventListener("load", function() { InitQueryCode(0); }, false); }
   
