function incremental_search(inputid, resultsid, searchurl, searchurl_enter, post_display_func)
{
	var KEY = {
		UP: 38,
		DOWN: 40,
		RETURN: 13,
		ESC: 27
	};
	
	var resultsobj = $("#"+resultsid);
    $.last_search_term = '';
    $.last_ts = ''; 
    var inputobj = $("#"+inputid);
    var current_selection = -1;
    
    /* set resultsobj postion */
    var he = inputobj.outerHeight();
    var wi = inputobj.outerWidth();
    var pos = inputobj.position();
    
    resultsobj.css("top", pos.top + he);
    resultsobj.css("left", pos.left);
    resultsobj.width(wi);
    
    if(inputobj.length && resultsobj.length)
    {
        inputobj.bind("keyup", 
        	function(event) 
            {
                switch(event.keyCode)
                {
                	case KEY.RETURN:
                		child_divs = $("> *", resultsobj);
						i = get_current_selection(child_divs);
						if (i >= 0 && i < child_divs.length)
						{
							location.href = $("> *", child_divs[i]).attr('href');
							return			
						}
						else
						{
							val = inputobj.attr("value");
							location.href = searchurl_enter + val;
							return
						}
                    	//submit_search_query(obj.value);
                    	return
                	case KEY.ESC:
                		resultsobj.hide();
                		return
                	case KEY.UP:
                		move(-1);
                		break;
                	case KEY.DOWN:
                		move(1);
                		break;
                }
                
                //resultsobj.show();

                var sw = inputobj.attr("value");
                var cur_ts = (new Date).getTime()
                var diff = cur_ts - $.last_ts; 
 
                if ($.trim(sw) == $.last_search_term)
                {
                    return;
                }
                if ($.trim(sw) == "")
                {
                    resultsobj.innerHTML = "";
                    resultsobj.hide();
                    return;
                }
                //console.log('sw - '+sw);
                if (diff < 700)
                {
                    $.last_ts = cur_ts;
                    setTimeout(function(){ check_sw(sw) }, 200);
                    return;
                }
                get_search_results(sw);            
            })
    }
    function check_sw(prev_sw)
	{
	    var sw = inputobj.attr("value");
	    if ((sw != prev_sw) || (prev_sw == $.last_search_term))
	    {
        	return;
    	}
    	get_search_results(prev_sw)
	}
	function get_search_results(sw)
	{
    	var url = searchurl + sw;
    	$.last_search_term = sw;
	    var last_ts = (new Date).getTime();
    	$.last_ts = last_ts;
    	// Reset the current selection
    	current_selection = -1;
    	$.get(url, function(data){ show_search_results(data, last_ts)});
	}
        
	function show_search_results(data, last_ts)
	{
    	if (last_ts != $.last_ts)
    	{
        	// one more search term on the wire !!.
        	return;
    	}
   		//console.log('rendering - ' + last_ts + '; $.last_ts -' + $.last_ts);
   		resultsobj.show();
    	resultsobj.attr("innerHTML", data);
		post_display_func();
	}
	function get_current_selection(child_divs)
	{
		i = 0;
		while(i < child_divs.length)
		{
			if (child_divs[i].className == "incdivhover")
				break;
			i++;
		}
		return i;
	}
	function move(incdec_value)
	{
		child_divs = $("> *", resultsobj);
		if (child_divs.length > 0)
		{
			i = get_current_selection(child_divs);
					
            $(child_divs[i]).removeClass("incdivhover");
            $(child_divs[i]).addClass("incdiv");
            
            if (i >=0 && i <child_divs.length)
            {
            	newi = i + incdec_value;
            }
            else
            {
            	newi = current_selection + incdec_value;
            }
            if (newi >= child_divs.length)
            {
            	current_selection = -1;
            	return
            }
            else if (newi < 0)
            {
            	current_selection = child_divs.length;
            	return
            }
            current_selection = newi;
			$(child_divs[newi]).removeClass("incdiv");
            $(child_divs[newi]).addClass("incdivhover");
			
		}
	}
}
                    
//            $.get(URL, function(data){$("#rsltdiv")[0].innerHTML= data;});
        
function show_next_results(url)
{
    var applist = $("#applist")[0];
    $.stack.push(applist.innerHTML);
    	
	var nextlabel = $("#nextlabel");
	if(nextlabel.length > 0)
	{
		nextlabel.attr("innerHTML","Loading ....");
	}
    $.get(url, function(data){
    	applist.innerHTML = data; 
    	})    
}

function show_previous_results()
{
	var data = $.stack.pop();
	var applist = $("#applist")[0];	
	applist.innerHTML = data;	 
}

function initialize()
{
    URL="/sjax?keyword=";
    URL_SENTER = "/search?q="
    incremental_search("txtbox", "rsltdiv", URL, URL_SENTER, post_display);

	$("body").click(function(){
		$("#rsltdiv").hide();
	})    
	
	$("txtbox").click(function(){
		$("#rsltdiv").show();
	})
	
	$.stack = [];
	/* $("#txtbox").focus() */
	
	$(".halfround").corners("5px bottom-left 5px bottom-right");
	$('.rounded').corners("5px");
	$('.roundtweet').corners("2px");
	$('.roundlarge').corners("25px");
}

$(document).ready(function() {  
    $('img').fixBroken();  
    });  
    $.fn.fixBroken = function(){  
        return this.each(function(){  
        var tag = $(this);  
        var alt_img = "/images/defaultpic.gif";  
        tag.error(function() {
        tag.attr("src",alt_img);
        return true;  
        });  
    });  
}; 

function post_display()
{
    $(".incdiv").hover(function(){
                    $(this).removeClass("incdiv");
                    $(this).addClass("incdivhover");
                    },
                function(){
                    $(this).removeClass("incdivhover");
                    $(this).addClass("incdiv");
                    }
                );
}

function show_hide_tweets(obj)
{
	$(obj.parentNode).toggleClass('closed');
	$(obj.parentNode).toggleClass('recentweet');
	$(obj.parentNode).toggleClass('hide_recentweet');
}