﻿// JavaScript Document
(function ($) {
$.searchdb = function(settings) {

  settings = $.extend({
    caption: "Search Data Where",
    hideOnSearch: false,
    disableClose: false,
    encodeStr: true,
    onSearch : null,
    onHideForm: null
  },settings || {} );

    var buttons = ['Search','Clear','Close' ];
    var odata = ['equal', 'not equal', 'less', 'less or equal','greater','greater or equal', 'begins with','ends with','contains' ];
    function sOptions( sopt, id ) {
      sopt = sopt ? sopt.split(";") : ['eq','ne','lt','le','gt','ge','bw','ew','cn'];
      var s = "<select id="+id+">";
      for (var i=0;i<=sopt.length-1;i++) {
        s += sopt[i]=='eq' ? "<option value='='>"+odata[0]+"</option>" : "";
        s += sopt[i]=='ne' ? "<option value='<>'>"+odata[1]+"</option>" : "";
        s += sopt[i]=='lt' ? "<option value='<'>"+odata[2]+"</option>" : "";
        s += sopt[i]=='le' ? "<option value='<='>"+odata[3]+"</option>" : "";
        s += sopt[i]=='gt' ? "<option value='>'>"+odata[4]+"</option>" : "";
        s += sopt[i]=='ge' ? "<option value='>='>"+odata[5]+"</option>" : "" ;      
        s += sopt[i]=='bw' ? "<option value='like...%'>"+odata[6]+"</option>" : "";
        s += sopt[i]=='ew' ? "<option value='like%...'>"+odata[7]+"</option>" : "";
        s += sopt[i]=='cn' ? "<option value='like%.%'>"+odata[8]+"</option>" : "";      
      }
      s +="</select>";    
      return s;
    }
    function consructWhere(){
      var s="";
      var i =0;
      prchar = escape('%');
      $('input:text', searchdata).each( function () {
        if( $(this).val() )  {
          i++;
          if (i > 1) s +=" AND ";
          s += $(this).attr("dbname");
          var uid = $(this).attr("uid");
          var d = $(this).attr("dtype");
          d = d =='N' ? "" : "'";
		  //= settings.encodeStr ? encodeURIComponent(dval): dval;
          var dval = encodeURIComponent($(this).val());
          uid = $("#"+uid+" option[@selected]",searchdata).val();
          switch (uid) {
            case 'like...%': s += ' LIKE '+d+dval+prchar+d; break;
            case 'like%...': s += ' LIKE '+d+prchar+dval+d; break;
            case 'like%.%': s += ' LIKE '+d+prchar+dval+prchar+d; break;
            default: s += " "+uid+" "+d+dval+d;
          }
        } 
      });		 
      return s 
    }
    function clearValues(){
      $('input:text', searchdata).each(function() { $(this).val('')} ) 
    };
    function hideForm() {
      $(searchdata).fadeOut("normal").slideUp("normal");
    };
     
    return {   
      createForm : function ( settings ) { 
	  	var aModel = settings.searchModel;  
        frm = $("<table class='table-search' border='0' cellpadding='1' cellspacing='0'><CAPTION><b>"+settings.caption+"</b></CAPTION></table>");
        for(var i=0;i<=aModel.length-1;i++) {
          var tr = $('<tr></tr>');
          var tdl = $('<td></td>').attr('class','table-label').html( aModel[i]['label']+":" );
          tr.append(tdl);
          var tsd =$('<td></td>').attr( 'class','table-data').append( sOptions( aModel[i]['dopt'], i+"_" ) );
          var tdd = $('<td></td>').attr( 'class','table-data');
          //var inp = document.createElement("input");
          var inp = $('<input></input>')
		  $(inp).attr({ maxLength: aModel[i]['maxsize'] ? aModel[i]['maxsize'] : "15", 
                      size: aModel[i]['size'] ? aModel[i]['size'] : "15", 
                      type: "text",
                      value: aModel[i]['defval'] ? aModel[i]['defval'] : "",
                      dbname: aModel[i]['dbname'],
                      uid: i+"_",
                      id: i+"_jqs",
                      dtype: aModel[i]['dtype'] ? aModel[i]['dtype'] : "S"
                      });
          tdd.append(inp);
          tr.append(tsd);
          tr.append(tdd);
          frm.append(tr);
        }
      
        tr = $('<tr></tr>');
        tdd = $('<td></td>').attr('colSpan','3').attr('align','right');
        inp = document.createElement('input');
        $(inp).attr( {type:"button",Name:"search", value: buttons[0]} ).click(function(){ 
                                                                              if (settings.onSearch) {                                                                              
                                                                                settings.onSearch(consructWhere());
                                                                                if(settings.hideOnSearch) { 
																					hideForm();
																					if  (settings.onHideForm) settings.onHideForm();
																				}; 
                                                                               }
                                                                            });
        tdd.append(inp)      
        inp = document.createElement('input');
        $(inp).attr( {type:"button",Name:"clear", value: buttons[1]} ).click(function(){ clearValues()} );
        tdd.append("&nbsp;")
        tdd.append(inp)
        if( !settings.disableClose) {
          inp = document.createElement('input');
          $(inp).attr( {type:"button",Name:"close", value: buttons[2]} ).click(function(){ hideForm(); 
		  	if  (settings.onHideForm) settings.onHideForm();
			});
	      tdd.append("&nbsp;")
          tdd.append(inp);
        }      
        tr.append(tdd);
        frm.append(tr);
        return frm;
      },
      setLanguage : function (aButtons, aOptions) {
        buttons = aButtons;
        odata = aOptions; 
      }
    };

}();

$.fn.searchdb = function(settings)
{
  this.each(function() {
  // create a form
    if(typeof settings.onSearch != 'function') settings.onSearch = false; 
    searchdata = this;
    if( settings.searchModel == null) return false; // no search model is given
    sDiv = document.createElement("div")
    var theform = $.searchdb.createForm( settings );
    $(sDiv).append(theform)
    $(searchdata).append(sDiv);
    $(window).unload(function () {
			searchdata = null;
	});
//    alert($(this).html()); 
  });  
  return this;
};
})(jQuery);

