var get_tags_flag = 0;
var total_tags = 0;
var selected_tag = 0;
var target_id = '';
var last_tag = '';
var tags_updated = 0;
var tags_visible = 0;

function add_tag_item(i, tag_item){
	var s1 = $('<span class="tag_name" />');
	s1.html(tag_item.tag);

	var s2 = $('<span class="tag_count" />');
	s2.html(tag_item.count);

	var item = $('<div/>');
	item.append(s2);
	item.append(s1);
	item.click(replace_tag);
	item.mouseover(mouse_tag_select);
	$("#tags").append(item);
	total_tags++;
}

function render_tag_menu(data){
	try{
		total_tags = 0;
		selected_tag = 0;
		$('#tags').html('');
		$.each(data.tags, add_tag_item);
		format_tags();
		$('#tags').show();
//		place_tags_menu();
		if(target_id == 'tag_search' || target_id == 'tag_search2'){
			$('#tags').css('width', '');
		}else{
			$('#tags').css('width', $('#' + target_id).attr('clientWidth'));
		}
		if(total_tags == 0){
			hide_tags_menu();
		}else{
			tags_visible = 1;
		}
	}catch(e){
//		alert('ERROR:render_tag_menu:' + e);
	}
	get_tags_flag = 0;
	if(tags_updated){
		get_tags();
	}
}

function rtrim(s){
	if(typeof(s) != 'string') return s;
	var len = s.length;
	for(var i = s.length; i > 0; i--){
		len = i;
		if(s.charAt(i) != ' '){
			break;
		}
	}
	return s.substr(0, len);
}

function ltrim(s){
	if(typeof(s) != 'string') return s;
	var start = 0;
	for(var i = 0; i < s.length; i++){
		start = i;
		if(s.charAt(i) != ' '){
			break;
		}
	}
	return s.substr(start);
}

function trim(s){
	return rtrim(ltrim(s));	
}

function get_tags(){
	if(get_tags_flag != 0) return;
	tags_updated = 0;
	var ara = $("#" + target_id).val().split(",");
	var tag = ara.pop();
//	$('#debug').text("TAG: " + tag);

	tag = trim(tag);

	if(tag.length < 2 || last_tag == tag) return;

	last_tag = tag;
	get_tags_flag = 1;
	jQuery.getJSON('/tags_helper.php', { q: '' + tag }, render_tag_menu);
}

function mouse_tag_select(){
	var index = $('#tags > div').index(this);
	if(index == -1) return;
	selected_tag = index;
	format_tags();
}

function format_tags(){
	$("#tags>div").each( function(i){
		if(selected_tag == i){
			$(this).addClass('tag_item_selected').removeClass('tag_item');
		}else{
			$(this).addClass('tag_item').removeClass('tag_item_selected');
		}
	});
}

function hide_tags_menu(){
	tags_visible = 0;
	$('#tags').html('').hide();
}

function replace_tag(obj){
	try{
		if(tags_visible != 1) return;
		var new_tag;
		if(obj == 1){
			new_tag = $("#tags>div:eq(" + selected_tag + ")");
		}else{
			new_tag = $(this);
		}
		new_tag = $('span:eq(1)', new_tag).text();
		if(target_id == 'tag_search' || target_id == 'tag_search2'){
			$("#" + target_id).val(new_tag);
			$("#" + target_id).focus();
			$("form:has(#"+target_id+")").submit();
		}else{
			var ara = $("#" + target_id).val().split(",");
			ara.pop();
			ara.push(new_tag);
			ara.push('');
			$("#" + target_id).val(ara.join(', '));
			hide_tags_menu();
			$("#" + target_id).focus();
		}
	}catch(e){
//		alert('ERROR:replace_tag:' + e);
	}
}

function key_press(e){
	try{
//		$('#debug2').append($('<div/>').text("KEY: " + e.which));
		switch(e.which){
			case 13:	//Enter
				if(tags_visible == 1){
					replace_tag(1);
					return false;
				}
				break;
			case 38:	//Up
				if(selected_tag){
					selected_tag--;
					format_tags();
				}
				break;
			case 40:	//Down
				if(selected_tag + 1 < total_tags){
					selected_tag++;
					format_tags();
				}
				break;
			default:
				tags_updated = 1;
				get_tags();
		}
	}catch(e){
//		alert('ERROR:key_press:' + e);
	}
}

function filter_key(e){
	if(e.which == 13 && tags_visible == 1) return false;
}

function setup_tag_helper(obj){
	if(typeof(obj) == "string"){
		target_id = obj;
	}else{
		target_id = $(obj).attr('id');
	}
	var tid = "#" + target_id;
/*
	$(tid).keyup(key_press);
	$(tid).keypress(filter_key);
	$(tid).keydown(filter_key);
*/
	$("#tags").insertAfter(tid);
	hide_tags_menu();
}

$(document).ready(function(){
//	jQuery.ajax({
	$.ajaxSetup({ 
		type: "POST" 
	}); 
	hide_tags_menu();
	$('input').each(function(i){
		var re = new RegExp("^(tag_?\\d*|tag_search\\d*)$","i");
		var inpt = $(this);
		if(re.exec(inpt.attr('id'))){
			inpt.focus(function(){
				setup_tag_helper(this);
			});
			inpt.keyup(key_press);
			inpt.keypress(filter_key);
			inpt.keydown(filter_key);
			inpt.blur(function(){
				setTimeout(hide_tags_menu, 500);
			});

//			setup_tag_helper(RegExp.$1)
		}
	});
	if($('#tags').attr('id')){
	}else{
		var s1 = $('<div id="tags" />');
		s1.hide();
		$(document.body).append(s1);		
	}
});

