Index: branches/RC/admin/install.php
===================================================================
diff -u -r13 -r8929
--- branches/RC/admin/install.php	(.../trunk/admin/install.php)	(revision 13)
+++ branches/RC/admin/install.php	(.../branches/RC/admin/install.php)	(revision 8929)
@@ -1,118 +1,70 @@
 <?php
-error_reporting(0);
 
-//$new_version = '1.0.2';
+error_reporting(E_ALL);
+set_time_limit(0);
+ini_set('memory_limit', -1);
 
-define("GET_LICENSE_URL", "http://www.in-portal.net/licensing/license.php");
 define('BACKUP_NAME', 'dump(.*).txt'); // how backup dump files are named
 $general_error = '';
 
-if ($_POST['install_type'] != '') {
-	$install_type = $_POST['install_type'];
-}
-else if ($_GET['install_type'] != '') {
-	$install_type = $_GET['install_type'];
-}
+// new path detection without K4 init: begin
+define('FULL_PATH', realpath(dirname(__FILE__).'/..') );
+define('BASE_PATH', rtrim(preg_replace('#/admin$#', '', str_replace('\\', '/', dirname($_SERVER['PHP_SELF']))), '/'));
+$rootURL = 'http://'.$_SERVER['HTTP_HOST'].rtrim(BASE_PATH, '/').'/admin/';
+// new path detection without K4 init: end
 
-$pathtoroot = "";
-if(!strlen($pathtoroot))
-{
-  //$path=dirname(realpath($_SERVER['SCRIPT_FILENAME']));PATH_TRANSLATED
-  $path=dirname(realpath($_SERVER['PATH_TRANSLATED']));
-  if(strlen($path))
-  {
-    /* determine the OS type for path parsing */
-    $pos = strpos($path,":");
-    if ($pos === false)
-    {
-      $gOS_TYPE="unix";
-      $pathchar = "/";
-    }
-    else
-    {
-      $gOS_TYPE="win";
-      $pathchar="\\";
-    }
-    $p = $path.$pathchar;
-    /*Start looking for the root flag file */
-    while(!strlen($pathtoroot) && strlen($p))
-    {
-      $sub = substr($p,strlen($pathchar)*-1);
-      if($sub==$pathchar)
-      {
-        $filename = $p."root.flg";
-      }
-      else
-        $filename = $p.$pathchar."root.flg";
-      if(file_exists($filename))
-      {
-        $pathtoroot = $p;
-      }
-      else
-      {
-        $parent = realpath($p.$pathchar."..".$pathchar);
-	if($parent!=$p)
-	{
-	  $p = $parent;
-	}
-	else
-	  $p = "";
-      }
-    }
-    if(!strlen($pathtoroot))
-      $pathtoroot = ".".$pathchar;
-  }
-  else
-  {
-    $pathtoroot = ".".$pathchar;
-  }
-}
-$path_char = GetPathChar();
-//phpinfo(INFO_VARIABLES);
+$pathtoroot = FULL_PATH.'/';
+$admin = 'admin';
 
-$sub = substr($pathtoroot,strlen($pathchar)*-1);
-if($sub!=$pathchar)
-{
-  $pathtoroot = $pathtoroot.$pathchar;
-}
+ini_set('include_path', '.');
 
-$is_install = TRUE;
-$admin = substr($path,strlen($pathtoroot));
-$state = $_GET["state"];
+if (!defined('IS_INSTALL')) define('IS_INSTALL',1);
+if( file_exists($pathtoroot.'debug.php') && !(defined('DEBUG_MODE') && DEBUG_MODE) ) include_once($pathtoroot.'debug.php');
+
+$state = isset($_GET["state"]) ? $_GET["state"] : '';
 if(!strlen($state))
 {
-	$state = $_POST["state"];
+	$state = isset($_POST['state']) ? $_POST['state'] : '';
 }
 
-include("install/install_lib.php");
+if (!defined("GET_LICENSE_URL")) {
+	define("GET_LICENSE_URL", "http://www.intechnic.com/myaccount/license.php");
+}
+
+require_once $pathtoroot.$admin.'/install/install_lib.php';
+
+$install_type = GetVar('install_type', true);
+$force_finish = isset($_REQUEST['ff']) ? true : false;
+
 $ini_file = $pathtoroot."config.php";
 if(file_exists($ini_file))
 {
     $write_access = is_writable($ini_file);
-    $ini_vars = parse_ini_file($ini_file,TRUE);
+    $ini_vars = inst_parse_portal_ini($ini_file,TRUE);
 
     foreach($ini_vars as $secname => $section)
     {
       foreach($section as $key => $value)
       {
-          $key = "g_".$key;      
+          $key = "g_".str_replace('-', '', $key);
           global $$key;
           $$key = $value;
       }
-    }    
+    }
 }
 else
 {
-  $state="";  
+  $state="";
   $write_access = is_writable($pathtoroot);
   if($write_access)
-  {  
+  {
     set_ini_value("Database", "DBType", "");
     set_ini_value("Database", "DBHost", "");
     set_ini_value("Database", "DBUser", "");
     set_ini_value("Database", "DBUserPassword", "");
     set_ini_value("Database", "DBName", "");
     set_ini_value("Module Versions", "In-Portal", "");
+
     save_values();
   }
 }
@@ -129,9 +81,20 @@
 $configs[3] = "in-portal:configure_categories";
 $mods[3] = "In-Portal";
 
-if(strlen($g_DBType)>0 && strlen($state)>0 && $state !="dbinfo" && $state !="db_config_save")
+// simulate rootURL variable: begin
+	$rootURL = 'http://'.dirname($_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']);
+	$tmp = explode('/', $rootURL);
+	if( $tmp[ count($tmp) - 1 ] == $admin) unset( $tmp[ count($tmp) - 1 ] );
+	$rootURL = implode('/', $tmp).'/';
+	unset($tmp);
+	//echo "RU: $rootURL<br>";
+// simulate rootURL variable: end
+
+$db_savings = Array('dbinfo', 'db_config_save', 'db_reconfig_save'); //, 'reinstall_process'
+if( isset($g_DBType) && $g_DBType && strlen($state)>0 && !in_array($state, $db_savings) )
 {
-    require_once($pathtoroot."kernel/startup.php");
+	define('REL_PATH', 'admin');
+	require_once($pathtoroot."kernel/startup.php");
     $localURL=$rootURL."kernel/";
     $adminURL = $rootURL.$admin;
     $imagesURL = $adminURL."/images";
@@ -143,6 +106,8 @@
     //require_once ($pathtoroot."kernel/admin/include/navmenu.php");
     require_once ($pathtolocal."admin/include/navmenu.php");
     require_once($pathtoroot.$admin."/toolbar.php");
+
+    set_cookie(SESSION_COOKIE_NAME, '', adodb_mktime() - 3600, rtrim(BASE_PATH, '/') );
 }
 
 function GetPathChar($path = null)
@@ -158,8 +123,10 @@
 	return stripslashes($str);
 }
 
-require_once($pathtoroot.$admin."/install/inst_ado.php");
+$skip_step = false;
 
+require_once($pathtoroot.$admin."/install/inst_ado.php");
+$helpURL = $rootURL.$admin.'/help/install_help.php?destform=popup&help_usage=install';
 ?>
 <html>
 <head>
@@ -174,53 +141,75 @@
 			   var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
 			   if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
 			}
-			
+
 			function swap(imgid, src){
 				var ob = document.getElementById(imgid);
 				ob.src = 'images/' + src;
 			}
-			
+
 			function Continue() {
 				document.iform1.submit();
 			}
-		</SCRIPT>        
+
+			function CreatePopup(window_name, url, width, height)
+			{
+				// creates a popup window & returns it
+				if(url == null && typeof(url) == 'undefined' ) url = '';
+				if(width == null && typeof(width) == 'undefined' ) width = 750;
+				if(height == null && typeof(height) == 'undefined' ) height = 400;
+
+
+				return window.open(url,window_name,'width='+width+',height='+height+',status=yes,resizable=yes,menubar=no,scrollbars=yes,toolbar=no');
+			}
+
+			function ShowHelp(section)
+			{
+				var frm = document.getElementById('help_form');
+
+				frm.section.value = section;
+				frm.method = 'POST';
+				CreatePopup('HelpPopup','<?php echo $rootURL.$admin; ?>/help/blank.html'); // , null, 600);
+				frm.target = 'HelpPopup';
+				frm.submit();
+			}
+
+		</SCRIPT>
 </head>
 
 <body topmargin="0" leftmargin="0" marginwidth="0" marginheight="0" style="height: 100%">
+<form name="help_form" id="help_form" action="<?php echo $helpURL; ?>" method="post"><input type="hidden" id="section" name="section" value=""></form>
 <form enctype="multipart/form-data" name="iform1" id="iform1" method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
 <table cellpadding="0" cellspacing="0" border="0" width="100%" height="100%">
 	<tr>
 		<td height="90">
 			<table cellpadding="0" cellspacing="0" border="0" width="100%" height="90">
 				<tr>
-					<td rowspan="3" valign="top"><a href="http://www.in-portal.net" target="_top"><img alt="In-portal" src="images/globe.gif" width="84" height="91" border="0"></a></td>
-					<td rowspan="3" valign="top"><a href="http://www.in-portal.net" target="_top"><img alt="In-portal" src="images/logo.gif" width="150" height="91" border="0"></a></td>
+					<td rowspan="3" valign="top"><a href="http://www.in-portal.net" target="_top"><img title="In-portal" src="images/globe.gif" width="84" height="91" border="0"></a></td>
+					<td rowspan="3" valign="top"><a href="http://www.in-portal.net" target="_top"><img title="In-portal" src="images/logo.gif" width="150" height="91" border="0"></a></td>
 					<td rowspan="3" width="100000" align="right">&nbsp;</td>
-					<td width="400"><img alt="" src="images/blocks.gif" width="400" height="73"></td>
+					<td width="400"><img title="" src="images/blocks.gif" width="400" height="73"></td>
 				</tr>
-				<tr><td align="right" background="images/version_bg.gif" class="head_version" valign="top"><img alt="" src="images/spacer.gif" width="1" height="14">In-Portal Version 1.0.0: English US</td></tr>
-				<tr><td><img alt="" src="images/blocks2.gif" width="400" height="2"><br></td></tr>
-				<tr><td bgcolor="black" colspan="4"><img alt="" src="images/spacer.gif" width="1" height="1"><br></td></tr>
+				<tr><td align="right" background="images/version_bg.gif" class="head_version" valign="top"><img title="" src="images/spacer.gif" width="1" height="14">In-Portal Version <?php echo GetMaxPortalVersion($pathtoroot.$admin)?>: English US</td></tr>
+				<tr><td><img title="" src="images/blocks2.gif" width="400" height="2"><br></td></tr>
+				<tr><td bgcolor="black" colspan="4"><img title="" src="images/spacer.gif" width="1" height="1"><br></td></tr>
 			</table>
 		</td>
 	</tr>
-	
+
 <?php
 require_once($pathtoroot."kernel/include/adodb/adodb.inc.php");
 
 if(!strlen($state))
     $state = @$_POST["state"];
 //echo $state;
