/*
 * jGD DropDown
 * Version 0.4 (18-SEP-2010)
 * @requires jQuery v1.3 or later
 *
 * Homepage: http://www.dev4press.com/jquery/jgd-dropdown/
 * Examples: http://www.dev4press.com/jgd/dropdown/
 * 
 * Copyright (c) 2008-2010 Milan Petrovic, Dev4Press
 *
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 * Thanks to Janko at Warp Speed for this great article:
 * http://www.jankoatwarpspeed.com/post/2009/07/28/reinventing-drop-down-with-css-jquery.aspx
 */

(function($){
    $.fn.jgdDropdown = function(options) {
        var settings =  $.extend({}, $.fn.jgdDropdown.defaults, options);
        return this.each(function() {
            var $this = $(this);
            var $id = $.fn.jgdDropdown.convert($this, settings);

            $("#" + $id + " dt a").click(function() {
                $("#" + $id + " dd ul").toggle();
                return false;
            });

            $(document).bind('click', function(e) {
                var $clicked = $(e.target);
                if (!$clicked.parents().hasClass(settings.cls)) {
                    $("." + settings.cls + " dd ul").hide();
                }
                
                if($("#smvariantselect").length > 0) {
                	var element = $("#smvariantselect dt a").parent();
             		var isActive = jQuery(element).hasClass('active');
             		var childDropdown = jQuery('#smvariantselect dd ul').css('display');
             		
             		if(isActive && childDropdown == 'none') {
             			jQuery(element).removeClass("active");
             		} else if(!isActive && childDropdown == 'block') {
             			jQuery(element).addClass("active");
             		}
                }
                
            });

            $("#" + $id + " dd ul li a").click(function() {
            	$('.jgd-dropdown dt a').css('color', '#01518B');
                var $sel = $(this);
                var $val = $sel.find("span.value").html();
                $this.val($val);
                
                //basket - max length for plz
                if($this[0].name == "invadr[oxuser__oxcountryid]" || $this[0].name == "deladr[oxaddress__oxcountryid]"){
                	if($this[0].name == "invadr[oxuser__oxcountryid]") {
                		var id = "userdataNoRegPlz";
                	} else if($this[0].name == "deladr[oxaddress__oxcountryid]") {
                		var id = "userdataNoRegPlzAlt";
                	}
                	editMaxLengthForPostcode($val, id);
                }
                
                // Mix Relax Handling
                var objFnIdent = $sel.parents().hasClass("mixrelax");
                if ( objFnIdent ){
                    moveRelaxMixArticleToForm($sel);
                }
                // Warenkorb Handling
                var objFnIdent2 = $sel.parents().hasClass("carttable");
                if ( objFnIdent2 ){
                    // Submit Form change Amount
                    $('form[name=basket]').submit();
                }
                $("#" + $id + " dt a").html($sel.html());
                $("#" + $id + " dd ul").hide();
                if (settings.clsCopySelect) {
                    $("#" + $id + " dt").attr("class", $sel.parent().attr("class"));
                }
                $sel.parent().parent().find("li").removeClass(settings.clsLISelected);
                $sel.parent().addClass(settings.clsLISelected);
                if (settings.callback) {
                    settings.callback($this, $val);
                }
                
                if($("#smvariantselect").length > 0) {
                	var element = $("#smvariantselect dt a").parent();
             		var isActive = jQuery(element).hasClass('active');
             		var childDropdown = jQuery('#smvariantselect dd ul').css('display');
             		
             		if(isActive && childDropdown == 'none') {
             			jQuery(element).removeClass("active");
             		} else if(!isActive && childDropdown == 'block') {
             			jQuery(element).addClass("active");
             		}
                }
                return false;
            });
        });
    };
    $.fn.jgdDropdown.defaults = {
        callback: null,
        cls: 'jgd-dropdown',
        initTitle: '',
        forceTitle: false,
        clsLIPrefix: '',
        clsLISelected: 'selected',
        clsCopySelect: false,
        clsLIExpand: true,
        selected: ''
    };
    $.fn.jgdDropdown.convert = function($obj, settings) {
        var iTitle = settings.initTitle;
        var iVal = '';
        if (settings.selected !== null && settings.selected !== '') {
            $obj.val(settings.selected);
            if (!settings.forceTitle) {
                iTitle = '';
            }
        }
        var selected = $obj.find("option[selected]");
        var options = $("option", $obj);
        var id = "jgd_dd_" + get_id($obj);
        $obj.after('<dl id="' + id + '" class="' + settings.cls + '"></dl>');
        if (iTitle === '') {
            iTitle = selected.text();
            iVal = selected.val();
        }
        $("#" + id).append('<dt><a href="#">' + iTitle + '<span class="value">' + iVal +  '</span></a></dt>');
        $("#" + id).append('<dd><ul></ul></dd>');
        
        options.each(function(index){
            var elClass = $(this).attr("class");
            var elStyle = $(this).attr("style");
            var elDisabled = $(this).attr("disabled");

            var cls = settings.clsLIPrefix + $(this).val();
            if (settings.clsLIExpand) {
                cls += " item-" + index;
                cls += " item-" + ($.fn.jgd.isEven(index) ? "even" : "odd");
                if (index === 0) {
                    cls += " item-first";
                }
                if (index == options.length - 1) {
                    cls += " item-last";
                }
                if(elClass && elClass !== '') {
                    cls+= " " + thisclass;
                }
            }
            if (settings.clsCopySelect) {
                $("#" + id + " dt").attr("class", cls);
            }
            if ($(this).val() == selected.val()) {
                cls += " " + settings.clsLISelected;
            }
            if(elDisabled) {
            	$("#" + id + " dd ul").append('<li onstock="' + elDisabled + '" class="' + cls + ' nostock"><span>' +
                        $(this).text() + '<span class="value">' + $(this).val() + '</span></span></li>');
            } else {
            	$("#" + id + " dd ul").append('<li onstock="' + elDisabled + '" class="' + cls + '"><a href="#">' +
                        $(this).text() + '<span class="value">' + $(this).val() + '</span></a></li>');
            }
            
            if (elStyle) {
                $("#" + id + " dd ul").find("li:last a").attr("style", elStyle);
            }
        });
        $obj.hide();
        return id;
    };
    $.fn.jgd = function() {};
    $.fn.jgd.isEven = function($num) {
        return ($num%2 === 0);
    };
    function get_id($obj) {
        var id = $obj.attr("id");
        if (id === "") {
            id = random_id();
        }
        return id;
    }
    function random_id() {
        var dt = new Date().getMilliseconds();
        var num = Math.random();
        var rnd = Math.round(num * 100000);
        return "jgd" + dt + rnd;
    }
    function debug($obj) {
        if (window.console && window.console.log) {
             window.console.log('jgd_dropdown: ' + $obj.size());
        }
    }
})(jQuery);

