﻿/**
* hoverIntent r6 // 2011.02.26 // jQuery 1.5.1+
* <http://cherne.net/brian/resources/jquery.hoverIntent.html>
* 
* @param  f  onMouseOver function || An object with configuration options
* @param  g  onMouseOut function  || Nothing (use configuration options object)
* @author    Brian Cherne brian(at)cherne(dot)net
*/
(function ($) { $.fn.hoverIntent = function (f, g) { var cfg = { sensitivity: 7, interval: 100, timeout: 0 }; cfg = $.extend(cfg, g ? { over: f, out: g} : f); var cX, cY, pX, pY; var track = function (ev) { cX = ev.pageX; cY = ev.pageY }; var compare = function (ev, ob) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); if ((Math.abs(pX - cX) + Math.abs(pY - cY)) < cfg.sensitivity) { $(ob).unbind("mousemove", track); ob.hoverIntent_s = 1; return cfg.over.apply(ob, [ev]) } else { pX = cX; pY = cY; ob.hoverIntent_t = setTimeout(function () { compare(ev, ob) }, cfg.interval) } }; var delay = function (ev, ob) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); ob.hoverIntent_s = 0; return cfg.out.apply(ob, [ev]) }; var handleHover = function (e) { var ev = jQuery.extend({}, e); var ob = this; if (ob.hoverIntent_t) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t) } if (e.type == "mouseenter") { pX = ev.pageX; pY = ev.pageY; $(ob).bind("mousemove", track); if (ob.hoverIntent_s != 1) { ob.hoverIntent_t = setTimeout(function () { compare(ev, ob) }, cfg.interval) } } else { $(ob).unbind("mousemove", track); if (ob.hoverIntent_s == 1) { ob.hoverIntent_t = setTimeout(function () { delay(ev, ob) }, cfg.timeout) } } }; return this.bind('mouseenter', handleHover).bind('mouseleave', handleHover) } })(jQuery);

(function ($) {
    $.extend({
        tablesorterPager: new function () {
            function updatePageDisplay(c) {
                var s = $(c.cssPageDisplay, c.container).text('page ' + (c.page + 1) + ' sur ' + c.totalPages);
            }
            function setPageSize(table, size) {
                var c = table.config;
                c.size = size;
                c.totalPages = Math.ceil(c.totalRows / c.size);
                c.pagerPositionSet = false;
                moveToPage(table);
                fixPosition(table);
            }
            function fixPosition(table) {
                var c = table.config;
                if (!c.pagerPositionSet && c.positionFixed) {
                    var c = table.config, o = $(table);
                    if (o.offset) {
                        c.container.css({
                            top: o.offset().top + o.height() + 'px',
                            position: 'absolute'
                        });
                    }
                    c.pagerPositionSet = true;
                }
            }
            function moveToFirstPage(table) {
                var c = table.config;
                c.page = 0;
                moveToPage(table);
            }
            function moveToLastPage(table) {
                var c = table.config;
                c.page = (c.totalPages - 1);
                moveToPage(table);
            }
            function moveToNextPage(table) {
                var c = table.config;
                c.page++;
                if (c.page >= (c.totalPages - 1)) {
                    c.page = (c.totalPages - 1);
                }
                moveToPage(table);
            }
            function moveToPrevPage(table) {
                var c = table.config;
                c.page--;
                if (c.page <= 0) {
                    c.page = 0;
                }
                moveToPage(table);
            }
            function moveToPage(table) {
                var c = table.config;
                if (c.page < 0 || c.page > (c.totalPages - 1)) {
                    c.page = 0;
                }
                renderTable(table, c.rowsCopy);
            }
            function renderTable(table, rows) {
                var c = table.config;
                var s = (c.page * c.size);
                var e = (s + c.size);
                if (e > rows.length) {
                    e = rows.length;
                }
                var tableBody = $(table.tBodies[0]);
                // clear the table body
                $.tablesorter.clearTableBody(table);
                for (var i = s; i < e; i++) {
                    //tableBody.append(rows[i]);
                    var o = rows[i];
                    var l = o.length;
                    for (var j = 0; j < l; j++) {
                        tableBody[0].appendChild(o[j]);
                    }
                }
                fixPosition(table, tableBody);
                $(table).trigger("applyWidgets");
                if (c.page >= c.totalPages) {
                    moveToLastPage(table);
                }
                updatePageDisplay(c);
            }

            this.appender = function (table, rows) {
                var c = table.config;

                c.rowsCopy = rows;
                c.totalRows = rows.length;
                c.totalPages = Math.ceil(c.totalRows / c.size);

                renderTable(table, rows);
            };

            this.defaults = {
                size: 10,
                offset: 0,
                page: 0,
                totalRows: 0,
                totalPages: 0,
                container: null,
                cssNext: '.next',
                cssPrev: '.prev',
                cssFirst: '.first',
                cssLast: '.last',
                cssPageDisplay: '.pagedisplay',
                cssPageSize: '.pagesize',
                seperator: "/",
                positionFixed: true,
                appender: this.appender
            };

            this.construct = function (settings) {
                return this.each(function () {
                    config = $.extend(this.config, $.tablesorterPager.defaults, settings);
                    var table = this, pager = config.container;
                    $(this).trigger("appendCache");
                    config.size = parseInt($(".pagesize", pager).val());
                    $(config.cssFirst, pager).click(function () { moveToFirstPage(table); return false; });
                    $(config.cssNext, pager).click(function () { moveToNextPage(table); return false; });
                    $(config.cssPrev, pager).click(function () { moveToPrevPage(table); return false; });
                    $(config.cssLast, pager).click(function () { moveToLastPage(table); return false; });
                    $(config.cssPageSize, pager).change(function () { setPageSize(table, parseInt($(this).val())); return false; });
                });
            };
        }
    });
    // extend plugin scope
    $.fn.extend({
        tablesorterPager: $.tablesorterPager.construct
    });
})(jQuery);

