/*
 jquery.elect.js
 Javascript-replaced select elements
 Copyright 2009 Noah Burney
*/
(function(b){if(!b.election)b.election=[];var f,h=function(){return new f.init(arguments)};f=h.prototype={opts:{copy_classes:true,copy_ids:true},init:function(a){a=Array.prototype.slice.call(a);this.el=b(a.shift());b.extend(this.opts,a[0]||{});if(typeof this.el[0].elect==="undefined"){a="elect-0";for(i=1;b("#"+a).length;i++)a=a.replace(/-\d{1,}$/g,"-"+i);this.el.wrap('<div class="elect-container" id="'+a+'"></div>').hide();this.fokus=b('<input id="'+a+'-fokus" type="text" />').css({display:"block",
position:"absolute",left:"-3000px"}).insertAfter(this.el);this.con=b("#"+a);this.opts.copy_classes&&this.con.addClass(this.el[0].className);this.span=b('<span class="elect-element"></span>').appendTo(this.con);this.ul=b('<ul class="elect-options"></ul>').appendTo(this.con);this.val=b('<span class="elect-value"></span>').appendTo(this.span);this.con.css("position","relative");this.ul.css({position:"absolute","z-index":"33333"});this.optionize();var c=this;this.span.mousedown(function(d){d.preventDefault();
d.stopPropagation();c.toggle(d);c.focus(d)});this.span.mouseup(function(d){d.preventDefault();d.stopPropagation();return false});b("input, select, textarea, button").focus(function(d){c.blur(d)});this.fokus.focus(function(d){c.focus(d)});b(document).mouseup(function(){c.blur()});this.el[0].elect=this;return this}else{this.el[0].elect.optionize();return this.el[0].elect}},optionize:function(){this.selected=0;this.opts=[];var a=this;this.ul.empty();this.el.children("option").each(function(d){var e=
b(this);e={classes:e[0].className,name:e.attr("name"),id:e.attr("id"),value:e.val(),content:e.html()};var g=b('<li class="elect-option'+(d==0?" first":"")+(e.classes&&a.opts.copy_classes?" "+e.classes:"")+'"'+(e.name?' name="'+e.name+'"':"")+(e.id&&a.opts.copy_ids?' id="elect-'+e.id+'"':"")+(e.value?' value="'+e.value+'"':"")+">"+e.content+"</li>");a.ul.append(g);a.opts.push(e);g.mouseup(function(){a.change(d);a.close()});g.hover(function(){b(this).addClass("hover")},function(){b(this).removeClass("hover")})});
var c=0;this.el.children("option").each(function(d,e){if(b(e).attr("selected"))c=d});this.change(c);this.close();this.searchString=""},focus:function(a){for(i=0;i<b.election.length;i++)b.election[i]!=this&&b.election[i].blur(a);this.span.addClass("focused")},blur:function(){this.span.removeClass("focused");this.close()},focused:function(){return this.span.hasClass("focused")},keyup:function(a){a=a.keyCode;if(a==40)this.next();else if(a==38)this.prev();else if(a==13)this.change(this.selected);else{this.cleartime&&
clearTimeout(this.cleartime);var c=this;this.cleartime=setTimeout(function(){c.clearsearch.apply(c)},1200);this.searchString+=String.fromCharCode(a);this.search()}},clearsearch:function(){this.searchString=""},search:function(){var a=this.searchString.toLowerCase();for(i=0;i<this.opts.length;i++){var c=this.opts[i].content||"";c=c.toLowerCase().substr(0,a.length);if(c.match(a)){this.change(i);break}}},toggle:function(a){a.stopPropagation();this.ul.toggle()},close:function(){this.ul.hide();this.ul.children("li").removeClass("hover")},
next:function(){var a=this.selected;a+1<this.opts.length&&a++;this.change(a)},prev:function(){var a=this.selected;a-1>=0&&a--;this.change(a)},change:function(a){this.select(a);this.el.children("option").removeAttr("selected").eq(this.selected).attr("selected","selected");this.el.change()},select:function(a){var c=b(this.ul.children("li").get(a));if(c){this.selected=a;this.ul.children("li").removeClass("selected");c.addClass("selected").addClass(this.opts[a].classes);this.val.attr("value",this.opts[a].value).html(this.opts[a].content);
return this}}};f.init.prototype=f;b(document).keyup(function(a){var c,d=false;for(i=0;i<b.election.length;i++)if(c=b.election[i],c.focused()){d=true;break}(c=d?c:null)&&c.keyup(a)});b.fn.elect=function(){var a=Array.prototype.slice.call(arguments);this.each(function(){a.unshift(this);b.election.push(h.apply(null,a));this.elect.con.css("z-index",1E3-i);b(this).hasClass("invalid")&&this.elect.span.addClass("invalid")});return this}})(jQuery);

/** usage: log('inside coolFunc',this,arguments); */
window.log = function () {
    log.history = log.history || [];
    log.history.push( arguments );
    if ( this.console ) {
        console.log( Array.prototype.slice.call( arguments ) );
    }
};
/** Debug in all browsers */
window.debug = function () {
    if ( this.console ) {
        console.debug( arguments );
    } else {
        alert( Array.prototype.slice.call( arguments ) );
    }
};
/** Dir for objects */
window.dir = function () {
    if ( this.console ) {
        console.dir( arguments );
    }
};

// catch all document.write() calls
(function(doc){
    var write = doc.write;
    doc.write = function(q){
        log('document.write(): ', arguments);
        if (/docwriteregexwhitelist/.test(q)) write.apply( doc, arguments );
    };
})(document);
