﻿Syncfusion_BrowsersCompatibility_version = "1.0";

////////////////////////////////////////
// Some fixes for differents platform
////////////////////////////////////////
if( document.all && !document.getElementById ) 
{
  document.getElementById = function( id ) 
  {
    return document.all[ id ];
  }
}
if( window.navigator == null )
{
  window.navigator = new object();
  window.navigator.appName = "UNKNOWN BROWSER";
}

////////////////////////////////////////
// Main class
////////////////////////////////////////
function BrowsersCompatibility()
{
  var DEF_BROWSER_NC_MESS = "This type of browser is not supported yet!";
  var DEF_BROWSER_NS6 = 0;
  var DEF_BROWSER_IE5 = 1;
  var DEF_BROWSER_OPERA = 2;
  var DEF_BROWSER_UNKNOWN = 3;
  var DEF_LEFT = 37;
  var DEF_RIGHT = 39;
  var DEF_UP = 38;
  var DEF_DOWN = 40;
  var DEF_PGUP = 33;
  var DEF_PGDOWN = 34;
  var DEF_HOME = 36;
  var DEF_END = 35;
  var DEF_TAB = 9;
  var DEF_MINUS = 45;
  
  var browserType;
  
  ////////////////////////////////////////
  // Initialize actions
  ////////////////////////////////////////
  switch( window.navigator.appName )
  {
    case "Microsoft Internet Explorer": 

      if( navigator.userAgent.indexOf( 'Opera' ) != -1 )
       	browserType = DEF_BROWSER_OPERA;
      else
	      browserType = DEF_BROWSER_IE5;
      
      break;
    case "Netscape": 

      browserType = DEF_BROWSER_NS6;

      break;
      
    default:

      browserType = DEF_BROWSER_UNKNOWN;

      break;
  }
 ////////////////////////////////////////////
  this.isPasteKey = function( e )
  {
    switch( browserType )
    {
      case DEF_BROWSER_NS6:
      case DEF_BROWSER_OPERA:
        return ( e.ctrlKey && ( (e.which == 86) || (e.which == 118) ) );
        break;
        
      case DEF_BROWSER_IE5:
        var reKeyboardChars = /[\x03\x18]/;
        return reKeyboardChars.test( e.keyCode );
        break;        
        
      default:  
        return null;
    }
  }
  ////////////////////////////////////////
  this.getClipboardData = function()
  {
    switch( browserType )
    {
      case DEF_BROWSER_OPERA:
      case DEF_BROWSER_NS6:
        try
        {
          window.netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
        }
        catch( e )
	      {
	        alert( "includes failed with exception: " + e );
	        //return "err";
	      }
	      var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
		if (!clip) return;
		
		var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
		if (!trans) return;
		trans.addDataFlavor('text/unicode');

		clip.getData(trans,clip.kGlobalClipboard);
        
		var str = new Object();
		var len = new Object();

		try { trans.getTransferData('text/unicode',str,len); }
		catch(error) { return; }

		if( str ) 
		{
 		  if (Components.interfaces.nsISupportsWString)
 		    str = str.value.QueryInterface(Components.interfaces.nsISupportsWString);
		  else if (Components.interfaces.nsISupportsString)
		    str = str.value.QueryInterface(Components.interfaces.nsISupportsString);
		  else
		    str = null;
		}
		if (str) return(str.data.substring(0,len.value / 2));
    
        return null;
       
        case DEF_BROWSER_IE5:
			return window.clipboardData.getData( "TEXT" );
        
        default:  
          return null;
    }
  }
  
  //////////////////////////////////////////
  this.specKeyAndNetscape = function( ch, e, arrowsLocked )
  {
    if ( browserType != DEF_BROWSER_NS6 ) return false;
        
    if ( 
       ( e.ctrlKey && ( ( ch == 67 ) || ( ch == 99 ) || ( ch == 45 ) ) ) 
       )
    { //Ctrl+c, Ctrl+C, Ctrl+Ins
      return true;
    }
    
    if ( arrowsLocked )
    {
    return ( 
      ( ch == DEF_PGUP ) ||
      ( ch == DEF_PGDOWN ) ||
      ( ch == DEF_HOME ) ||
      ( ch == DEF_END ) ||
      ( ch == DEF_TAB ) );
    }
    else
    {
    return ( 
      ( ch == DEF_LEFT ) ||
      ( ch == DEF_RIGHT ) ||
      ( ch == DEF_DOWN) ||
      ( ch == DEF_UP ) ||
      ( ch == DEF_PGUP ) ||
      ( ch == DEF_PGDOWN ) ||
      ( ch == DEF_HOME ) ||
      ( ch == DEF_END ) ||
      ( ch == DEF_TAB ) );
    }
  }
  ////////////////////////////////////////
  this.getKeyCode = function( e )
  {
    var nKeyCode = null;
    
    switch( browserType )
    {
      case DEF_BROWSER_OPERA:
      case DEF_BROWSER_NS6: 
		nKeyCode = e.which;
		break;
      
      case DEF_BROWSER_IE5: 
        nKeyCode =  e.keyCode;
        break;
        
      default : 
		break;
    }
    return nKeyCode;
  }
  ////////////////////////////////////////
  this.shiftKeyPressed = function( e )
  {
    return e.shiftKey;
  }
  ////////////////////////////////////////
  this.ctrlKeyPressed = function( e )
  {
    return e.ctrlKey ;
  }
  ////////////////////////////////////////
  this.altKeyPressed = function( e )
  {
    return e.altKey;
  }
  ////////////////////////////////////////
  this.getSelectedLength = function( element )
  {
    switch( browserType )  
    {
      case DEF_BROWSER_IE5: 
        return document.selection.createRange().text.length;
     
     case DEF_BROWSER_OPERA:
     case DEF_BROWSER_NS6: 
        return element.selectionEnd - element.selectionStart;   
      
      default:
        return null;     
    }
    return null;
  }
  this.getSelectedText = function( element )
  {
    var sSelectedText = null;
    
    switch( browserType )  
    {
      case DEF_BROWSER_IE5:
        sSelectedText = document.selection.createRange().text;
        break;
     
      case DEF_BROWSER_OPERA: 
      case DEF_BROWSER_NS6: 
        sSelectedText = element.value.substring( element.selectionStart, element.selectionEnd );      
        break;
        
      default:
        break;     
    }
    return sSelectedText;
  }
  //////////////////////////////////////////
  //////////////////////////////////////////
  this.getCaretPos = function( element )
  {
    switch( browserType )  
    {
      case DEF_BROWSER_IE5: 
        var tr = document.selection.createRange();
        tr.moveStart( "textedit", -1 );
        element.caretPos = tr.text.length;
        return element.caretPos;
      
      case DEF_BROWSER_OPERA:
      case DEF_BROWSER_NS6: 
        element.caretPos = element.selectionEnd;
        return element.caretPos;
        
      default:
        alert( DEF_BROWSER_NC_MESS + "getCaretPos" );
    }

    return null;
  }
  /////////////////////////////////////////////
  this.moveCaret = function( element, offset )
  {
    switch( browserType )  
    {
      case DEF_BROWSER_IE5:
        var tr = document.selection.createRange();
        tr.move( "textedit", -1 );
        if( offset != 0 ) tr.move( "character", offset );
        tr.select();
        break;
         
      case DEF_BROWSER_OPERA:     
      case DEF_BROWSER_NS6: 
        element.setSelectionRange( offset, offset );      
        break;
   
      default:
        alert( DEF_BROWSER_NC_MESS + "moveCaret" );
    }
    return null;
  }
  /////////////////////////////////////////////
  this.insertText = function( element, offset )
  {  
    switch( browserType )  
    {
      case DEF_BROWSER_IE5: 
        var tr = document.selection.createRange();
        tr.text = str;
        break;
        
      case DEF_BROWSER_OPERA:
      case DEF_BROWSER_NS6: 
        var start = element.selectionStart;
        var end = element.selectionEnd;

        element.value = element.value.substr( 0, start ) + str + 
        element.value.substr( end );
        element.setSelectionRange( end, end );
        break;
        
      default:
        alert( DEF_BROWSER_NC_MESS + "insertText" );
    }
    return null;
  }
  //////////////////////////////////////////////
  this.removeText = function( element, length, offset )
  {
    switch( browserType )  
    {
      case DEF_BROWSER_IE5: 
        var tr = document.selection.createRange();
        tr.move( "character", offset );
        tr.moveEnd( "character", length );
        tr.text = "";
        break;
        
      case DEF_BROWSER_OPERA:  
      case DEF_BROWSER_NS6: 
        element.value = element.value.substr( 0, offset ) + 
        element.value.substr( offset + length )
        break;
     
      default:
        alert( DEF_BROWSER_NC_MESS + "removeText" );
    }
    return null;
  }
  ////////////////////////////////////////////////
  this.updateText = function( element, str, offset )
  {
    switch( browserType )  
    {
      case DEF_BROWSER_IE5: 
        var tr = document.selection.createRange();
        tr.move( "character", offset );
        tr.moveEnd( "character", str.length );
        tr.text = str;
      
        if( offset > 0 )
        {
          element.focus();
          var tr = document.selection.createRange();
          tr.move( "character", offset + str.length );
          tr.select();
        }
        break;
        
      case DEF_BROWSER_OPERA:
      case DEF_BROWSER_NS6: 
        if ( offset==0 )
        {
          element.value = str
        }
        else
        {
          element.value = element.value.substr( 0, offset-1 ) + str;
          element.setSelectionRange( offset, element.value.length );
        }  
        break;
     
      default:
        alert( DEF_BROWSER_NC_MESS + "updateText" );
    }
    return null;
  }
  //////////////////////////////////////////////////////////
  this.getSelectText = function( element )
  {
    var sRes = null;
    
    switch( browserType )  
    {
      case DEF_BROWSER_IE5: 
        sRes = document.selection.createRange().text;
        break;
      
      case DEF_BROWSER_OPERA:          
      case DEF_BROWSER_NS6: 
        sRes = element.substring(element.selectionStart, element.selectionEnd);
        break;
        
      default:
        alert( DEF_BROWSER_NC_MESS + "getSelectText" );
    }
    
    return sRes;
  }
  
  ////////////////////////////////////////////////////////////
  this.updateSelectText = function( element, str )
  {
    switch( browserType )  
    {
      case DEF_BROWSER_IE5: 
        var tr = document.selection.createRange();
        tr.text = str;
        break;
     
      case DEF_BROWSER_OPERA:
      case DEF_BROWSER_NS6:
        if ( element.selectionStart!=element.selectionEnd )
        {
          var start = element.selectionStart;
          var end = element.selectionEnd;

          element.value = element.value.substr(0,start) + str + element.value.substr(end);
          element.setSelectionRange(end,end);
        }
        break;
       
      default:
        alert( DEF_BROWSER_NC_MESS + "updateSelectText" );
        break;
    }
    return null;
  }
  
  /////////////////////////////////////////////////////////////
  this.selectText = function( element, pos, length )
  {
    switch( browserType )  
    {
      case DEF_BROWSER_IE5: 
        var tr = document.selection.createRange();
		tr.move( "textedit", -1 );
		tr.move( "character", pos );
		tr.moveEnd( "character", length );
		tr.select();
        break;
     
      case DEF_BROWSER_OPERA:
      case DEF_BROWSER_NS6: 
        element.setSelectionRange( pos, pos+length );
        break;
   
      default:
        alert( DEF_BROWSER_NC_MESS + "selectText" );
        break;
    }
  }
    
  ////////////////////////////////////////////
  // Helper methods
  ////////////////////////////////////////////
}

if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();