Index: /FCKpackager/trunk/_source/includes/fckfunctionprocessor.inc
===================================================================
--- /FCKpackager/trunk/_source/includes/fckfunctionprocessor.inc	(revision 2267)
+++ /FCKpackager/trunk/_source/includes/fckfunctionprocessor.inc	(revision 2268)
@@ -57,5 +57,6 @@
 			$processed = $this->_ProcessVars( $processed, $this->_Parameters ) ;
 
-		$numVarMatches = preg_match_all( '/\bvar\b\s+([\w_][\w\d_]+)/', $processed, $varsMatches ) ;
+		// Match "var" declarations.
+		$numVarMatches = preg_match_all( '/\bvar\b\s+((?:({(?:(?>[^{}]*)|(?2))*})|[^;])+?)(?=(?:\bin\b)|;)/', $processed, $varsMatches ) ;
 
 		if ( $numVarMatches > 0 )
@@ -65,5 +66,18 @@
 			for ( $i = 0 ; $i < $numVarMatches ; $i++ )
 			{
-				$vars[] = $varsMatches[1][$i] ;
+				$varsMatch = $varsMatches[1][$i];
+				
+				// Removed all (...), [...] and {...} blocks from the var
+				// statement to avoid problems with commas inside them.
+				$varsMatch = preg_replace( '/(\((?:(?>[^\(\)]*)|(?1))*\))+/', '', $varsMatch ) ;
+				$varsMatch = preg_replace( '/(\[(?:(?>[^\[\]]*)|(?1))*\])+/', '', $varsMatch ) ;
+				$varsMatch = preg_replace( '/({(?:(?>[^{}]*)|(?1))*})+/', '', $varsMatch ) ;
+				
+				$numVarNameMatches = preg_match_all( '/(?:^|,)\s*([^\s=,]+)/', $varsMatch, $varNameMatches ) ;
+				
+				for ( $j = 0 ; $j < $numVarNameMatches ; $j++ )
+				{
+					$vars[] = $varNameMatches[1][$j] ;
+				}
 			}
 
@@ -79,5 +93,5 @@
 		{
 			if ( strlen( $var) > 1 )
-				$source = preg_replace( '/(?<!\w|\d|\.)' . $var . '(?!\w|\d)/', $this->_GetVarName(), $source ) ;
+				$source = preg_replace( '/(?<!\w|\d|\.)' . preg_quote( $var ) . '(?!\w|\d)/', $this->_GetVarName(), $source ) ;
 		}
 
@@ -95,5 +109,5 @@
 		$var = $this->_VarPrefix . $this->_VarChars[ $this->_LastCharIndex++ ] ;
 
-		if ( preg_match( '/(?<!\w|\d|\.)' . $var . '(?!\w|\d)/', $this->_Function ) )
+		if ( preg_match( '/(?<!\w|\d|\.)' . preg_quote( $var ) . '(?!\w|\d)/', $this->_Function ) )
 			return $this->_GetVarName() ;
 		else
Index: /FCKpackager/trunk/_source/includes/fckjavascriptcompressor.inc
===================================================================
--- /FCKpackager/trunk/_source/includes/fckjavascriptcompressor.inc	(revision 2267)
+++ /FCKpackager/trunk/_source/includes/fckjavascriptcompressor.inc	(revision 2268)
@@ -140,7 +140,24 @@
 			$parameters = preg_split( '/\s*,\s*/', trim( $match[1] ) ) ;
 
-		$funcProcessor = new FCKFunctionProcessor( $match[0], $parameters, false ) ;
+		$hasfuncProcessor = isset( $GLOBALS['funcProcessor'] ) ;
 
-		return $funcProcessor->Process() ;
+		if ( $hasfuncProcessor != TRUE )
+			$GLOBALS['funcProcessor'] = new FCKFunctionProcessor( $match[0], $parameters, false ) ;
+		else
+		{
+			$GLOBALS['funcProcessor']->_Function = $match[0];
+			$GLOBALS['funcProcessor']->_Parameters = $parameters;
+		}
+
+		$processed = $GLOBALS['funcProcessor']->Process() ;
+		
+		$processed = substr_replace( $processed, '', 0, 8 ) ;
+
+		$processed = FCKJavaScriptCompressor::_ProcessFunctions( $processed ) ;
+
+		if ( $hasfuncProcessor != TRUE )
+			unset( $GLOBALS['funcProcessor'] ) ;
+		
+		return 'function'. $processed ;
 	}
 }
