var data_input_box;

function get_data(page, element_id) {
		
		
		var xmlHttp;
		
		try {
			// Firefox, Opera 8.0+, Safari
			xmlHttp = new XMLHttpRequest();
		} catch (e) {
			// Internet Explorer
			try {
				xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {
					alert("Sorry, your browser does not support Ajax. Please upgrade!");
					return false;
				}
			}
		}	
		
		xmlHttp.onreadystatechange = function() {
			if(xmlHttp.readyState == 4) {
				document.getElementById(element_id).innerHTML = xmlHttp.responseText;
			}
		};
		
		xmlHttp.open("GET", page, true);
		xmlHttp.send(null);
	
	}

//-----------------------------------------------------------------------------------------------------------------------------
// 	post_data()
// 		page		= the script that you want to run in the background
//		form_name	= the 'name' of the form that the data will retrieve
//		element_id	= the id of the element that the process with return to
//-----------------------------------------------------------------------------------------------------------------------------
function post_data(page, form_name, element_id) {
	
	function return_post_data() {
		if (xmlHttp.readyState == 4) {
			if (xmlHttp.status == 200) {
				result = xmlHttp.responseText;
				document.getElementById(element_id).innerHTML = result;            
			} else {
				alert("There was a problem with the request.");
			}
		}
	}
	
	// Proper start of the function (builds up the POST string - looking at all the fields)
	var parameters = "";
	
	for (i = 0; i < document.forms[form_name].elements.length; i++) {
		key = document.forms[form_name].elements[i].name;
		value = document.forms[form_name].elements[i].value;
		value = encodeURI(value);
		
		if(typeof key != 'undefined'){
			// If its an unchecked checkbox, get rid of it
			if(document.forms[form_name].elements[i].type == "checkbox") {
				if(document.forms[form_name].elements[i].checked) {
					parameters += "&" + key + "=" + value;
				}
			} 
			// If its a radio button
			else if (document.forms[form_name].elements[i].type == "radio") {
				if(document.forms[form_name].elements[i].checked) {
					parameters += "&" + key + "=" + value;
				}
			} else {
				parameters += "&" + key + "=" + value;
			}
		}			
	}
	
	try {
		// Firefox, Opera 8.0+, Safari
		xmlHttp = new XMLHttpRequest();
	} catch (e) {
		// Internet Explorer
		try {
			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				alert("Sorry, your browser does not support Ajax. Please upgrade!");
				return false;
			}
		}
	}	
	
	xmlHttp.onreadystatechange = return_post_data;
	xmlHttp.open("POST", page, true);
	xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xmlHttp.setRequestHeader("Content-length", parameters.length);
	xmlHttp.setRequestHeader("Connection", "close");
	xmlHttp.send(parameters);
	
}

function content_data(response,qs) {
	if (response) {
		el=document.getElementById('content_drop_down');
		x=response.getElementsByTagName('match');
		var html='<h1 style=\"font-weight: normal; font-family: georgia; font-size: 1.0em;\">Search Results:</h1><table><tbody>';
		for (i=0;i<x.length;i++) {
			if (x[i].childNodes[0].childNodes[0]) html=html+'<tr><td><a href=\"/'+x[i].childNodes[4].childNodes[0].nodeValue+'/'+x[i].childNodes[3].childNodes[0].nodeValue+'/'+x[i].childNodes[2].childNodes[0].nodeValue+'/"> » '+x[i].childNodes[0].childNodes[0].nodeValue+'</a></td></tr>';					
		}
		html=html+'</tbody></table>';
		el.innerHTML=html; 	
		el.style.display='block';
	} else {
		if (!qs) qs='';
		qs=escape(qs);
		ajax_loader('/xml_content_match/index.xml','q='+document.getElementById('content_input').value+qs,'content_data');
	}
}