+
 if(strlen($state)==0)
 {
-    $ado = inst_GetADODBConnection();
-    if($ado)
-    {
-        $installed = TableExists($ado,"ConfigurationAdmin,Category,Permissions");
-    }
-    
+    $ado =& inst_GetADODBConnection();
+    $installed = $ado ? TableExists($ado,"ConfigurationAdmin,Category,Permissions") : false;
+
     if(!minimum_php_version("4.1.2"))
-    {    
+    {
         $general_error = "You have version ".phpversion()." - please upgrade!";
         //die();
     }
@@ -242,72 +231,125 @@
     	$general_error .= "In-portal's Theme directory must be writable (".$pathtoroot."themes/).";
         //die();
     }
-    
+
     if(!is_writable($pathtoroot."kernel/images/"))
     {
         if ($general_error != '') {
         	$general_error .= '<br /><br />';
         }
     	$general_error .= "In-portal's Image Upload directory must be writable (".$pathtoroot."kernel/images/).";
         //die();
-    }    
-    
+    }
+
+    if(!is_writable($pathtoroot."kernel/images/pending"))
+    {
+        if ($general_error != '') {
+        	$general_error .= '<br /><br />';
+        }
+    	$general_error .= "In-portal's Pending Image Upload directory must be writable (".$pathtoroot."kernel/images/pending).";
+        //die();
+    }
+
     if(!is_writable($pathtoroot."admin/backupdata/"))
     {
         if ($general_error != '') {
         	$general_error .= '<br /><br />';
         }
     	$general_error .= "In-portal's Backup directory must be writable (".$pathtoroot."admin/backupdata/).";
         //die();
-    }    
-    
+    }
+
     if(!is_writable($pathtoroot."admin/export/"))
     {
         if ($general_error != '') {
         	$general_error .= '<br /><br />';
         }
-    	$general_error .= "In-portal's Exportd directory must be writable (".$pathtoroot."admin/export/).";
+    	$general_error .= "In-portal's Export directory must be writable (".$pathtoroot."admin/export/).";
         //die();
-    }    
-    
+    }
+
+    if(!is_writable($pathtoroot."kernel/stylesheets/"))
+    {
+        if ($general_error != '') {
+        	$general_error .= '<br /><br />';
+        }
+    	$general_error .= "In-portal's stylesheets directory must be writable (".$pathtoroot."kernel/stylesheets/).";
+        //die();
+    }
+
+    if(!is_writable($pathtoroot."kernel/user_files/"))
+    {
+        if ($general_error != '') {
+        	$general_error .= '<br /><br />';
+        }
+    	$general_error .= "In-portal's CMS images directory must be writable (".$pathtoroot."kernel/user_files/).";
+        //die();
+    }
+
+    if(!is_writable($pathtoroot."kernel/cache/"))
+    {
+        if ($general_error != '') {
+        	$general_error .= '<br /><br />';
+        }
+    	$general_error .= "In-portal's templates cache directory must be writable (".$pathtoroot."kernel/cache/).";
+        //die();
+    }
+
     if($installed)
-    { 
-        $state="reinstall";
+    {
+    	$state="reinstall";
     }
     else {
       $state="dbinfo";
     }
 
 }
+
 if($state=="reinstall_process")
 {
+	$login_err_mesg = ''; // always init vars before use
+	if( !isset($g_License) ) $g_License = '';
 	$lic = base64_decode($g_License);
-    if(strlen($lic))
-    {
-            inst_ParseLicense($lic);
-            $ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));            
-    }
+	if(strlen($lic))
+	{
+		a83570933e44bc66b31dd7127cf3f23a($lic);
+		$ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));
+	}
 
