﻿Element.addMethods('SELECT', {
    sort: function(element) {
        var arr = [];
        for (var i = 0; i < element.options.length; i++) {
            arr.push({ text: element.options[i].text, value: element.options[i].value });
        }

        arr.sort(function(x, y) {
            var a = String(x.text).toUpperCase();
            var b = String(y.text).toUpperCase();
            if (a > b)
                return 1
            if (a < b)
                return -1
            return 0;
        });

        arr.each(function(a, i) {
            element.options[i].text = a.text;
            element.options[i].value = a.value;
        });
    },

    selectByText: function(element, text) {
        text = String(text).toUpperCase();
        var f = false;
        var i = 0;
        for (; i < element.options.length && !f; i++) {
            if (element.options[i].text.toUpperCase() == text)
                f = true;
        }
        if (f)
            element.selectedIndex = i - 1;
    },

    selectByValue: function(element, value) {
        value = String(value).toUpperCase();
        var f = false;
        var i = 0;
        for (; i < element.options.length && !f; i++) {
            if (element.options[i].value.toUpperCase() == value)
                f = true;
        }
        if (f)
            element.selectedIndex = i - 1;
    },

    selectedValue: function(element) {
        if (element.selectedIndex == -1)
            return "";
        else {
            return element.options[element.selectedIndex].value;
        }
    }
});

/*appended effects*/
Effect.AppearInFadeOut = function(element) {
  element = $(element);
  var options = Object.extend({
    duration: 1,
    delay:   1
  }, arguments[1] || { });
  return new Effect.Appear(element, {duration:options.duration, afterFinish:function(e){Effect.Fade(e.element, {delay:options.delay, duration:options.duration});}});
};