/*	Create and initialize our expandable menu. Note the additional call to keepTrackOfMenu(). This
 *	is to keep track and the appropriate menu open no matter what page we're on.
 */

function initMenu() {
	//	TODO: To avoid the animation on page-reload every time (since we want to keep track where 
	// 	users are), it's a good idea to do that check on the initialization of the menu, instead 
	// 	of after the menu is being created.

	$('#menu .menu-closed').hide();
	$('#menu li a').click(function() {
        $(this).next().slideToggle('normal');
	});
}

/*	A global function that creates moveable/sortable widgets (portlets). Generally, every page should
 * 	have the same name for these classes, so a generic function like this is very convenient to have.
 */

function createPortlets() {
	$(function() {
		$(".portColumn").sortable({
			connectWith: '.portColumn',
            handle: '.ui-widget-header'
		});

		$(".portlet").addClass("ui-widget ui-widget-content ui-helper-clearfix ui-corner-all")
			.find(".portlet-header")
				.addClass("ui-widget-header")
				.prepend('<span class="ui-icon"></span>')
				.end()
			.find(".portlet-content");

		$(".static-portlet").addClass("ui-widget ui-widget-content ui-helper-clearfix ui-corner-all")
			.find(".portlet-header")
				.addClass("ui-widget-header")
				.end()
			.find(".portlet-content");

		$(".static-expanding-portlet").addClass("ui-widget ui-widget-content ui-helper-clearfix ui-corner-all")
			.find(".portlet-header")
				.addClass("ui-widget-header")
				.prepend('<span class="ui-icon"></span>')
				.end()
			.find(".portlet-content");

		$(".portlet-header .ui-icon").click(function() {
			$(this).toggleClass("ui-icon").toggleClass("ui-icon-open");
			$(this).parents(".portlet:first").find(".portlet-content").toggle();
			$(this).parents(".static-expanding-portlet:first").find(".portlet-content").toggle();
		});

        $(".startClosed > .portlet-header > .ui-icon").toggleClass("ui-icon").toggleClass("ui-icon-open");
        $(".startClosed > .portlet-content").toggle();

		//$(".portColumn").disableSelection();
	});
}

function hover_items() {
	$(".awesomeSearchHover").hover(
		function(event) {
			$(this).addClass('awesomeHighlight');
		},
		function(event) {
			$(this).removeClass('awesomeHighlight');
		}
	);
}

function create_awesome_search_widget() {
    if ($("#awesome-search").length > 0) {
	$( "#awesome-search" ).autocomplete( "option", "delay", 600 );
        $("#awesome-search").autocomplete({
		    minLength: 2,
		    source: function(request, response) {
		        $.ajax({
			        url: "/search/",
			        type: "POST",
			        dataType: "json",
			        data: "search=" + request.term,
			        success: function(data) {
				        response(data);
                        $('.awesomesearch-item').parent().addClass('awesomesearch-root');
                        $('.awesomesearch-root').removeClass('ui-autocomplete ui-menu ui-widget');
                        // Add an extra search option...
                        $('.awesomesearch-root').append("<li class='awesomesearch-item ui-menu-item' role='menuitem' style='background:#CFCFCF;'><a href='/search/global/"+$('#awesome-search').val().replace(/\W/g,"+")+"/' tabindex='-1'>More Results...</a></li>");
                        hijack_awesome_link();
			        },
			        error: function(response, status) {$("#content").html(response.responseText);} // TODO: Left for debugging. Remove.
		        });
	        },
		    focus: function( event, ui ) {
			    $( "#awesome-search" ).val( ui.item.display );
			    return false;
		    },
		    select: function( event, ui ) {
			    $( "#awesome-search" ).val( ui.item.display );
			    return false;
		    }
	    })
	    .data("autocomplete")._renderItem = function( ul, item ) {
		    return $( "<li class='awesomesearch-item'></li>" )
			    .data( "item.autocomplete", item )
			    .append( "<a href='"+ item.link +"'>" + item.label +"</a>" )
			    .appendTo( ul );
	    };
    }
}

function hijack_awesome_link() {
    $(".awesomesearch-item").click(function(event) {
        event.preventDefault();
        event.stopPropagation();
        window.location = event.originalEvent.target;
     });
}

function set_selectable() {
	$(".selectable").hover(
		function(event) {
			$(this).addClass('selectableHover');
		},
		function(event) {
			$(this).removeClass('selectableHover');
		}
	);
}

function create_tooltips() {
    $.getScript("/media/js/core/jquery.tipTip.minified.js", function() {
        $("[title]").tipTip();
	});
}

// Given a number, return the month equivalent, shortened,
function short_month(number) {
    var month = "";
    if (number == 1) {
        month = "Jan.";
    } else if (number == 2) {
        month = "Feb.";
    } else if (number == 3) {
        month = "March";
    } else if (number == 4) {
        month = "April";
    } else if (number == 5) {
        month = "May.";
    } else if (number == 6) {
        month = "June";
    } else if (number == 7) {
        month = "July";
    } else if (number == 8) {
        month = "Aug.";
    } else if (number == 9) {
        month = "Sept.";
    } else if (number == 10) {
        month = "Oct.";
    } else if (number == 11) {
        month = "Nov.";
    } else if (number == 12) {
        month = "Dec.";
    }

    return month;
}

function hover_portlet_border() {
    $(".static-portColumn .ui-widget-content").hover(
        function () {
            if ($(this).hasClass('static-portlet')) {
                $(this).attr("style", "border:1px solid gray;");
            }
        }, 
        function () {
            if ($(this).hasClass('static-portlet')) {
                $(this).attr("style", "");
            }
        }
    );
}

function hijack_awesome_enter() {
    $('#awesome-search').bind('keypress', function(event) {
        if (event.keyCode==13) {
            var intRegex = /^\d+$/;

            if (intRegex.test($('#awesome-search').val()) && $('#awesome-search').val().length == 4) {
                window.location = "/projects/overview/0" + $('#awesome-search').val() + "/";
            } else if (intRegex.test($('#awesome-search').val()) && $('#awesome-search').val().length == 5) {
                window.location = "/projects/overview/" + $('#awesome-search').val() + "/";
            } else {
                var raw = $('#awesome-search').val().split(" ");
                var terms = "";
                for (var i = 0; i < raw.length; i++) {
                    if (raw[i].length > 2) {
                        if (terms == "") {
                            terms = raw[i];
                        } else {
                            terms = terms + "+" + raw[i];
                        }
                    }
                }

                if (terms.length > 2) {
		            window.location = "/search/global/" + terms + "/";
                }
            }
        }
    });
}

function csrf_protection() {
    $('html').ajaxSend(function(event, xhr, settings) {
        function getCookie(name) {
            var cookieValue = null;
            if (document.cookie && document.cookie != '') {
                var cookies = document.cookie.split(';');
                for (var i = 0; i < cookies.length; i++) {
                    var cookie = jQuery.trim(cookies[i]);
                    // Does this cookie string begin with the name we want?
                    if (cookie.substring(0, name.length + 1) == (name + '=')) {
                        cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                        break;
                    }
                }
            }
            return cookieValue;
        }
        if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
            // Only send the token to relative URLs i.e. locally.
            xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
        }
    });
}

function randomSort(a,b) {
    return(parseInt(Math.random() * 10 ) % 2);
}

$(document).ready(
	function() {
		initMenu();
		createPortlets();
		create_awesome_search_widget();
        create_tooltips();
        hover_portlet_border();
        set_selectable();
        hijack_awesome_enter();
        csrf_protection();
	}
);