/*******************************************************************/

jQuery.fn.asMenu = function (settings) {
    $('li', this).hover(
      function () {
          $(this).addClass('hover')
          /*.children('ul')
          .css('zIndex', 2001)*/;
      },
      function () {
          $(this).removeClass('hover');
      }
    );
}

jQuery.fn.expandLink = function (settings) {
    $(this).click(function (event) {
        if (this == event.target) {
            var a = $(this).children('a').get(0);
            if (a != null)
                document.location = a.href;
        }
    });
}

jQuery.fn.asCarousel = function (settings) {
    if ($(this).jcarousel == null)
        return;
    $('li', this).shuffle();
    $(this).addClass('jcarousel-skin-tango').jcarousel({
        auto: 2,
        wrap: 'circular',
        easing: 'swing',
        initCallback: function (carousel) {
            // Disable autoscrolling if the user clicks the prev or next button.
            carousel.buttonNext.bind('click', function () {
                carousel.startAuto(3);
            });

            carousel.buttonPrev.bind('click', function () {
                carousel.startAuto(0);
            });

            // Pause autoscrolling if the user moves with the cursor over the clip.
            carousel.clip.hover(function () {
                carousel.stopAuto();
            }, function () {
                carousel.startAuto();
            });
        }
    });
}

jQuery.fn.paginate = function (settings) {
    if ($(this).tablesorter == null)
        return;
    var t = $(this).get(0);
    if (t == null)
        return;
    $(this).addClass('tablesorter')
        .tablesorter({
            textExtraction: function (node) {
                if (!node.childNodes[0]) {
                    return node.innerHTML;
                } else if (node.childNodes[0].hasChildNodes()) {
                    return node.childNodes[0].innerHTML;
                } else if (node.childNodes[0].tagName == "IMG") {
                    return node.childNodes[0].title;
                } else {
                    return node.innerHTML;
                }
            },
            widthFixed: false,
            widgets: ['zebra'],
            headers: { 1: {}, 3: { sorter: false }, 4: { sorter: false }, 6: { sorter: false} }
        });

    if (t.rows.length > 20 && $('.pager').css('visibility') == 'visible') {
        $('.pager').show().clone().appendTo('.result');
        $(this).tablesorterPager({ container: $('.pager'), positionFixed: false, size: 10 });
    }
}

jQuery.fn.handleCascading = function (settings) {
    var hierarchy = this;
    var form = document.forms.Search;

    /* copy initial values */
    form.SchoolGrades = new Array();
    for (var i = 1; i != form.SchoolGrade.options.length; ++i) {
        form.SchoolGrades[i - 1] = form.SchoolGrade.options[i];
    }
    form.Disciplines = new Array();
    for (var i = 1; i != form.Discipline.options.length; ++i) {
        form.Disciplines[i - 1] = form.Discipline.options[i];
    }

    var schoolGradeHandler = function () {
        form.Discipline.disabled = true;
        form.Discipline.options.length = 1;

        if (form.SchoolType.selectedIndex == 0) {
            form.SchoolGrade.disabled = true;
            form.SchoolGrade.options.length = 1;
        } else {
            form.SchoolGrade.options.length = 1;
            var schoolType = form.SchoolType.options[form.SchoolType.selectedIndex].value;
            var schoolTypeChildren = $('a[href$="/' + schoolType + '.aspx"] + ul > li > a', hierarchy)
                .each(function (index, element) {
                    for (var i = 0; i != form.SchoolGrades.length; i++) {
                        if (new RegExp('/' + form.SchoolGrades[i].value + '\\.aspx$').test(element.href)) {
                            form.SchoolGrade.options[form.SchoolGrade.options.length] = form.SchoolGrades[i];
                            break;
                        }
                    }
                });
            form.SchoolGrade.disabled = form.SchoolGrade.options.length == 1;
        }
    };
    var disciplineHandler = function () {
        if (form.SchoolGrade.selectedIndex == 0) {
            form.Discipline.disabled = true;
            form.Discipline.options.length = 1;
        } else {
            form.Discipline.options.length = 1;
            var schoolType = form.SchoolType.options[form.SchoolType.selectedIndex].value;
            var schoolGrade = form.SchoolGrade.options[form.SchoolGrade.selectedIndex].value;
            var schoolGradeChildren = $('a[href$="/' + schoolType + '/' + schoolGrade + '.aspx"] + ul > li > a', hierarchy)
                .each(function (index, element) {
                    for (var i = 0; i != form.Disciplines.length; i++) {
                        if (new RegExp('/' + form.Disciplines[i].value + '\\.aspx$').test(element.href)) {
                            form.Discipline.options[form.Discipline.options.length] = form.Disciplines[i];
                            break;
                        }
                    }
                });
            form.Discipline.disabled = form.Discipline.options.length == 1;
        }
    };

    $(form.SchoolGrade).change(disciplineHandler);
    $(form.SchoolType).change(schoolGradeHandler);

    schoolGradeHandler();
    disciplineHandler();
}

$(document).ready(function () {
    $('li').expandLink();
    $('.menu').asMenu();
    $('#imprints ul').asCarousel();
    $('table.list').paginate();
    $('#quickaccess > ul').handleCascading();
});