function tag_data(response) {

	if (!data_input_box) {
		data_input_box="tag_input";
		data_output_box='tags_drop_down';
	}
	
document.getElementById('tags').className='';

	if (response) {
		el=document.getElementById(data_output_box);
		x=response.getElementsByTagName('match');
		var html='<table width="400px" cellspacing="0" cellpadding="3"><tbody>';
		for (i=0;i<x.length;i++) {
			if (x[i].childNodes[0].childNodes[0]) html=html+'<tr><td style="background-color: white;" onclick=\"document.getElementById(\''+data_input_box+'\').value=\''+x[i].childNodes[1].childNodes[0].nodeValue+'\'; document.getElementById(\'tags_drop_down\').style.display=\'none\'; document.getElementById(\''+data_input_box+'\').focus();\">'+x[i].childNodes[0].childNodes[0].nodeValue+'</td></tr>';					
		}
		html=html+'</tbody></table>';
		el.innerHTML=html; 	
		el.style.display='block';
		
		ib=document.getElementById(data_input_box);
		//el.style.left=get_left(ib)+'px';
		//el.style.top=get_top(ib)+ib.offsetHeight+'px';
		el.style.left=get_left(ib)-90+'px';
		el.style.top=get_top(ib)+10+'px';
el.style.width='400px';
		
	} else {
		qs=escape(document.getElementById('tag_input').value);
		ajax_loader('/xml_tag_match/index.xml','q='+qs,'tag_data');
	}
	
}

function people_data(response) {

	if (!data_input_box) {
		data_input_box="tag_input";
		data_output_box='tags_drop_down';
	}
	
	if (response) {
		el=document.getElementById(data_output_box);
		x=response.getElementsByTagName('match');
		var html='<table width="100%" cellspacing="0" cellpadding="3"><tbody>';
		for (i=0;i<x.length;i++) {
			if (x[i].childNodes[0].childNodes[0]) html=html+'<tr><td style="background-color: white;" onclick=\"document.getElementById(\''+data_input_box+'\').value=\'('+x[i].childNodes[1].childNodes[0].nodeValue+') '+x[i].childNodes[0].childNodes[0].nodeValue+'\'; document.getElementById(\''+data_output_box+'\').style.display=\'none\'; document.getElementById(\''+data_input_box+'\').focus();\">'+x[i].childNodes[3].childNodes[0].nodeValue+'</td></tr>';					
		}
		html=html+'</tbody></table>';
		el.innerHTML=html; 	
		el.style.display='block';
		
		ib=document.getElementById(data_input_box);
		el.style.left=get_left(ib)+'px';
		el.style.top=get_top(ib)+ib.offsetHeight+'px';
		
	} else {
		qs=escape(document.getElementById('tag_input').value);
		ajax_loader('/xml_tag_match/index.xml','q='+qs,'tag_data');
	}
	
}

function var_dump(obj) {
   if(typeof obj == "object") {
      return "Type: "+typeof(obj)+((obj.constructor) ? "\nConstructor: "+obj.constructor : "")+"\nValue: " + obj;
   } else {
      return "Type: "+typeof(obj)+"\nValue: "+obj;
   }
}

function search_data(response) {
	
	if (response) {
	
		el=document.getElementById(data_output_box);
		x=response.getElementsByTagName('match');
		var html = '';
		html = html + '<h1 style=\"font-weight: normal; font-size: 1.2em;\">Results:</h1>';
		html = html + '<table cellpadding="3"><tbody>';
		
		//alert(x.length);
		//alert(var_dump(x[0].childNodes));
		
		if(x.length>0){
			for (i=0;i < x.length;i++) {
				//alert('in loop');
				//html = html + '<tr><td><a href="'+x[i].childNodes[2].childNodes[0].nodeValue+'"><img src="/sites/bmit/images/icons/small/'+x[i].childNodes[5].childNodes[0].nodeValue+'.png" align="absmiddle" /> '+x[i].childNodes[0].childNodes[0].nodeValue+'</a></td></tr>';					
				html = html + '<tr><td><a href="' + x[i].childNodes[5].childNodes[0].nodeValue + '"><img src="/sites/bmit/images/icons/small/'+ x[i].childNodes[11].childNodes[0].nodeValue +'.png" align="absmiddle" /> > '+ x[i].childNodes[1].childNodes[0].nodeValue +'</a></td></tr>';					
			}
		} else {
			html = '<table cellpadding="3"><tbody><tr><td>Sorry, your search yielded no results. Please try a different search term.</td></tr></tbody></table>';
		}		
		
		html=html+'</tbody></table>';
		el.innerHTML=html; 	
		el.style.display='block';
		
	}
	
}

