﻿var DM = jQuery.noConflict();
/* Core Extensions */
DM.fn.extend({ DMActivateCollapse: function() {
    return this.each(function() {
        DM(this)
            .addClass('submenu')
            .find('li:has(ul)')
            .children("a[href='#']")
            .attr('href', 'javascript:')
            .click(function() { DM(this).parent().children('ul').slideToggle(); });
        DM(this)
            .find('li')
            .addClass('submenuitem')
            .each(function() {
                var c = DM(this).parents().filter('ul').length;
                var l = c * 10;
                DM(this)
                    .css('padding', '0px 0px 0px ' + (l).toString() + 'px');
            });
        DM(this)
            .find('ul')
            .each(function() {
                var c = DM(this).parents().filter('ul').length;
                var l = c * 10;
                DM(this).css('left', l * -1);
            });
        DM(this)
            .find('ul:not(:has(li.selected))')
            .addClass('invisible');
    });
}
});
DM.fn.extend({ DMActivateImage: function() {
    return this.each(function() {
        DM(this)
            .hover(_DMImgSwap, _DMImgSwap)
    });
}
});
DM.fn.extend({ DMActivateLinkButton: function() {
    return this.each(function() {
        var I = DM(this);
        var W = I.width();
        I.wrap('<div class="link-button ' + I.attr('class') + '"></div').addClass('link-text').width(W);
        W = I.outerWidth();
        I.parent().width(W).hover(_DMHoverButton, _DMHoverButton);
    });
}
});
DM.fn.extend({ DMActivateTextArea: function() {
    return this.each(function() {
        DM(this)
            .focus(_DMTextAreaFocus)
            .blur(_DMTextAreaBlur)
            .hover(_DMHoverOn, _DMHoverOff);
    });
}
});
DM.fn.extend({ DMActivateTextBox: function() {
    return this.each(function() {
        DM(this)
            .focus(_DMInputFocus)
            .blur(_DMInputBlur)
            .hover(_DMHoverOn, _DMHoverOff)
            .blur()
            .parent('div[class*="container"],div[id*="container"]')
            .hover(_DMContainerHoverOn, _DMContainerHoverOff);
    });
}
});
DM.fn.extend({ DMActivateSelectBox: function(options) {
    return this.each(function() {
    new DM.ActivateSelectBox(this, options);
    });
}
});

DM.fn.extend({ DMActivateTabs: function() {
    return this.each(function() {
        var I = DM(this);
        var T = 1;
        I.children('ul').children('li').children('a').each(function() {
            DM(this).attr('href', '#dmtab-' + T);
            T++;
        });
        T = 1;
        I.children('div').each(function() {
            DM(this).attr('id', 'dmtab-' + T);
            T++;
        });
        I.tabs();
        if (navigator.appName == 'Microsoft Internet Explorer') { DM('.ui-corner-top').corner('tl tr 6px');  }
    });
}
});

/* Supporting Functions */
function _DMContainerHoverOff() {
    DM(this).removeClass('container-hover');
}
function _DMContainerHoverOn() {
    DM(this).addClass('container-hover');
}
function _DMHoverButton() {
    var I = DM(this);
    var H = I.children('a').attr('hoverclass');
    I.toggleClass('link-button-hover');
    I.toggleClass(H);
}
function _DMHoverOff() {
    DM(this).removeClass('input-hover');
}
function _DMHoverOn() {
    DM(this).addClass('input-hover');
}
function _DMImgSwap() {
    var I = DM(this);
    var S = I.attr('src');
    var H = I.attr('hoverimage');
    I.attr('src', H);
    I.attr('hoverimage', S);
}
function _DMInputBlur() {
    var I = DM(this);
    var V = I.attr('value');
    var E = I.attr('emptytext');
    I.removeClass('input-focus');
    if (V == '') { I.attr('value', E); I.addClass('input-blur'); }
}
function _DMInputFocus() {
    var I = DM(this);
    var V = I.attr('value');
    var E = I.attr('emptytext');
    I.removeClass('input-blur');
    I.addClass('input-focus');
    if (V == E) { I.attr('value', ''); }
}
function _DMTextAreaBlur() {
    DM(this).removeClass('input-focus');
}
function _DMTextAreaFocus() {
    DM(this).addClass('input-focus');
}
if (!window.console) {
    var console = {
        log: function(msg) {
        }
    }
}

