﻿/*
 *
 * Copyright (c) 2006-2008 Sam Collett (http://www.texotela.co.uk)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 *
 * Version 2.2.4
 * Demo: http://www.texotela.co.uk/code/jquery/select/
 *
 * $LastChangedDate: 2008-06-17 17:27:25 +0100 (Tue, 17 Jun 2008) $
 * $Rev: 5727 $
 *
 */
/*
 ;(function(h){h.fn.addOption=function(){var j=function(a,f,c,g){var d=document.createElement("option");d.value=f,d.innerHTML=c;var b=a.options;var e=b.length;if(!a.cache){a.cache={};for(var i=0;i<e;i++){a.cache[b[i].value]=i}}
if(typeof a.cache[f]=="undefined")a.cache[f]=e;a.options[a.cache[f]]=d;if(g){d.selected=true}};var k=arguments;if(k.length==0)return this;var l=true;var m=false;var n,o,p;if(typeof(k[0])=="object"){m=true;n=k[0]}
if(k.length>=2){if(typeof(k[1])=="boolean")l=k[1];else if(typeof(k[2])=="boolean")l=k[2];if(!m){o=k[0];p=k[1]}}
this.each(function(){if(this.nodeName.toLowerCase()!="select")return;if(m){for(var a in n){j(this,a,n[a],l)}}else{j(this,o,p,l)}});return this};h.fn.ajaxAddOption=function(c,g,d,b,e){if(typeof(c)!="string")return this;if(typeof(g)!="object")g={};if(typeof(d)!="boolean")d=true;this.each(function(){var f=this;h.getJSON(c,g,function(a){h(f).addOption(a,d);if(typeof b=="function"){if(typeof e=="object"){b.apply(f,e)}else{b.call(f)}}})});return this};h.fn.removeOption=function(){var d=arguments;if(d.length==0)return this;var b=typeof(d[0]);var e,i;if(b=="string"||b=="object"||b=="function"){e=d[0];if(e.constructor==Array){var j=e.length;for(var k=0;k<j;k++){this.removeOption(e[k],d[1])}
return this}}else if(b=="number")i=d[0];else return this;this.each(function(){if(this.nodeName.toLowerCase()!="select")return;if(this.cache)this.cache=null;var a=false;var f=this.options;if(!!e){var c=f.length;for(var g=c-1;g>=0;g--){if(e.constructor==RegExp){if(f[g].value.match(e)){a=true}}else if(f[g].value==e){a=true}
if(a&&d[1]===true)a=f[g].selected;if(a){f[g]=null}
a=false}}else{if(d[1]===true){a=f[i].selected}else{a=true}
if(a){this.remove(i)}}});return this};h.fn.sortOptions=function(e){var i=h(this).selectedValues();var j=typeof(e)=="undefined"?true:!!e;this.each(function(){if(this.nodeName.toLowerCase()!="select")return;var c=this.options;var g=c.length;var d=[];for(var b=0;b<g;b++){d[b]={v:c[b].value,t:c[b].text}}
d.sort(function(a,f){o1t=a.t.toLowerCase(),o2t=f.t.toLowerCase();if(o1t==o2t)return 0;if(j){return o1t<o2t?-1:1}else{return o1t>o2t?-1:1}});for(var b=0;b<g;b++){c[b].text=d[b].t;c[b].value=d[b].v}}).selectOptions(i,true);return this};h.fn.selectOptions=function(g,d){var b=g;var e=typeof(g);if(e=="object"&&b.constructor==Array){var i=this;h.each(b,function(){i.selectOptions(this,d)})};var j=d||false;if(e!="string"&&e!="function"&&e!="object")return this;this.each(function(){if(this.nodeName.toLowerCase()!="select")return this;var a=this.options;var f=a.length;for(var c=0;c<f;c++){if(b.constructor==RegExp){if(a[c].value.match(b)){a[c].selected=true}else if(j){a[c].selected=false}}else{if(a[c].value==b){a[c].selected=true}else if(j){a[c].selected=false}}}});return this};h.fn.copyOptions=function(g,d){var b=d||"selected";if(h(g).size()==0)return this;this.each(function(){if(this.nodeName.toLowerCase()!="select")return this;var a=this.options;var f=a.length;for(var c=0;c<f;c++){if(b=="all"||(b=="selected"&&a[c].selected)){h(g).addOption(a[c].value,a[c].text)}}});return this};h.fn.containsOption=function(g,d){var b=false;var e=g;var i=typeof(e);var j=typeof(d);if(i!="string"&&i!="function"&&i!="object")return j=="function"?this:b;this.each(function(){if(this.nodeName.toLowerCase()!="select")return this;if(b&&j!="function")return false;var a=this.options;var f=a.length;for(var c=0;c<f;c++){if(e.constructor==RegExp){if(a[c].value.match(e)){b=true;if(j=="function")d.call(a[c],c)}}else{if(a[c].value==e){b=true;if(j=="function")d.call(a[c],c)}}}});return j=="function"?this:b};h.fn.selectedValues=function(){var a=[];this.selectedOptions().each(function(){a[a.length]=this.value});return a};h.fn.selectedTexts=function(){var a=[];this.selectedOptions().each(function(){a[a.length]=this.text});return a};h.fn.selectedOptions=function(){return this.find("option:selected")}})(jQuery);
*/
;
(function (h) {
    h.fn.addOption = function () {
        var j = function (a, f, c, g) {
            var d = document.createElement("option");
            d.value = f,
            d.text=c;//d.innerHTML = c;
            var b = a.options;
            var e = b.length;
            if (!a.cache) {
                a.cache = {};
                for (var i = 0; i < e; i++) {
                    a.cache[b[i].value] = i
                }
            }
            if (typeof a.cache[f] == "undefined") a.cache[f] = e;
            a.options[a.cache[f]] = d;
            if (g) {
                d.selected = true
            }
        };
        var k = arguments;
        if (k.length == 0) return this;
        var l = true;
        var m = false;
        var n, o, p;
        if (typeof(k[0]) == "object") {
            m = true;
            n = k[0]
        }
        if (k.length >= 2) {
            if (typeof(k[1]) == "boolean") l = k[1];
            else if (typeof(k[2]) == "boolean") l = k[2];
            if (!m) {
                o = k[0];
                p = k[1]
            }
        }
        this.each(function () {
            if (this.nodeName.toLowerCase() != "select") return;
            if (m) {
                for (var a in n) {
                    j(this, a, n[a], l)
                }
            } else {
                j(this, o, p, l)
            }
        });
        return this
    };
    h.fn.ajaxAddOption = function (c, g, d, b, e) {
        if (typeof(c) != "string") return this;
        if (typeof(g) != "object") g = {};
        if (typeof(d) != "boolean") d = true;
        this.each(function () {
            var f = this;
            h.getJSON(c, g, function (a) {
                h(f).addOption(a, d);
                if (typeof b == "function") {
                    if (typeof e == "object") {
                        b.apply(f, e)
                    } else {
                        b.call(f)
                    }
                }
            })
        });
        return this
    };
    h.fn.removeOption = function () {
        var d = arguments;
        if (d.length == 0) return this;
        var b = typeof(d[0]);
        var e, i;
        if (b == "string" || b == "object" || b == "function") {
            e = d[0];
            if (e.constructor == Array) {
                var j = e.length;
                for (var k = 0; k < j; k++) {
                    this.removeOption(e[k], d[1])
                }
                return this
            }
        } else if (b == "number") i = d[0];
        else return this;
        this.each(function () {
            if (this.nodeName.toLowerCase() != "select") return;
            if (this.cache) this.cache = null;
            var a = false;
            var f = this.options;
            if ( !! e) {
                var c = f.length;
                for (var g = c - 1; g >= 0; g--) {
                    if (e.constructor == RegExp) {
                        if (f[g].value.match(e)) {
                            a = true
                        }
                    } else if (f[g].value == e) {
                        a = true
                    }
                    if (a && d[1] === true) a = f[g].selected;
                    if (a) {
                        f[g] = null
                    }
                    a = false
                }
            } else {
                if (d[1] === true) {
                    a = f[i].selected
                } else {
                    a = true
                }
                if (a) {
                    this.remove(i)
                }
            }
        });
        return this
    };
    h.fn.sortOptions = function (e) {
        var i = h(this).selectedValues();
        var j = typeof(e) == "undefined" ? true : !! e;
        this.each(function () {
            if (this.nodeName.toLowerCase() != "select") return;
            var c = this.options;
            var g = c.length;
            var d = [];
            for (var b = 0; b < g; b++) {
                d[b] = {
                    v: c[b].value,
                    t: c[b].text
                }
            }
            d.sort(function (a, f) {
                o1t = a.t.toLowerCase(),
                o2t = f.t.toLowerCase();
                if (o1t == o2t) return 0;
                if (j) {
                    return o1t < o2t ? -1 : 1
                } else {
                    return o1t > o2t ? -1 : 1
                }
            });
            for (var b = 0; b < g; b++) {
                c[b].text = d[b].t;
                c[b].value = d[b].v
            }
        }).selectOptions(i, true);
        return this
    };
    h.fn.selectOptions = function (g, d) {
        var b = g;
        var e = typeof(g);
        if (e == "object" && b.constructor == Array) {
            var i = this;
            h.each(b, function () {
                i.selectOptions(this, d)
            })
        };
        var j = d || false;
        if (e != "string" && e != "function" && e != "object") return this;
        this.each(function () {
            if (this.nodeName.toLowerCase() != "select") return this;
            var a = this.options;
            var f = a.length;
            for (var c = 0; c < f; c++) {
                if (b.constructor == RegExp) {
                    if (a[c].value.match(b)) {
                        a[c].selected = true
                    } else if (j) {
                        a[c].selected = false
                    }
                } else {
                    if (a[c].value == b) {
                        a[c].selected = true
                    } else if (j) {
                        a[c].selected = false
                    }
                }
            }
        });
        return this
    };
    h.fn.copyOptions = function (g, d) {
        var b = d || "selected";
        if (h(g).size() == 0) return this;
        this.each(function () {
            if (this.nodeName.toLowerCase() != "select") return this;
            var a = this.options;
            var f = a.length;
            for (var c = 0; c < f; c++) {
                if (b == "all" || (b == "selected" && a[c].selected)) {
                    h(g).addOption(a[c].value, a[c].text)
                }
            }
        });
        return this
    };
    h.fn.containsOption = function (g, d) {
        var b = false;
        var e = g;
        var i = typeof(e);
        var j = typeof(d);
        if (i != "string" && i != "function" && i != "object") return j == "function" ? this : b;
        this.each(function () {
            if (this.nodeName.toLowerCase() != "select") return this;
            if (b && j != "function") return false;
            var a = this.options;
            var f = a.length;
            for (var c = 0; c < f; c++) {
                if (e.constructor == RegExp) {
                    if (a[c].value.match(e)) {
                        b = true;
                        if (j == "function") d.call(a[c], c)
                    }
                } else {
                    if (a[c].value == e) {
                        b = true;
                        if (j == "function") d.call(a[c], c)
                    }
                }
            }
        });
        return j == "function" ? this : b
    };
    h.fn.selectedValues = function () {
        var a = [];
        this.selectedOptions().each(function () {
            a[a.length] = this.value
        });
        return a
    };
    h.fn.selectedTexts = function () {
        var a = [];
        this.selectedOptions().each(function () {
            a[a.length] = this.text
        });
        return a
    };
    h.fn.selectedOptions = function () {
        return this.find("option:selected")
    }
})(jQuery);
