/* NICE SELECT Plugin */
/*
* jQuery NICE SELECT Plugin 
* v1.0
* Author: Dragos Badea (bedeabza@gmail.com)
*
* replaces regular "select" elements with totally customizable html ui components
*/
(function($) {
    // plugin definition
    $.fn.niceSelect = function(options) {
        var options = $.extend({}, $.fn.niceSelect.defaults, options);
        return this.each(function() {
            var $this = $(this);
            var idu = $this.attr("rel");
            $this.hide();
            $this.after('<input type="hidden" class="' + $this[0].className.replace('nice', '') + '" name="' + $this[0].name + '" value="' + $this.val() + '" />');
            $this.before('<div><div id="arrow"></div><input type="text" class="' + options.virtualInputClass + '" readonly="readonly" id="select' + idu + '" rel="' + $(this).val() + '" value="' + $this[0].options[$this[0].selectedIndex].text + '" /></div>');
            var opts_obj = document.createElement("UL");
            $(opts_obj).addClass(options.virtualSelectClass);
            var option = null;
            for (var i = 0; i < $this[0].options.length; i++) {
                option = document.createElement("LI");
                $(option).attr("rel", $this[0].options[i].value);

                $(option).attr("id", $(this[i]).attr('id'));

                $(option).html($this[0].options[i].text);


                if (i == $this[0].options.length - 1)
                    $(option).addClass(options.lastClass);
                if ($(option).attr("rel") == $this.val())
                    $(option).addClass(options.selectedClass);
                opts_obj.appendChild(option);
            }
            $("#select" + idu).after(opts_obj);
            $this.remove();
            $("li", opts_obj).hover(
				function() { $(this).addClass(options.overClass); },
				function() { $(this).removeClass(options.overClass); }
			).click(function() {
			    var $this = $(this);
			    $this.parent().hide();
			    $this.parent().prev().val($this.html());
			    $this.parent().next().val($this.attr("rel"));
			    $this.siblings("li").removeClass(options.selectedClass);
			    $this.addClass(options.selectedClass);
			    if (options.selectCallback != null) {
			        var arguments = [{ text: $this.html(), value: $this.attr("rel") }, $this.parent()];
			        options.selectCallback.apply(this, arguments);
			    }
			    switch ($this.html()) {
			        case 'Japanese': top.location.href = 'http://www.dysonairmultiplier.jp';
			            break;
			        case 'German': top.location.href = 'http://www.dyson.com/international/default.asp?lang=de';
			            break;
			        case 'Spanish': top.location.href = 'http://www.dyson.com/international/default.asp?lang=es';
			            break;
			        case 'Portuguese': top.location.href = 'http://www.dyson.com/international/default.asp?lang=pt';
			            break;
			        case 'Italian': top.location.href = 'http://www.dyson.com/international/default.asp?lang=it';
			            break;
			        case 'French': top.location.href = 'http://www.dyson.com/international/default.asp?lang=fr';
			            break;
			        default: 
			        case 'English (UK)': top.location.href = 'http://www.dyson.com/international/default.asp?lang=en';
			            break;
			    }
			    return false;
			});
            $("div#arrow, #select" + idu).click(function() {
                var $this = $("#select" + idu);
                $("." + options.virtualSelectClass).not($this.next()).hide();
                $this.next("ul").toggle();
                if ($this.next("ul").css("display") != "none" && options.openCallback != null) {
                    var arguments = [$this, $this.next("ul")];
                    options.openCallback.apply(this, arguments);
                }
                return false;
            });
            $("body").click(function() { $("." + options.virtualSelectClass).hide(); });
        });
    }
    // plugin defaults
    $.fn.niceSelect.defaults = {
        selectedClass: "selected", //class for the selected item
        overClass: "over", //class for hover items
        virtualSelectClass: "virtual_select", //class for the virtual select (ul)
        virtualInputClass: "nice_select", //class for the textfield item that displays the selected value
        lastClass: "last", //class for the last element of the list
        selectCallback: null, //callback function | equivalend to "onchange" in html | @params: 1 - JSON obj containing value and text 2 - the UL jquery object targeted
        openCallback: null //callback function | executed when the user clicks on the virtual select and the list of options are opened  | @params: 1 - The textbox placeholder for select 2 - the UL jquery object targeted
    };
})(jQuery);