DM.ActivateSelectBox = function(selectobj, options) {
    var opt = options || {};
    opt.inputClass = opt.inputClass || "selectbox";
    opt.containerClass = opt.containerClass || "selectbox-dropdown";
    opt.hoverClass = opt.hoverClass || "selected";
    opt.debug = opt.debug || false;
    opt.masterContainerClass = opt.masterContainerClass || "selectbox-container";

    var elm_id = selectobj.id;
    var active = -1;
    var inFocus = false;
    var hasfocus = 0;
    var $select = DM(selectobj);
    var $container = setupContainer(opt);
    var $input = setupInput(opt);
    $select.hide().before($input).before($container);


    init();

    $input
	.click(function() {
	    if (!inFocus) {
	        $container.toggle();
	    }
	})
	.focus(function() {
	    if ($container.not(':visible')) {
	        inFocus = true;
	        $container.show();
	    }
	})
	.keydown(function(event) {
	    switch (event.keyCode) {
	        case 38:
	            event.preventDefault();
	            moveSelect(-1);
	            break;
	        case 40:
	            event.preventDefault();
	            moveSelect(1);
	            break;
	        case 13:
	            event.preventDefault();
	            setCurrent();
	            hideMe();
	            break;
	    }
	})
	.blur(function() {
	    if ($container.is(':visible') && hasfocus > 0) {
	        if (opt.debug) console.log('container visible and has focus')
	    } else {
	        hideMe();
	    }
	});


    function hideMe() {
        hasfocus = 0;
        $container.hide();
    }

    function init() {
        $container.append(getSelectOptions($input.attr('id'))).hide();
        var width = $input.innerWidth();
        $container.width(width);
    }

    function setupContainer(options) {
        var container = document.createElement("div");
        $container = DM(container);
        $container.attr('id', elm_id + '_container');
        $container.addClass(options.containerClass);
        return $container;
    }

    function setupHover() {
        DM(this).addClass('selectbox-container-hover');
    }

    function removeHover() {
        DM(this).removeClass('selectbox-container-hover');
    }

    function setupInput(options) {
        var div = document.createElement("div");
        var $div = DM(div);
        var input = document.createElement("input");
        var $input = DM(input);
        $div.attr('id', elm_id + "_inputContainer");
        $div.hover(setupHover, removeHover);
        $div.attr('class', options.masterContainerClass);
        $input.attr("id", elm_id + "_input");
        $input.attr("type", "text");
        $input.addClass(options.inputClass);
        $input.attr("autocomplete", "off");
        $input.attr("readonly", "readonly");
        $input.attr("tabIndex", $select.attr("tabindex"));
        $div.append($input);
        return $div;
    }

    function moveSelect(step) {
        var lis = DM("li", $container);
        if (!lis) return;

        active += step;

        if (active < 0) {
            active = 0;
        } else if (active >= lis.size()) {
            active = lis.size() - 1;
        }

        lis.removeClass(opt.hoverClass);

        DM(lis[active]).addClass(opt.hoverClass);
    }

    function setCurrent() {
        var li = DM("li." + opt.hoverClass, $container).get(0);
        var ar = ('' + li.id).split('_');
        var el = ar[ar.length - 1];
        $select.val(el);
        $input.children('input').val(DM(li).html());
        return true;
    }

    function getCurrentSelected() {
        return $select.val();
    }

    function getCurrentValue() {
        return $input.children('input').val();
    }

    function getSelectOptions(parentid) {
        var select_options = new Array();
        var ul = document.createElement('ul');
        $select.children('option').each(function() {
            var li = document.createElement('li');
            li.setAttribute('id', parentid + '_' + DM(this).val());
            li.innerHTML = DM(this).html();
            if (DM(this).is(':selected')) {
                $input.children('input').val(DM(this).html());
                DM(li).addClass(opt.hoverClass);
            }
            ul.appendChild(li);
            DM(li)
			.mouseover(function(event) {
			    hasfocus = 1;
			    if (opt.debug) console.log('out on : ' + this.id);
			    jQuery(event.target, $container).addClass(opt.hoverClass);
			})
			.mouseout(function(event) {
			    hasfocus = -1;
			    if (opt.debug) console.log('out on : ' + this.id);
			    jQuery(event.target, $container).removeClass(opt.hoverClass);
			})
			.click(function(event) {
			    if (opt.debug) console.log('click on :' + this.id);
			    DM(this).addClass(opt.hoverClass);
			    setCurrent();
			    hideMe();
			});
        });
        return ul;
    }

};