/**
 * jQuery.fn.sortElements
 * --------------
 * @param Function comparator:
 *   Exactly the same behaviour as [1,2,3].sort(comparator)
 *
 * @param Function getSortable
 *   A function that should return the element that is
 *   to be sorted. The comparator will run on the
 *   current collection, but you may want the actual
 *   resulting sort to occur on a parent or another
 *   associated element.
 *
 *   E.g. $('td').sortElements(comparator, function(){
 *      return this.parentNode;
 *   })
 *
 *   The <td>'s parent (<tr>) will be sorted instead
 *   of the <td> itself.
 */
jQuery.fn.sortElements = (function(){

    var sort = [].sort;

    return function(comparator, getSortable) {

        getSortable = getSortable || function(){return this;};

        var placements = this.map(function(){

            var sortElement = getSortable.call(this),
                parentNode = sortElement.parentNode,

                // Since the element itself will change position, we have
                // to have some way of storing its original position in
                // the DOM. The easiest way is to have a 'flag' node:
                nextSibling = parentNode.insertBefore(
                    document.createTextNode(''),
                    sortElement.nextSibling
                );

            return function() {

                if (parentNode === this) {
                    throw new Error(
                        "You can't sort elements if any one is a descendant of another."
                    );
                }

                // Insert before flag:
                parentNode.insertBefore(this, nextSibling);
                // Remove flag:
                parentNode.removeChild(nextSibling);

            };

        });

        return sort.call(this, comparator).each(function(i){
            placements[i].call(getSortable.call(this));
        });

    };

})();


$(function() {

    $("#nav a.locations").click(function() {
        eraseCookie('ac1');
        return true;
    });

    $("#nav a.specials").click(function() {
        eraseCookie('ac2');
        return true;
    });

    $(".ui-accordion-header").css({
        'background-color': '#3bc8d5',
        'border': 'none',
        'color': '#ffffff',
        'text-decoration': 'none',
        'padding-left': '5px',
        'padding-top': '3px',
        'padding-bottom': '3px'
    });
    $(".ui-accordion-header a").css({
        'color': '#ffffff',
        'text-decoration': 'none'
    });

    $("#accordion, #accordion2").before('<div id="accordion_select_block"><input type="radio" class="accordion_select" name="accordion_select" id="accordion_select1" value="1" /> <label for="accordion_select1">show by city</label><br/><input type="radio" class="accordion_select" name="accordion_select" id="accordion_select2" value="2" /> <label for="accordion_select2">show by county</label></div>');

   $("#accordion_select_block input").click(function() {
       $("#accordion_select_block").hide();

       $("#accordion, #accordion2").accordion( "option", "collapsible", true );
       $("#accordion, #accordion2").show();

       if ($("#accordion").length > 0) {
          createCookie('ac1', $(this).val());

       } else if ($("#accordion2").length > 0) {
          createCookie('ac2', $(this).val());
       }

       if ($(this).val() == '1') {
//            $("h3.ui-state-active").trigger("click");

            accordeon = $("#accordion, #accordion2");
            accordeon.accordion("disable");
            accordeon.css("margin-top", "5px");
            accordeon.find("h3").hide();
            accordeon.find(".ui-accordion-content li").sortElements(function(a, b){
                return $(a).find("a").text() > $(b).find("a").text() ? 1 : -1;
            });
            accordeon.find(".ui-accordion-content").show();
            accordeon.find("ul").css({
                'margin': '0',
                'padding-bottom': '0',
                'padding-top':  '0'
            });
       } else {
       }
   });

    // auto-trigger expanding menu on next calls
    var autoAccordeon = "";
    if ($("#accordion").length > 0) {
       autoAccordeon = readCookie('ac1');

    } else if ($("#accordion2").length > 0) {
       autoAccordeon = readCookie('ac2');
    }

    if (autoAccordeon) {
        $("#accordion_select" + autoAccordeon).trigger("click");
    }

});


function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') {
            c = c.substring(1,c.length);
        }
        if (c.indexOf(nameEQ) == 0) {
            return c.substring(nameEQ.length,c.length);
        }
    }
    return null;
}

function eraseCookie(name) {
    createCookie(name, "", -1);
}

function createCookie(name,value,days) {
    var expires = "";
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    document.cookie = name+"="+value+expires+"; path=/";
}

