/**
 * @author: FTDeBUGgeR
 * @version: 0.2beta
 */

var StreetsAF = {};

StreetsAF.options = [];
StreetsAF.active = null;
StreetsAF.current = null;
StreetsAF.focused = false;

StreetsAF.ajaxStack = [];
StreetsAF.ajaxLast = "";

StreetsAF.attach = function(obj)
{
  obj.each(StreetsAF.createList);
  obj.keyup(StreetsAF.keyup);
  obj.focus(StreetsAF.showBox);
  obj.blur(StreetsAF.hideBox);
  
  StreetsAF.reload();
}

StreetsAF.getForm = function(o)
{
  return $(o).parents().find("form")[0]
}

StreetsAF.showBox = function()
{
  StreetsAF.focused = true;
  var form = $(StreetsAF.getForm(this));
  if (this.af.text())
  this.af.slideDown("fast"); //.show();
  
  //this.name = "check-street" + (new Date()).getTime();
  
  form.submit(function(){
	if ( StreetsAF.setValue() )
	{
	  StreetsAF.options = [];
	  this.af.hide();
	}
    return false;
  });
}

StreetsAF.hideBox = function()
{
  StreetsAF.focused = false;
  this.name = "check-street";
  var form = $(StreetsAF.getForm(this));
  this.af.slideUp("fast"); //.hide()
  form.unbind("submit");
}

StreetsAF.setValue = function()
{
	var cur = $(".current", StreetsAF.active.af).text();
	
	if (cur)
	  $(StreetsAF.active).val(cur);
	
	return cur;
}

StreetsAF.createList = function()
{
  this.af = $('<ul class="StreetsAFBox"></ul>');
  var pos = StreetsAF.findPos(this);
  var h = this.offsetHeight;
  
  this.af.css("left", pos[0] + "px");
  this.af.css("top", (pos[1] + h) + "px");
  this.af.css("width", (this.offsetWidth - 2) + "px");
  
  this.af.css("position", "absolute");
  
  this.af.hide();
  
  $("body").append(this.af);
  
  StreetsAF.fillList(this);
}

StreetsAF.fillList = function(p)
{
  var obj = p.af;
  
  var text = "";
  
  for(i in StreetsAF.options)
  {
    text += "<li>" + StreetsAF.options[i] + "</li>";
  }

  
  if ( text )
  {
	  obj.html(text);
	  
	  StreetsAF.current = p;
	  
	  $("li", obj).mousedown(function(){
		$(".current", $(this)).removeClass("current");
		$(this).addClass("current");
	    $(StreetsAF.current).val($(this).text());
	  });
	  
	  if (StreetsAF.focused) obj.show();
  }
  else
  {
    obj.hide();
	//obj.html("<em>Ничего не найдено</em>");
  }
}

StreetsAF.reload = function(text)
{
  if (StreetsAF.ajaxStack.length != 0)
  {
	text = StreetsAF.ajaxStack.pop();
	StreetsAF.ajaxStack = [];
		
	if ( StreetsAF.ajaxLast != text && text != "" )
	{
	  $.get("./", {street_name: text, ajax: 1}, function(data){
	    eval(data);
	    StreetsAF.fillList(StreetsAF.active);
      });
	}
	
	if (text == "")
	{
	  StreetsAF.options = [];
	  StreetsAF.fillList(StreetsAF.active);
	}
	
	StreetsAF.ajaxLast = text;
  }
  
  setTimeout("StreetsAF.reload()", 1000);
}

StreetsAF.keyup = function(event)
{
  //alert(event.keyCode);
  StreetsAF.active = this;
  //StreetsAF.reload(this.value);

  switch(event.keyCode)
  {
  	case 40:
  	  StreetsAF.next(this.af);
  	  break;
  	case 38:
      StreetsAF.prev(this.af);
      break;
  	default:
  	  StreetsAF.ajaxStack.push(this.value);
  }
}

StreetsAF.prev = function(obj)
{
  var cur = $(".current", obj).removeClass("current");
  
  if ( !cur.length )
  {
    cur = $("li:last", obj).addClass("current");
  }
  else
  {
	cur = cur.prev("li").addClass("current")
  }
  
  StreetsAF.setValue();
}

StreetsAF.next = function(obj)
{
  var cur = $(".current", obj).removeClass("current");
    
  if ( !cur.length )
  {
    cur = $("li:first", obj).addClass("current");
  }
  else
  {
	cur = cur.next("li").addClass("current")
  }
  
  StreetsAF.setValue();
}

$(function(){
  StreetsAF.attach($('.autofill-street'));
});


/* etc */

StreetsAF.findPos = function(obj) 
{
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}
