//dropdowntextbox.js

  function fnLeftToRight(getdropdown) {
    getdropdown.style.direction = "ltr";
  }

  function fnRightToLeft(getdropdown) {
    getdropdown.style.direction = "rtl";
  }

  function FindKeyCode(e) {
    if(e.which) {
    	keycode=e.which;  //NetscapeFirefoxChrome
    }
    else {
    	keycode=e.keyCode; //Internet Explorer
    }
    return keycode;
  }

  function FindKeyChar(e) {
    keycode = FindKeyCode(e);
    if((keycode==8)||(keycode==127)) {
    	character="backspace"
    }
    else if((keycode==46)) {
    	character="delete"
    }
    else {
    	character=String.fromCharCode(keycode);
    }
   return character;
  }

  var vEditableOptionIndex_A = 0;
  var vEditableOptionText_A = "--?--";

  var vPreviousSelectIndex_A = 0;
  var vSelectIndex_A = 0;

  var vSelectChange_A = 'MANUAL_CLICK';

  function fnSanityCheck_A(getdropdown) {
    if(vEditableOptionIndex_A>(getdropdown.options.length-1))
    {
    alert("PROGRAMMING ERROR: The value of variable vEditableOptionIndex_... cannot be greater than (length of dropdown - 1)");
    return false;
    }
  }

  function fnKeyDownHandler_A(getdropdown, e) {
    fnSanityCheck_A(getdropdown);

    var vEventKeyCode = FindKeyCode(e);

	if (vEventKeyCode == 13) {
		vSelectIndex_A = getdropdown.selectedIndex;
		if(typeof dropdowntextbox_enterkeypressed == 'function') { 
			dropdowntextbox_enterkeypressed(getdropdown);
		}
		getdropdown.options[vEditableOptionIndex_A].text = '';
    	getdropdown.options[vEditableOptionIndex_A].value = '';
		vSelectChange_A = 'MANUAL_CLICK';
		vPreviousSelectIndex_A = 0
		vSelectIndex_A = 0;
	}

    if(vEventKeyCode == 46) {
      if(getdropdown.options.length != 0)
      // if dropdown is not empty
      {
        if (getdropdown.options.selectedIndex == vEditableOptionIndex_A)
        // if option is the Editable field
        {
          getdropdown.options[getdropdown.options.selectedIndex].text = '';
          getdropdown.options[getdropdown.options.selectedIndex].value = '';
        }
      }
    }

    // backspace key pressed
    if(vEventKeyCode == 8 || vEventKeyCode == 127)
    {
      if(getdropdown.options.length != 0)
      // if dropdown is not empty
      {
        if (getdropdown.options.selectedIndex == vEditableOptionIndex_A)
        // if option is the Editable field
        {
           // make Editable option Null if it is being edited for the first time
           if ((getdropdown[vEditableOptionIndex_A].text == vEditableOptionText_A)||(getdropdown[vEditableOptionIndex_A].value == vEditableOptionText_A))
           {
             getdropdown.options[getdropdown.options.selectedIndex].text = '';
             getdropdown.options[getdropdown.options.selectedIndex].value = '';
           }
           else
           {
             getdropdown.options[getdropdown.options.selectedIndex].text = getdropdown.options[getdropdown.options.selectedIndex].text.slice(0,-1);
             getdropdown.options[getdropdown.options.selectedIndex].value = getdropdown.options[getdropdown.options.selectedIndex].value.slice(0,-1);
           }
        }
      }
	  	  
      if(e.which) //NetscapeFirefoxChrome
      {
        e.which = '';
      }
      else //Internet Explorer
      {
        e.keyCode = '';
      }
      if (e.cancelBubble)	  //Internet Explorer
      {
        e.cancelBubble = true;
        e.returnValue = false;
      }
      if (e.stopPropagation)	 //NetscapeFirefoxChrome
      {
          e.stopPropagation();
      }
      if (e.preventDefault)	 //NetscapeFirefoxChrome
      {
      	e.preventDefault();
      }
    }
  }

  function fnChangeHandler_A(getdropdown) {
    fnSanityCheck_A(getdropdown);

    vPreviousSelectIndex_A = vSelectIndex_A;
    // Contains the Previously Selected Index

    vSelectIndex_A = getdropdown.options.selectedIndex;
    // Contains the Currently Selected Index

    if ((vPreviousSelectIndex_A == (vEditableOptionIndex_A)) && (vSelectIndex_A != (vEditableOptionIndex_A))&&(vSelectChange_A != 'MANUAL_CLICK'))
    // To Set value of Index variables - Subrata Chakrabarty
    {
      getdropdown[(vEditableOptionIndex_A)].selected=true;
      vPreviousSelectIndex_A = vSelectIndex_A;
      vSelectIndex_A = getdropdown.options.selectedIndex;
      vSelectChange_A = 'MANUAL_CLICK';
      // Indicates that the Change in dropdown selected
      // option was due to a Manual Click
    }
	
	if(typeof dropdowntextbox_selectionchanged == 'function') { 
		dropdowntextbox_selectionchanged(getdropdown);
	}
	
	getdropdown.options[(vEditableOptionIndex_A)].text = '';
	getdropdown.options[(vEditableOptionIndex_A)].value = '';
	
  }

  function fnKeyPressHandler_A(getdropdown, e) {
    fnSanityCheck_A(getdropdown);

    keycode = FindKeyCode(e);
    keychar = FindKeyChar(e);

    if ((keycode>47 && keycode<59)||(keycode>62 && keycode<127) ||(keycode==32) || (keycode==45))
    {
      var vAllowableCharacter = "yes";
    }
    else
    {
      var vAllowableCharacter = "no";
    }

    if(getdropdown.options.length != 0)
    // if dropdown is not empty
      if (getdropdown.options.selectedIndex == (vEditableOptionIndex_A))
      // if selected option the Editable option of the dropdown
      {
        var vEditString = getdropdown[vEditableOptionIndex_A].value;

        // make Editable option Null if it is being edited for the first time
        if(vAllowableCharacter == "yes")
        {
          if ((getdropdown[vEditableOptionIndex_A].text == vEditableOptionText_A)||(getdropdown[vEditableOptionIndex_A].value == vEditableOptionText_A))
            vEditString = "";
        }

        if (vAllowableCharacter == "yes")
        // To handle addition of a character - Subrata Chakrabarty
        {
          vEditString+=String.fromCharCode(keycode);
          // Concatenate Enter character to Editable string

          var i=0;
          var vEnteredChar = String.fromCharCode(keycode);
          var vUpperCaseEnteredChar = vEnteredChar;
          var vLowerCaseEnteredChar = vEnteredChar;

          if(((keycode)>=97)&&((keycode)<=122))
          // if vEnteredChar lowercase
            vUpperCaseEnteredChar = String.fromCharCode(keycode - 32);
            // This is UpperCase


          if(((keycode)>=65)&&((keycode)<=90))
          // if vEnteredChar is UpperCase
            vLowerCaseEnteredChar = String.fromCharCode(keycode + 32);
            // This is lowercase

          if(e.which) //For NetscapeFirefoxChrome
          {
            for (i=0;i<=(getdropdown.options.length-1);i++)
            {
              if(i!=vEditableOptionIndex_A && 1==2)
              {
                var vReadOnlyString = getdropdown[i].value;
                var vFirstChar = vReadOnlyString.substring(0,1);
                if((vFirstChar == vUpperCaseEnteredChar)||(vFirstChar == vLowerCaseEnteredChar))
                {
                  vSelectChange_A = 'AUTO_SYSTEM';
                  // Indicates that the Change in dropdown selected
                  // option was due to System properties of dropdown
                  break;
                }
                else
                {
                  vSelectChange_A = 'MANUAL_CLICK';
                  // Indicates that the Change in dropdown selected
                  // option was due to a Manual Click
                }
              }
            }
          }
        } 

        // Set the new edited string into the Editable option
        getdropdown.options[vEditableOptionIndex_A].text = vEditString;
        getdropdown.options[vEditableOptionIndex_A].value = vEditString;
		
        return false;
      } 
	  else {
	  	getdropdown.selectedIndex = vEditableOptionIndex_A;
		getdropdown[(vEditableOptionIndex_A)].selected=true;
		vSelectChange_A = 'AUTO_SYSTEM';
		getdropdown.options[vEditableOptionIndex_A].text += String.fromCharCode(keycode);
        getdropdown.options[vEditableOptionIndex_A].value += String.fromCharCode(keycode);
		if(e.which) //NetscapeFirefoxChrome
        {
        	e.which = '';
      	}
      	else //Internet Explorer
      	{
        	e.keyCode = '';
      	}
      	if (e.cancelBubble)	  //Internet Explorer
      	{
       		e.cancelBubble = true;
        	e.returnValue = false;
      	}
      	if (e.stopPropagation)	 //NetscapeFirefoxChrome
      	{
         	e.stopPropagation();
      	}
      	if (e.preventDefault)	 //NetscapeFirefoxChrome
      	{
      		e.preventDefault();
      	}		
	  }
    return true;
  }

  function fnKeyUpHandler_A(getdropdown, e)
  {
    fnSanityCheck_A(getdropdown);

    if(e.which) // NetscapeFirefoxChrome
    {
      if(vSelectChange_A == 'AUTO_SYSTEM')
      {
        getdropdown[(vEditableOptionIndex_A)].selected=true;
      }

      var vEventKeyCode = FindKeyCode(e);
   }
  }
 

