﻿var replaceme;
var rzSalaryLow = 0;
var rzSalaryHigh = 100000;

function styleButtons() {
    $('.sbutton').button();
}
var countyOptions;
$(document).ready(function () {

    countyOptions = $("#county").html();

    $('.showdefault').each(function () { $(this).val($(this).attr('title')); });
    $('.showdefault').focus(function () {
        if ($(this).val() == $(this).attr('title')) { $(this).val(''); }
    });
    $('.showdefault').blur(function () {
        if ($(this).val() == '') { $(this).val($(this).attr('title')); }
    });

    $('.stickynav').hover(function () {
        $(this).prev().addClass('bgpink');
    }, function () {
        $(this).prev().removeClass('bgpink');
    });

    $('.cbregionfilter').change(function () { cbFilterByRegion(this); }).each(function () { cbFilterByRegion(this); });
    $('.cbRegions').click(function () { cbFilterByRegion(); });
    $('.dlregionfilter').change(function () { dlFilterByRegion(this); }).each(function () { dlFilterByRegion(this); });
    cbFilterByRegion();
    $("#slider-range").slider({
        range: true,
        min: 0,
        max: 100000,
        values: [rzSalaryLow, rzSalaryHigh],
        slide: function (event, ui) {
            $('#SalaryLow').val(ui.values[0]);
            $('#SalaryHigh').val(ui.values[1]);
            $("#amount").html("£" + ui.values[0] + " - £" + ui.values[1]);
        },
        stop: function (event, ui) { getJobs(); }
    });
    $("#amount").html("£" + $("#slider-range").slider("values", 0) + " - £" + $("#slider-range").slider("values", 1));
    $('#SalaryLow').val($("#slider-range").slider("values", 0));
    $('#SalaryHigh').val($("#slider-range").slider("values", 1));

    $('.checkall').click(function () {
        var id = $(this).attr('id');
        var subClass = '.cb' + id.replace('All', '') + ':visible';
        $(subClass).attr('checked', $(this).attr('checked'));
    });

    $('.cbclear').click(function () {
        var name = $(this).attr('name');
        var masterClass = '#' + name + 'All';
        $(masterClass).attr('checked', false);
    });

    $('.jsjaxpopup').live('click', function () {
        var rel = $(this).attr('rel');
        var displayTitle = $(this).attr('title');
        if (rel == "") {
            replaceme = $(this).parent();
        } else {
            replaceme = $('#' + rel);
        }
        var url = this.href;
        var dialog = $("#dialog");
        if ($("#dialog").length == 0) {
            dialog = $('<div id="dialog" style="display:hidden" class="profile"></div>').appendTo('body');
        }
        dialog.load(
                url,
                function (responseText, textStatus, XMLHttpRequest) {
                    dialog.dialog({ modal: true, title: displayTitle, width: "auto", height: "auto" });
                    styleButtons();
                }
            );
        return false;
    });

    $(".packageinfo").tooltip();

    styleButtons();

    $('.canceldialog').live('click', function () { $("#dialog").dialog('close'); return false; });

});

function dlFilterByRegion(p) {
    var selectedRegion = $(p).val();
    var defaultCounty = 0;
    $("#county").html($(countyOptions));
    $('.dlcounty').each(function () {
        if (!$(this).hasClass('pr' + selectedRegion)) {
            $(this).remove();
        }
        //        if ($(this).hasClass('pr' + selectedRegion)) {
        //            $(this).show();
        //            if (defaultCounty == 0) {
        //                defaultCounty = $(this).val();
        //                $(this).attr('selected', 'selected');
        //            }
        //        } else {
        //            $(this).hide();
        //        }
    });
}

function cbFilterByRegion() {
    var countyClassesToShow = '';
    var countyClassesToHide = '';
    $('.cbRegions:checked').each(function () { countyClassesToShow += ', .cb' + $(this).val(); });
    $('.cbRegions:not(:checked)').each(function () { countyClassesToHide += ', .cb' + $(this).val(); });
    $(countyClassesToShow).each(function () { if ($(this).is(':hidden')) { $(this).removeClass('exclude').attr('checked', 'checked').parent().parent().show(); } });
    $(countyClassesToHide).each(function () { if ($(this).is(':visible')) { $(this).addClass('exclude').attr('checked', '').parent().parent().hide(); } });
}

function cbFilterByRegionFromDl(p) {
    var selectedRegion = $(p).val();
    $('.cbCounties').each(function () {
        if ($(this).hasClass('cb' + selectedRegion)) {
            $(this).parent().parent().show();
        } else {
            $(this).parent().parent().hide();
        }
    });
}