-      $LoggedIn = FALSE;
-      if($_POST["UserName"]=="root") 
-      {
-          $ado = inst_GetADODBConnection();
-          $sql = "SELECT * FROM ".$g_TablePrefix."ConfigurationValues WHERE VariableName='RootPass'";
-          
-          $rs = $ado->Execute($sql);
-          if($rs && !$rs->EOF)
-          {          
-              $RootPass = $rs->fields["VariableValue"];
-              
-              if(strlen($RootPass)>0)
-                  $LoggedIn = ($RootPass==md5($_POST["UserPass"]));
-          }
-      }
-      else
-      {
-		$rfile = @fopen(GET_LICENSE_URL."?login=".md5($_POST['UserName'])."&password=".md5($_POST['UserPass'])."&domain=".$_SERVER['SERVER_NAME'], "r");
+	$LoggedIn = FALSE;
+	if($_POST["UserName"]=="root")
+	{
+		$ado =& inst_GetADODBConnection();
+		$sql = "SELECT * FROM ".$g_TablePrefix."ConfigurationValues WHERE VariableName='RootPass'";
+
+		$rs = $ado->Execute($sql);
+		if($rs && !$rs->EOF)
+		{
+			$RootPass = $rs->fields["VariableValue"];
+
+			if(strlen($RootPass)>0) {
+				if (ConvertVersion($g_InPortal) >= ConvertVersion("1.3.0")) {
+					$LoggedIn = ($RootPass==md5(md5($_POST["UserPass"]).'b38'));
+				}
+				else {
+					$LoggedIn = ($RootPass==md5($_POST["UserPass"]));
+				}
+			}
+		}
+		else {
+			$login_err_mesg = 'Invalid username or password';
+		}
+	}
+	else
+	{
+		$act = '';
+		if (ConvertVersion($g_InPortal) >= ConvertVersion("1.0.5")) {
+			$act = 'check';
+		}
+		$rfile = @fopen(GET_LICENSE_URL."?login=".md5($_POST['UserName'])."&password=".md5($_POST['UserPass'])."&action=$act&license_code=".base64_encode($g_LicenseCode)."&version=".GetMaxPortalVersion($pathtoroot.$admin)."&domain=".base64_encode($_SERVER['HTTP_HOST']), "r");
 		if (!$rfile) {
-			$LoggedIn = false;		
+			$login_err_mesg = "Unable to connect to the Intechnic server!";
+			$LoggedIn = false;
 		}
 		else {
 			$rcontents = '';
@@ -316,233 +358,385 @@
 				$rcontents .= $line;
 			}
 			@fclose($rfile);
-			
+
 			if (substr($rcontents, 0, 5) == 'Error') {
-				$LoggedIn = false;				
+				$login_err_mesg = substr($rcontents, 6);
+				$LoggedIn = false;
 			}
 			else {
 				$LoggedIn = true;
 			}
 		}
-      	//$LoggedIn = ($i_User == $_POST["UserName"] && ($i_Pswd == $_POST["UserPass"]) && strlen($i_User)>0) || strlen($i_User)==0;
-      }
-      
-      if($LoggedIn)
-      {
-        if (!(int)$_POST["inp_opt"]) {
-          	$state="reinstall";
-          	$inst_error = "Please select one of the options above!";
-        }
-        else {        	
-	      	switch((int)$_POST["inp_opt"])
-	          {
-	          case 0:
-	              $inst_error = "Please select an option above";
-	          break;
-	          case 1:
-	              /* clean out all tables */
-	              $install_type = 4;
-	              $ado = inst_GetADODBConnection();
-	              $filename = $pathtoroot.$admin."/install/inportal_remove.sql";  
-	              RunSchemaFile($ado,$filename);
-	              /* run install again */
-	              $state="license";
-	          break;
-	          case 2:
-	          	  $install_type = 3;
-	              $state="dbinfo";              
-	          break;
-	          case 3:
-	          	  $install_type = 5;
-	              $state="license";
-	          break;
-	          case 4:
-	          		$install_type = 6;
-	              /* clean out all tables */
-	              $ado = inst_GetADODBConnection();
-	              //$filename = $pathtoroot.$admin."/install/inportal_remove.sql";              
-	              //RunSchemaFile($ado,$filename);
-	              /* run install again */
-	              $state="restore_select";          
-	          break;
-	          case 5:
-	          	$install_type = 7;
-	          	/* change DB config */
-	          	$state="db_reconfig";
-	          break;
-	          case 6:
-	          	$install_type = 8;
-	          	$state = "upgrade";
-	          break;
-	       }
-	    }
-      }
-      else
-      {      
-         $state="reinstall";
-         $login_error = "Invalid Username or Password - Try Again";
-      }
+		//$LoggedIn = ($i_User == $_POST["UserName"] && ($i_Pswd == $_POST["UserPass"]) && strlen($i_User)>0) || strlen($i_User)==0;
+	}
+
+	if($LoggedIn)
+	{
+		if (!(int)$_POST["inp_opt"]) {
+			$state="reinstall";
+			$inst_error = "Please select one of the options above!";
+		}
+		else {
+			switch((int)$_POST["inp_opt"])
+			{
+				case 0:
+				$inst_error = "Please select an option above";
+				break;
+				case 1:
+				/* clean out all tables */
+				$install_type = 4;
+				$ado =& inst_GetADODBConnection();
+				$filename = $pathtoroot.$admin."/install/inportal_remove.sql";
+				RunSchemaFile($ado,$filename);
+
+				// removing other tables
+				$tables = $ado->MetaTables();
+
+				foreach($tables as $tab_name) {
+					if (stristr($tab_name, $g_TablePrefix."ses_")) {
+						$sql = "DROP TABLE IF EXISTS $tab_name";
+						$ado->Execute($sql);
+					}
+				}
+
+				/* run install again */
+				$state="license";
+				break;
+				case 2:
+				$install_type = 3;
+				$state="dbinfo";
+				break;
+				case 3:
+				$install_type = 5;
+				$state="license";
+				break;
+				case 4:
+				$install_type = 6;
+				/* clean out all tables */
+				$ado =& inst_GetADODBConnection();
+				//$filename = $pathtoroot.$admin."/install/inportal_remove.sql";
+				//RunSchemaFile($ado,$filename);
+				/* run install again */
+				$state="restore_select";
+				break;
+				case 5:
+				$install_type = 7;
+				/* change DB config */
+				$state="db_reconfig";
+				break;
+				case 6:
+				$install_type = 8;
+				$state = "upgrade";
+				break;
+				case 7:
+				$install_type = 9;
+				$state = "fix_paths";
+				break;
+			}
+		}
+	}
+	else
+	{
+		$state="reinstall";
+		$login_error = $login_err_mesg;//"Invalid Username or Password - Try Again";
+	}
 }
 
 if ($state == "upgrade") {
-    $ado = inst_GetADODBConnection();
-    
+    $ado =& inst_GetADODBConnection();
+
     $Modules = array();
     $Texts = array();
 
-	$sql = "SELECT Name, Version FROM ".$g_TablePrefix."Modules";
-	$rs = $ado->Execute($sql);
-	
-	while ($rs && !$rs->EOF) {
-		$p = strtolower($rs->fields['Name']);
-//		$modules .= strtolower($rs->fields['Name']).',';
-//		$rs->MoveNext();
-//	}
-	
-//	$mod_arr = explode(",", substr($modules, 0, strlen($modules) - 1));
-	
-//    foreach($mod_arr as $p)
-//    {        
-    	if ($p == 'in-portal') {
-    		$p = '';
-    	}    
-    	
-    	$dir_name = $pathtoroot.$p."/admin/install/upgrades/";
-    	$dir = @dir($dir_name);    	
-    	//echo "<pre>"; print_r($dir); echo "</pre>";
-    	
-    	while ($file = $dir->read()) {
-	        if ($file != "." && $file != ".." && !is_dir($dir_name.$file))
-	        { 
-	        	$file = str_replace("inportal_upgrade_v", "", $file);
-	        	$file = str_replace(".sql", "", $file);
-	        	
-	        	if ($file != '') {
-	        		$sql = "SELECT count(*) AS count FROM ".$g_TablePrefix."Modules WHERE Name = '".$rs->fields['Name']."' AND Version = '$file'";
-	        		$rs1 = $ado->Execute($sql);
-	        		
-	        		if ($rs1->fields['count'] == 0) {
-//	        			$sql = "SELECT Version FROM ".$g_TablePrefix."Modules WHERE Name = '".$p."'";
-//	        			$rs2 = $ado->Execute($sql);
-						$Texts[] = $rs->fields['Name']." (".$rs->fields['Version']." ".prompt_language("la_to")." ".$file.")";
-	        			$Modules[] = $rs->fields['Name'];
-	        		}
-	        	}
-	        }
-    	}
-    	$rs->MoveNext();    	
+    if (ConvertVersion(GetMaxPortalVersion($pathtoroot.$admin)) >= ConvertVersion("1.0.5") && ($g_LicenseCode == '' && $g_License != '')) {
+    	$state = 'reinstall';
+    	$inst_error = "Your license must be updated before you can upgrade. Please don't use 'Existing License' option, instead either Download from Intechnic or Upload a new license file!";
     }
-    	
-	$include_file = "install/upgrade.php";
+    else {
+		$sql = "SELECT Name, Version, Path FROM ".$g_TablePrefix."Modules ORDER BY LoadOrder asc";
+
+		$rs = $ado->Execute($sql);
+
+		$i = 0;
+		while ($rs && !$rs->EOF) {
+			$p = $rs->fields['Path'];
+
+	    	if ($rs->fields['Name'] == 'In-Portal') {
+	    		$p = '';
+	    	}
+
+	    	$dir_name = $pathtoroot.$p."admin";///install/upgrades/";
+
+			if($rs->fields['Version'] != $newver = GetMaxPortalVersion($dir_name))
+			{
+
+////////////////////
+
+				$mod_path = $rs->fields['Path'];
+				$current_version = $rs->fields['Version'];
+		    	if ($rs->fields['Name'] == 'In-Portal') $mod_path = '';
+
+		    	$dir_name = $pathtoroot.$mod_path."/admin/install/upgrades/";
+		    	$dir = @dir($dir_name);
+
+		    	if (!$dir) {
+		    		$rs->MoveNext();
+		    		continue;
+		    	}
+
+		    	$upgrades_arr = Array();
+
+		    	$new_version = '';
+		    	while ($file = $dir->read()) {
+						if ($file != "." && $file != ".." && !is_dir($dir_name.$file)) {
+				        	if (strstr($file, 'inportal_check_v')) {
+					        	$upgrades_arr[] = $file;
+				        	}
+						}
+		    	}
+
+		    	usort($upgrades_arr, "VersionSort");
+
+				$result=0;
+				$failCheck=1;
+				$stopCheck=2;
+				$CheckErrors = Array();
+
+		    	foreach($upgrades_arr as $file)
+		    	{
+			      $file_tmp = str_replace("inportal_check_v", "", $file);
+			      $file_tmp = str_replace(".php", "", $file_tmp);
+
+			   		if (ConvertVersion($file_tmp) > ConvertVersion($current_version)) {
+		    			$filename = $pathtoroot.$mod_path."/admin/install/upgrades/$file";
+				       	if(file_exists($filename))
+					   		{
+									include($filename);
+									if( $result & 2 ) break;
+					   		}
+			      	}
+		    	}
+
+////////////////////
+
+		    	$Modules[] = Array('module'=>$rs->fields['Name'],'curver'=>$rs->fields['Version'],'newver'=>$newver,'error'=>$result!='pass');
+//		    	$Texts[] = $rs->fields['Name']." (".$rs->fields['Version']." ".prompt_language("la_to")." ".GetMaxPortalVersion($dir_name).")";
+			}
+
+	    	/*$dir = @dir($dir_name);
+
+	    	while ($file = $dir->read()) {
+		        if ($file != "." && $file != ".." && !is_dir($dir_name.$file))
+		        {
+		        	if (strstr($file, 'inportal_upgrade_v')) {
+			        	$file = str_replace("inportal_upgrade_v", "", $file);
+			        	$file = str_replace(".sql", "", $file);
+
+		        		//$sql = "SELECT count(*) AS count FROM ".$g_TablePrefix."Modules WHERE Name = '".$rs->fields['Name']."' AND Version = '$file'";
+		        		//$rs1 = $ado->Execute($sql);
+
+		        		if ($rs1->fields['count'] == 0 && ConvertVersion($file) > ConvertVersion($rs->fields['Version'])) {
+		        			if ($Modules[$i-1] == $rs->fields['Name']) {
+										$Texts[$i-1] = $rs->fields['Name']." (".$rs->fields['Version']." ".prompt_language("la_to")." ".$file.")";
+		        				$i--;
+		        			}
+		        			else {
+		        				$Texts[$i] = $rs->fields['Name']." (".$rs->fields['Version']." ".prompt_language("la_to")." ".$file.")";
+		        				$Modules[$i] = $rs->fields['Name'];
+		        			}
+
+		        			$i++;
+		        		}
+		        	}
+		        }
+	    	}*/
+
+	    	$rs->MoveNext();
+	    }
+
+	    $sql = 'DELETE FROM '.$g_TablePrefix.'Cache WHERE VarName IN ("config_files","configs_parsed","sections_parsed")';
+			$ado->Execute($sql);
+
+		$include_file = $pathtoroot.$admin."/install/upgrade.php";
+	}
 }
 
 if ($state == "upgrade_process") {
-	
+	// K4 applition is now always available during upgrade process
+	if (!defined('FULL_PATH')) {
+		define('FULL_PATH', realpath(dirname(__FILE__).'/..'));
+	}
+
+	include_once(FULL_PATH.'/core/kernel/startup.php');
+	$application =& kApplication::Instance();
+	$application->Init();
+
+	// force rereading of configs
+	$unit_config_reader =& $application->recallObject('kUnitConfigReader');
+	$unit_config_reader->scanModules(MODULES_PATH);
+
+	$ado =& inst_GetADODBConnection();
 	$mod_arr = $_POST['modules'];
-		
+
+	$mod_str = '';
+	foreach ($mod_arr as $tmp_mod) {
+		$mod_str .= "'$tmp_mod',";
+	}
+
+	$mod_str = substr($mod_str, 0, strlen($mod_str) - 1);
+
+	$sql = "SELECT Name FROM ".$g_TablePrefix."Modules WHERE Name IN ($mod_str) ORDER BY LoadOrder";
+	$rs = $ado->Execute($sql);
+
+	$mod_arr = array();
+	while ($rs && !$rs->EOF) {
+		$mod_arr[] = $rs->fields['Name'];
+		$rs->MoveNext();
+	}
+
     foreach($mod_arr as $p)
     {
-        $mod_name = strtolower($p);
-        
+      $mod_name = strtolower($p);
+
+			$sql = "SELECT Version, Path FROM ".$g_TablePrefix."Modules WHERE Name = '$p'";
+			$rs = $ado->Execute($sql);
+
+			$current_version = $rs->fields['Version'];
+
     	if ($mod_name == 'in-portal') {
-    		$mod_name = '';
+    		$mod_path = '';
     	}
-    	
-    	$dir_name = $pathtoroot.$mod_name."/admin/install/upgrades/";
-    	$dir = @dir($dir_name); 
-    	
+    	else {
+    		$mod_path = $rs->fields['Path'];
+    	}
+
+    	$dir_name = $pathtoroot.$mod_path."/admin/install/upgrades/";
+    	$dir = @dir($dir_name);
+
+    	$upgrades_arr = Array();
+
     	$new_version = '';
-    	$tmp1 = 0;
-    	$tmp2 = 0;
     	while ($file = $dir->read()) {
-	        if ($file != "." && $file != ".." && !is_dir($dir_name.$file))
-	        { 
-	        	$file = str_replace("inportal_upgrade_v", "", $file);
-	        	$file = str_replace(".sql", "", $file);
-	        	
-	        	if ($file != '') {
-	        		$tmp1 = str_replace(".", "", $file);	        		
-	        		if ($tmp1 > $tmp2) {
-	        			$new_version = $file;
-	        		}
+			if ($file != "." && $file != ".." && !is_dir($dir_name.$file)) {
+	        	if (strstr($file, 'inportal_upgrade_v')) {
+		        	$upgrades_arr[] = $file;
 	        	}
-	        }
-	        $tmp2 = $tmp1;
+			}
     	}
-	        		    		
-    	
-    	$version_nrs = explode(".", $new_version);
-    	
-    	for ($i = 0; $i < $version_nrs[0] + 1; $i++) {
-    		for ($j = 0; $j < $version_nrs[1] + 1; $j++) {
-    			for ($k = 0; $k < $version_nrs[2] + 1; $k++) {
-    				$try_version = "$i.$j.$k";
-    				
-			    	$filename = $pathtoroot.$mod_name."/admin/install/upgrades/inportal_upgrade_v$try_version.sql";
-			        
-			        if(file_exists($filename))
-			       	{
-			    		RunSQLFile($ado, $filename);
-				      	set_ini_value("Module Versions", $p, $try_version);
-				      	save_values();
-			    	}
-    			}
-    		}
+
+    	usort($upgrades_arr, "VersionSort");
+
+    	foreach($upgrades_arr as $file)
+    	{
+    		preg_match('/inportal_upgrade_v(.*).(php|sql)$/', $file, $rets);
+    		$tmp_version = $rets[1];
+    		$tmp_extension = $rets[2];
+
+	   		if (ConvertVersion($tmp_version) > ConvertVersion($current_version) )
+	   		{
+    			$filename = $pathtoroot.$mod_path."/admin/install/upgrades/$file";
+		       	//echo "Running: $filename<br>";
+
+		       	// SQL is processed FIRST (before corresponding PHP according to the sorting order in VersionSort()
+		       	if( file_exists($filename) )
+		       	{
+		       		if($tmp_extension == 'sql')
+		       		{
+		       			RunSQLFile($ado, $filename);
+		       		}
+		       		else
+		       		{
+		       			include_once $filename;
+		       		}
+		       	}
+	      	}
     	}
+
+    	set_ini_value("Module Versions", $p, GetMaxPortalVersion($pathtoroot.$mod_path."/admin/"));
+  		save_values();
     }
-	
+
+    // compile stylesheets: begin
+	define('FULL_PATH', realpath(dirname(__FILE__).'/..'));
+	include_once(FULL_PATH.'/core/kernel/startup.php');
+	$application =& kApplication::Instance();
+	$application->Init();
+
+//	$objThemes->CreateMissingThemes(false);
+	$application->HandleEvent($theme_event, 'adm:OnRebuildThemes');
+
+	$css_hash = $application->Conn->GetCol('SELECT LOWER(Name) AS Name, StylesheetId FROM '.TABLE_PREFIX.'Stylesheets', 'StylesheetId');
+
+	$css_table = $application->getUnitOption('css','TableName');
+	$css_idfield = $application->getUnitOption('css','IDField');
+
+	$theme_table = $application->getUnitOption('theme', 'TableName');
+	$theme_idfield = $application->getUnitOption('theme', 'IDField');
+
+	$theme_update_sql = 'UPDATE '.$theme_table.' SET '.$css_idfield.' = %s WHERE LOWER(Name) = %s';
+	foreach($css_hash as $stylesheet_id => $theme_name)
+	{
+		$css_item =& $application->recallObject('css', null, Array('skip_autoload' => true));
+		$css_item->Load($stylesheet_id);
+		$css_item->Compile();
+		$application->Conn->Query( sprintf($theme_update_sql, $stylesheet_id, $application->Conn->qstr( getArrayValue($css_hash,$stylesheet_id) ) ) );
+	}
+
+	// do redirect, because upgrade scripts can eat a lot or memory used for language pack upgrade operation
+	$application->Redirect('install', Array('state' => 'languagepack_upgrade'), '', 'install.php');
+	// compile stylesheets: end
+
+    $state = 'languagepack_upgrade';
+}
+
+// upgrade language pack
+if($state=='languagepack_upgrade')
+{
+	$state = 'lang_install_init';
+	if( is_object($application) ) $application->SetVar('lang', Array('english.lang') );
+	$force_finish = true;
+}
+
+if ($state == 'fix_paths') {
+	$ado = inst_GetADODBConnection();
+	$sql = "SELECT * FROM ".$g_TablePrefix."ConfigurationValues WHERE VariableName = 'Site_Name' OR VariableName LIKE '%Path%'";
+	$path_rs = $ado->Execute($sql);
+	$include_file = $pathtoroot.$admin."/install/fix_paths.php";
+}
+
+if ($state == 'fix_paths_process') {
+	$ado = inst_GetADODBConnection();
+	//$state = 'fix_paths';
+	//$include_file = $pathtoroot.$admin."/install/fix_paths.php";
+	foreach($_POST["values"] as $key => $value) {
+		$sql = "UPDATE ".$g_TablePrefix."ConfigurationValues SET VariableValue = '".$value."' WHERE VariableName = '".$key."'";
+		$ado->Execute($sql);
+	}
+
 	$state = "finish";
-	$include_file = "install/install_finish.php";
 }
 
 if($state=="db_reconfig_save")
 {
-    $ini_vars = parse_ini_file($ini_file,TRUE);
+    $ini_vars = inst_parse_portal_ini($ini_file,TRUE);
 
     foreach($ini_vars as $secname => $section)
     {
       foreach($section as $key => $value)
       {
-          $key = "g_".str_replace("-", "", $key);      
+          $key = "g_".str_replace("-", "", $key);
           global $$key;
           $$key = $value;
       }
     }
     unset($ado);
-    $ado = inst_GetADODBConnection();
-    if($ado->ErrorNo()!=0)
-    {
-        $db_error = "Connection Error: (".$ado->ErrorNo().") ".$ado->ErrorMsg();
-        $state = "db_reconfig";
-
-    }
-    else
-    {
-        if(!TableExists($ado,"ConfigurationAdmin,Category,Permissions"))
-        {
-            $state="db_reconfig";
-            $db_error = "An In-Portal Database was not found at this location";
-        }
-        else {
-		    set_ini_value("Database", "DBType",$_POST["ServerType"]);
-		    set_ini_value("Database", "DBHost",$_POST["ServerHost"]);
-		    set_ini_value("Database", "DBName",$_POST["ServerDB"]);
-		    set_ini_value("Database", "DBUser",$_POST["ServerUser"]);
-		    set_ini_value("Database", "DBUserPassword",$_POST["ServerPass"]);
-		    set_ini_value("Database","TablePrefix",$_POST["TablePrefix"]);           
-		
-		    save_values();        	
-		    
-            $state = "finish";
-            $include_file = "install/install_finish.php";
-        }
-    }
+	$ado = VerifyDB('db_reconfig', 'finish', 'SaveDBConfig', true);
 }
 
 
 if($state=="db_reconfig")
 {
-  $include_file = "install/db_reconfig.php";	
+  $include_file = $pathtoroot.$admin."/install/db_reconfig.php";
 }
 
 if($state=="restore_file")
@@ -553,26 +747,26 @@
 		$state="restore_select";
 	}
 	else
-	{		
+	{
 		$filepath = stripslashes($_POST['backupdir']);
 		$backupfile = $filepath.$path_char.str_replace('(.*)', $_POST['backupdate'], BACKUP_NAME);
-		
+
 		if(file_exists($backupfile) && is_readable($backupfile))
 		{
-           $ado = inst_GetADODBConnection();
+           $ado =& inst_GetADODBConnection();
 
-	       $show_warning = false;              
-	       
+	       $show_warning = false;
+
            if (!$_POST['warning_ok']) {
 	           // Here we comapre versions between backup and config
 	           $file_contents = file_get_contents($backupfile);
-	
+
 	           $file_tmp_cont = explode("#------------------------------------------", $file_contents);
 	           $tmp_vers = $file_tmp_cont[0];
-	
-	           $vers_arr = explode(";", $tmp_vers);           
-	           $ini_values = parse_ini_file($ini_file);
-	        
+
+	           $vers_arr = explode(";", $tmp_vers);
+	           $ini_values = inst_parse_portal_ini($ini_file);
+
 	           foreach ($ini_values as $key => $value) {
 	           		foreach ($vers_arr as $k) {
 	           			if (strstr($k, $key)) {
@@ -584,26 +778,26 @@
 	           }
 	           //$show_warning = true;
            }
-           
+
            if (!$show_warning) {
-           		$filename = $pathtoroot.$admin.$path_char.'install'.$path_char.'inportal_remove.sql';              
-           		RunSchemaFile($ado,$filename);			
+           		$filename = $pathtoroot.$admin.$path_char.'install'.$path_char.'inportal_remove.sql';
+           		RunSchemaFile($ado,$filename);
            		$state="restore_run";
            }
            else {
            		$state = "warning";
-           		$include_file = "install/warning.php";
+           		$include_file = $pathtoroot.$admin."/install/warning.php";
            }
 		}
 		else {
 			if ($_POST['backupdate'] != '') {
-				$include_file = "install/restore_select.php";
-		  		$restore_error = "$backupfile not found or could not be read";		
+				$include_file = $pathtoroot.$admin."/install/restore_select.php";
+		  		$restore_error = "$backupfile not found or could not be read";
 			}
 			else {
-				$include_file = "install/restore_select.php";
-		  		$restore_error = "No backup selected!!!";	
-			}					
+				$include_file = $pathtoroot.$admin."/install/restore_select.php";
+		  		$restore_error = "No backup selected!!!";
+			}
 		}
 	}
 	//echo $restore_error;
@@ -612,17 +806,17 @@
 if($state=="restore_select")
 {
 	if( isset($_POST['backupdir']) ) $filepath = stripslashes($_POST['backupdir']);
-	$include_file = "install/restore_select.php";	
+	$include_file = $pathtoroot.$admin."/install/restore_select.php";
 }
 
 if($state=="restore_run")
 {
-  $ado = inst_GetADODBConnection();
+  $ado =& inst_GetADODBConnection();
   $FileOffset = (int)$_GET["Offset"];
   if(!strlen($backupfile))
     $backupfile = SuperStrip($_GET['File'], true);
-      	
-  $include_file = "install/restore_run.php";	
+
+  $include_file = $pathtoroot.$admin."/install/restore_run.php";
 }
 
 if($state=="db_config_save")
@@ -632,58 +826,46 @@
     set_ini_value("Database", "DBName",$_POST["ServerDB"]);
     set_ini_value("Database", "DBUser",$_POST["ServerUser"]);
     set_ini_value("Database", "DBUserPassword",$_POST["ServerPass"]);
-    set_ini_value("Database","TablePrefix",$_POST["TablePrefix"]);           
+    set_ini_value("Database","TablePrefix",$_POST["TablePrefix"]);
 
     save_values();
-    $ini_vars = parse_ini_file($ini_file,TRUE);
+    $ini_vars = inst_parse_portal_ini($ini_file,TRUE);
 
     foreach($ini_vars as $secname => $section)
     {
       foreach($section as $key => $value)
       {
-          $key = "g_".str_replace("-", "", $key);    
+          $key = "g_".str_replace("-", "", $key);
           global $$key;
           $$key = $value;
       }
     }
     unset($ado);
-    $ado = inst_GetADODBConnection();
-    if($ado->ErrorNo()!=0)
-    {
-        $db_error = "Connection Error: (".$ado->ErrorNo().") ".$ado->ErrorMsg();
-        $state = "dbinfo";
-
-    }
-    else
-    {
-        if(TableExists($ado,"ConfigurationAdmin,Category,Permissions"))
-        {
-            $state="dbinfo";
-            $db_error = "An In-Portal Database already exists at this location";
-        }
-        else
-            $state = "license";
-    }
+    $ado = VerifyDB('dbinfo', 'license');
 }
 
 if($state=="dbinfo")
 {
   	if ($install_type == '') {
   		$install_type = 1;
   	}
-	$include_file = "install/dbinfo.php";
+	$include_file = $pathtoroot.$admin."/install/dbinfo.php";
 }
 
 if ($state == "download_license") {
 	$ValidLicense = FALSE;
-	if ($_POST['login'] != '' && $_POST['password'] != '') {
+
+	$lic_login = isset($_POST['login']) ? $_POST['login'] : '';
+	$lic_password = isset($_POST['password']) ? $_POST['password'] : '';
+
+	if ($lic_login != '' && $lic_password != '') {
 		// Here we determine weather login is ok & check available licenses
-		
-		$rfile = @fopen(GET_LICENSE_URL."?login=".md5($_POST['login'])."&password=".md5($_POST['password'])."&domain=".$_SERVER['SERVER_NAME'], "r");
+
+		$rfile = @fopen(GET_LICENSE_URL."?login=".md5($_POST['login'])."&password=".md5($_POST['password'])."&version=".GetMaxPortalVersion($pathtoroot.$admin)."&domain=".base64_encode($_SERVER['HTTP_HOST']), "r");
 		if (!$rfile) {
 			$get_license_error = "Unable to connect to the Intechnic server! Please try again later!";
 			$state = "get_license";
-			$include_file = "install/get_license.php";			
+			$include_file = $pathtoroot.$admin."/install/get_license.php";
 		}
 		else {
 			$rcontents = '';
@@ -692,54 +874,57 @@
 				$rcontents .= $line;
 			}
 			@fclose($rfile);
-			
+
 			if (substr($rcontents, 0, 5) == 'Error') {
 				$get_license_error = substr($rcontents, 6);
 				$state = "get_license";
-				$include_file = "install/get_license.php";					
+				$include_file = $pathtoroot.$admin."/install/get_license.php";
 			}
 			else {
 				if (substr($rcontents, 0, 3) == "SEL") {
 					$state = "download_license";
 					$license_select = substr($rcontents, 4);
-					$include_file = "install/download_license.php";
+					$include_file = $pathtoroot.$admin."/install/download_license.php";
 				}
 				else {
 					// Here we get one license
-		            $data = base64_decode(str_replace("In-Portal License File - do not edit!\n", "", $rcontents));
-					inst_ParseLicense($data);
+					$tmp_data = explode('Code==:', $rcontents);
+
+	            	$data = base64_decode(str_replace("In-Portal License File - do not edit!\n", "", $tmp_data[0]));
+					a83570933e44bc66b31dd7127cf3f23a($data);
 		            $ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));
 		            if($ValidLicense)
 		            {
 		                set_ini_value("Intechnic","License",base64_encode($data));
+	                	set_ini_value("Intechnic","LicenseCode",$tmp_data[1]);
 		                save_values();
 		                $state="domain_select";
 		                $got_license = 1;
 		            }
 		            else {
-		              $license_error="Invalid License File";				
+		              $license_error="Invalid License File";
 		            }
 			        if(!$ValidLicense)
 			        {
 			            $state="license";
-			        }						
-				}				
+			        }
+				}
 			}
 		}
-			
+
 	}
 	else if ($_POST['licenses'] == '') {
 		$state = "get_license";
 		$get_license_error = "Username and / or password not specified!!!";
-		$include_file = "install/get_license.php";
+		$include_file = $pathtoroot.$admin."/install/get_license.php";
 	}
 	else {
 		// Here we download license
-		$rfile = @fopen(GET_LICENSE_URL."?license_id=".md5($_POST['licenses'])."&dlog=".md5($_POST['dlog'])."&dpass=".md5($_POST['dpass'])."&domain=".$_POST['domain'], "r");
+		$rfile = @fopen(GET_LICENSE_URL."?license_id=".md5($_POST['licenses'])."&dlog=".md5($_POST['dlog'])."&dpass=".md5($_POST['dpass'])."&version=".GetMaxPortalVersion($pathtoroot.$admin)."&domain=".base64_encode($_POST['domain']), "r");
 		if (!$rfile) {
 			$get_license_error = "Unable to connect to the Intechnic server! Please try again later!";
 			$state = "get_license";
-			$include_file = "install/get_license.php";			
+			$include_file = $pathtoroot.$admin."/install/get_license.php";
 		}
 		else {
 			$rcontents = '';
@@ -748,65 +933,76 @@
 				$rcontents .= $line;
 			}
 			@fclose($rfile);
-			
+
 			if (substr($rcontents, 0, 5) == 'Error') {
 				$download_license_error = substr($rcontents, 6);
 				$state = "download_license";
-				$include_file = "install/download_license.php";					
+				$include_file = $pathtoroot.$admin."/install/download_license.php";
 			}
 			else {
-	            $data = base64_decode(str_replace("In-Portal License File - do not edit!\n", "", $rcontents));				
-	            inst_ParseLicense($data);
+				$tmp_data = explode('Code==:', $rcontents);
+
+	            $data = base64_decode(str_replace("In-Portal License File - do not edit!\n", "", $tmp_data[0]));
+	            a83570933e44bc66b31dd7127cf3f23a($data);
 	            $ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));
 	            if($ValidLicense)
 	            {
 	                set_ini_value("Intechnic","License",base64_encode($data));
+	                // old licensing script doen't return 2nd parameter (licanse code)
+	                if( isset($tmp_data[1]) ) set_ini_value("Intechnic","LicenseCode",$tmp_data[1]);
 	                save_values();
 	                $state="domain_select";
 	            }
 	            else {
-	              $license_error="Invalid License File";				
+	              $license_error="Invalid License File";
 	            }
 		        if(!$ValidLicense)
 		        {
 		            $state="license";
-		        }	            
-			}			
+		        }
+			}
 		}
 	}
 }
 
 if($state=="license_process")
 {
     $ValidLicense = FALSE;
-    switch($_POST["lic_opt"])
+    $tmp_lic_opt = GetVar('lic_opt', true);
+    switch($tmp_lic_opt)
     {
     case 1: /* download from intechnic */
-        $include_file = "install/get_license.php";
+        $include_file = $pathtoroot.$admin."/install/get_license.php";
         $state = "get_license";
     	//if(!$ValidLicense)
         //{
         //    $state="license";
         //}
     break;
-    case 2: /* upload file  */       
+    case 2: /* upload file  */
         $file = $_FILES["licfile"];
         if(is_array($file))
         {
             move_uploaded_file($file["tmp_name"],$pathtoroot."themes/tmp.lic");
+            @chmod($pathtoroot."themes/tmp.lic", 0666);
+
             $fp = @fopen($pathtoroot."themes/tmp.lic","rb");
             if($fp)
             {
                 $lic = fread($fp,filesize($pathtoroot."themes/tmp.lic"));
                 fclose($fp);
-            }      
-            $data = inst_LoadLicense(FALSE,$pathtoroot."themes/tmp.lic");
+            }
+
+            $tmp_data = ae666b1b8279502f4c4b570f133d513e(FALSE,$pathtoroot."themes/tmp.lic");
+            $data = $tmp_data[0];
+
             @unlink($pathtoroot."themes/tmp.lic");
-            inst_ParseLicense($data);
+            a83570933e44bc66b31dd7127cf3f23a($data);
             $ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));
             if($ValidLicense)
             {
                 set_ini_value("Intechnic","License",base64_encode($data));
+                set_ini_value("Intechnic","LicenseCode",$tmp_data[1]);
                 save_values();
                 $state="domain_select";
             }
