/*
 * jquery.selectbox 2.0.0
 * Copyright (c) 2010 Andrea Piccoli
 * 
 * File generated: Apr 15 00:00:00 GMT+01:00 2010
 *
 */
(function($){  
	$.fn.extend({  
		selectbox: function(options) {  
			//selectbox settings   
			var settings = {
					sbMode: 			'select',	// select/filter mode
					sbOpen:				'down',
					sbLimit:			0,
					sbTextAlign:	'left',
					sbCallback:		'',
					sbAlert:			''
				};  
								
			var options = $.extend(settings, options);  
								
			return this.each(function(){  
				
				var opt = options;  
				var obj = $(this); 
				var ref = obj.attr("id"); 
				var cls = ''; 
				var txt = '';
				var tit = '';

				obj.css("display","none");
				             
				sel = obj.find("option:selected").text();  
				val = obj.find("option:selected").val();
				
				if (obj.attr("class")){
					cls = " " + obj.attr("class");
				};
				
				txt += '<div class="select' + cls + '" id="' + ref + '-select">';
				if (opt.sbMode == "select"){
					txt += '<input type="select" value="' + sel + '" readonly mode="select">';
				};
				if (obj.attr("title")!="" && obj.attr("title")!=null){
					tit = ' title="' + obj.attr("title") + '"';
				};
				txt += '<a' + tit +'></a>';
				if (opt.sbOpen == "up"){
					txt += '<ul class="options up"></ul>';
				} else {
					txt += '<ul class="options down"></ul>';
				};
				txt += '</div>';
				
				// remove previus object
				$("#" + ref + "-select").remove();
				
				// select creation
        obj.after(txt); 
				
				var slc = $("#" + ref + "-select");
				var wrp = $("#" + ref + "-select ul");
				var inp = $("#" + ref + "-select input");
				var btn = $("#" + ref + "-select a");
							
				inp.width(slc.innerWidth() -
									parseInt(inp.css('paddingLeft')) - 
									parseInt(inp.css('paddingRight')) - 
									parseInt(inp.css('borderLeftWidth')) - 
									parseInt(inp.css('borderRightWidth')) - 
									parseInt(btn.css('width')) -
									parseInt(btn.css('paddingLeft')) - 
									parseInt(btn.css('paddingRight')) - 
									parseInt(btn.css('borderLeftWidth')) - 
									parseInt(btn.css('borderRightWidth'))
									);
								
				if (opt.sbTextAlign=="center"){
					inp.css("textAlign", opt.sbTextAlign);
					inp.width(inp.width()-$("#" + ref + "-select a").width());
					inp.css("paddingLeft", parseInt($("#" + ref + "-select input").css("paddingLeft"))+$("#" + ref + "-select a").width());
				};
						
				// manage disabled
				if (obj.attr("disabled")=="disabled") {
					inp.addClass("disabled");
					btn.addClass("disabled");
				}; 
        
				// option list -> creation
				$("#" + ref + " option").each(function () {
					if($(this).attr("disabled")!="disabled") {
						var opt_obj = $(this);
						var opt_val = opt_obj.attr("value");
						var opt_txt = opt_obj.text();
						var opt_cls = '';
						var opt_tit = '';
						
						tit = '';
						if (opt_obj.attr("selected")=="selected"){
							opt_cls = ' class="option selected"';
						} else {
							opt_cls = ' class="option"';
						};
						if (opt_obj.attr("title")!="" && opt_obj.attr("title")!=null){
							opt_tit = ' title="' + opt_obj.attr("title") + '"';
						};
						
						wrp.append('<li ' + opt_cls + opt_tit + ' ref="' + opt_val + '">' + opt_txt + '</li>');  
					}
				});  
				
				if (opt.sbOpen == "up"){
					var size = 0;
					if(slc.height()==0){
						size += parseInt(slc.css('height'));
					} else {
						size += slc.height();
					}
					wrp.css({"bottom":size+"px"});
				} else {
					var size = 0;
					if(slc.height()==0){
						size += parseInt(slc.css('height'));
					} else {
						size += slc.height();
					}
					wrp.css({"top":size+"px"});
				}
				var row = $("#" + ref + "-select li");
				
				// option list -> scrollbar
				if (opt.sbLimit!=0) {
					var num = opt.sbLimit;
					var hgt = (row.outerHeight(true) * num);
					var wdh = 0;
					if (opt.sbLimit < row.length) {
						row.each(function(){ 
							$(this).addClass("limited");
						});	
						
						wrp.css('maxHeight',hgt + 'px');
						wrp.css('overflow','auto');
						
						if (inp.width()==0) {;
							wdh += parseInt(inp.css('width'));
						} else {
							wdh += parseInt(inp.width());
						}

						wdh += parseInt(inp.css('paddingLeft'));
						wdh += parseInt(inp.css('paddingRight'));
						wdh += parseInt(inp.css('borderLeftWidth'));
						wdh += parseInt(inp.css('borderRightWidth'));
						wdh += parseInt(btn.css('width'));
						wdh -= parseInt(row.css('paddingLeft'));
						wdh -= parseInt(row.css('paddingRight'));
						wdh -= parseInt(row.css('borderLeftWidth'));
						wdh -= parseInt(row.css('borderRightWidth'));
						wdh -= parseInt(row.css('marginLeft'));
						wdh -= parseInt(row.css('marginRight'));
						row.width(wdh-17);
					} else {
						row.each(function(){ 
							$(this).removeClass("limited");
						});	
					}
				};
				
				// options list -> open/hide 
				btn.click(function(){ 
					if (obj.attr("disabled")!="disabled") {				
						// option list -> close other selectboxes
						$(".select").each(function(){ 
							if ($(this).attr("id")!= ref+"-select") { 
								if ($(this).find('ul').css("display")=="block") {
									$(this).css('z-index', 0);
									$(this).find('ul').slideUp('fast');
									$(this).find("a").removeClass('up');
								}; 
							};
						});	
						// option list -> set z-index for right view
						if (wrp.css("display")=="none") {
							slc.css('z-index', 999);
							btn.addClass('up');
						}; 
						// option list -> animate 
						wrp.slideToggle('fast', function() {
							if (wrp.css("display")=="none") {
								slc.css('z-index', 0);
								btn.removeClass('up');
							};  
						});
					} else {
						if (opt.sbAlert != "") {
							alert(opt.sbAlert);
						};
					};
				});  
				
				inp.focus(function(){ 
					if (wrp.css("display")=="none") {
						btn.click();
					};
				}); 
				
				wrp.mouseleave(function(){
						if ($(this).css("display")=="block") {
							var ths = $(this).parent();
							ths.css('z-index', 0);
							ths.find('ul').slideUp('fast');
							ths.find("a").removeClass('up');
						}
				}); 
				
				slc.keyup(function(event) {
					if (wrp.css("display")=="block") {
						var s = $("#" + ref + "-select li.selected");
						var o = $("#" + ref + "-select li");
						
						var i = o.index(s);
						var n = $("#" + ref + "-select li").size()-1;
						var k;
						
						var sel_dsc;  
						var sel_val;
						
						wrp.focus();
						
						if (event.keyCode == '40') {
							event.preventDefault();
							k = ((i < n) ? i+1 : 0);
						} else if (event.keyCode == '38') {
							event.preventDefault();
							k = ((i < 1) ? n : i-1);
						}
						
						s.removeClass('selected');
						sel_dsc = o.eq(k).text();  
						sel_val = o.eq(k).attr("ref");
						obj.val(sel_val);
						o.eq(k).addClass('selected');
						
						if (opt.sbCallback!="") {
							opt.sbCallback.call(o=obj);
						}
						
						if (opt.sbMode == "select"){
							inp.val(sel_dsc);
						};
					} else {
						if (event.keyCode == '40' || event.keyCode == '38') {
							btn.click();
						};
					};
				}); 
                  
				// change selection  
				row.die();
				row.live('click', function(){  
					var sel_dsc = $(this).text();  
					var sel_val = $(this).attr("ref");
					obj.val(sel_val); 
					$("#" + ref + "-select li.selected").removeClass('selected');
					$(this).addClass('selected');
					if (opt.sbMode == "select"){
						inp.val(sel_dsc);
					};
					$("#" + ref + "-select a").click();
					
					if (opt.sbCallback!="") {
						opt.sbCallback.call(o=obj);
					}
				});  
				
				// rollover
				row.hover(
				  function () {
					$(this).addClass("hover");
				  },
				  function () {
					$(this).removeClass("hover");
				  }
				);
			});  
		}  
	});  
})(jQuery);

