function GetValueFromResponse(tag,response)
{
 ret_GetValueFromResponse='';
 tag1='<'+tag+'>';
 tag2='</'+tag+'>'; 
 if (response.indexOf(tag1)>-1) 
 {
  p1=response.indexOf(tag1);
  p2=response.indexOf(tag2);       
  ret_GetValueFromResponse=response.substring(p1+tag1.length,p2);
 };   
 return ret_GetValueFromResponse;
};

function WriteValueToControl(response,sel_prop,cursor_position)
{
 value_=GetValueFromResponse('selecttext',response);
// alert(response);
 if (value_!="")
 {
  ret_WriteValueToControl=true;   
  control=sel_prop.control;
  sel_prop.control_value=value_;  
  sel_prop.id=GetValueFromResponse('selectid',response);  
  sel_prop.index=GetValueFromResponse('selectindex',response);    
  control.value=value_;  
//alert(cursor_position);
  if (control.createTextRange) 
  {
   var selection = control.createTextRange();
   selection.collapse(true);
   selection.moveStart("character", cursor_position);
   selection.moveEnd("character", 0);   
   selection.select();

//alert(cursor_position);
  } else if (control.setSelectionRange) 
  {
   control.setSelectionRange(cursor_position,cursor_position);
  }
 }
 else
 {
  if (cursor_position==0) {sel_prop.control_value=''; control.value='';}
  sel_prop.id=-1;  
  sel_prop.index=-1;      
  ret_WriteValueToControl=false;
 };
 return ret_WriteValueToControl;
};





function getCaretPos(obj)
{
  obj.focus();  
  if(obj.selectionStart) return obj.selectionStart;//Gecko
  else if (document.selection)//IE
  {
    var sel = document.selection.createRange();
    var clone = sel.duplicate();
    sel.collapse(true);
    if (obj.type=="textarea")
    {
      clone.moveToElementText(obj);
    }
    else
    {
      clone.moveStart("character",-10000);//&acirc;&icirc;&ograve; &icirc;&iacute;&icirc; 
    }
    clone.setEndPoint('EndToEnd', sel);     
    return clone.text.length;    
  }  
  return 0;
};

  
function CallBackKeyUp(fname_keypress,farg_keypress,nom_function,sel_prop,responseText)
{
 {  
  control=sel_prop.control;
  try {l=getCaretPos(control);} catch(e) {l=0;};  
  resp_ = unescape(responseText); 
//alert(resp_); 
  if (!WriteValueToControl(resp_,sel_prop,l))
  { 
//alert(resp_);
   number1 = escape(control.value.substring(0,l-1));  
   s_vars="name_function="+fname_keypress+"&nom_function="+nom_function+"&str_filter="+sel_prop.filter+"&tablename="+sel_prop.tablename+"&fieldtext="+sel_prop.fieldtext+"&fieldfilter="+sel_prop.fieldfilter+"&fieldid="+sel_prop.fieldid+"&index="+sel_prop.index+"&fieldindex="+sel_prop.fieldindex+"&"+farg_keypress+"="+number1+"&r="+Math.random();
   url="/SelectControl.asp?"+s_vars;

 jQuery.ajax({
   type: "GET",
   cache: false,
   async: false,
   url: "/SelectControl.asp",
   data: s_vars,
   success: function(responseText){
     CallBackKeyUpRollBack(sel_prop,responseText); 
   }
 });


  } 	
 }
};  
  

  
function CallBackKeyUpRollBack(sel_prop,responseText)
{

 {
  control=sel_prop.control;
  try {l=getCaretPos(control);} catch(e) {l=0;};  

  resp_ = unescape(responseText);   
  if (!WriteValueToControl(resp_,sel_prop,l-1))
  {
   sel_prop.control_value='';  
   control.value='';
  }      
 }     
};
  