Index: /FCKpackager/trunk/fckpackager.php
===================================================================
--- /FCKpackager/trunk/fckpackager.php	(revision 2267)
+++ /FCKpackager/trunk/fckpackager.php	(revision 2268)
@@ -1,3 +1,3 @@
-﻿#!/usr/bin/php -q
+#!/usr/bin/php -q
 <?php
 /*
@@ -224,5 +224,6 @@
 			$processed = $this->_ProcessVars( $processed, $this->_Parameters ) ;
 
-		$numVarMatches = preg_match_all( '/\bvar\b\s+([\w_][\w\d_]+)/', $processed, $varsMatches ) ;
+		// Match "var" declarations.
+		$numVarMatches = preg_match_all( '/\bvar\b\s+((?:({(?:(?>[^{}]*)|(?2))*})|[^;])+?)(?=(?:\bin\b)|;)/', $processed, $varsMatches ) ;
 
 		if ( $numVarMatches > 0 )
@@ -232,5 +233,18 @@
 			for ( $i = 0 ; $i < $numVarMatches ; $i++ )
 			{
-				$vars[] = $varsMatches[1][$i] ;
+				$varsMatch = $varsMatches[1][$i];
+				
+				// Removed all (...), [...] and {...} blocks from the var
+				// statement to avoid problems with commas inside them.
+				$varsMatch = preg_replace( '/(\((?:(?>[^\(\)]*)|(?1))*\))+/', '', $varsMatch ) ;
+				$varsMatch = preg_replace( '/(\[(?:(?>[^\[\]]*)|(?1))*\])+/', '', $varsMatch ) ;
+				$varsMatch = preg_replace( '/({(?:(?>[^{}]*)|(?1))*})+/', '', $varsMatch ) ;
+				
+				$numVarNameMatches = preg_match_all( '/(?:^|,)\s*([^\s=,]+)/', $varsMatch, $varNameMatches ) ;
+				
+				for ( $j = 0 ; $j < $numVarNameMatches ; $j++ )
+				{
+					$vars[] = $varNameMatches[1][$j] ;
+				}
 			}
 
@@ -246,5 +260,5 @@
 		{
 			if ( strlen( $var) > 1 )
-				$source = preg_replace( '/(?<!\w|\d|\.)' . $var . '(?!\w|\d)/', $this->_GetVarName(), $source ) ;
+				$source = preg_replace( '/(?<!\w|\d|\.)' . preg_quote( $var ) . '(?!\w|\d)/', $this->_GetVarName(), $source ) ;
 		}
 
@@ -262,5 +276,5 @@
 		$var = $this->_VarPrefix . $this->_VarChars[ $this->_LastCharIndex++ ] ;
 
-		if ( preg_match( '/(?<!\w|\d|\.)' . $var . '(?!\w|\d)/', $this->_Function ) )
+		if ( preg_match( '/(?<!\w|\d|\.)' . preg_quote( $var ) . '(?!\w|\d)/', $this->_Function ) )
 			return $this->_GetVarName() ;
 		else
@@ -285,4 +299,5 @@
 
 ?>
+
 <?php
 
@@ -405,11 +420,29 @@
 			$parameters = preg_split( '/\s*,\s*/', trim( $match[1] ) ) ;
 
-		$funcProcessor = new FCKFunctionProcessor( $match[0], $parameters, false ) ;
-
-		return $funcProcessor->Process() ;
-	}
-}
-
-?>
+		$hasfuncProcessor = isset( $GLOBALS['funcProcessor'] ) ;
+
+		if ( $hasfuncProcessor != TRUE )
+			$GLOBALS['funcProcessor'] = new FCKFunctionProcessor( $match[0], $parameters, false ) ;
+		else
+		{
+			$GLOBALS['funcProcessor']->_Function = $match[0];
+			$GLOBALS['funcProcessor']->_Parameters = $parameters;
+		}
+
+		$processed = $GLOBALS['funcProcessor']->Process() ;
+		
+		$processed = substr_replace( $processed, '', 0, 8 ) ;
+
+		$processed = FCKJavaScriptCompressor::_ProcessFunctions( $processed ) ;
+
+		if ( $hasfuncProcessor != TRUE )
+			unset( $GLOBALS['funcProcessor'] ) ;
+		
+		return 'function'. $processed ;
+	}
+}
+
+?>
+
 <?php
 
@@ -771,4 +804,5 @@
 
 ?>
+
 <?php
 
