var url = "ajax.php";
var JournalTitles = [];
var http_request = false;
var browserDetected = identifyBrowser();
addLoadListener(initAutoComplete);


function makeRequest(){
	if (window.XMLHttpRequest) {	//Mozilla, Safari...
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) {
			http_request.overrideMimeType('text/xml');
		}

	}else if (window.ActiveXObject) { //IE 
	
		http_request = new ActiveXObject("Microsoft.XMLHTTP");
			}
	
	if (!http_request){
		alert('Error: http_request cannot be created');
		return false;
	}
	//alert('where are we?');
	
	http_request.onreadystatechange = processResult;
	http_request.open('GET', url + '?search_given=all', true);
	http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	http_request.send('search_given=all');
}
	var xml_doc;
	  
	  var title = '';
	  
function processResult() {
	if (http_request.readyState == 4){
		if (http_request.status == 200){
			xml_doc = http_request.responseXML;
			
			//alert(xml_doc);
			var root_node = xml_doc.getElementsByTagName('match');
			//alert(root_node);
			
			for (var i=0; i<root_node.length; i++){
				disp = true;
				//alert(root_node[i].firstChild.data);
				var cur = root_node[i];
				 var titlenode =  cur.getElementsByTagName('title')[0];
				 var titleTextNode = titlenode.childNodes[0]
					 JournalTitles[i] = titleTextNode.nodeValue;
					 
			}
		}
	}
	}	
var browserDetected = identifyBrowser();

function initAutoComplete()
{
  var title = document.getElementById("title");
	makeRequest();
	
  title.setAttribute("autocomplete", "off");
  attachEventListener(title, "keydown", keydownAutoComplete, false);
  attachEventListener(title, "blur", blurAutoComplete, false);
  title.focus();

  return true;
}

function fix_name(title){
	return title.charAt(0).toUpperCase() + title.substr(1).toLowerCase();
}


function keydownAutoComplete(event)
{
  if (typeof event == "undefined")
  {
    event = window.event;
  }

  switch(event.keyCode)
  {
    case 9:     // tab		
	document.getElementById("autoCompleteDropdown").style.display = 'none';
		break;
    case 13:    // enter
    case 16:    // shift
    case 17:    // ctrl
    case 18:    // alt
    case 20:    // caps lock
    case 27:    // esc
		document.getElementById("autoCompleteDropdown").style.display = 'none';
		break;
	
    case 33:    // page up
    case 34:    // page down
    case 35:    // end
    case 36:    // home
    case 37:    // left arrow
    case 39:    // right arrow
      break;

    case 38:    // up arrow

      var target = getEventTarget(event);
      var autoCompleteDropdown = document.getElementById("autoCompleteDropdown");

      if (autoCompleteDropdown != null)
      {
        var childLis = autoCompleteDropdown.childNodes;
        var selected = false;

        for (var i = 0; i < childLis.length; i++)
        {
          if (childLis[i].className == "hover")
          {
            selected = true;

            if (i > 0)
            {
              childLis[i].className = "";
              childLis[i - 1].className = "hover";

              target.value = childLis[i - 1].firstChild.nodeValue;
            }

            break;
          }
        }

        if (!selected)
        {
         childLis[1].className = "hover";

          target.value = childLis[0].firstChild.nodeValue;
        }
      }

      stopDefaultAction(event);

      break;

    case 40:    // down arrow
      var target = getEventTarget(event);
      var autoCompleteDropdown = document.getElementById("autoCompleteDropdown");

      if (autoCompleteDropdown != null)
      {
        var childLis = autoCompleteDropdown.childNodes;
        var selected = false;

        for (var i = 0; i < childLis.length; i++)
        {
          if (childLis[i].className == "hover")
          {
            selected = true;

            if (i < childLis.length - 1)
            {
              childLis[i].className = "";
              childLis[i + 1].className = "hover";

              target.value = childLis[i + 1].firstChild.nodeValue;
            }

            break;
          }
        }

        if (!selected)
        {
         childLis[0].className = "hover";

         target.value = childLis[0].firstChild.nodeValue;
        }
      }

      stopDefaultAction(event);

      break;

    case 8:     // backspace
    case 46:    // delete

      if (typeof autoCompleteTimer != "undefined")
      {
        clearTimeout(autoCompleteTimer);
      }

      autoCompleteTimer = setTimeout("generateDropdown(false)", 500);

      break;

    default:

      if (typeof autoCompleteTimer != "undefined")
      {
        clearTimeout(autoCompleteTimer);
      }

      var target = getEventTarget(event);
      var inputRanges = "false";

      if (typeof target.createTextRange != "undefined" || typeof target.setSelectionRange != "undefined")
      {
        inputRanges = "true";
      }

      autoCompleteTimer = setTimeout("generateDropdown(" + inputRanges + ")", 50);
  }

  return true;
}