function select_check()
{
  select_prop=this;
  number1 = escape(select_prop.control.value);   
  s_vars="name_function=SelectKeyPress&nom_function=4&str_filter="+select_prop.filter+"&tablename="+select_prop.tablename+"&fieldtext="+select_prop.fieldtext+"&fieldfilter="+select_prop.fieldfilter+"&fieldid="+select_prop.fieldid+"&id="+select_prop.id+"&str_part="+number1+"&r="+Math.random();
  url="/SelectControl.asp?"+s_vars;
  
 jQuery.ajax({
   type: "GET",
   cache: false,
   async: false,
   url: "/SelectControl.asp",
   data: s_vars,
   success: function(responseText){
     r=responseText; 
   }
 });

  
  
  return r;
};

  
  
  
function key_up(evt,select_prop)
{
if (select_prop.control_value!=select_prop.control.value)
{
 id_old=select_prop.id;

//alert(evt.type);
 var evt = window.event || evt;
 var key=evt.keyCode;  
 control=select_prop.control;

// alert(key);
 
 if (!((key==38) || (key==40) || (key==37) || (key==39) || (key==35) || (key==36) || (key==34) || (key==33)))
 {
//alert(key);
  try {l=getCaretPos(control);} catch(e) {l=0;};

//alert(control.value.substring(0,l));
  number1 = escape(control.value.substring(0,l));   
  s_vars="name_function=SelectKeyPress&nom_function=1&str_filter="+select_prop.filter+"&tablename="+select_prop.tablename+"&fieldtext="+select_prop.fieldtext+"&fieldfilter="+select_prop.fieldfilter+"&fieldid="+select_prop.fieldid+"&index="+select_prop.index+"&fieldindex="+select_prop.fieldindex+"&str_part="+number1+"&r="+Math.random();
  url="/SelectControl.asp?"+s_vars;


 jQuery.ajax({
   type: "GET",
   cache: false,
   async: false,
   url: "/SelectControl.asp",
   data: s_vars,
   success: function(responseText){
     CallBackKeyUp('SelectKeyPress','str_part',1,select_prop,responseText); 
   }
 });


 }
 
 fill_child_obj(select_prop,id_old);
 
 if (select_prop.function_after!=undefined)
   select_prop.function_after(); 

};
};


function paste(select_prop)
{
 select_prop.paste=1; 
};



function property_change(evt,select_prop)
{
 if ((select_prop.paste==1) && (select_prop.control_value!=select_prop.control.value))
// if (select_prop.control_value!=select_prop.control.value)
 {
  select_prop.paste=0;

  if (document.createEventObject)
  {
   select_prop.control.fireEvent("onkeyup",evt);
  }
  else
  {
   var e = document.createEvent("HTMLEvents");
   e.initEvent("keyup",false,false);
   select_prop.control.dispatchEvent(e);
  }
  
 };
};



function key_down(evt,select_prop)
{  

 var evt = window.event || evt;
 var key=evt.keyCode;  

 if ((key==38) || (key==40))
 {
  id_old=select_prop.id;
  control=select_prop.control;
  try {l=getCaretPos(control);} catch(e) {l=0;}; 

  if (key==38)  
  {
   s_vars="name_function=SelectKeyPress&nom_function=2&str_filter="+select_prop.filter+"&tablename="+select_prop.tablename+"&fieldtext="+select_prop.fieldtext+"&fieldfilter="+select_prop.fieldfilter+"&fieldid="+select_prop.fieldid+"&index="+select_prop.index+"&fieldindex="+select_prop.fieldindex+"&str_part="+escape(control.value)+"&r="+Math.random();
   url="/SelectControl.asp?"+s_vars;
   
 jQuery.ajax({
   type: "GET",
   cache: false,
   async: false,
   url: "/SelectControl.asp",
   data: s_vars,
   success: function(responseText){
     CallBackKeyUp('SelectKeyPress','str_part',2,select_prop,responseText); 
   }
 });
   
   
  };


  if (key==40)  
  {  
   s_vars="name_function=SelectKeyPress&nom_function=3&str_filter="+select_prop.filter+"&tablename="+select_prop.tablename+"&fieldtext="+select_prop.fieldtext+"&fieldfilter="+select_prop.fieldfilter+"&fieldid="+select_prop.fieldid+"&index="+select_prop.index+"&fieldindex="+select_prop.fieldindex+"&str_part="+escape(control.value)+"&r="+Math.random();
   url="/SelectControl.asp?"+s_vars;

 jQuery.ajax({
   type: "GET",
   cache: false,
   async: false,
   url: "/SelectControl.asp",
   data: s_vars,
   success: function(responseText){
     CallBackKeyUp('SelectKeyPress','str_part',3,select_prop,responseText);
   }
 });
   

  }; 

  fill_child_obj(select_prop,id_old);
  
  if (select_prop.function_after!=undefined)
    select_prop.function_after(); 
 }
}