/* selectbox reset */
(function($) {
	$.fn.extend({
							
	sbreset: function(options) {  
			//selectbox settings   
			var settings = {
					sbCallback:		''
					};  
								
			var options = $.extend(settings, options);  
								
			return this.each(function(){
																
				var opt = options;				 
				var obj = $(this); 
				var ref = obj.attr('id');
				var slc = $("#" + ref + "-select");
				var wrp = $("#" + ref + "-select ul");
				var inp = $("#" + ref + "-select input");
				var btn = $("#" + ref + "-select a");
				
				var sel = obj.find("option:selected").text();  
				var val = obj.find("option:selected").val();
	
				wrp.find("li.option").remove();
				
				// option list -> creation
				$("#" + ref + " option").each(function (i) {   
					if($(this).attr("disabled")!="disabled") {
						var opt_obj = $(this);
						var opt_val = opt_obj.attr("value");
						var opt_txt = opt_obj.text();
						var opt_cls = '';
						var opt_tit = '';
						
						tit = '';
						if (opt_obj.attr("selected")=="selected"){
							opt_cls = ' class="option selected"';
						} else {
							opt_cls = ' class="option"';
						};
						if (opt_obj.attr("title")!="" && opt_obj.attr("title")!=null){
							opt_tit = ' title="' + opt_obj.attr("title") + '"';
						};
						
						wrp.append('<li ' + opt_cls + opt_tit + ' ref="' + opt_val + '">' + opt_txt + '</li>');  
					}
				});
				
				inp.val(sel);
				
				var row = $("#" + ref + "-select li");
				
				// change selection 
				row.live('click', function(){
					if (opt.sbCallback!="") {
						opt.sbCallback.call(o=obj);
					}
				}); 
				
				// rollover
				row.hover(
				  function () {
					$(this).addClass("hover");
				  },
				  function () {
					$(this).removeClass("hover");
				  }
				);
				
			});  
		}  
	});  
})(jQuery);