function generateDropdown(doAutoComplete)
{
  closeDropdown();	

  var input = document.getElementById("title");

  var newUl = document.createElement("ul");
  newUl.setAttribute("id", "autoCompleteDropdown");
  newUl.autoCompleteInput = input;
  newUl.style.position = "absolute";
  newUl.style.left = getPosition(input)[0] + "px";
  newUl.style.top = getPosition(input)[1] + input.offsetHeight - 2 + "px";
  newUl.style.width = input.offsetWidth - 3 + "px";


  for (var i = 0; i < JournalTitles.length; i++)
  {	  
  		
	  ArrayName = JournalTitles[i].toLowerCase();
    if (ArrayName.indexOf(input.value.toLowerCase()) >= 0 && input.value.length > 2)
    {
      var newLi = document.createElement("li");
      newLi.appendChild(document.createTextNode(JournalTitles[i]));
	

      if (browserDetected != "ie5mac")
      {
        attachEventListener(newLi, "mouseover", mouseoverDropdown, false);
        attachEventListener(newLi, "mouseout", mouseoutDropdown, false);
        attachEventListener(newLi, "mousedown", mousedownDropdown, false);
      }

      newUl.appendChild(newLi);
    }
  }

  if (newUl.firstChild != null)
  {
    document.getElementsByTagName("body")[0].appendChild(newUl);
  }

  if (typeof doAutoComplete != "undefined" && doAutoComplete)
  {
    autoComplete();
  }

  return true;
}

function autoComplete()
{
	
  var input = document.getElementById("title");
  var cursorMidway = false;

  if (typeof document.selection != "undefined")
  {
    var range = document.selection.createRange();

    if (range.move("character", 1) != 0)
    {
      cursorMidway = true;
    }

  }
  else if (typeof input.selectionStart != "undefined" && input.selectionStart < input.value.length)
  {
    cursorMidway = true;
  }

  var originalValue = input.value;
  var autoCompleteDropdown = document.getElementById("autoCompleteDropdown");

  if (autoCompleteDropdown != null && !cursorMidway)
  {
    autoCompleteDropdown.firstChild.className = "hover";
    

    if (typeof input.createTextRange != "undefined")
    {
      var range = input.createTextRange();
      range.moveStart("character", originalValue.length);
      range.select();
    }
    else if (typeof input.setSelectionRange != "undefined")
    {
      input.setSelectionRange(originalValue.length, input.value.length);
    }

    if (autoCompleteDropdown.childNodes.length == 1)
    {
		autoCompleteDropdown.firstChild.className = "";
     // setTimeout("closeDropdown();", 500);
    }
  }

  return true;
}

function mouseoverDropdown(event)
{
  if (typeof event == "undefined")
  {
    event = window.event;
  }

  var target = getEventTarget(event);

  while (target.nodeName.toLowerCase() != "li")
  {
    target = target.parentNode;
  }

  var childLis = target.parentNode.childNodes;

  for (var i = 0; i < childLis.length; i++)
  {
    childLis[i].className = "";
  }

  target.className = "hover";

  return true;
}

function mouseoutDropdown(event)
{
  if (typeof event == "undefined")
  {
    event = window.event;
  }

  var target = getEventTarget(event);

  while (target.nodeName.toLowerCase() != "li")
  {
    target = target.parentNode;
  }

  target.className = "";

  return true;
}