function arrow_key(select_prop,key)
{  
 if ((key==38) || (key==40))
 {
  id_old=select_prop.id;
  control=select_prop.control;
  try {l=getCaretPos(control);} catch(e) {l=0;}; 

  if (key==38)  
  {
   s_vars="name_function=SelectKeyPress&nom_function=2&str_filter="+select_prop.filter+"&tablename="+select_prop.tablename+"&fieldtext="+select_prop.fieldtext+"&fieldfilter="+select_prop.fieldfilter+"&fieldid="+select_prop.fieldid+"&index="+select_prop.index+"&fieldindex="+select_prop.fieldindex+"&str_part="+escape(control.value)+"&r="+Math.random();
   url="/SelectControl.asp?"+s_vars;

 jQuery.ajax({
   type: "GET",
   cache: false,
   async: false,
   url: "/SelectControl.asp",
   data: s_vars,
   success: function(responseText){
     CallBackKeyUp('SelectKeyPress','str_part',2,select_prop,responseText); 
   }
 });


  };


  if (key==40)  
  {  
   s_vars="name_function=SelectKeyPress&nom_function=3&str_filter="+select_prop.filter+"&tablename="+select_prop.tablename+"&fieldtext="+select_prop.fieldtext+"&fieldfilter="+select_prop.fieldfilter+"&fieldid="+select_prop.fieldid+"&index="+select_prop.index+"&fieldindex="+select_prop.fieldindex+"&str_part="+escape(control.value)+"&r="+Math.random();
   url="/SelectControl.asp?"+s_vars;

 jQuery.ajax({
   type: "GET",
   cache: false,
   async: false,
   url: "/SelectControl.asp",
   data: s_vars,
   success: function(responseText){
     CallBackKeyUp('SelectKeyPress','str_part',3,select_prop,responseText);
   }
 });


  }; 

  fill_child_obj(select_prop,id_old);
  
  if (select_prop.function_after!=undefined)
    select_prop.function_after(); 
 }
}



function fill_child_obj(select_prop,id_old)
{
  if (select_prop.child_obj!=null)  
  {
   if ((id_old!=select_prop.id) || (id_old==-1))   
   {
    select_prop.child_obj.id=-1;
    select_prop.child_obj.index=-1;
    select_prop.child_obj.filter=select_prop.id;
    select_prop.child_obj.control.value="";
   };  
  }; 
};




function select_init(control,control_value,tablename,filter,id,index,fieldtext,fieldid,fieldindex,fieldfilter,obj,child_obj,function_after)
{
 this.control=control;
 this.control_value=control_value;
 this.control.value=control_value;
 this.tablename=tablename;
 this.filter=filter;
 this.id=id;
 this.index=index;
 this.fieldtext=fieldtext;
 this.fieldid=fieldid;
 this.fieldindex=fieldindex;
 this.fieldfilter=fieldfilter;
 this.paste=0; 
 this.child_obj=child_obj;
 this.function_after=function_after;
 this.arrow_key=function(key) {arrow_key(this,key)};
 
 if (document.attachEvent)
 { 
   this.control.attachEvent('ondragstart',function(){paste(obj);},true);  
   this.control.attachEvent('oncontextmenu',function(){paste(obj);},true); 
   this.control.attachEvent('onpaste',function(){paste(obj);},true);
   this.control.attachEvent('ondrop',function(){paste(obj);},true);    
   this.control.attachEvent('onpropertychange',function(){property_change(event,obj);},true);   
   this.control.attachEvent('onkeyup',function(){key_up(event,obj);},true);  
   this.control.attachEvent('onkeydown',function(){key_down(event,obj);},true);         
//   this.control.attachEvent('oninput',function(){property_change(event,control);},true);      
 }
 else
 { 
   this.control.addEventListener('dragstart',function(){paste(obj);},true); 
   this.control.addEventListener('contextmenu',function(){paste(obj);},true);   
   this.control.addEventListener('paste',function(){paste(obj);},true);
   this.control.addEventListener('dragdrop',function(e){paste(obj);},true);     
   this.control.addEventListener('dragexit',function(e){property_change(e,obj);},true);  
//   this.control.addEventListener('propertychange',function(){property_change(event,control);},true);      
   this.control.addEventListener('input',function(e){property_change(e,obj);},true);
   this.control.addEventListener('keyup',function(e){key_up(e,obj);},true);      
   this.control.addEventListener('keydown',function(e){key_down(e,obj);},true);  
  }
}


function select_property()
{
 this.control="";
 this.control_value=""; 
 this.tablename="";
 this.filter="";
 this.id="";
 this.index="";
 this.fieldtext="";
 this.fieldid="";
 this.fieldindex="";
 this.fieldfilter="";
 this.init=select_init;
 this.check=select_check;
 this.paste=0;
 this.child_obj=null; 
}