/* selectbox disable */
(function($) {
	$.fn.sbdisable = function(options)  {
		this.each(function() {				   
			var obj = $(this); 
			var ref = obj.attr('id');
			// disable
			obj.attr('disabled','disabled');
			$("#" + ref + "-select input").addClass('disabled');
			$("#" + ref + "-select a").addClass('disabled');
		});
	};	
})(jQuery);

/* selectbox enable */
(function($) {
	$.fn.sbenable = function(options)  {
		this.each(function() {			 
        	var obj = $(this); 
			var ref = obj.attr('id');
			// enable
			obj.removeAttr('disabled');
			$("#" + ref + "-select input").removeClass('disabled');
			$("#" + ref + "-select a").removeClass('disabled');	
		});
	};	
})(jQuery);

/* autocomplete */
(function($) {
	$.fn.sbautocomplete = function(options)  {
		//autocomplete settings   
		var config = {
			acChars: 5,
			acAlert: ''
		};  
		  
		var options = $.extend(config, options);
			
		this.each(function() {	
			var opt = options;
			var obj = $(this); 
			var ref = obj.attr('id');
			var slc = $("#" + ref + "-select");
			var wrp = $("#" + ref + "-select ul");
			var inp = $("#" + ref + "-select input");
			var inx;
			
			
			$.expr[':'].containx = function(obj, index, meta, stack){
				return (obj.textContent || obj.innerText || jQuery(obj).text() || '').toLowerCase().indexOf(meta[3].toLowerCase()) >= 0;
			};
		
			// autocomplete
			inp.removeAttr('readonly');
			slc.unbind('keyup');
			inp.unbind('focus');
			inp.keyup(function(e) {
				var key = (window.event) ? event.keyCode : e.which;
				if (key == '8') {
					$(this).val("");
				} else if (key != '8' && key != '46') {
					var str = $(this).val();
					var chk = str.length;
					if (chk >= opt.acChars) {
						var src = $("#" + ref + "-select li.option:containx('" + str + "')");
						if (src.length >= 1) {
							src.click();
						} else {
							if (opt.acAlert != '') {
								alert('"'+str+'" ' + opt.acAlert);
							};
							$(this).val("");
						};
					};
				};
			});
			inp.blur(function() {
				if($(this).val('')) {
					$(this).val(obj.find("option:selected").text());
				};
			});
		});
	};	
})(jQuery);