function mousedownDropdown(event)
{
  if (typeof event == "undefined")
  {
    event = window.event;
  }

  var target = getEventTarget(event);

  while (target.nodeName.toLowerCase() != "li")
  {
    target = target.parentNode;
  }

  target.parentNode.autoCompleteInput.value = target.firstChild.nodeValue;

  closeDropdown();

  return true;
}

function blurAutoComplete()
{
  if (typeof autoCompleteTimer != "undefined")
  {
    clearTimeout(autoCompleteTimer);
  }

  closeDropdown();

  return true;
}

function closeDropdown()
{
  var autoCompleteDropdown = document.getElementById("autoCompleteDropdown");

  if (autoCompleteDropdown != null)
  {
    autoCompleteDropdown.parentNode.removeChild(autoCompleteDropdown);
  }

  return true;
}

function addLoadListener(fn)
{
  if (typeof window.addEventListener != 'undefined')
  {
    window.addEventListener('load', fn, false);
  }
  else if (typeof document.addEventListener != 'undefined')
  {
    document.addEventListener('load', fn, false);
  }
  else if (typeof window.attachEvent != 'undefined')
  {
    window.attachEvent('onload', fn);
  }
  else
  {
    var oldfn = window.onload;
    if (typeof window.onload != 'function')
    {
      window.onload = fn;
    }
    else
    {
      window.onload = function()
      {
        oldfn();
        fn();
      };
    }
  }
}

function attachEventListener(target, eventType, functionRef, capture)
{
  if (typeof target.addEventListener != "undefined")
  {
    target.addEventListener(eventType, functionRef, capture);
  }
  else if (typeof target.attachEvent != "undefined")
  {
    target.attachEvent("on" + eventType, functionRef);
  }
  else
  {
    eventType = "on" + eventType;

    if (typeof target[eventType] == "function")
    {
      var oldListener = target[eventType];

      target[eventType] = function()
      {
        oldListener();

        return functionRef();
      }
    }
    else
    {
      target[eventType] = functionRef;
    }
  }

  return true;
}

function getEventTarget(event)
{
  var targetElement = null;

  if (typeof event.target != "undefined")
  {
    targetElement = event.target;
  }
  else
  {
    targetElement = event.srcElement;
  }

  while (targetElement.nodeType == 3 && targetElement.parentNode != null)
  {
    targetElement = targetElement.parentNode;
  }

  return targetElement;
}

function stopDefaultAction(event)
{
  event.returnValue = false;

  if (typeof event.preventDefault != "undefined")
  {
    event.preventDefault();
  }

  return true;
}

function getPosition(theElement)
{
  var positionX = 0;
  var positionY = 0;

  while (theElement != null)
  {
    positionX += theElement.offsetLeft;
    positionY += theElement.offsetTop;
    theElement = theElement.offsetParent;
  }

  return [positionX, positionY];
}

function identifyBrowser()
{
  var agent = navigator.userAgent.toLowerCase();

  if (typeof navigator.vendor != "undefined" && navigator.vendor == "KDE" && typeof window.sidebar != "undefined")
  {
    return "kde";
  }
  else if (typeof window.opera != "undefined")
  {
    var version = parseFloat(agent.replace(/.*opera[\/ ]([^ $]+).*/, "$1"));

    if (version >= 7)
    {
      return "opera7";
    }
    else if (version >= 5)
    {
      return "opera5";
    }

    return false;
  }
  else if (typeof document.all != "undefined")
  {
    if (typeof document.getElementById != "undefined")
    {
      var browser = agent.replace(/.*ms(ie[\/ ][^ $]+).*/, "$1").replace(/ /, "");

      if (typeof document.uniqueID != "undefined")
      {
        if (browser.indexOf("5.5") != -1)
        {
          return browser.replace(/(.*5\.5).*/, "$1");
        }
        else
        {
          return browser.replace(/(.*)\..*/, "$1");
        }
      }
      else
      {
        return "ie5mac";
      }
    }

    return false;
  }
  else if (typeof document.getElementById != "undefined")
  {
    if (navigator.vendor.indexOf("Apple Computer, Inc.") != -1)
    {
      if (typeof window.XMLHttpRequest != "undefined")
      {
        return "safari1.2";
      }

      return "safari1";
    }
    else if (agent.indexOf("gecko") != -1)
    {
      return "mozilla";
    }
  }

  return false;
}