
;(function($){

  $.fn.extend({
     
    getByteLength: function(strIN){
        var i, cnt=0;
            
        for (i=0; i<strIN.length; i++){            
            if (escape(strIN.charAt(i)).length >= 4) cnt+=2;
            else cnt++;            
        } 
            
        return cnt;
    } 
    
  });
  
  $.fn.extend({
    getIndexByByte: function(strIN,limit){
        var i, cnt=0;
            
        for (i=0; i<strIN.length; i++){            
            if (escape(strIN.charAt(i)).length >= 4) cnt+=2;
            else cnt++;            
            
            if(cnt>limit)
            {
                return [true,i];
            }
        } 
            
        return false;
    } 
    
  });
  
  $.fn.extend({

    finalselect: function(options) {
        
        var settings =
	    {	
	        id:null,
		    animalSpeed:100,
            selectWidth:"190px",		               
            selectText:"",
		    zIndex: 0, 
		    viewHeight:"100px",
		    viewWidth:"300px",
		    viewMouseoverColor:"#f3f3f3",//#dcdcdc		    
		    viewLeft:" -1px",//left,right
		    editable: false,
		    defaultEditText: "",
			obj:this
	    };
	    
	    
        if (typeof(options)!='undefined') {	        
		    jQuery.extend(settings, options);
	    }
             
        var tmp='<div id="'+settings.id+'-select" class="customselect-select" style="z-index:'+settings.zIndex+';width: '+settings.selectWidth+';">';
        tmp+='<div id="'+settings.id+'-Text" class="customselect-text" style="height: 21px;">';
        if(settings.editable) {        	
        	tmp += '<form method="post" action=""><input class="textshow" defaultval="' + settings.defaultEditText +'" value="'+settings.selectText+'" /><input type="submit" style="display:none;"></form>';
        }
        else {
        	tmp+='<div class="textshow">'+settings.selectText+'</div>';
        }
        tmp+='<div class="valueshow" style="display:none;"></div></div><div id="'+settings.id+'-selectshow" class="customselect-selectshow" style="height:'+settings.viewHeight+';width:'+settings.viewWidth+'; left:'+settings.viewLeft+';"></div></div>';
        
        var _handler = function() {
            $(this).html(tmp);
            bindArrowClick();
            bindSelectMouseover();
            bindSelectMouseleave();
            if(settings.editable) {
            	$("form", this).bind("submit", function() {            	
            		customSelectSubmit(settings.id, this);
            		return false;
            	});
            }
        };
        
        var bindArrowClick=function(){
            var tmp=$('#'+settings.id+'-Text');
            $("#"+settings.id+'-Text', settings.obj).bind("click", function(e){            
                var obj=$('#'+settings.id+'-selectshow', settings.obj);
                if(obj.css('display')=='none')
                {
                	if($("div", obj).size()>0) {
	                   obj.slideDown(settings.animalSpeed,function(){                        
	                        obj.show();                       
	                        obj.css('overflow','auto');
	                        obj.css('overflow-x','hidden');
	                    });
                	}
                }
                else
                {
                    obj.slideUp(settings.animalSpeed,function(){                        
                        obj.hide();
                    });
                }
       
            });
        };
        
        var bindItemMouseover=function(setDefault){        	
        
            var inx=0;
            while($(".selectitem",$("#"+settings.id+"-selectshow", settings.obj)).get(inx)!=null)
            {            	
                var item=$(".selectitem",$("#"+settings.id+"-selectshow", settings.obj)).get(inx);            
                $(item).bind("mouseover", function(e){
                  $(this).css('background-color',settings.viewMouseoverColor);
                });
                
                $(item).bind("mouseout", function(e){
                  $(this).css('background-color','#fff');
                });
                
                $(item).bind("click", function(e){
                 
                    
                    /*
                    var arr=$().getIndexByByte(tmpstr,16); 
                    if(arr[0]==true)
                        tmpstr=tmpstr.substring(0,arr[1])+'...';
                    */
					if(settings.editable) {
						var tmpstr=$(".thistext .selectVal",$(this)).html();
						$(".textshow",$("#"+settings.id+"-Text", settings.obj)).val(tmpstr);
					}
					else {
						var tmpstr=$(".thistext",$(this)).html();
                    	$(".textshow",$("#"+settings.id+"-Text", settings.obj)).html(tmpstr);
					}
                    $("#" + settings.id+'-selectshow', settings.obj).hide();
                    
                    var val = $(".selectvalue",$(this)).html();
                    
                    $(".valueshow",$("#"+settings.id+"-Text", settings.obj)).html(val);
                    customSelectChange(settings.id, val);
                });
                
                if(setDefault) {
                	$(item).trigger("click");
                }

                inx++;
            }
        }
        
        var bindSelectMouseover=function(){
            $('#'+settings.id+'-Text').bind("mouseover",function(){
                if($.browser.msie==false)
                    $('#'+settings.id+'-Text').css("background-position","0 -21px");
            });
        }
        
        var bindSelectMouseleave=function(){
            $('#'+settings.id+'-Text').bind("mouseout",function(){
                if($.browser.msie==false)
                    $('#'+settings.id+'-Text').css("background-position","0 0px");
            });
        }
        
        this.setViewTop = function(top){
            $('#'+settings.id+'-selectshow').css('top',top+'px');
        } 
        
        this.setViewLeft = function(left){
            $('#'+settings.id+'-selectshow').css('left',left+'px');
        }     
        
        this.getLength = function(){
            return $('.selectitem',$('#'+settings.id+'-selectshow')).length;
        }   
       
               
        this.addItem = function(itemtext,itemvalue, setDefault, selectItemClass){            
            selectItemClass = selectItemClass || "";
            var itemhtml='<div class="selectitem '+selectItemClass+'"><div class="selecttext">'+itemtext
            +'</div><div class="selectvalue" style=" display:none;">'+itemvalue+'</div></div><div class="selectborder"></div>';
            
            $("#"+settings.id+'-selectshow', settings.obj).html($("#"+settings.id+'-selectshow', settings.obj).html()+itemhtml);           
            
            bindItemMouseover(setDefault);
        };
        
        this.removeItem = function(index){
            if($('.selectitem',$('#'+settings.id+'-selectshow')).length>index)
            $($('.selectitem',$('#'+settings.id+'-selectshow')).get(index)).remove();
            if($('.selectborder',$('#'+settings.id+'-selectshow')).length>index)
            $($('.selectborder',$('#'+settings.id+'-selectshow')).get(index)).remove();
        }
        
        
        
        this.getValue = function(){
            return $('.valueshow',$('#'+settings.id+'-Text', settings.obj)).html();
        }
        
        this.getText = function(){
            return $('.textshow',$('#'+settings.id+'-Text', settings.obj)).html();
        }
        

        return this.each(_handler);     
    }

  });

})(jQuery);
