﻿/** RESOURCE SEARCH **/

var dropDownOpen = 0;
var checkedBoxes = [];
var timer;

var listOpen = [0,0,0,0,0,0];
var listMinHeight = [];
var listMaxHeight = [];

// function to create a timer
function timeCheck() {
    return function( fun, time ) {
        clearTimeout( timer );
        timer = setTimeout( fun, time );
    };
}

function bindDD(e){
    if (dropDownOpen == 0) {
        clickedID = ($(e).parent().attr("id"));
        storeCheckboxValues(clickedID);
        $("#" + clickedID + " span.searchOptions").show("slow");
        dropDownOpen = 1;
     }
}

// function to bind all the click events
function bindClickEvents() {
    
    //$('#resourceSearchPanel .labelWrapper').bind("click", bindDD());
    
    $('#resourceSearchPanel .searchOptions .cancel').bind("click", function (event) {
        clickedID = ($(this).parent().parent().parent().attr("id"));
        resetCheckboxes(clickedID);
        closeBox(clickedID);
        event.preventDefault();
    });
    
    $('#resourceSearchPanel .searchOptions .undoChanges').bind("click", function (event) {
        clickedID = ($(this).parent().parent().parent().attr("id"));
        resetCheckboxes(clickedID);
        event.preventDefault();
    });
    
    $('#resourceSearchPanel .searchOptions .chooseAll').bind("click", function (event) {
        clickedID = ($(this).parent().parent().parent().attr("id"));
        selectAll(clickedID);
        event.preventDefault();
    });
    
    $('li#keywords input').bind("keyup", function(event) {
        
        if  ((event.keyCode == 8) || 
            (event.keyCode == 9) ||
            (event.keyCode == 10) ||
            (event.keyCode == 11) ||
            (event.keyCode == 12) ||
            (event.keyCode == 13) ||
            (event.keyCode == 14) ||
            (event.keyCode == 15) ||
            (event.keyCode == 127)) { 
                // do nothing
        } else {
            $("#resourceSearchPanel .loading").parent().css("display","block");
            var typeTimer = timeCheck();
            typeTimer( doKeywordPostback, 2000 ); 
        }       
    });
    
    //alert('clicksBound');
    
    $('#resourceSearchPanel a.viewAll').bind("click", function (event) {

        clickedID = ($(this).parent().attr("id"));
        clickedPos = ($(this).parent().attr("rel"));
        
        if (listOpen[clickedPos] == 0) {
            minHeight = listMinHeight[clickedPos];
            $("li#" + clickedID + " .selectedList").css({height: listMinHeight[clickedPos]}).animate({ height: listMaxHeight[clickedPos] }, 500); 
            $("li#" + clickedID + " a.viewAll span").text(hideAllText);
            $("li#" + clickedID + " a.viewAll span").addClass("closed");
            listOpen[clickedPos] = 1;
        }
        
        else {
            $("li#" + clickedID + " .selectedList").css({height: listMaxHeight[clickedPos]}).animate({ height: listMinHeight[clickedPos] }, 500); 
            $("li#" + clickedID + " a.viewAll span").text(viewAllText);
            $("li#" + clickedID + " a.viewAll span").removeClass("closed");
            listOpen[clickedPos] = 0;
        }
        
        event.preventDefault();
    });
    
}

// function that is called when the apply selections button is clicked
function applySelection(button) {
    clickedID = ($(button).parent().parent().parent().attr("id"));
    storeCheckboxValues(clickedID);
    allChecked(clickedID);
    closeBox(clickedID);       
}

// function that is called whne Undo changes is clicked
function resetCheckboxes(clickedID) {
    var i = 0;
    $("#" + clickedID + " .searchOptions .checkboxes input").each(
        function() {
            if (checkedBoxes[i] == 1) {
                $(this).attr('checked',true);
                i++;
            } else {
                $(this).attr('checked',false);
                i++;
            }
        }
    );
}        

// function used when the user closes the box
function closeBox(clickedID) { 
    $("#" + clickedID + " span.searchOptions").hide("slow");
    dropDownOpen = 0;
}

// selects all checkboxes
function selectAll(clickedID) {
    $("#" + clickedID + " .searchOptions .checkboxes input").each(
        function() {
            $(this).attr('checked',true);
        }
    );
}

// checks if all tickboxes are checked, if they are unticks them all
function allChecked(clickedID) {
    var i = 0;
    var allChecked = 1;
    // alert(clickedID);
    $("#" + clickedID + " .searchOptions .checkboxes input").each(
        function() {
            if (checkedBoxes[i] == 1) {
                // alert(i + " = " + checkedBoxes[i]);
                i++;
            } else {
                i++;
                allChecked = 0;
            }
        }
    );
    
    // alert("All Checked = " + allChecked);
    
    if (allChecked == 1) {
        $("#" + clickedID + " .searchOptions .checkboxes input").each(
            function() {
                $(this).attr('checked',false);
            }
        );
        storeCheckboxValues(clickedID);
    }
}        

// function to store current checdkbox values into an array
function storeCheckboxValues(clickedID) {
    var i = 0;
    // alert('storeCheckboxValues called');
    // for each checkbox within the li
    $("#" + clickedID + " .searchOptions .checkboxes input").each(
        
        function() {
            var checkbox = this;
            
            // find out if its checked
            boxTicked = $(checkbox).attr('checked');
            
            if (boxTicked == true) {
                checkedBoxes[i] = 1;
                i++;
            } else {
                checkedBoxes[i] = 0;
                // alert(boxTicked + " has been stored in " + i + " as: " + checkedBoxes[i])
                i++;
            }
        }
    );    
}


function minimiseList() {
    $("li ul.selectedList").each(
        function() {
            clickedID = ($(this).parent().attr("id"));
            clickedPos = ($(this).parent().attr("rel"));
            
            liCount = $(this).children('li').size(); 
            
            listMaxHeight[clickedPos] = $(this).height();
            
            liHeight = 0;
            
            //alert("Pos = " + clickedPos + ", ul height = " + $(this).height())
            //alert("Pos = " + clickedPos + ", li count = " + liCount);
            
            if (liCount > 3) {
                var counter = 0;
                            
                $("li#"+clickedID+" ul.selectedList li").each(
                    function() {
                        if (counter < 3) {
                            //alert("this li has a height of " + $(this).height());
                            liHeight = liHeight + $(this).height();
                        }
                        counter = counter + 1
                    }
                );            
            liHeight = liHeight + 10;                
            
            //alert("Pos = " + clickedPos + ", li height = " + liHeight);
            
            listMinHeight[clickedPos] = liHeight;
            
            $("li#" +clickedID+ " ul.selectedList").css("height",liHeight);
            $("li#" +clickedID+ " a.viewAll").css("display","block");
            }
        }
    );
}

$(document).ready( function (){
    minimiseList();
    bindClickEvents();
});