function load_tag_data(input_box,output_box,type) {
	load_data(input_box,output_box,'/xml_tag_match/index.xml',"&type="+type,'tag_data');
}

function load_people_data(input_box,output_box,type) {
	load_data(input_box,output_box,'/xml_people_match/index.xml','','people_data');
}

function load_data(input_box,output_box,url,qs,fn) {
	data_input_box=input_box;
	data_output_box=output_box;
	ajax_loader(url,'q='+document.getElementById(input_box).value+qs,fn);
}

function ajax_loader(url,qs,fn) {

	//fn = callback function

	if (document.getElementById) {
		var xml_request = (window.ActiveXObject) ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
	}
		
	if (xml_request) {
		xml_request.onreadystatechange = function() {
			if (xml_request.readyState == 4 && xml_request.status == 200) {
				 eval(fn + '(xml_request.responseXML.documentElement)');			
			}
		}
		xml_request.open("GET", url+'?'+qs, true);
		xml_request.send(null);
	}
	
}

function get_left(element) {
	var curNode = element;
	var left    = 0;
	
	do {
	    left += curNode.offsetLeft;
	    curNode = curNode.offsetParent;
	
	} while(curNode.tagName.toLowerCase() != 'body');
	
	return left;
}
    
function findPos(obj) {
	var curleft = obj.offsetLeft || 0;
	var curtop = obj.offsetTop || 0;
	while (obj = obj.offsetParent) {
		curleft += obj.offsetLeft
		curtop += obj.offsetTop
	}
	curleft=50;
	curtop=50;
	return {x:curleft,y:curtop};
}

    
/**
* Gets top coord of given element
* 
* @param object element The element to get the top coord for
*/
function get_top(element) {
    var curNode = element;
    var top    = 0;

    do {
        top += curNode.offsetTop;
        curNode = curNode.offsetParent;

    } while(curNode.tagName.toLowerCase() != 'body');

    return top;
}

function moveSelect(step) {

	var lis = $("li", $output);
	if (!lis) return;

	active += step;

	if (active < 0) {
		active = 0;
	} else if (active >= lis.size()) {
		active = lis.size() - 1;
	}

	lis.removeClass("ac_over");

	$(lis[active]).addClass("ac_over");

};

function selectCurrent() {
	var li = $("li.ac_over", $output)[0];
	if (!li) {
		var $li = $("li", $output);
		if (options.selectOnly) {
			if ($li.length == 1) li = $li[0];
		} else if (options.selectFirst) {
			li = $li[0];
		}
	}
	if (li) {
		$input.val(li.innerHTML);
		hideResults();
		return true;
	} else {
		return false;
	}
};

function hideResults() {
	if (timeout) clearTimeout(timeout);
	timeout = setTimeout("$output.fadeOut('fast');", 200);
};