@@ -822,10 +1018,10 @@
         if(strlen($g_License))
         {
             $lic = base64_decode($g_License);
-            inst_ParseLicense($lic);
+            a83570933e44bc66b31dd7127cf3f23a($lic);
             $ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));
             if($ValidLicense)
-            {            
+            {
                 $state="domain_select";
             }
             else
@@ -836,7 +1032,7 @@
         }
         else
         {
-            $state="license";            
+            $state="license";
             $license_error="Missing License File";
         }
         if(!$ValidLicense)
@@ -845,6 +1041,9 @@
         }
     break;
     case 4:
+       //set_ini_value("Intechnic","License",base64_encode("local"));
+       //set_ini_value("Intechnic","LicenseCode",base64_encode("local"));
+       //save_values();
        $state="domain_select";
     break;
     }
@@ -854,72 +1053,73 @@
 
 if($state=="license")
 {
-    $include_file = "install/sel_license.php";    
+    $include_file = $pathtoroot.$admin."/install/sel_license.php";
 
 }
 
 if($state=="reinstall")
 {
-    $ado = inst_GetADODBConnection();
-    
+    $ado =& inst_GetADODBConnection();
+
     $show_upgrade = false;
 
 	$sql = "SELECT Name FROM ".$g_TablePrefix."Modules";
 	$rs = $ado->Execute($sql);
-	
+
 	$modules = '';
 	while ($rs && !$rs->EOF) {
 		$modules .= strtolower($rs->fields['Name']).',';
 		$rs->MoveNext();
 	}
-	
+
 	$mod_arr = explode(",", substr($modules, 0, strlen($modules) - 1));
-	
+
     foreach($mod_arr as $p)
-    {        
+    {
     	if ($p == 'in-portal') {
     		$p = '';
-    	}    
-    	
+    	}
+
     	$dir_name = $pathtoroot.$p."/admin/install/upgrades/";
-    	$dir = @dir($dir_name);    	
+
+    	$dir = @dir($dir_name);
     	//echo "<pre>"; print_r($dir); echo "</pre>";
-    	
+
+    	if ($dir === false) continue;
+
     	while ($file = $dir->read()) {
 	        if ($file != "." && $file != ".." && !is_dir($dir_name.$file))
-	        { 
-	        	$file = str_replace("inportal_upgrade_v", "", $file);
-	        	$file = str_replace(".sql", "", $file);
-	        	
-	        	if ($file != '') {
-	        		if ($p == '') {
-	        			$p = 'in-portal';
-	        		}
+	        {
+	        	if( preg_match('/inportal_upgrade_v(.*).(php|sql)$/', $file, $rets) )
+	        	{
+	        		if($p == '') $p = 'in-portal';
+
 	        		$sql = "SELECT Version FROM ".$g_TablePrefix."Modules WHERE Name = '".$p."'";
 	        		$rs = $ado->Execute($sql);
-	        		
-	        		if (str_replace(".", "", $rs->fields['Version']) < str_replace(".", "", $file)) {
+
+	        		if( ConvertVersion($rs->fields['Version']) < ConvertVersion( $rets[1] ) )
+	        		{
 	        			$show_upgrade = true;
 	        		}
 	        	}
 	        }
-    	}    	
+    	}
     }
-    	
-    if ($install_type == '') {
+
+    if ( !isset($install_type) || $install_type == '') {
     	$install_type = 2;
-    }    
-    
-	$include_file = "install/reinstall.php";
+    }
+
+	$include_file = $pathtoroot.$admin."/install/reinstall.php";
 }
 
 if($state=="login")
-{    
+{
     $lic = base64_decode($g_License);
     if(strlen($lic))
     {
-            inst_ParseLicense($lic);
-            $ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));            
+            a83570933e44bc66b31dd7127cf3f23a($lic);
+            $ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));
     }
 
     if(!$ValidLicense)
