HOST = "searchboxing.com"

function size_input(item_id)
{
	var css_selector = "#"+item_id+" input.box_title_input";
	var box = $(item_id);
	$$(css_selector).each( //TODO make this faster
		function(input)
		{
			box.input = input;
			input.style.width=get_input_width(input, "box_title_input")+"px";
			input.box_title=input.value;
			input.onfocus = function(){
				input.value = "";
				$('bubble').field_focus = item_id;
				setup_bubble($(item_id));
			}
			input.onblur = function(){
				$('bubble').field_focus = false;
				setTimeout('restore_title_input("'+item_id+'");remove_bubble("'+item_id+'")', 1000);
			}
		}
	);
}

function get_input_width(element, css_class)
{
	var box = element;
	var cr = document.createElement('div');
	var inv = document.createElement('span');
	var form = $$('form')[0];
	cr.appendChild(inv);
	form.appendChild(cr);
	inv.className = css_class;
	inv.style.display='inline';
	cr.style.position="absolute";
	cr.style.top = "-1000px";
	cr.style.left = "-1000px";
	cr.style.width = "1000px";
	cr.style.visibility = "hidden";
	inv.innerHTML = box.value;
	var val = inv.offsetWidth;
	if(val < 5) val = 100;
	if(val > 500) val = 500;
	form.removeChild(cr);
	return val;
}

function restore_title_input(box_id)
{
	var b = $("bubble");
	if (b.field_focus != box_id && b.bubble_focus != box_id)
	{
		$$("#" + box_id + " input.box_title_input").each(function(input){
			input.value = input.box_title;
		});
	}
}

function setup_bubble(box)
{
	var b = $("bubble");
	b.box = box;
	b.style.top=box.offsetTop+box.offsetHeight-8+"px";
	b.style.left=box.offsetLeft-12+"px";
	$('bubble_title').innerHTML = box.input.box_title;
	new Ajax.Updater('bubble_details', '/searchboxing/details/'+box.id,{onCreate:bubble_loading});
}

function remove_bubble(box_id)
{
	var b = $("bubble");
	if (box_id == b.box.id && b.field_focus!=box_id && b.bubble_focus!=box_id)
	{
		b.style.top = "-1000px";
		b.style.left = "-1000px";
	}
}

function bubble_loading()
{
	var cr = $("bubble_details");
	cr.innerHTML = "loading..";
	
}

function add_box(box_id)
{
	//var box = eval('('+box+')');
	//alert("add box: "+box.title);
	//alert(box_id);
	if ((typeof window.external == "object") && ((typeof window.external.AddSearchProvider == "unknown") || (typeof window.external.AddSearchProvider == "function"))) {
		window.external.AddSearchProvider("http://" + HOST + "/searchboxing/opensearch_description/" + box_id + ".xml");
	}
	else
	{
		alert("It seems your browser doesn't support OpenSearch plugins. You might want to try out Firefox.");
	}
}

//only for forms with one search field, but possibly many hidden fields. opensearch or traditional syntax.
function test_box(box, query)
{
	if(query=="")
	{
		query = "test";
	}
	var box = eval('('+box+')');
	var url = box.url;
	var field = box.search_field;
	var hidden_fields = box.hidden_fields;
	if (field == "")//opensearch-like syntax
	{
		url = url.replace("{searchTerms}", query);
	}else //traditional syntax
	{
		hidden_fields.push({'name': field, 'value':query});
	}
	var fields_string = "";
	for(var i=0; i<hidden_fields.length; i++)
	{
		var conn = '&'
		if(i==0 && fields_string.indexOf('?') == -1 && url.indexOf('?') == -1) conn = '?';
		fields_string += conn + hidden_fields[i].name + '=' + hidden_fields[i].value;
	}
	url += fields_string;
	window.open(url);
	$("box_"+box.id+"_input").focus();
	return false;
}

function open_opensearch_description(box_id)
{
	window.open("http://"+HOST+"/searchboxing/opensearch_description/" + box_id + ".xml");
}
