/*
 * jQueryPlugin for ajax/json suggestions.
 * @package - template
 * @author Ivans <ivans@gaspdesign.co.uk>
 * @version - 0.1
 */
jQuery.fn.suggestions = function() {
	return this.each(function(){
		$(this).attr('autocomplete','off');
		var ul = setupUl(this);
		$(this).keyup( function(event){loadSuggestions(event, this, ul)} );
	});
};

var timeoutId;

function setupUl(element)
{
	var res = $('<ul />').addClass('suggestions').insertAfter(element).get(0);
	$(res).before('<div style="clear:both"></div>');
	
	return res;
}

function loadSuggestions(event, element, ul)
{
	
	switch(event.keyCode)
	{
	case 8:
		$('#course_id').val('');
		break;
	case 38:
		if ($('li.selected', ul).prev().size()==1)
			$('li.selected', ul).removeClass('selected').prev().addClass('selected');
		else
		{
			$('li.selected', ul).removeClass('selected')
			$('li:last', ul).addClass('selected');
		}
		$(element).val($('li.selected', ul).text().replace(/&amp;/g, '&'));
		// for kiddeminster project only!!!
		$('#course_id').val($('li.selected', ul).attr('id').substr(7));
		
		$('#course_t').val($('li.selected', ul).attr('class').split(' ')[0]);
		// end
		break;
	case 40:
		if ($('li.selected', ul).next().size()==1)
			$('li.selected', ul).removeClass('selected').next().addClass('selected');
		else
		{
			$('li.selected', ul).removeClass('selected')
			$('li:first', ul).addClass('selected');
		}
		$(element).val($('li.selected', ul).text().replace(/&amp;/g, '&'));
		// for kiddeminster project only!!!
    $('#course_id').val($('li.selected', ul).attr('id').substr(7));
    $('#course_t').val($('li.selected', ul).attr('class').split(' ')[0]);
    // end
		break;
	case 13:
		//$(ul).slideUp();
		//$(ul).animate({height:'0px', opacity:'0'}, 1000, "swing", function(){$(ul).hide()});
		break;
	case 27:
		//$(ul).slideUp();
		$(ul).animate({height:'0px', opacity:'0'}, 1000, "swing", function(){$(ul).hide()});
		break;
	default:
		
		if ((event.keyCode>=48 && event.keyCode<=105) || event.keyCode==8 || event.keyCode==46)
		{
			
			//if ($('li.loading', ul).size()==0 && $(element).val()!='')
				//$(ul).html('<li class="loading"></li>');
			$('#course_id').val('');
			clearTimeout(timeoutId);
			
			var aflu = function(){ajaxSuggestionsLookUp(element, ul)}
			if ($(element).val().length>=2)
			{
				
				timeoutId=setTimeout(aflu,500);
			}
			else
			{
				//$(ul).slideUp();
				$(ul).animate({height:'0px', opacity:'0'}, 1000, "swing", function(){$(ul).hide()});
			}
		}
	}
    event.returnValue=false;
    event.cancel = true;
}

function ajaxSuggestionsLookUp(element, ul)
{
	var value = $(element).val();
//	var valueArr=value.split(' ');
//	value=valueArr.pop();
	var height;
	if (value.length>0)
	{
		//$(ul).slideDown();

		$.post('ajax.functions.php',{action:'suggest',value:value}, function(data){
		 
				if (data!='')
				{
				  var oldHeight = $(ul).height();
//					$(ul).slideUp(0).html(data).slideDown();
					$(ul).html(data);
					 
					height = getHiddenHeight(ul);
					$(ul).height(oldHeight);
					$(ul).animate({height:height, opacity:'1'});
				}
				else
				{
					//$(ul).slideUp();
					$(ul).animate({height:'0px', opacity:'0'}, 1000, "swing", function(){$(ul).hide()});
				}
				$('li',ul).mouseover(function(){
					$('li.selected',ul).removeClass('selected');
					$(this).addClass('selected')
				}).mouseout(function(){
					$(this).removeClass('selected');
				}).mouseup(function(){
					$(element).val($(this).text().replace(/&amp;/g, '&'));
		  // for kiddeminster project only!!!
			          $('#course_id').val($('li.selected', ul).attr('id').substr(7));
			          $('#course_t').val($('li.selected', ul).attr('class').split(' ')[0]);
          // end
    
					//$(ul).slideUp();
					$(ul).animate({height:'0px', opacity:'0'}, 1000, "swing", function(){$(ul).hide()} );
				});
		})
	}
}
function getHiddenHeight(el)
{
	$(el).css({visibility:'hidden', display:'block', height:'auto'});
	var height = $(el).height();
	$(el).css({visibility:'visible', display:'none', height:'0px'});
	return height;
}

function removeHTMLTags(strInputCode){
 	
		
 	strInputCode = strInputCode.replace(/&(lt|gt);/g, function (strMatch, p1){
	 	return (p1 == "lt")? "<" : ">";
	});
	var strTagStrippedText = strInputCode.replace(/<\/?[^>]+(>|$)/g, "");
		
	return strTagStrippedText;
 		
}