@@ -932,44 +1132,58 @@
          $state = "domain_select";
       }
       else
-      {      
+      {
         $state="getuser";
         $login_error = "Invalid User Name or Password.  If you don't know your username or password, contact Intechnic Support";
       }
-   
+
     //die();
 }
 
 if($state=="getuser")
 {
-        $include_file = "install/login.php";
+        $include_file = $pathtoroot.$admin."/install/login.php";
 }
 
 if($state=="set_domain")
 {
-    if(!is_array($i_Keys))
+    if( !is_array($i_Keys) || !count($i_Keys) )
     {
         $lic = base64_decode($g_License);
         if(strlen($lic))
         {
-           inst_ParseLicense($lic);
-           $ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));            
+           a83570933e44bc66b31dd7127cf3f23a($lic);
+           $ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));
         }
     }
+
     if($_POST["domain"]==1)
     {
         $domain = $_SERVER['HTTP_HOST'];
-        set_ini_value("Intechnic","Domain",$domain);
-        save_values();
-        $state="runsql";
+
+        if (strstr($domain, $i_Keys[0]['domain']) || de3ec1b7a142cccd0d51f03d24280744($domain)) {
+        	set_ini_value("Intechnic","Domain",$domain);
+        	save_values();
+        	$state="runsql";
+        }
+        else {
+        	$DomainError = 'Domain name selected does not match domain name in the license!';
+        	$state = "domain_select";
+        }
     }
     else
     {
         $domain = str_replace(" ", "", $_POST["other"]);
         if ($domain != '') {
-        	set_ini_value("Intechnic","Domain",$domain);
-        	save_values();
-        	$state="runsql";
+        	if (strstr($domain, $i_Keys[0]['domain']) || de3ec1b7a142cccd0d51f03d24280744($domain)) {
+        		set_ini_value("Intechnic","Domain",$domain);
+        		save_values();
+        		$state="runsql";
+        	}
+	        else {
+	        	$DomainError = 'Domain name entered does not match domain name in the license!';
+	        	$state = "domain_select";
+	        }
         }
         else {
         	$DomainError = 'Please enter valid domain!';
@@ -985,41 +1199,47 @@
         $lic = base64_decode($g_License);
         if(strlen($lic))
         {
-           inst_ParseLicense($lic);
-           $ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));            
+           a83570933e44bc66b31dd7127cf3f23a($lic);
+           $ValidLicense = ((strlen($i_User)>0) && (strlen($i_Pswd)>0));
         }
     }
-  
-    $include_file = "install/domain.php";
+
+    $include_file = $pathtoroot.$admin."/install/domain.php";
 }
 
 
 if($state=="runsql")
