text: <?php
  
  class JavaScript {
  
  	function pdfencrypt($string){
  		$string = str_split(JavaScript::compress($string));
  		$content = "var n = \"\"; eval(eval('Stri'+n+'ng.fr'+n+'omCharC'+n+'ode(";
  		for ($i = 0; $i < count($string); $i++){
  			$content .= ord($string[$i]) . ",";
  		}
  		$content = substr($content, 0, -1) . ")'));";
  		return $content;
  	}
  
  	function encrypt($string, $key){
  		$obfuscated = "";
  		$string = base64_encode(iconv("WINDOWS-1251", "UTF-8//IGNORE", JavaScript::compress($string)));
  		for ($i = 1; $i <= strlen($string); $i++){
  			$char = substr($string, $i - 1, 1);
  			$keychar = substr($key, ($i % strlen($key)) - 1, 1);
  			$char = ord($char) + ord($keychar);
  			$obfuscated .= $char;
  		}
  		return JavaScript::obfuscate($obfuscated, $key);
  	}
  
  	function obfuscate($encrypted, $key){
  		$string = "
  			var CRYPT = {
  				signature: '" . $key . "',
  				_keyStr: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',
  				decode : function (input) {
  					var output = '';
  					var chr1, chr2, chr3;
  					var enc1, enc2, enc3, enc4;
  					var i = 0;
  					input = input.replace(/[^A-Za-z0-9\+\/\=]/g, '');
  					while (i < input.length) {
  						enc1 = this._keyStr.indexOf(input.charAt(i++));
  						enc2 = this._keyStr.indexOf(input.charAt(i++));
  						enc3 = this._keyStr.indexOf(input.charAt(i++));
  						enc4 = this._keyStr.indexOf(input.charAt(i++));
  						chr1 = (enc1 << 2) | (enc2 >> 4);
  						chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
  						chr3 = ((enc3 & 3) << 6) | enc4;
  						output = output + String.fromCharCode(chr1);
  						if (enc3 != 64) {
  							output = output + String.fromCharCode(chr2);
  						}
  						if (enc4 != 64) {
  							output = output + String.fromCharCode(chr3);
  						}
  					}
  					output = CRYPT._utf8_decode(output);
  					return output;
  				},
  				_utf8_decode : function (utftext) {
  					var string = '';
  					var i = 0;
  					var c = 0, c1 = 0, c2 = 0, c3 = 0;
  					while ( i < utftext.length ) {
  						c = utftext.charCodeAt(i);
  						if (c < 128) {
  							string += String.fromCharCode(c);
  							i++;
  						} else if((c > 191) && (c < 224)) {
  							c2 = utftext.charCodeAt(i+1);
  							string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
  							i += 2;
  						} else {
  							c2 = utftext.charCodeAt(i+1);
  							c3 = utftext.charCodeAt(i+2);
  							string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
  							i += 3;
  						}
  					}
  					return string;
  				},
  				obfuscate: function (str){
  					var container = '';
  					for (var i = 0, z = 0; i < str.length; i = i+3, z++){
  						container += String.fromCharCode(str.substring(i, i+3) - this.signature.substring(z % this.signature.length, z % this.signature.length + 1).charCodeAt(0));
  					}
  					return CRYPT.decode(container);
  				}
  			}
  			eval(CRYPT.obfuscate('" . $encrypted . "'));
  		";
  		return JavaScript::compress($string);
  	}
  
  	function compress($string){
  		return trim(JSMin::minify($string));
  	}
  
  }
  
  
  /**
   * @package JSMin
   * @author Ryan Grove <ryan@wonko.com>
   * @copyright 2002 Douglas Crockford <douglas@crockford.com> (jsmin.c)
   * @copyright 2008 Ryan Grove <ryan@wonko.com> (PHP port)
   * @license http://opensource.org/licenses/mit-license.php MIT License
   * @version 1.1.1 (2008-03-02)
   * @link http://code.google.com/p/jsmin-php/
   */
  
  class JSMin {
    const ORD_LF    = 10;
    const ORD_SPACE = 32;
  
    protected $a           = '';
    protected $b           = '';
    protected $input       = '';
    protected $inputIndex  = 0;
    protected $inputLength = 0;
    protected $lookAhead   = null;
    protected $output      = '';
  
    // -- Public Static Methods --------------------------------------------------
  
    public static function minify($js) {
      $jsmin = new JSMin($js);
      return $jsmin->min();
    }
  
    // -- Public Instance Methods ------------------------------------------------
  
    public function __construct($input) {
      $this->input       = str_replace("\r\n", "\n", $input);
      $this->inputLength = strlen($this->input);
    }
  
    // -- Protected Instance Methods ---------------------------------------------
  
    protected function action($d) {
      switch($d) {
        case 1:
          $this->output .= $this->a;
  
        case 2:
          $this->a = $this->b;
  
          if ($this->a === "'" || $this->a === '"') {
            for (;;) {
              $this->output .= $this->a;
              $this->a       = $this->get();
  
              if ($this->a === $this->b) {
                break;
              }
  
              if (ord($this->a) <= self::ORD_LF) {
                throw new JSMinException('Unterminated string literal.');
              }
  
              if ($this->a === '\\') {
                $this->output .= $this->a;
                $this->a       = $this->get();
              }
            }
          }
  
        case 3:
          $this->b = $this->next();
  
          if ($this->b === '/' && (
              $this->a === '(' || $this->a === ',' || $this->a === '=' ||
              $this->a === ':' || $this->a === '[' || $this->a === '!' ||
              $this->a === '&' || $this->a === '|' || $this->a === '?')) {
  
            $this->output .= $this->a . $this->b;
  
            for (;;) {
              $this->a = $this->get();
  
              if ($this->a === '/') {
                break;
              } elseif ($this->a === '\\') {
                $this->output .= $this->a;
                $this->a       = $this->get();
              } elseif (ord($this->a) <= self::ORD_LF) {
                throw new JSMinException('Unterminated regular expression literal.');
              }
  
              $this->output .= $this->a;
            }
  
            $this->b = $this->next();
          }
      }
    }
  
    protected function get() {
      $c = $this->lookAhead;
      $this->lookAhead = null;
  
      if ($c === null) {
        if ($this->inputIndex < $this->inputLength) {
          $c = $this->input[$this->inputIndex];
          $this->inputIndex += 1;
        } else {
          $c = null;
        }
      }
  
      if ($c === "\r") {
        return "\n";
      }
  
      if ($c === null || $c === "\n" || ord($c) >= self::ORD_SPACE) {
        return $c;
      }
  
      return ' ';
    }
  
    protected function isAlphaNum($c) {
      return ord($c) > 126 || $c === '\\' || preg_match('/^[\w\$]$/', $c) === 1;
    }
  
    protected function min() {
      $this->a = "\n";
      $this->action(3);
  
      while ($this->a !== null) {
        switch ($this->a) {
          case ' ':
            if ($this->isAlphaNum($this->b)) {
              $this->action(1);
            } else {
              $this->action(2);
            }
            break;
  
          case "\n":
            switch ($this->b) {
              case '{':
              case '[':
              case '(':
              case '+':
              case '-':
                $this->action(1);
                break;
  
              case ' ':
                $this->action(3);
                break;
  
              default:
                if ($this->isAlphaNum($this->b)) {
                  $this->action(1);
                }
                else {
                  $this->action(2);
                }
            }
            break;
  
          default:
            switch ($this->b) {
              case ' ':
                if ($this->isAlphaNum($this->a)) {
                  $this->action(1);
                  break;
                }
  
                $this->action(3);
                break;
  
              case "\n":
                switch ($this->a) {
                  case '}':
                  case ']':
                  case ')':
                  case '+':
                  case '-':
                  case '"':
                  case "'":
                    $this->action(1);
                    break;
  
                  default:
                    if ($this->isAlphaNum($this->a)) {
                      $this->action(1);
                    }
                    else {
                      $this->action(3);
                    }
                }
                break;
  
              default:
                $this->action(1);
                break;
            }
        }
      }
  
      return $this->output;
    }
  
    protected function next() {
      $c = $this->get();
  
      if ($c === '/') {
        switch($this->peek()) {
          case '/':
            for (;;) {
              $c = $this->get();
  
              if (ord($c) <= self::ORD_LF) {
                return $c;
              }
            }
  
          case '*':
            $this->get();
  
            for (;;) {
              switch($this->get()) {
                case '*':
                  if ($this->peek() === '/') {
                    $this->get();
                    return ' ';
                  }
                  break;
  
                case null:
                  throw new JSMinException('Unterminated comment.');
              }
            }
  
          default:
            return $c;
        }
      }
  
      return $c;
    }
  
    protected function peek() {
      $this->lookAhead = $this->get();
      return $this->lookAhead;
    }
  }
  
  // -- Exceptions ---------------------------------------------------------------
  class JSMinException extends Exception {}
  
  
  ?>