function onChange() {


	// ignore if the following keys are pressed: [del] [shift] [capslock]
	if( lastKeyPressCode == 46 || (lastKeyPressCode > 8 && lastKeyPressCode < 32) ) return false;

	if ($input.val()=='') {
		$output.fadeOut(1);
		$input.removeClass('ac_loading');
		return false;
	}

	$.get("/xml_tag_match/index.xml", { q: $input.val() } , function(data){
					
		$output.empty();
		var pos=$input.position();
					
		$output.css({
			width: $input.width()+"px",
			top: (pos.top+$input.height()+5)+"px",
			left: pos.left+"px"
		}).fadeIn('fast');
		
		var ul = document.createElement("div");
			
		$("match",data).each(function(id) {
			message = $("match",data).get(id);
			
			var li = document.createElement("p");

			
			li.innerHTML=$("name",message).text();
			
			//$(li).hover(function() { $("p", ul).removeClass("ac_over"); $(this).addClass("ac_over"); },function() { $(this).removeClass("ac_over"); });
			$(li).click(function(e) { 

				//add_to_text_box(li.innerHTML);

				e.preventDefault(); 
				e.stopPropagation();
				add_tag(li.innerHTML);
				//$input.val(li.innerHTML);
				//$input.val($("data",message).text()); 
				
			});
			ul.appendChild(li);
			
		});
		
		$input.removeClass('ac_loading');
		$output.append(ul);
		
	});
	
}

function add_to_text_box(data){
	var el = document.getElementById("tags");
	var vl = el.value;
	vl.append(data);
	//alert(data);
}

function add_tag(data) {

	if (!data) {
		data=$input.val();
	}

	var ul = $("#tag_list");
	var li = document.createElement("li");
	li.innerHTML=data;



	$(li).hover(function() { $("li", ul).removeClass("ac_over"); 
	$(this).addClass("ac_over"); },function() { $(this).removeClass("ac_over"); });
	
	var input=document.createElement("input");
	input.setAttribute('type',"hidden");
	//input.setAttribute('name',"tag_"+$tags);
	input.setAttribute('name',"tags[]");
	input.setAttribute('value',data);
	li.appendChild(input);
	
	var image=document.createElement("img");
	image.setAttribute('src',"/sites/bmit/images/icons/small/delete.png");
	image.setAttribute('style',"margin-right: 10px; cursor: pointer;");
	image.setAttribute('align',"absmiddle");	
	
	//var $newLi = $("<li><input  /><img src=\"/sites/bmit//images/icons/small/delete.png\" style=\"margin-right: 10px; cursor: pointer;\" align=\"absmiddle\" />"+data+"</li>");
	$("#tag_list").append(li);
	$tags=$tags+1;
	if ($tags_count==0) {
		$("#tag_list").fadeIn(1);
    }
	$tags_count++;
	$input.val('');
	
	/*$('#tag_list').click(function(event) {
    	var $tgt = $(event.target);
    	if ($tgt.is('img')) {
      		$tgt.parent().remove();
      		$tags_count--;
      		if ($tags_count==0) {
      			$("#tag_list").fadeOut(200);
      		}
    	}
    });
    
    $('#tag_list').hover(function(event) {
    	var $tgt = $(event.target);
    	if ($tgt.is('li')) {
    		$tgt.addClass('ac_over');
    	}
    });*/
	
}

var active=-1;
var $input;
var $output;
var timeout = null;
var lastKeyPressCode = null;
var $tags=0;
var $tags_count=0;
    
$(document).ready(function(){
	
	$input = $("#tags").attr("autocomplete", "off");
	$output = $("#tags_drop_down").hide();
	$("#tags_no_js").hide();
	$("#add_tag").show();

	$("#add_tag").click(function(e) {
		add_tag();
		e.preventDefault();
	});

	$input.keydown(function(e) {
		// track last key pressed
		
		lastKeyPressCode = e.keyCode;
		
		switch(e.keyCode) {
			case 38: // up
				e.preventDefault();
				//alert('up');
				moveSelect(-1);
				break;
			case 40: // down
				e.preventDefault();
				moveSelect(1);
				break;
			case 9:  // tab
			case 13: // return
				if( selectCurrent() ){
				e.preventDefault();
					// make sure to blur off the current field
					add_tag();
					$input.focus();
					active=0;
					e.preventDefault();
				}
				break;
			default:
				$input.addClass('ac_loading');
				timeout = setTimeout("onChange();", 100);
	
		}
	
	});
	
	$input.focus(function() {
		if ($input.val()!='') $output.fadeIn('fast');
	});
	
	$input.blur(function() {
		// track whether the field has focus
		//$output.hide();
		hideResults();
	});
	
});