-{    
-  $ado = inst_GetADODBConnection();
+{
+  $ado =& inst_GetADODBConnection();
   $installed = TableExists($ado,"ConfigurationAdmin,Category,Permissions");
   if(!$installed)
-  {  
-  		// create tables
+  {
+  		// run core install script
+  		K4_RunSQL('/core/install/install_schema.sql');
+		K4_RunSQL('/core/install/install_data.sql');
+  		K4_SetModuleVersion('Core');
+
+  		// run in-portal install script
   		$filename = $pathtoroot.$admin."/install/inportal_schema.sql";
       	RunSchemaFile($ado,$filename);
-		
-		// insert default info
       	$filename = $pathtoroot.$admin."/install/inportal_data.sql";
       	RunSQLFile($ado,$filename);
-      	
+
+      	$sql = 'UPDATE '.$g_TablePrefix.'ConfigurationValues SET VariableValue = %s WHERE VariableName = %s';
+      	$ado->Execute( sprintf($sql, $ado->qstr('portal@'.$ini_vars['Intechnic']['Domain']), $ado->qstr('Smtp_AdminMailFrom') ) );
+
       	$sql = "SELECT Version FROM ".$g_TablePrefix."Modules WHERE Name = 'In-Portal'";
       	$rs = $ado->Execute($sql);
-      	
+
       	set_ini_value("Module Versions", "In-Portal", $rs->fields['Version']);
       	save_values();
-      	
+
       	require_once $pathtoroot.'kernel/include/tag-class.php';
         if( !is_object($objTagList) ) $objTagList = new clsTagList();
-      	
+
       	// install kernel specific tags
       	$objTagList->DeleteTags(); // delete all existing tags in db
-    	 
+
     	// create 3 predifined tags (because there no functions with such names
     	$t = new clsTagFunction();
     	$t->Set("name","include");
@@ -1028,23 +1248,23 @@
     	$t->AddAttribute("_template","tpl","Template to insert","",TRUE);
     	$t->AddAttribute("_supresserror","bool","Supress missing template errors","",FALSE);
     	$t->AddAttribute("_dataexists","bool","Only include template output if content exists (content is defined by the tags in the template)","",FALSE);
-    	$t->AddAttribute("_nodatatemplate","tpl","Template to include if the nodataexists condition is true","",FALSE);    
+    	$t->AddAttribute("_nodatatemplate","tpl","Template to include if the nodataexists condition is true","",FALSE);
 		unset($t);
-		
+
     	$t = new clsTagFunction();
     	$t->Set("name","perm_include");
     	$t->Set("description","insert template output into the current template if permissions are set");
     	$t->Create();
     	$t->AddAttribute("_template","tpl","Template to insert","",TRUE);
     	$t->AddAttribute("_noaccess","tpl","Template to insert if access is denied","",FALSE);
     	$t->AddAttribute("_permission","","Comma-separated list of permissions, any of which will grant access","",FALSE);
-    	$t->AddAttribute("_module","","Used in place of the _permission attribute, this attribute verifies the module listed is enabled","",FALSE);   
-    	$t->AddAttribute("_system","bool","Must be set to true if any permissions in _permission list is a system permission","",FALSE);    
+    	$t->AddAttribute("_module","","Used in place of the _permission attribute, this attribute verifies the module listed is enabled","",FALSE);
+    	$t->AddAttribute("_system","bool","Must be set to true if any permissions in _permission list is a system permission","",FALSE);
     	$t->AddAttribute("_supresserror","bool","Supress missing template errors","",FALSE);
-    	$t->AddAttribute("_dataexists","bool","Only include template output if content exists (content is defined by the tags in the template)","",FALSE);    
-    	$t->AddAttribute("_nodatatemplate","tpl","Template to include if the nodataexists condition is true","",FALSE);        
+    	$t->AddAttribute("_dataexists","bool","Only include template output if content exists (content is defined by the tags in the template)","",FALSE);
+    	$t->AddAttribute("_nodatatemplate","tpl","Template to include if the nodataexists condition is true","",FALSE);
 		unset($t);
-		
+
     	$t = new clsTagFunction();
     	$t->Set("name","mod_include");
     	$t->Set("description","insert templates from all enabled modules.  No error occurs if the template does not exist.");
@@ -1053,26 +1273,22 @@
     	$t->AddAttribute("_modules","","Comma-separated list of modules.  Defaults to all enabled modules if not set","",FALSE);
     	$t->AddAttribute("_supresserror","bool","Supress missing template errors","",FALSE);
     	$t->AddAttribute("_dataexists","bool","Only include template output if content exists (content is defined by the tags in the template)","",FALSE);
-    	$t->AddAttribute("_nodatatemplate","tpl","Template to include if the nodataexists condition is true","",FALSE);        
-      	
+    	$t->AddAttribute("_nodatatemplate","tpl","Template to include if the nodataexists condition is true","",FALSE);
+
       	$objTagList->ParseFile($pathtoroot.'kernel/parser.php'); // insert module tags
-      	
+
       	if( is_array($ItemTagFiles) )
     		foreach($ItemTagFiles as $file)
 				$objTagList->ParseItemFile($pathtoroot.$file);
-      	
+
        	$state="RootPass";
   }
   else {
-  	  $include_file = "install/install_finish.php";
+  	  $include_file = $pathtoroot.$admin."/install/install_finish.php";
       $state="finish";
   }
 }
 
-if ($state == "finish") {
-	$include_file = "install/install_finish.php";
-}
-
 if($state=="RootSetPass")
 {
   $pass = $_POST["RootPass"];
@@ -1086,235 +1302,186 @@
   	  $PassError = "Passwords does not match";
   	  $state = "RootPass";
   }
-  else 
+  else
   {
-  	  $pass = md5($pass);
-      $sql = "UPDATE ".$g_TablePrefix."ConfigurationValues SET VariableValue = '$pass' WHERE VariableName='RootPass' OR VariableName='RootPassVerify'";
-      $ado = inst_GetADODBConnection();
+  	  $pass = md5(md5($pass).'b38');
+      $sql = '	UPDATE '.$g_TablePrefix.'ConfigurationValues
+      			SET VariableValue = '.$ado->qstr($pass).'
+      			WHERE VariableName = "RootPass";';
+      $ado =& inst_GetADODBConnection();
       $ado->Execute($sql);
       $state="modselect";
   }
 }
 
 if($state=="RootPass")
 {
-    $include_file = "install/rootpass.php";
+    $include_file = $pathtoroot.$admin."/install/rootpass.php";
 }
 
 if($state=="lang_install_init")
 {
-  include_once($pathtoroot."kernel/include/xml.php");
 
-  $ado = inst_GetADODBConnection();
-  
-  if (TableExists($ado, "Language,Phrase")) {
-	  $MaxInserts = 200;
-	  $PhraseTable = GetTablePrefix()."ImportPhrases";
-	  $EventTable = GetTablePrefix()."ImportEvents";
-	
-	  $sql = "CREATE TABLE $PhraseTable SELECT Phrase,Translation,PhraseType,LanguageId FROM ".GetTablePrefix()."Phrase WHERE PhraseId=-1";
-	  $ado->Execute($sql);
-	
-	  $sql = "CREATE TABLE $EventTable SELECT Template,MessageType,EventId,LanguageId FROM ".GetTablePrefix()."EmailMessage WHERE EmailMessageId=-1";
-	  $ado->Execute($sql);          	 
-	  $sql = "SELECT EventId,Event,Type FROM ".GetTablePrefix()."Events";
-	  $rs = $ado->Execute($sql);
-	  $Events = array();
-	  while($rs && !$rs->EOF)
-	  {
-	    $Events[$rs->fields["Event"]."_".$rs->fields["Type"]] = $rs->fields["EventId"];		
-		$rs->MoveNext();
-	  }			 
-	  
-	  if(count($_POST["lang"])>0)
-	  {
-	      $Langs = $_POST["lang"];
-	      for($x=0;$x<count($Langs);$x++)
-	      {
-	      	 $lang = $Langs[$x];
-	      	 $p = $pathtoroot.$admin."/install/langpacks/".$lang;
-	         /* parse xml file */
-	         $fp = fopen($p,"r");
-	         $xml = fread($fp,filesize($p));
-	         fclose($fp);
-	         unset($objInXML);
-			 $objInXML = new xml_doc($xml);
-			 $objInXML->parse();      	
-				 
-			 $objInXML->getTag(0,$name,$attribs,$contents,$tags);
-				 
-			 if(is_array($tags))
-			 {
-			 	foreach($tags as $t)
-			 	{
-			 		$LangRoot =& $objInXML->getTagByID($t);
-			 		$PackName = $LangRoot->attributes["PACKNAME"];			 
-			 		$l = $objLanguages->GetItemByField("PackName",$PackName);
-			 		if(is_object($l))
-			 		{
-			 			$LangId = $l->Get("LanguageId");
-			 		}
-			 		else
-			 		{
-			 			$l = new clsLanguage();
-			 			$l->Set("Enabled",1);
-			 			$l->Create();
-			 			$NewLang = TRUE;
-			 			$LangId = $l->Get("LanguageId");
-			 		}
-					foreach($LangRoot->children as $tag)
-					{
-	  					switch($tag->name)
-	  					{
-	  					case "PHRASES":
-	  	  					foreach($tag->children as $PhraseTag)
-	  	  					{	  		
-	  							$Phrase = $PhraseTag->attributes["LABEL"];
-	  							$Translation = base64_decode($PhraseTag->contents);
-	  							$PhraseType = $PhraseTag->attributes["TYPE"];  	
-	  							$psql = "INSERT INTO $PhraseTable (Phrase,Translation,PhraseType,LanguageId) VALUES ('$Phrase','$Translation',$PhraseType,$LangId)";
-	  							$ado->Execute($psql);
-	  								//echo "$psql <br>\n";  	  						
-	  	  					}
-	  					break;
-	  					case "DATEFORMAT":
-	  						$DateFormat = $tag->contents;
-	  					break;
-	  					case "TIMEFORMAT":
-	  						$TimeFormat = $tag->contents;
-	  					break;
-	  					case "DECIMAL":
-	  						$Decimal = $tag->contents;
-	  					break;
-	  					case "THOUSANDS":
-	  						$Thousands = $tag->contents;
-	  					break;
-	  					case "EVENTS":
-	  	  					foreach($tag->children as $EventTag)
-	  	  					{
-	  	  						$event = $EventTag->attributes["EVENT"];
-	  	  						$MsgType = strtolower($EventTag->attributes["MESSAGETYPE"]);
-	  	  						$template = base64_decode($EventTag->contents);
-	  	  						$Type = $EventTag->attributes["TYPE"];
-	  	  						$EventId = $Events[$event."_".$Type];
-	  	  							
-	  	  						$esql = "INSERT INTO $EventTable (Template,MessageType,EventId,LanguageId) VALUES ('$template','$MsgType',$EventId,$LangId)";
-	  	  						$ado->Execute($esql);
-	  	  							//echo htmlentities($esql)."<br>\n";  	  						
-	  	  					}
-	  	  				break;		
-	  					}  		  
-	  					if($NewLang)
-	  					{
-	  						$l->Set("PackName",$PackName);
-	  						$l->Set("LocalName",$PackName);
-	  						$l->Set("DateFormat",$DateFormat);
-	  						$l->Set("TimeFormat",$TimeFormat);
-	  						$l->Set("DecimalPoint",$Decimal);
-	  						$l->Set("ThousandSep",$Thousands);
-	  						$l->Update();	
-	  					}
-					}				
-			 	}
-			 }
-			 
-	      }
-	      $state="lang_install";
-	  }
-	  else {
-	  	$state="lang_select";  
-	  }
-  }
-  else {
-  	$general_error = 'Database error! No language tables found!';
-  }
+	$ado =& inst_GetADODBConnection();
+
+	if( TableExists($ado, 'Language,Phrase') )
+	{
+		// KERNEL 4 INIT: BEGIN
+		define('FULL_PATH', realpath(dirname(__FILE__).'/..'));
+		include_once(FULL_PATH.'/core/kernel/startup.php');
+
+		$application =& kApplication::Instance();
+		$application->Init();
+		// KERNEL 4 INIT: END
+
+		$lang_xml =& $application->recallObject('LangXML');
+
+		if (defined('DBG_FAST_INSTALL') && DBG_FAST_INSTALL) {
+			$lang_xml->tables['phrases'] = TABLE_PREFIX.'Phrase';
+			$lang_xml->tables['emailmessages'] = TABLE_PREFIX.'EmailMessage';
+		}
+		else {
+			$lang_xml->renameTable('phrases', TABLE_PREFIX.'ImportPhrases');
+			$lang_xml->renameTable('emailmessages', TABLE_PREFIX.'ImportEvents');
+		}
+
+		$lang_xml->lang_object->TableName = $application->getUnitOption('lang','TableName');
+
+		$languages = $application->GetVar('lang');
+		if($languages)
+		{
+			$kernel_db =& $application->GetADODBConnection();
+			$modules_table = $application->getUnitOption('mod','TableName');
+
+			$modules = $kernel_db->GetCol('SELECT Path, Name FROM '.$modules_table, 'Name');
+			$modules['In-Portal'] = '';
+
+			foreach($languages as $lang_file)
+			{
+				foreach($modules as $module_name => $module_folder)
+				{
+					$lang_path = MODULES_PATH.'/'.$module_folder.'admin/install/langpacks';
+					$lang_xml->Parse($lang_path.'/'.$lang_file, '|0|1|2|', '');
+					if($force_finish) $lang_xml->lang_object->Update();
+				}
+			}
+
+			if (defined('DBG_FAST_INSTALL') && DBG_FAST_INSTALL) {
+				$state = 'lang_default';
+			}
+			else {
+				$state = 'lang_install';
+			}
+		}
+		else
+		{
+			$state = 'lang_select';
+		}
+
+		$application->Done();
+	}
+	else
+	{
+		$general_error = 'Database error! No language tables found!';
+	}
 }
 
 if($state=="lang_install")
 {
-  /* do pack install */	
-  $Offset = (int)$_GET["Offset"];
-  $Status = (int)$_GET["Status"];
-  $PhraseTable = GetTablePrefix()."ImportPhrases";
-  $EventTable = GetTablePrefix()."ImportEvents";
-  if($Status==0)
-  {
-    $Total = TableCount($PhraseTable,"",0);
-  }
-  else
-  {
-  	$Total = TableCount($EventTable,"",0);
-  }
-  
-  if($Status==0)
-  { 
-    	$Offset = $objLanguages->ReadImportTable($PhraseTable, 1,"0,1,2",TRUE,200,$Offset);
-  		if($Offset>=$Total)
-  		{    	
-    		$Offset=0;
-    		$Status=1;        			
-    	}
-    	
-    	if ($_POST['next_step']) {
-    		$next_step = $_POST['next_step'];
-    	}
-    	else if ($_GET['next_step']) {
-    		$next_step = $_GET['next_step'];
-    	}
-    	
+	define('FORCE_CONFIG_CACHE', 1);
+	/* do pack install */
+	$Offset = (int)$_GET["Offset"];
+	$Status = (int)$_GET["Status"];
+
+	$PhraseTable = $g_TablePrefix."ImportPhrases";
+  	$EventTable = $g_TablePrefix."ImportEvents";
+
+	$Total = TableCount($Status == 0 ? $PhraseTable : $EventTable, '', 0);
+
+	if($Status == 0)
+	{
+		$Offset = $objLanguages->ReadImportTable($PhraseTable, 1,"0,1,2", $force_finish ? false : true, 200,$Offset);
+		if($Offset >= $Total)
+		{
+			$Offset=0;
+			$Status=1;
+		}
+
+		$next_step = GetVar('next_step', true);
+
+		if($force_finish == true) $next_step = 3;
 		$NextUrl = $_SERVER['PHP_SELF']."?Offset=$Offset&Status=$Status&state=lang_install&next_step=$next_step&install_type=$install_type";
-		$include_file = "install/lang_run.php";
-  }
-  else 
-  {
-  	  if(!is_object($objMessageList))
-  	    $objMessageList = new clsEmailMessageList();
-  	    
-  	    
-  	  $Offset = $objMessageList->ReadImportTable($EventTable,TRUE,100,$Offset);
-  	  
-  	  if($Offset>$Total)
-  	  {
-    	if ($_POST['next_step']) {
-    		$next_step = $_POST['next_step'];
-    	}
-    	else if ($_GET['next_step']) {
-    		$next_step = $_GET['next_step'];
-    	}  	  	
-  	  	$NextUrl = $_SERVER['PHP_SELF']."?Offset=$Offset&Status=$Status&State=lang_install&next_step=$next_step&install_type=$install_type";
-  	  	$include_file = "install/lang_run.php";
-  	  }
-  	  else
-  	    $state="lang_default";
-  }
+		if($force_finish == true) $NextUrl .= '&ff=1';
+		$include_file = $pathtoroot.$admin."/install/lang_run.php";
+	}
+	else
+	{
+		if(!is_object($objMessageList))
+		$objMessageList = new clsEmailMessageList();
+
+		$Offset = $objMessageList->ReadImportTable($EventTable, $force_finish ? false : true,300,$Offset);
+
+		if($Offset > $Total)
+		{
+			$next_step = GetVar('next_step', true);
+
+			if($force_finish == true) $next_step = 3;
+			$NextUrl = $_SERVER['PHP_SELF']."?Offset=$Offset&Status=$Status&State=lang_install&next_step=$next_step&install_type=$install_type";
+			if($force_finish == true) $NextUrl .= '&ff=1';
+			$include_file = $pathtoroot.$admin."/install/lang_run.php";
+		}
+		else
+		{
+			$db =& GetADODBConnection();
+			$prefix = $g_TablePrefix;
+			$db->Execute('DROP TABLE IF EXISTS '.$PhraseTable);
+			$db->Execute('DROP TABLE IF EXISTS '.$EventTable);
+
+			if(!$force_finish)
+			{
+				$state = 'lang_default';
+			}
+			else
+			{
+				$_POST['next_step'] = 4;
+				$state = 'finish';
+				$include_file = $pathtoroot.$admin."/install/install_finish.php";
+			}
+		}
+	}
 }
 
 if($state=="lang_default_set")
 {
 //	phpinfo(INFO_VARIABLES);
-    $ado = inst_GetADODBConnection();
+    /*$ado =& inst_GetADODBConnection();
   	$PhraseTable = GetTablePrefix()."ImportPhrases";
-  	$EventTable = GetTablePrefix()."ImportEvents";    
-	$ado->Execute("DROP TABLE $PhraseTable");
-	$ado->Execute("DROP TABLE $EventTable");
-    
+  	$EventTable = GetTablePrefix()."ImportEvents";
+	$ado->Execute("DROP TABLE IF EXISTS $PhraseTable");
+	$ado->Execute("DROP TABLE IF EXISTS $EventTable");*/
+
 	$Id = $_POST["lang"];
-	
+
 	$objLanguages->SetPrimary($Id);
-	$state="postconfig_1";	
+	if (defined('DBG_FAST_INSTALL')) {
+		$state = 'theme_sel';
+	}
+	else {
+		$state="postconfig_1";
+	}
 }
 
 if($state=="lang_default")
 {
 	$Packs = Array();
 	$objLanguages->Clear();
-	
+
 	$objLanguages->LoadAllLanguages();
 	foreach($objLanguages->Items as $l)
 	{
 		$Packs[$l->Get("LanguageId")] = $l->Get("PackName");
 	}
-	$include_file = "install/lang_default.php";	
+	$include_file = $pathtoroot.$admin."/install/lang_default.php";
 }
 
 
@@ -1324,64 +1491,64 @@
     $doms = $_POST["domain"];
     if(is_array($doms))
     {
-        $ado = inst_GetADODBConnection();
+        $ado =& inst_GetADODBConnection();
         require_once $pathtoroot.'kernel/include/tag-class.php';
-        if( !is_object($objTagList) ) $objTagList = new clsTagList();
+        if( !isset($objTagList) || !is_object($objTagList) ) $objTagList = new clsTagList();
         foreach($doms as $p)
         {
-            $filename = $pathtoroot.$p."/admin/install.php";
-            if(file_exists($filename))
+        	$filename = $pathtoroot.$p.'/admin/install.php';
+            if(file_exists($filename) )
             {
                 include($filename);
             }
         }
-        
+
     }
-    
-    $sql = "SELECT Name FROM ".GetTablePrefix()."Modules";
+
+/*    $sql = "SELECT Name FROM ".GetTablePrefix()."Modules";
     $rs = $ado->Execute($sql);
-    
+
     while($rs && !$rs->EOF)
     {
         $p = $rs->fields['Name'];
     	$mod_name = strtolower($p);
-        
+
     	if ($mod_name == 'in-portal') {
     		$mod_name = '';
     	}
-    	
+
     	$dir_name = $pathtoroot.$mod_name."/admin/install/upgrades/";
-    	$dir = @dir($dir_name); 
-    	
+    	$dir = @dir($dir_name);
+
     	$new_version = '';
     	$tmp1 = 0;
     	$tmp2 = 0;
     	while ($file = $dir->read()) {
 	        if ($file != "." && $file != ".." && !is_dir($dir_name.$file))
-	        { 
+	        {
 	        	$file = str_replace("inportal_upgrade_v", "", $file);
 	        	$file = str_replace(".sql", "", $file);
-	        	
-	        	if ($file != '') {
-	        		$tmp1 = str_replace(".", "", $file);	        		
+
+	        	if ($file != '' && !strstr($file, 'changelog') && !strstr($file, 'readme')) {
+	        		$tmp1 = str_replace(".", "", $file);
 	        		if ($tmp1 > $tmp2) {
 	        			$new_version = $file;
 	        		}
 	        	}
 	        }
 	        $tmp2 = $tmp1;
     	}
-	        		    		
-    	
+
+
     	$version_nrs = explode(".", $new_version);
-    	
+
     	for ($i = 0; $i < $version_nrs[0] + 1; $i++) {
     		for ($j = 0; $j < $version_nrs[1] + 1; $j++) {
     			for ($k = 0; $k < $version_nrs[2] + 1; $k++) {
     				$try_version = "$i.$j.$k";
-    				
+
 			    	$filename = $pathtoroot.$mod_name."/admin/install/upgrades/inportal_upgrade_v$try_version.sql";
-			        
+
 			        if(file_exists($filename))
 			       	{
 			    		RunSQLFile($ado, $filename);
@@ -1391,19 +1558,13 @@
     			}
     		}
     	}
-    	
+
     	$rs->MoveNext();
-    }    
-    
+    }
+*/
     $state="lang_select";
 }
 
