// Build select
 (function($) {
    $.fn.buildSelect = function(opt) {
      
      opt = $.extend({opt_default:{title:" ", val:-1}},opt);
      
      this.each(function(){
        var Elem = $(this);
        $(this).preloader(true);
        $.ajax({
          type:"GET",
          dataType:"json",
          url:opt.url,
          success:function(res) {
            if (res)
            {
              if(res.is_error) {
                alert(res.error_alert);
              } else {
                createSelect(Elem, res, opt);
              }
            }
            else
            {
              Elem.get(0).options.length = 0;
              var options =  new Option("No records", -1); 
              Elem.get(0).options.add(options);
            }  
          }
        });
      });
      
      function createSelect(elem, js_res, opt) {
        elem.preloader(false, opt.opt_default);
        var options = createOptions(js_res, opt.selected);     
        for(var i = 0; i < options.length; i++) {
          elem.get(0).options.add(options[i]);
        }        
      }
      
      function createOptions(res, selected) {
        var newOptions = [];
        for(var i = 0; i < res.length; i++) {
          var title = res[i].name;
          var value = res[i].id;
          if(selected == res[i].id) {
            newOptions.push( new Option(title, value, false, true) )
          } else {
            newOptions.push( new Option(title, value) );
          }
        }
        return newOptions;
      };
      
    };
    
    $.fn.preloader = function(flag, opt) {
      this.each(function(){
        $(this).get(0).options.length = 0;
        if(flag) {
          var option = new Option("Loading ... ", -1, false, true);
        } else {
          var option = new Option(opt.title, opt.val);
        }
        $(this).get(0).options.add(option);
      });
    };
    
 })(jQuery); //end build select