/* filterbox */
(function($){  
	$.fn.extend({  
		filterbox: function(options){  
			//filterbox settings   
			var config = {
					fbCallback:		''
					};  
              
			var options = $.extend(config, options);  
              
			return this.each(function(){  
				var opt = options;  
				var obj = $(this); 
				var ref = obj.attr("id"); 
				var txt = '';
				
				obj.css("display","none");
				             
				sel = obj.find("option:selected").text();  
				val = obj.find("option:selected").val();
				
				txt += '<div class="filter" id="' + ref + '-filter">';		
				txt += '<ul class="options"></ul>';
				txt += '</div>';
				
				// remove previus object
				$("#" + ref + "-filter").remove();
				
				// select creation
				obj.after(txt);
				
				var flt = $("#" + ref + "-filter");
				var wrp = $("#" + ref + "-filter ul");
				
				// manage disabled
				if (obj.attr("disabled")=="disabled") {
					wrp.addClass("disabled");
				}; 
                
				// options list -> creation
				$("#" + ref + " option").each(function () {
					if($(this).attr("disabled")!="disabled") {
						var opt_obj = $(this);
						var opt_val = opt_obj.attr("value");
						var opt_str = new RegExp("\~","g");
						var opt_txt = opt_obj.text().replace(opt_str, '<em>-</em>');
						var opt_cls = '';
						var opt_tit = '';
						var opt_row = '';
						
						if (opt_obj.attr("selected")=="selected"){
							opt_cls = ' class="option selected"';
						} else {
							opt_cls = ' class="option"';
						};
						if (opt_obj.attr("title")!="" && opt_obj.attr("title")!=null){
							opt_tit = ' title="' + opt_obj.attr("title") + '"';
						};
						
						opt_row += '<li ';
						opt_row += opt_cls;
						opt_row += opt_tit;
						opt_row += ' ref="';
						opt_row += opt_val;
						opt_row += '">';
						opt_row += '<span>';
						opt_row += opt_txt;
						opt_row += '</span>';
						opt_row += '</li>';

						wrp.append(opt_row);  
					}
				});  
					
				var row = $("#" + ref + "-filter li");	
				
				// change selection  
				row.click(function(){
					if(obj.attr("disabled")!="disabled") {
						var sel_dsc = $(this).text();  
						var sel_val = $(this).attr("ref");
						obj.val(sel_val); 
						$("#" + ref + "-filter li.selected").removeClass('selected');
						$(this).addClass('selected');
	
						if (opt.fbCallback!="") {
							opt.fbCallback.call(o=obj);
						};
					};
				});  
				
				// rollover
				row.hover(
				  function () {
					if(obj.attr("disabled")!="disabled") {
						$(this).addClass("hover");
					}
				  },
				  function () {
					if(obj.attr("disabled")!="disabled") {
						$(this).removeClass("hover");
					}
				  }
				);
			});  
		}  
	});  
})(jQuery);

/* control event */
function ctrlEvent(e){
	var evt = (window.event)? window.event: e;
	if(!evt || !evt.type) return false;
	var k = evt;
	
	if(k.type.indexOf('key')!= -1){
		if(iz('ie') || k.type.indexOf('keypress')!= -1){
			k.key= (evt.keyCode)? evt.keyCode: ((evt.charCode)? evt.charCode: evt.which);
		}
		else k.key= evt.charCode;
		if(k.key) k.letter= String.fromCharCode(k.key);
	}
	return k;
}