-if($state=="lang_select")
-{
-	$Packs = GetLanguageList();
-	$include_file = "install/lang_select.php";
-}
-
 if($state=="modselect")
 {
  /* /admin/install.php */
@@ -1412,11 +1573,11 @@
     $sitepath = $pathguess;
     $esc_path = str_replace("\\","/",$pathtoroot);
     $esc_path = str_replace("/","\\",$esc_path);
-    //set_ini_value("Site","DomainName",$_SERVER["SERVER_NAME"]);
-    //$g_DomainName= $_SERVER["SERVER_NAME"];
+    //set_ini_value("Site","DomainName",$_SERVER["HTTP_HOST"]);
+    //$g_DomainName= $_SERVER["HTTP_HOST"];
     save_values();
 
-    $ado = inst_GetADODBConnection();
+    $ado =& inst_GetADODBConnection();
     if(substr($sitepath,0,1)!="/")
         $sitepath="/".$sitepath;
     if(substr($sitepath,-1)!="/")
@@ -1426,40 +1587,64 @@
     $ado->Execute($sql);
     $sql = "UPDATE ".$g_TablePrefix."ConfigurationValues SET VariableValue = '$g_Domain' WHERE VariableName='Server_Name'";
     $ado->Execute($sql);
-    $Modules = inst_GetModuleList();
-    $include_file = "install/modselect.php";
+    $sql = "UPDATE ".$g_TablePrefix."ConfigurationValues SET VariableValue = '".$_SERVER['DOCUMENT_ROOT'].$sitepath."admin/backupdata' WHERE VariableName='Backup_Path'";
+    $ado->Execute($sql);
+    $Modules = a48d819089308a9aeb447e7248b2587f();
+
+    if (count($Modules) > 0) {
+    	$include_file = $pathtoroot.$admin."/install/modselect.php";
+    }
+    else {
+    	$state = "lang_select";
+    	$skip_step = true;
+    }
 }
 