function getJobs() {
    $('.feedback').fadeOut();
    $('#jobsfound').addClass('ajaxloading');
    $('#spinner').addClass('spinner');
    var frm = $('#searchoptions:not(.exclude)');
    $.post($(frm).attr('action'),
                $(frm).serialize(),
                function (response) {
                    $('#jobsfound').html(response).removeClass('ajaxloading');
                    $('#spinner').removeClass('spinner');
                });
    return false;
}

/*
* jQuery Tooltip plugin 1.3
*
* http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/
* http://docs.jquery.com/Plugins/Tooltip
*
* Copyright (c) 2006 - 2008 JÃ¶rn Zaefferer
*
* $Id: jquery.tooltip.js 5741 2008-06-21 15:22:16Z joern.zaefferer $
* 
* Dual licensed under the MIT and GPL licenses:
*   http://www.opensource.org/licenses/mit-license.php
*   http://www.gnu.org/licenses/gpl.html
*/

; (function ($) {

    // the tooltip element
    var helper = {},
    // the current tooltipped element
		current,
    // the title of the current element, used for restoring
		title,
    // timeout id for delayed tooltips
		tID,
    // IE 5.5 or 6
		IE = $.browser.msie && /MSIE\s(5\.5|6\.)/.test(navigator.userAgent),
    // flag for mouse tracking
		track = false;

    $.tooltip = {
        blocked: false,
        defaults: {
            delay: 200,
            fade: false,
            showURL: true,
            extraClass: "",
            top: 15,
            left: 15,
            id: "tooltip"
        },
        block: function () {
            $.tooltip.blocked = !$.tooltip.blocked;
        }
    };

    $.fn.extend({
        tooltip: function (settings) {
            settings = $.extend({}, $.tooltip.defaults, settings);
            createHelper(settings);
            return this.each(function () {
                $.data(this, "tooltip", settings);
                this.tOpacity = helper.parent.css("opacity");
                // copy tooltip into its own expando and remove the title
                this.tooltipText = this.title;
                $(this).removeAttr("title");
                // also remove alt attribute to prevent default tooltip in IE
                this.alt = "";
            })
				.mouseover(save)
				.mouseout(hide)
				.click(hide);
        },
        fixPNG: IE ? function () {
            return this.each(function () {
                var image = $(this).css('backgroundImage');
                if (image.match(/^url\(["']?(.*\.png)["']?\)$/i)) {
                    image = RegExp.$1;
                    $(this).css({
                        'backgroundImage': 'none',
                        'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image + "')"
                    }).each(function () {
                        var position = $(this).css('position');
                        if (position != 'absolute' && position != 'relative')
                            $(this).css('position', 'relative');
                    });
                }
            });
        } : function () { return this; },
        unfixPNG: IE ? function () {
            return this.each(function () {
                $(this).css({ 'filter': '', backgroundImage: '' });
            });
        } : function () { return this; },
        hideWhenEmpty: function () {
            return this.each(function () {
                $(this)[$(this).html() ? "show" : "hide"]();
            });
        },
        url: function () {
            return this.attr('href') || this.attr('src');
        }
    });

    function createHelper(settings) {
        // there can be only one tooltip helper
        if (helper.parent)
            return;
        // create the helper, h3 for title, div for url
        helper.parent = $('<div id="' + settings.id + '"><h3></h3><div class="body"></div><div class="url"></div></div>')
        // add to document
			.appendTo(document.body)
        // hide it at first
			.hide();

        // apply bgiframe if available
        if ($.fn.bgiframe)
            helper.parent.bgiframe();

        // save references to title and url elements
        helper.title = $('h3', helper.parent);
        helper.body = $('div.body', helper.parent);
        helper.url = $('div.url', helper.parent);
    }

    function settings(element) {
        return $.data(element, "tooltip");
    }

    // main event handler to start showing tooltips
    function handle(event) {
        // show helper, either with timeout or on instant
        if (settings(this).delay)
            tID = setTimeout(show, settings(this).delay);
        else
            show();

        // if selected, update the helper position when the mouse moves
        track = !!settings(this).track;
        $(document.body).bind('mousemove', update);

        // update at least once
        update(event);
    }

    // save elements title before the tooltip is displayed
    function save() {
        // if this is the current source, or it has no title (occurs with click event), stop
        if ($.tooltip.blocked || this == current || (!this.tooltipText && !settings(this).bodyHandler))
            return;

        // save current
        current = this;
        title = this.tooltipText;

        if (settings(this).bodyHandler) {
            helper.title.hide();
            var bodyContent = settings(this).bodyHandler.call(this);
            if (bodyContent.nodeType || bodyContent.jquery) {
                helper.body.empty().append(bodyContent)
            } else {
                helper.body.html(bodyContent);
            }
            helper.body.show();
        } else if (settings(this).showBody) {
            var parts = title.split(settings(this).showBody);
            helper.title.html(parts.shift()).show();
            helper.body.empty();
            for (var i = 0, part; (part = parts[i]); i++) {
                if (i > 0)
                    helper.body.append("<br/>");
                helper.body.append(part);
            }
            helper.body.hideWhenEmpty();
        } else {
            helper.title.html(title).show();
            helper.body.hide();
        }

        // if element has href or src, add and show it, otherwise hide it
        if (settings(this).showURL && $(this).url())
            helper.url.html($(this).url().replace('http://', '')).show();
        else
            helper.url.hide();

        // add an optional class for this tip
        helper.parent.addClass(settings(this).extraClass);

        // fix PNG background for IE
        if (settings(this).fixPNG)
            helper.parent.fixPNG();

        handle.apply(this, arguments);
    }

    // delete timeout and show helper
    function show() {
        tID = null;
        if ((!IE || !$.fn.bgiframe) && settings(current).fade) {
            if (helper.parent.is(":animated"))
                helper.parent.stop().show().fadeTo(settings(current).fade, current.tOpacity);
            else
                helper.parent.is(':visible') ? helper.parent.fadeTo(settings(current).fade, current.tOpacity) : helper.parent.fadeIn(settings(current).fade);
        } else {
            helper.parent.show();
        }
        update();
    }

    /**
    * callback for mousemove
    * updates the helper position
    * removes itself when no current element
    */
    function update(event) {
        if ($.tooltip.blocked)
            return;

        if (event && event.target.tagName == "OPTION") {
            return;
        }

        // stop updating when tracking is disabled and the tooltip is visible
        if (!track && helper.parent.is(":visible")) {
            $(document.body).unbind('mousemove', update)
        }

        // if no current element is available, remove this listener
        if (current == null) {
            $(document.body).unbind('mousemove', update);
            return;
        }

        // remove position helper classes
        helper.parent.removeClass("viewport-right").removeClass("viewport-bottom");

        var left = helper.parent[0].offsetLeft;
        var top = helper.parent[0].offsetTop;
        if (event) {
            // position the helper 15 pixel to bottom right, starting from mouse position
            left = event.pageX + settings(current).left;
            top = event.pageY + settings(current).top;
            var right = 'auto';
            if (settings(current).positionLeft) {
                right = $(window).width() - left;
                left = 'auto';
            }
            helper.parent.css({
                left: left,
                right: right,
                top: top
            });
        }

        var v = viewport(),
			h = helper.parent[0];
        // check horizontal position
        if (v.x + v.cx < h.offsetLeft + h.offsetWidth) {
            left -= h.offsetWidth + 20 + settings(current).left;
            helper.parent.css({ left: left + 'px' }).addClass("viewport-right");
        }
        // check vertical position
        if (v.y + v.cy < h.offsetTop + h.offsetHeight) {
            top -= h.offsetHeight + 20 + settings(current).top;
            helper.parent.css({ top: top + 'px' }).addClass("viewport-bottom");
        }
    }

    function viewport() {
        return {
            x: $(window).scrollLeft(),
            y: $(window).scrollTop(),
            cx: $(window).width(),
            cy: $(window).height()
        };
    }

    // hide helper and restore added classes and the title
    function hide(event) {
        if ($.tooltip.blocked)
            return;
        // clear timeout if possible
        if (tID)
            clearTimeout(tID);
        // no more current element
        current = null;

        var tsettings = settings(this);
        function complete() {
            helper.parent.removeClass(tsettings.extraClass).hide().css("opacity", "");
        }
        if ((!IE || !$.fn.bgiframe) && tsettings.fade) {
            if (helper.parent.is(':animated'))
                helper.parent.stop().fadeTo(tsettings.fade, 0, complete);
            else
                helper.parent.stop().fadeOut(tsettings.fade, complete);
        } else
            complete();

        if (settings(this).fixPNG)
            helper.parent.unfixPNG();
    }

})(jQuery);