+if($state=="lang_select")
+{
+	$Packs = GetLanguageList();
+	$include_file = $pathtoroot.$admin."/install/lang_select.php";
+}
+
 if(substr($state,0,10)=="postconfig")
 {
     $p = explode("_",$state);
     $step = $p[1];
-    
+
     if ($_POST['Site_Path'] != '') {
-		//echo "ok<br>";
-    	$rfile = @fopen(GET_LICENSE_URL."?url=".base64_encode($_SERVER['SERVER_NAME'].$_POST['Site_Path'])."&domain=".md5($_SERVER['SERVER_NAME']), "r");
+		$sql = "SELECT Name, Version FROM ".$g_TablePrefix."Modules";
+		$rs = $ado->Execute($sql);
+
+		$modules_str = '';
+		while ($rs && !$rs->EOF) {
+			$modules_str .= $rs->fields['Name'].' ('.$rs->fields['Version'].'),';
+			$rs->MoveNext();
+		}
+
+		$modules_str = substr($modules_str, 0, strlen($modules_str) - 1);
+		$rfile = @fopen(GET_LICENSE_URL."?url=".base64_encode($_SERVER['HTTP_HOST'].$_POST['Site_Path'])."&modules=".base64_encode($modules_str)."&license_code=".base64_encode($g_LicenseCode)."&version=".GetMaxPortalVersion($pathtoroot.$admin)."&domain=".md5($_SERVER['HTTP_HOST']), "r");
 		if (!$rfile) {
-			$get_license_error = "Unable to connect to the Intechnic server! Please try again later!";
-			$state = "postconfig_1";
-			$include_file = "install/postconfig.php";			
+			//$get_license_error = "Unable to connect to the Intechnic server! Please try again later!";
+			//$state = "postconfig_1";
+			//$include_file = $pathtoroot.$admin."/install/postconfig.php";
 		}
-		else {	
+		else {
 			$rcontents = '';
 			while (!feof($rfile)) {
 				$line = fgets($rfile, 10000);
 				$rcontents .= $line;
 			}
 			@fclose($rfile);
 		}
-			
-    }    
 
+    }
+
     if(strlen($_POST["oldstate"])>0)
     {
       $s = explode("_",$_POST["oldstate"]);
       $oldstep = $s[1];
       if($oldstep<count($configs))
-      {      
+      {
           $section = $configs[$oldstep];
           $module = $mods[$oldstep];
           $title = $titles[$oldstep];
@@ -1472,32 +1657,32 @@
     $title = $titles[$step];
 
     $step++;
-        	
+
     if($step <= count($configs)+1)
     {
-         $include_file = "install/postconfig.php";
+         $include_file = $pathtoroot.$admin."/install/postconfig.php";
     }
     else
-        $state = "theme_sel";       
+        $state = "theme_sel";
 }
 
 if($state=="theme_sel")
 {
-    $objThemes->CreateMissingThemes();
-    $include_file = "install/theme_select.php";
+    $objThemes->CreateMissingThemes(true);
+    $include_file = $pathtoroot.$admin."/install/theme_select.php";
 }
 
 if($state=="theme_set")
 {
-    ## get & define Non-Blocking & Blocking versions ## 
+    ## get & define Non-Blocking & Blocking versions ##
 	$blocking_sockets = minimum_php_version("4.3.0")? 0 : 1;
-	
-	$ado = inst_GetADODBConnection();
+
+	$ado =& inst_GetADODBConnection();
     $sql = "UPDATE ".$g_TablePrefix."ConfigurationValues SET VariableValue = '$blocking_sockets' WHERE VariableName='SocketBlockingMode'";
     $ado->Execute($sql);
-    ## get & define Non-Blocking & Blocking versions ## 
+    ## get & define Non-Blocking & Blocking versions ##
 
-	
+
 	$theme_id = $_POST["theme"];
     $pathchar="/";
     //$objThemes->SetPrimaryTheme($theme_id);
@@ -1506,14 +1691,35 @@
     $t->Set("PrimaryTheme",1);
     $t->Update();
     $t->VerifyTemplates();
-	$include_file = "install/install_finish.php";    
+	$include_file = $pathtoroot.$admin."/install/install_finish.php";
     $state="finish";
 }
 
 if ($state == "adm_login") {
+	$ado =& inst_GetADODBConnection();
+	$sql = 'UPDATE '.TABLE_PREFIX.'UserSession
+			SET LastAccessed = 0
+			WHERE PortalUserId IN (0,-2)';
+	$ado->Execute($sql);
+	
 	echo "<script>window.location='index.php';</script>";
 }
 
+if ($state == "finish") {
+    $ado =& inst_GetADODBConnection();
+  	$PhraseTable = $g_TablePrefix."ImportPhrases";
+  	$EventTable = $g_TablePrefix."ImportEvents";
+	$ado->Execute("DROP TABLE IF EXISTS $PhraseTable");
+	$ado->Execute("DROP TABLE IF EXISTS $EventTable");
+	$ado->Execute('INSERT INTO '.$g_TablePrefix.'Cache (VarName, Data) VALUES (\'ForcePermCacheUpdate\', \'1\')');
+
+	$include_file = $pathtoroot.$admin."/install/install_finish.php";
+}
+
+// init variables
+$vars = Array('db_error','restore_error','PassError','DomainError','login_error','inst_error');
+foreach($vars as $var_name) ReSetVar($var_name);
+
 switch($state)
 {
 case "modselect":
@@ -1526,14 +1732,19 @@
     $help = "<p>A Configuration file has been detected on your system and it appears In-Portal is correctly installed.  ";
     $help .="In order to work with the maintenance functions provided to the left you must provide the Intechnic ";
     $help .="Username and Password you used when obtaining the license file residing on the server, or your admin Root password. ";
-    $help .=" <i>(Use Username 'root' if using your root password)</i></p>";         
+    $help .=" <i>(Use Username 'root' if using your root password)</i></p>";
     $help .= "<p>To removing your existing database and start with a fresh installation, select the first option ";
     $help .= "provided.  Note that this operation cannot be undone and no backups are made! Use at your own risk.</p>";
     $help .="<p>If you wish to scrap your current installation and install to a new location, choose the second option. ";
     $help .="If this option is selected you will be prompted for new database configuration information.</p>";
     $help .="<p>The <i>Update License Information</i> option is used to update your In-Portal license data.  Select this option if you have ";
     $help .="modified your licensing status with Intechnic, or you have received new license data via email</p>";
+    $help .="<p>The <i>Fix Paths</i> option should be used when the location of the In-portal files has changed. For example, if you moved them from one folder to another. It will update all settings and ensure the program is operational at the new location.</p>";
 break;
+case "fix_paths":
+	$title = "Fix Paths";
+	$help = "<p>The <i>Fix Paths</i> option should be used when the location of the In-portal files has changed. For example, if you moved them from one folder to another. It will update all settings and ensure the program is operational at the new location.<p>";
+break;
 case "RootPass":
     $title = "Set Admin Root Password";
     $help = "<p>The Root Password is initially required to access the admin sections of In-Portal. ";
@@ -1544,6 +1755,7 @@
     $title = "Thank You!";
     $help ="<P>Thanks for using In-Portal!  Be sure to visit <A TARGET=\"_new\" HREF=\"http://www.in-portal.net\">www.in-portal.net</A> ";
     $help.=" for the latest news, module releases and support. </p>";
+    $help.="<p>*Make sure to clean your browser' cache after upgrading In-portal version</p>";
 break;
 case "license":
     $title = "License Configuration";
@@ -1558,7 +1770,7 @@
     $title="Select Licensed Domain";
     $help ="<p>Select the domain you wish to configure In-Portal for.  The <i>Other</i> option ";
     $help.=" can be used to configure In-Portal for use on a local domain.</p>";
-    $help.="<p>For local domains, enter the hostname or LAN IP Address of the machine running In-Portal.</p>"; 
+    $help.="<p>For local domains, enter the hostname or LAN IP Address of the machine running In-Portal.</p>";
 break;
 case "db_reconfig":
 case "dbinfo":
@@ -1639,18 +1851,13 @@
 break;
 }
 
-if ($_POST['next_step']) {
-	$tmp_step = $_POST['next_step'];
-}
-else if ($_GET['next_step']) {
-	$tmp_step = $_GET['next_step'];
-}
+$tmp_step = GetVar('next_step', true);
 
 if (!$tmp_step) {
 	$tmp_step = 1;
 }
 
-if ($got_license == 1) {
+if ( isset($got_license) && $got_license == 1) {
 	$tmp_step++;
 }
 
@@ -1668,7 +1875,7 @@
 	$title = '';
 	$help = '';
     $filename = $pathtoroot.$admin."/install/inportal_remove.sql";
-    RunSQLFile($ado,$filename);	
+    RunSQLFile($ado,$filename);
 	$general_error = 'Unexpected installation error! <br /><br />Installation has been stopped!';
 }
 
@@ -1695,15 +1902,20 @@
 if ($state == "warning") {
 	$tmp_step--;
 	$next_step = $tmp_step + 1;
-}	
+}
+
+if ($skip_step) {
+	$tmp_step++;
+	$next_step = $tmp_step + 1;
+}
 ?>
-	
+
 	<tr height="100%">
 		<td valign="top">
 			<table cellpadding=10 cellspacing=0 border=0 width="100%" height="100%">
 				<tr valign="top">
 					<td style="width: 200px; background: #009ff0 url(images/bg_install_menu.gif) no-repeat bottom right; border-right: 1px solid #000">
-				    <img src="images/spacer.gif" width="180" height="1" border="0" alt=""><br>
+				    <img src="images/spacer.gif" width="180" height="1" border="0" title=""><br>
 				    <span class="admintitle-white">Installation</span>
 				    <!--<ol class="install">
 				    	<li class="current">Licence Verification
@@ -1713,18 +1925,21 @@
 				    	<li>Integrity Check
 				    </ol>
 					</td>-->
-				    <?php if ($general_error == '') { ?>
+				    <?php
+				    $lic_opt = isset($_POST['lic_opt']) ? $_POST['lic_opt'] : false;
+				    if ($general_error == '') {
+				    ?>
 					    <?php if ($install_type == 1) { ?>
 							<ol class="install">
 					    		<li <?php if ($tmp_step == 1) { ?>class="current"<?php } ?>>Database Configuration
-					    		<li <?php if ($tmp_step == 2 || $_POST['lic_opt'] == 1) { ?>class="current"<?php } ?>>Select License
-					    		<li <?php if ($tmp_step == 3 && $_POST['lic_opt'] != 1) { ?>class="current"<?php } ?>>Select Domain
+					    		<li <?php if ($tmp_step == 2 || $lic_opt == 1) { ?>class="current"<?php } ?>>Select License
+					    		<li <?php if ($tmp_step == 3 && $lic_opt != 1) { ?>class="current"<?php } ?>>Select Domain
 					    		<li <?php if ($tmp_step == 4 ) { ?>class="current"<?php } ?>>Set Root Password
 					    		<li <?php if ($tmp_step == 5) { ?>class="current"<?php } ?>>Select Modules to Install
 					    		<li <?php if ($tmp_step == 6) { ?>class="current"<?php } ?>>Install Language Packs
 					    		<li <?php if ($tmp_step == 7) { ?>class="current"<?php } ?>>Post-Install Configuration
 					    		<li <?php if ($tmp_step == 8) { ?>class="current"<?php } ?>>Finish
-					    	</ol>				    
+					    	</ol>
 					    <?php } else if ($install_type == 2) { ?>
 							<ol class="install">
 					    		<li <?php if ($tmp_step == 1 || $login_error != '' || $inst_error != '') { ?>class="current"<?php } ?>>License Verification
@@ -1735,7 +1950,7 @@
 					    		<li <?php if ($tmp_step == 6) { ?>class="current"<?php } ?>>Install Language Packs
 					    		<li <?php if ($tmp_step == 7) { ?>class="current"<?php } ?>>Post-Install Configuration
 					    		<li <?php if ($tmp_step == 8) { ?>class="current"<?php } ?>>Finish-->
-					    	</ol>				    				    
+					    	</ol>
 					    <?php } else if ($install_type == 3) { ?>
 							<ol class="install">
 								<li>License Verification
@@ -1747,55 +1962,62 @@
 					    		<li <?php if ($tmp_step == 7) { ?>class="current"<?php } ?>>Install Language Packs
 					    		<li <?php if ($tmp_step == 8) { ?>class="current"<?php } ?>>Post-Install Configuration
 					    		<li <?php if ($tmp_step == 9) { ?>class="current"<?php } ?>>Finish
-					    	</ol>				    				    
+					    	</ol>
 					    <?php } else if ($install_type == 4) { ?>
 							<ol class="install">
 					    		<li <?php if ($tmp_step == 1 || $login_error != '' || $inst_error != '') { ?>class="current"<?php } ?>>License Verification
-					    		<li <?php if (($tmp_step == 2 && $login_error == '' && $inst_error == '') || $_POST['lic_opt'] == 1) { ?>class="current"<?php } ?>>Select License
+					    		<li <?php if (($tmp_step == 2 && $login_error == '' && $inst_error == '') || $lic_opt == 1) { ?>class="current"<?php } ?>>Select License
 					    		<li <?php if ($tmp_step == 3 && $_POST['lic_opt'] != 1) { ?>class="current"<?php } ?>>Select Domain
 					    		<li <?php if ($tmp_step == 4) { ?>class="current"<?php } ?>>Set Root Password
 					    		<li <?php if ($tmp_step == 5) { ?>class="current"<?php } ?>>Select Modules to Install
 					    		<li <?php if ($tmp_step == 6) { ?>class="current"<?php } ?>>Install Language Packs
 					    		<li <?php if ($tmp_step == 7) { ?>class="current"<?php } ?>>Post-Install Configuration
 					    		<li <?php if ($tmp_step == 8) { ?>class="current"<?php } ?>>Finish
-					    	</ol>				    				    
+					    	</ol>
 					    <?php } else if ($install_type == 5) { ?>
 							<ol class="install">
 					    		<li <?php if ($tmp_step == 1 || $login_error != '' || $inst_error != '') { ?>class="current"<?php } ?>>License Verification
-					    		<li <?php if (($tmp_step == 2 && $login_error == '' && $inst_error == '') || $_POST['lic_opt'] == 1) { ?>class="current"<?php } ?>>Select License
-					    		<li <?php if ($tmp_step == 3 && $_POST['lic_opt'] != 1) { ?>class="current"<?php } ?>>Select Domain
+					    		<li <?php if (($tmp_step == 2 && $login_error == '' && $inst_error == '') || $lic_opt == 1) { ?>class="current"<?php } ?>>Select License
+					    		<li <?php if ($tmp_step == 3 && $lic_opt != 1) { ?>class="current"<?php } ?>>Select Domain
 					    		<li <?php if ($tmp_step == 4) { ?>class="current"<?php } ?>>Finish
-					    	</ol>				    				    
+					    	</ol>
 					    <?php } else if ($install_type == 6) { ?>
 							<ol class="install">
 					    		<li <?php if ($tmp_step == 1 || $login_error != '' || $inst_error != '') { ?>class="current"<?php } ?>>License Verification
 					    		<li <?php if (($tmp_step == 2 && $login_error == '' && $inst_error == '') || $_GET['show_prev'] == 1 || $_POST['backupdir']) { ?>class="current"<?php } ?>>Select Backup File
 					    		<li <?php if ($tmp_step == 3 && $_POST['lic_opt'] != 1 && $_GET['show_prev'] != 1 && !$_POST['backupdir']) { ?>class="current"<?php } ?>>Finish
-					    	</ol>				    				    
+					    	</ol>
 					    <?php } else if ($install_type == 7) { ?>
 							<ol class="install">
 					    		<li <?php if ($tmp_step == 1 || $login_error != '' || $inst_error != '') { ?>class="current"<?php } ?>>License Verification
 					    		<li <?php if ($tmp_step == 2 && $login_error == '' && $inst_error == '') { ?>class="current"<?php } ?>>Database Configuration
 					    		<li <?php if ($tmp_step == 3) { ?>class="current"<?php } ?>>Finish
-					    	</ol>				    				    	
+					    	</ol>
 					    <?php } else if ($install_type == 8) { ?>
 							<ol class="install">
 					    		<li <?php if ($tmp_step == 1 || $login_error != '' || $inst_error != '') { ?>class="current"<?php } ?>>License Verification
 					    		<li <?php if ($tmp_step == 2 && $login_error == '' && $inst_error == '') { ?>class="current"<?php } ?>>Select Modules to Upgrade
+					    		<li <?php if ($tmp_step == 3) { ?>class="current"<?php } ?>>Language Pack Upgrade
+					    		<li <?php if ($tmp_step == 4) { ?>class="current"<?php } ?>>Finish
+					    	</ol>
+					    <?php } else if ($install_type == 9) { ?>
+							<ol class="install">
+					    		<li <?php if ($tmp_step == 1 || $login_error != '' || $inst_error != '') { ?>class="current"<?php } ?>>License Verification
+					    		<li <?php if ($tmp_step == 2 && $login_error == '' && $inst_error == '') { ?>class="current"<?php } ?>>Fix Paths
 					    		<li <?php if ($tmp_step == 3) { ?>class="current"<?php } ?>>Finish
-					    	</ol>				    				    
-					    <?php } ?>						    			    
+					    	</ol>
+					    <?php } ?>
 						<?php include($include_file); ?>
 					<?php } else { ?>
 						<?php include("install/general_error.php"); ?>
 					<?php } ?>
 	            	<td width="40%" style="border-left: 1px solid #000; background: #f0f0f0">
 	            		<table width="100%" border="0" cellspacing="0" cellpadding="4">
 							    	<tr>
-							    	  <td class="subsectiontitle" style="border-bottom: 1px solid #000000; background-color:#999"><?php echo $title;?></td>
+							    	  <td class="subsectiontitle" style="border-bottom: 1px solid #000000; background-color:#999"><?php if( isset($title) ) echo $title;?></td>
 							    	</tr>
 							    	<tr>
-							    	  <td class="text"><?php echo $help;?></td>
+							    	  <td class="text"><?php if( isset($help) ) echo $help;?></td>
 							    	</tr>
 							    </table>
 	            	</td>
@@ -1807,11 +2029,11 @@
 			</table>
 		</td>
 	</tr>
-	
+
 	<tr>
 		<td id="footer">
-			Powered by In-portal &copy; 1997-2004, Intechnic Corporation. All rights reserved.
-			<br><img src="images/spacer.gif" width="1" height="10" alt="">
+			Powered by In-portal &copy; 1997-2007, Intechnic Corporation. All rights reserved.
+			<br><img src="images/spacer.gif" width="1" height="10" title="">
 		</td>
 	</tr>
 </table>