Index: trunk/kernel/include/language.php
===================================================================
--- trunk/kernel/include/language.php	(revision 650)
+++ trunk/kernel/include/language.php	(revision 651)
@@ -1,747 +1,748 @@
 <?php
 
 class clsPhrase extends clsItemDB
 {
 
     function clsPhrase($id=NULL)
     {
         $this->clsItemDB();
         $this->tablename = GetTablePrefix()."Phrase";
         $this->id_field = "PhraseId";
         $this->NoResourceId=1;
         if($id)
             $this->LoadFromDatabase($id);
     }
     
     function LoadFromDatabase($Id)
     {
         global $Errors;
 
         if(!isset($Id))
         {
             $Errors->AddError("error.AppError",NULL,'Internal error: LoadFromDatabase id',"",get_class($this),"LoadFromDatabase");
             return false;
         }
         if($Id)
         {        
           $sql = sprintf("SELECT * FROM ".$this->tablename." WHERE ".$this->IdField()." = '%s'",$Id);
           $result = $this->adodbConnection->Execute($sql);
          if ($result === false)
           { 
             $Errors->AddError("error.DatabaseError",NULL,$this->adodbConnection->ErrorMsg(),"",get_class($this),"LoadFromDatabase");
             return false;
           }
 
           $data = $result->fields;
 
           $this->SetFromArray($data);
           $this->Clean();
           return true;
         }
         else
             return FALSE;
     }
 
     function AdminIcon()
     {
         global $imagesURL;
 
         return $imagesURL."/itemicons/icon16_language_var.gif";
     }
 
 }
 
 class clsPhraseList extends clsItemCollection
 {
     var $Page;
     var $PerPageVar;
 
     function clsPhraseList()
     {
         $this->clsItemCollection();
         $this->SourceTable = GetTablePrefix()."Phrase";
         $this->classname = "clsPhrase";
         $this->PerPageVar = "Perpage_Phrase";
         $this->AdminSearchFields = array("p.Phrase","p.Translation");
 
     }
 
     function &AddPhrase($Phrase,$LangId,$Translation,$Type)
     {
     	$tmpphrase = $this->GetPhrase($Phrase, $LangId);
     	if (!$tmpphrase) {
     		$p = new clsPhrase();
         	$p->tablename = $this->SourceTable;
         	$p->Set(array("Phrase","LanguageId","Translation","PhraseType"),
                 	array($Phrase,$LangId,$Translation,$Type));
         	$p->Dirty();
         	$p->Create();
         	return $p;
     	}
     	else {
+    		//echo 'phrase already exists with label <b>'.$Phrase.'</b><br>';
     		$add_error = "Error";
     		return $add_error;
 /*    		$tmpphrase->Set(array("Phrase","LanguageId","Translation","PhraseType"),
                 array($Phrase,$LangId,$Translation,$Type));
             $tmpphrase->Dirty();
             $tmpphrase->Update();
             return $tmpphrase;*/
     	}
     }
 
     function &EditPhrase($id,$Phrase,$LangId,$Translation,$Type)
     {
         $p = $this->GetItem($id);
         $p->Set(array("Phrase","LanguageId","Translation","PhraseType"),
                 array($Phrase,$LangId,$Translation,$Type));
         $p->Dirty();        
         $p->Update();
         return $p;
     }
 
     function DeletePhrase($id)
     {
         $p = $this->GetItem($id);
         $p->Delete();
     }
 
     function DeleteLanguage($LangId)
     {
         $sql = "DELETE FROM ".$this->SourceTable." WHERE LanguageId=$LangId";
         if( $GLOBALS['debuglevel'] ) echo $sql."<br>\n";
 
         $this->adodbConnection->Execute($sql);
     }
 
     function CopyFromEditTable()
     {
         global $objSession;
 
         $edit_table = $objSession->GetEditTable($this->SourceTable);
         
         //$idlist = array();
         $sql = "SELECT * FROM $edit_table";
 		//echo "performing mass create/update<br>";
 		flush();
         $this->Clear();
         $rs = $this->adodbConnection->Execute($sql);
         while($rs && !$rs->EOF)
         {
             $data = $rs->fields;
             $c = $this->AddItemFromArray($data);     
 						$c->Dirty();                   
             if($data["PhraseId"]>0)
             {
                 $c->Update();                
             }
             else
             {
             	$c->debuglevel=0;
                 $c->UnsetIdField();
                 $c->Create();
             }
 
             $rs->MoveNext();
         }
         
         // Phrases deleted from temporary table are marked with LanguageId = 0, when saving we need to actually delete them all
         // The idea was taken from Images edit by Kostja
         $sql = "DELETE FROM ".$this->SourceTable." WHERE LanguageId = 0";
         $this->adodbConnection->Execute($sql);
         
         if( $GLOBALS['debuglevel'] ) echo $sql."<br>\n";
         $this->adodbConnection->Execute($sql);
     }
     
     function PurgeEditTable()
     {
       global $objSession;
 
       $edit_table = $objSession->GetEditTable($this->SourceTable);
       $this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table");
     }
 
     function GetPhrase($Phrase,$Lang, $no_db=FALSE)
     {
         $found = FALSE;                 
         
         foreach($this->Items as $i)
         {   
             if($i->Get("Phrase")==$Phrase && $i->Get("LanguageId")==$Lang)
             {
                 $found = TRUE;
                 break;
             }
         }
         if(!$found && !$no_db)
         {        
           $sql = "SELECT * FROM ".$this->SourceTable." WHERE Phrase='$Phrase' AND LanguageId='$Lang'";
           //echo $sql."<br>\n";
           $rs = $this->adodbConnection->Execute($sql);
           if($rs && !$rs->EOF)
           {
               $data = $rs->fields;
               $i = $this->AddItemFromArray($data);
           }
           else
               $i = FALSE;
         }
         return $i;
     }
 }
 
 RegisterPrefix("clsLanguage","lang","kernel/include/language.php");
 
 class clsLanguage extends clsParsedItem
 {
     function clsLanguage($id=NULL)
     {
         $this->clsParsedItem();
         $this->tablename = GetTablePrefix()."Language";
         $this->id_field = "LanguageId";
         $this->NoResourceId=1;
         $this->TagPrefix="lang";
 
         if($id)
             $this->LoadFromDatabase($id);
 
     }
 
     function LoadFromDatabase($Id)
     {
 		global $Errors;
        
         if(!isset($Id))
         {
             $Errors->AddError("error.AppError",NULL,'Internal error: LoadFromDatabase id',"",get_class($this),"LoadFromDatabase");
             return false;
         }        
         $sql = sprintf("SELECT * FROM ".$this->tablename." WHERE ".$this->IdField()." = '%s'",$Id);
         $result = $this->adodbConnection->Execute($sql);
         if ($result === false)
         {
             $Errors->AddError("error.DatabaseError",NULL,$this->adodbConnection->ErrorMsg(),"",get_class($this),"LoadFromDatabase");
             return false;
         }
 
         $data = $result->fields;
 
         $this->SetFromArray($data);
         $this->Clean();
         return true;
     }    
 
     function Delete()
     {
         $p = new clsPhraseList();
         //$id = $this->Get("LanguageId");
         //$p->DeleteLanguage($id);
         parent::Delete();
     }
 
     function ParseObject($element)
     {
         global $m_var_list,$m_var_list_update, $var_list,$var_list_update, $TemplateRoot;
         
         //echo "<PRE>"; print_r($element); echo "</PRE>";
         $extra_attribs = ExtraAttributes($element->attributes);
         if(strtolower($element->name)==$this->TagPrefix)
         {          
             $field = strtolower($element->attributes["_field"]); 
             switch($field)
             {     
             case "id":
                 $ret = $this->Get("LanguageId");
             break;
             case "packname":
                 $ret = $this->Get("PackName");
             break;
             case "localname":
                 $ret = $this->Get("LocalName");
             break;
             case "link":
                 $t = $element->attributes["_template"];
                 if(strlen($t))
                 {                
                   $var_list_update["t"] = $t;
                 }
                 else
                   $var_list_update["t"] = $var_list["t"];
                 $m_var_list_update["lang"] = $this->Get("LanguageId");
                 $ret = GetIndexURL()."?env=".BuildEnv();
                 unset($var_list_update["t"],$m_var_list_update["lang"]);
             break;
             case "primary":
                 $ret = "";
                 if($this->Get("PrimaryLang")==1)
                     $ret = "1";
             break;
             case "icon":
                 $ret = "";
                 $icon = $this->Get("IconUrl");
                                 
                 if(strlen($icon)>0)
                 {
                     $file =  $TemplateRoot."/".$icon;
                     //echo "File:$file <br>\n";
                     if(file_exists($file))
                         $ret = $icon;
                 }
                 if(!strlen($ret))
                     $ret = $element->attributes["_default"];
                 //echo $ret;
             break;
             }//switch
         }//if
         return $ret;
     }
 
     function AdminIcon()
     {
             global $imagesURL;
 
             $file = $imagesURL."/itemicons/icon16_language";
             if($this->Get("PrimaryLang")==1)
             {
                 $file .= "_primary.gif";
             }
             else
             {
                 if($this->Get("Enabled")==0)
                 {
                     $file .= "_disabled";
                 }
                 $file .= ".gif";
             }
             return $file;
 
     }
 }
 
 class clsLanguageList extends clsItemCollection
 {
     var $m_Primary;
 
     function clsLanguageList()
     {
         $this->clsItemCollection();
         $this->SourceTable = GetTablePrefix()."Language";
         $this->classname = "clsLanguage";
         $this->AdminSearchFields = array("PackName","LocalName");
     }
 
     function SetPrimary($lang_id)
     {   
         $sql = "UPDATE ".$this->SourceTable." SET PrimaryLang=0 ";
         $this->adodbConnection->Execute($sql);
         $l = $this->GetItem($lang_id);
         $l->Set("PrimaryLang","1");        
         $l->Update();
         $this->m_Primary =$lang_id;
     }
 
     function GetPrimary($Field="LanguageId")
     {
         if(!$this->m_Primary)
         {        
           $sql = "SELECT * FROM ".$this->SourceTable." WHERE PrimaryLang=1";       
           $rs = $this->adodbConnection->Execute($sql);
           if($rs && !$rs->EOF)
           {
             $l = $rs->fields[$Field];
           }
           else
              $l = 0;
           $this->m_Primary=$l;
         }
         else
             $l = $this->m_Primary;        
         return $l;
     }
     
     function LoadAllLanguages()
     {
 		$sql = "SELECT * FROM ".$this->SourceTable;       
         $this->Query_Item($sql);
     }
 
     function &AddLanguage($PackName,$LocalName,$Enabled,$Primary, $IconUrl="",$Datefmt,$TimeFmt,$Dec,$Thousand)
     {
         $l = new clsLanguage();
         $l->tablename = $this->SourceTable;
         $l->Set(array("PackName","LocalName","Enabled","PrimaryLang","IconUrl","DateFormat","TimeFormat",
         			  "DecimalPoint","ThousandSep"),
                 array($PackName,$LocalName,$Enabled,$Primary,$IconUrl,$Datefmt,$TimeFmt,$Dec,$Thousand));
         $l->Dirty();
         $l->Create();
         return $l;
     }
 
     function EditLanguage($id,$PackName,$LocalName,$Enabled,$Primary, $IconUrl="",$Datefmt,$TimeFmt,$Dec,$Thousand)
     {
         $l = $this->GetItem($id);
         $l->Set(array("PackName","LocalName","Enabled","PrimaryLang","IconUrl","DateFormat","TimeFormat",
         			  "DecimalPoint","ThousandSep"),
                 array($PackName,$LocalName,$Enabled,$Primary,$IconUrl,$Datefmt,$TimeFmt,$Dec,$Thousand));
         $l->Update();
         return $l;
     }
 
     function DeleteLanguage($id)
     {
         $l = $this->GetItem($id);
         $l->Delete();          
     }
 
     function CopyFromEditTable()
     {
         global $objSession;
 
         $edit_table = $objSession->GetEditTable($this->SourceTable);
         $idlist = array();
         $sql = "SELECT * FROM $edit_table";
         $this->Clear();
         $rs = $this->adodbConnection->Execute($sql);
         while($rs && !$rs->EOF)
         {
             $data = $rs->fields;
             $c = $this->AddItemFromArray($data);            
             $c->Dirty();
 
             if($data["LanguageId"]>0)
             {
                 $c->Update();
             }
             else
             {
                 $oldid = $c->Get("LanguageId");
                 $c->UnsetIdField();
                 $c->Create();
                 $id = $c->Get("LanguageId");
                 $phrase_table = $objSession->GetEditTable("Phrase");
                 $message_table = $objSession->GetEditTable("EmailMessage");
                 $sql = "UPDATE $phrase_table SET LanguageId=$id WHERE LanguageId=$oldid";                
                 $this->adodbConnection->Execute($sql);
                 $sql = "UPDATE $message_table SET LanguageId=$id WHERE LanguageId=$oldid";                
                 $this->adodbConnection->Execute($sql);                
             }
             $rs->MoveNext();
         }
     }
 
     function ExportPhrases($file,$LangIds=NULL,$PhraseTypes=null)
     {        
         $output = array();
         $this->Clear();
         $where_parts = Array();
         if( isset($LangIds) ) $where_parts[] = 'LanguageId IN ('.$LangIds.')';
         $where =  count($where_parts) ? ' WHERE '.implode(' AND ', $where_parts) : '';
         $this->Query_Item($sql = 'SELECT * FROM '.$this->SourceTable.$where);
 
 		$objXML = new xml_doc();
 
 		$RootNode =& $objXML->getTagByID($objXML->createTag("LANGUAGES"));
 		
         $ret = 0;
         if($this->NumItems()>0)
         {        
              $phrase_where = isset($PhraseTypes) ? ' AND PhraseType IN ('.$PhraseTypes.')' : '';
              $event_where = isset($PhraseTypes) ? ' AND Type+1 IN ('.$PhraseTypes.')' : '';
              foreach($this->Items as $l)
              {   
 				$LangRoot =& $objXML->getTagByID($RootNode->addChild($objXML,"LANGUAGE",array("PackName"=>$l->Get("PackName")),""));
 				$LangRoot->addChild($objXML,"DATEFORMAT",array(),$l->Get("DateFormat"));
 				$LangRoot->addChild($objXML,"TIMEFORMAT",array(),$l->Get("TimeFormat"));
 				$LangRoot->addChild($objXML,"DECIMAL",array(),$l->Get("DecimalPoint"));
 				$LangRoot->addChild($objXML,"THOUSANDS",array(),$l->Get("ThousandSep"));
 				$PhraseRoot =& $objXML->getTagByID($LangRoot->addChild($objXML,"PHRASES"));
 			
                 $sql = "SELECT * FROM ".GetTablePrefix()."Phrase WHERE LanguageId=".$l->Get("LanguageId").$phrase_where;
                 $rs=$this->adodbConnection->Execute($sql);
                 while($rs && ! $rs->EOF)
                 {
                 	  $PhraseRoot->addChild($objXML,"PHRASE",array("Label"=>$rs->fields["Phrase"],"Type"=>$rs->fields["PhraseType"]),base64_encode($rs->fields["Translation"]));
                       $rs->MoveNext();
                 }
                 
 				$EventRoot =& $objXML->getTagByID($LangRoot->addChild($objXML,"EVENTS"));
 
 				$ev = GetTablePrefix()."Events";
 				$em = GetTablePrefix()."EmailMessage";
 				$sql = "SELECT $em.*,$ev.Event,$ev.Type FROM $em INNER JOIN $ev ON ($em.EventId=$ev.EventId) WHERE LanguageId=".$l->Get("LanguageId").$event_where;
 				$rs = $this->adodbConnection->Execute($sql);  
 				while($rs && !$rs->EOF)
 				{	
   					$EventRoot->AddChild($objXML,"EVENT",array("MessageType"=>$rs->fields["MessageType"],"Event"=>$rs->fields["Event"],"Type"=>$rs->fields["Type"]),base64_encode($rs->fields["Template"]));  	
   					$rs->MoveNext();
 				}                
             }
             $objXML->generate();
 			$objXML->xml = str_replace("&","&amp;",$objXML->xml);
 			$fp = @fopen($file,"w");
 			@fputs($fp,$objXML->xml);
 			@fclose($fp);
         }
         return file_exists($file);
     }
 
     function ReadImportTable($TableName,$SetEnabled=0,$Types="0,1",$OverwitePhrases=FALSE, 
     						 $MaxInserts=100,$Offset=0)
     {    	    	    	
     	global $objPhraseList;
     	
     	if(!is_object($objPhraseList))
     	  $objPhraseList = new clsPhraseList();
     	
         $PhraseList = new clsPhraseList();
         $TypeArray = explode(",",$Types);
         $Inserts = 0;
         $sql = "SELECT * FROM $TableName WHERE PhraseType IN ($Types) LIMIT $Offset,$MaxInserts";
         //echo $sql;
         //$PhraseList->EnablePaging = false;
         $PhraseList->Query_Item($sql);
         if($PhraseList->NumItems()>0)
         {
         	foreach($PhraseList->Items as $i)
         	{
         		$p = $objPhraseList->GetPhrase($i->Get("Phrase"),$i->Get("LanguageId"));
         		//echo "<pre>"; print_r($p); echo "</pre>";
         		if(is_object($p))
         		{
         			if($OverwitePhrases)
         			{          			   
         			   //$p->debuglevel=1;
         			   $p->Set("Translation",$i->Get("Translation"));
         			   //echo $i->Get("Translation")."<br>";
         			   $p->Set("PhraseType",$i->Get("PhraseType"));
         			   $p->Dirty();
         			   $p->Update();
         			}
         		}
         		else {
         			//$i->debuglevel=1;
         		  $i->Create();        		  
         		}
         		$Inserts++;
         	}
         }
         $Offset = $Offset + $Inserts;
         return $Offset;
     }
     
     function PurgeEditTable()
     {
       global $objSession;
 
       $edit_table = $objSession->GetEditTable($this->SourceTable);
       $this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table");
     }
 
 }
 
 class clsLanguageCache 
 {
     var $m_CachedLanguage;
     var $FullLoad = FALSE;
     var $cache;
     var $adodbConnection;
     var $TemplateName;
     var $TemplateCache;
     var $TemplateDate;
     var $ThemeId;
 
     function clsLanguageCache($LangId=NULL)
     {        
         global $objConfig;
 
         $this->m_CachedLanguage = $LangId;
         $this->adodbConnection =&GetADODBConnection();
         $this->Clear();
     }
 
     function Clear()
     {
         unset($this->cache);
         $this->cache = array();
         $this->TemplateCache = array();
     }
 
     function LoadLanguage($LangId,$Type)
     {
         $this->Clear();
         $this->m_CachedLanguage = $LangId;
         $this->FullLoad = TRUE;
         $sql = "SELECT Phrase,Translation FROM ".GetTablePrefix()."Phrase WHERE LanguageId=$LangId AND PhraseType=$Type";
         $rs = $this->adodbConnection->Execute($sql);
         while($rs && !$rs->EOF)
         {
             $this->cache[$rs->fields["Phrase"]] = $rs->fields["Translation"];
             if(ADODB_EXTENSION>0)
             {
                 adodb_movenext($rs);
             }
             else
               $rs->MoveNext();
         }        
 
         return (count($this->cache)>0);
     }
 
     function GetPhrase($Phrase,$Lang)
     {
         $t = "";
         $sql = "SELECT PhraseId,Phrase,Translation FROM ".GetTablePrefix()."Phrase WHERE Phrase='$Phrase' AND LanguageId='$Lang'";
         
         $rs = $this->adodbConnection->Execute($sql);
         if($rs && !$rs->EOF)
         {
             $t = $rs->fields["Translation"];
             $this->TemplateCache[] = $rs->fields["PhraseId"];
         }
 
         return $t;
     }
 
     function LoadTemplateCache($t, $timeout, $ThemeId)
     {       
         
         $this->TemplateName = $t;
         $this->TemplateDate = 0;
         $this->ThemeId = $ThemeId;
         if($timeout > 0)
         {        
           $sql = "SELECT * FROM ".GetTablePrefix()."PhraseCache WHERE Template='$t' AND ThemeId=$ThemeId";
           $rs = $this->adodbConnection->Execute($sql);
           if($rs && !$rs->EOF)
           { 
             $this->TemplateCache = explode(',', $rs->fields['PhraseList']);
             $t_length = strlen($rs->fields['PhraseList']) ? 1 : 0;
             
             $this->TemplateDate = $rs->fields["CacheDate"];
             if(date("U") < $this->TemplateDate + $timeout || !$t_length)
             {            
                 $this->TemplateCache = Array();
                 $this->TemplateDate=0;
             }            
           }
           else
             $this->TemplateDate = -1;
         }
         else
             $this->TemplateDate=-2;
     }
 
     function LoadCachedVars($LangId)
     {
         if(count($this->TemplateCache))
         {
           $values = implode(",",$this->TemplateCache);          
           $this->FullLoad = FALSE;
           $this->m_CachedLanguage = $LangId;
           $sql = "SELECT Phrase,Translation FROM ".GetTablePrefix()."Phrase WHERE LanguageId=$LangId AND PhraseId IN ($values)";
           $rs = $this->adodbConnection->Execute($sql);
           while($rs && !$rs->EOF)
           {
             $this->cache[$rs->fields["Phrase"]] = $rs->fields["Translation"];
             if( defined('ADODB_EXTENSION') && constant('ADODB_EXTENSION') > 0 )
                 adodb_movenext($rs);
             else
               $rs->MoveNext();
           }
         }
     }
 
     function SaveTemplateCache()
     {
         if($this->TemplateDate==0 || $this->TemplateDate==-1)
         {
             $value = implode(",",$this->TemplateCache);
             if($this->TemplateDate==0)
             {            
               $sql = "UPDATE ".GetTablePrefix()."PhraseCache SET PhraseList='$value',CacheDate=".date("U");
               $sql .=" WHERE Template='".$this->TemplateName."' AND ThemeId=".$this->ThemeId;
             }
             else
             {
                 $sql = "INSERT INTO ".GetTablePrefix()."PhraseCache (Template,PhraseList,CacheDate,ThemeId) VALUES ('";
                 $sql .= $this->TemplateName."','$value',".date("U").",".$this->ThemeId.")";
             }            
             $this->adodbConnection->Execute($sql);
         }
     }
 
     //This function returns a translation for a particular phrase
     //if translation is not found then !phrase! is returned.
     function GetTranslation($phrase,$language)
     {
         global $objSession, $LogPhraseLookups,$LangList, $MissingList;
 
         $missing = FALSE;
         if(!$this->FullLoad)
         {        
           $this->RefreshCacheStatus($language);
           if(!isset($this->cache[$phrase]))
           {          
             $this->cache[$phrase] = $this->GetPhrase($phrase,$language);
             $translation = $this->cache[$phrase];
             //$translation = "";
           }
           else
               $translation = $this->cache[$phrase];
         }
         else
         {        
            $translation = $this->cache[$phrase];
         }
         if(!strlen($translation))
         {
             $missing = TRUE; 
             
             if($language != 1)
             {
                 $translation=$this->GetTranslation($phrase,1);
             }
             else
             {               
               $translation = "!".$phrase."!";
             }
         }
         
         if($LogPhraseLookups==TRUE)
         {
             //if(!is_array($LangList))
             //    $LangList = array();       
             //$LangList[$phrase] = $LangList;
             if($missing)
             {
                 if(!is_array($MissingList))
                 {
                     $MissingList = array();
                 }
                 if(!in_array($phrase,$MissingList))
                   $MissingList[] = $phrase;                
             }
         }
         
         return $translation;
     }
 
     //This function checks if cache is current for current language
     //if not clear it out
     function RefreshCacheStatus($language)
     {
         //First remember what language we are caching
 //        if(!isset($this->m_CachedLanguage))
 //          $this->m_CachedLanguage = $language;
 
 
         //If this is the different language, then clear the cache
 //        if($this->m_CachedLanguage != $language)
 //        {
 //            $this->Clear();
 //            $this->m_CachedLanguage = $language;
 //        }
     }
 
 }
 ?>

Property changes on: trunk/kernel/include/language.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.9
\ No newline at end of property
+1.10
\ No newline at end of property
Index: trunk/globals.php
===================================================================
--- trunk/globals.php	(revision 650)
+++ trunk/globals.php	(revision 651)
@@ -1,1483 +1,1487 @@
-<?php
-
-$vars = parse_portal_ini($pathtoroot."config.php");
-
-while($key = key($vars))
-{
-  $key = "g_".$key;
-  global $$key;
-  $$key = current($vars); //variable variables
-  next($vars);
-}
-
-/*list the tables which contain item data */
-$ItemTables = array();
-
-$KeywordIgnore = array();
-global $debuglevel;
-
-$debuglevel = 0;
-//$GLOBALS['debuglevel'] = 0;
-
-/*New, Hot, Pop field values */
-define('NEVER', 0);
-define('ALWAYS', 1);
-define('AUTO', 2);
-
-/*Status Values */
-define('STATUS_DISABLED', 0);
-define('STATUS_ACTIVE', 1);
-define('STATUS_PENDING', 2);
-
-$LogLevel=0;
-$LogFile = NULL;
-
-
-function parse_portal_ini($file, $parse_section = false) { 
-    if(!file_exists($file) && !is_readable($file))  
-        die('Could Not Open Ini File'); 
-     
-    $contents = file($file); 
-     
-    $retval = array(); 
-     
-    $section = ''; 
-    $ln = 1;
-    $resave = false;
-    foreach($contents as $line) { 
-    		if ($ln == 1 && $line != '<'.'?'.'php die() ?'.">\n") {
-    			$resave = true;
-    		}
-    		$ln++;
-        $line = trim($line); 
-        $line = eregi_replace(';[.]*','',$line); 
-        if(strlen($line) > 0) { 
-            //echo $line . " - "; 
-            if(eregi('^[[a-z]+]$',str_replace(' ', '', $line))) { 
-                //echo 'section'; 
-                $section = substr($line,1,(strlen($line)-2)); 
-                if ($parse_section) {
-                	$retval[$section] = array(); 
-                }
-                continue;
-            } elseif(eregi('=',$line)) { 
-                //echo 'main element'; 
-                list($key,$val) = explode(' = ',$line); 
-                if (!$parse_section) {
-                	$retval[trim($key)] = str_replace('"', '', $val); 
-                }
-                else {
-					$retval[$section][trim($key)] = str_replace('"', '', $val);                 	
-                }
-            } //end if 
-            //echo '<br />'; 
-        } //end if 
-    } //end foreach 
-    if ($resave) {
-    	$fp = fopen($file, "w");
-    	reset($contents);
-			fwrite($fp,'<'.'?'.'php die() ?'.">\n\n");
-			foreach($contents as $line) fwrite($fp,"$line");
-			fclose($fp);
-		}   
-    
-    return $retval; 
-}
-
-/**
- * @return object
- * @desc Returns reference to database connection
-*/
-function &GetADODBConnection()
-{
-	static $DB = null;
-	
-	global $g_DBType, $g_DBHost, $g_DBUser, $g_DBUserPassword, $g_DBName, $g_DebugMode;
-	global $ADODB_FETCH_MODE, $ADODB_COUNTRECS, $ADODB_CACHE_DIR, $pathtoroot;
-	
-	if( !isset($DB) && strlen($g_DBType) > 0 )
-	{
-		$DB = ADONewConnection($g_DBType);
-		$connected = $DB->Connect($g_DBHost, $g_DBUser, $g_DBUserPassword, $g_DBName);
-		if(!$connected) die("Error connecting to database $g_DBHost <br>\n");
-		
-		$ADODB_CACHE_DIR = $pathtoroot."cache";
-		$ADODB_FETCH_MODE = 2;
-		$ADODB_COUNTRECS = false;
-		$DB->debug = defined('ADODB_OUTP') ? 1 : 0;
-		$DB->cacheSecs = 3600;
-		$DB->Execute('SET SQL_BIG_SELECTS = 1');
-	}
-	elseif( !strlen($g_DBType) )
-	{
-		global $rootURL;
-		echo 'In-Portal is probably not installed, or configuration file is missing.<br>';
-		echo 'Please use the installation script to fix the problem.<br><br>';
-		if ( !preg_match('/admin/', __FILE__) ) $ins = 'admin/';
-		
-		echo '<a href="'.$rootURL.$ins.'install.php">Go to installation script</a><br><br>';
-		flush();
-		exit;
-	}
-	return $DB;
-}
-
-function GetNextResourceId($Increment=1)
-{
-	$sql = "UPDATE ".GetTablePrefix()."IdGenerator SET lastid=lastid+".$Increment;
-    $adodbConnection = &GetADODBConnection();
-    $adodbConnection->Execute($sql);    
-    $rs = $adodbConnection->Execute("SELECT lastid FROM ".GetTablePrefix()."IdGenerator");
-    $val = $rs->fields["lastid"];
-    if(!$rs || $rs->EOF)
-    {   
-    	echo $adodbConnection->ErrorMsg(); 
-        $sql = "INSERT INTO ".GetTablePrefix()."IdGenerator (lastid) VALUES ($Increment)";
-        $adodbConnection->Execute($sql);
-        $val = 1;
-    }
-    $val = $val-($Increment-1); 
-    return $val;
-}
-
-function AddSlash($s)
-{
-    if(substr($s,-1) != "/")
-    {
-        return $s."/";
-    }
-    else
-        return $s;
-}
-
-function StripNewline($s)
-{
-	$bfound = false;
-	while (strlen($s)>0 && !$bfound)
-	{
-		if(ord(substr($s,-1))<32)
-		{
-			$s = substr($s,0,-1);
-		}
-		else
-		  $bfound = true;
-	}
-	return $s;
-}
-
-function DeleteElement($array, $indice) 
-{
-  for($i=$indice;$i<count($array)-1;$i++) 
-        $array[$i] = $array[$i+1]; 
-  unset($array[count($array)-1]);
-  return $array;
-}
-
-function DeleteElementValue($needle, &$haystack) 
-{
-  while(($gotcha = array_search($needle,$haystack)) > -1)
-   unset($haystack[$gotcha]);
-}	
-
-function TableCount($TableName, $where="",$JoinCats=1)
-{
-    $db = &GetADODBConnection();
-    if(!$JoinCats)
-    {    
-      $sql = "SELECT count(*) as TableCount FROM $TableName";
-    }
-    else
-        $sql = "SELECT count(*) as TableCount FROM $TableName INNER JOIN ".GetTablePrefix()."CategoryItems ON ".GetTablePrefix()."CategoryItems.ItemResourceId=$TableName.ResourceId";
-    if(strlen($where)>0)
-        $sql .= " WHERE ".$where;
-   
-    $rs = $db->Execute($sql);
-        
-//    echo "SQL TABLE COUNT: ".$sql."<br>\n";
-    
-    $res = $rs->fields["TableCount"];
-    return $res;
-}
-
-Function QueryCount($sql)
-{
-	$sql = preg_replace('/SELECT(.*)FROM[ \n\r](.*)/is','SELECT COUNT(*) AS TableCount FROM $2', $sql);
-	$sql = preg_replace('/(.*)LIMIT(.*)/is','$1', $sql);
-	$sql = preg_replace('/(.*)ORDER BY(.*)/is','$1', $sql);
-	
-  	$db =& GetADODBConnection();
-  	return $db->GetOne($sql);
-}
-    
-function GetPageCount($ItemsPerPage,$NumItems)
-{
- if($ItemsPerPage==0 || $NumItems==0)
- {
-   return 1;
- }            
- $value = $NumItems/$ItemsPerPage;
- return ceil($value);        
-}
-
-
-/**
- * @return string
- * @desc Returns database table prefix entered while installation
-*/
-function GetTablePrefix()
-{
-    global $g_TablePrefix;
-
-    return $g_TablePrefix;
-}
-
-function TableHasPrefix($t)
-{
-	$pre = GetTablePrefix();
-	
-	if(strlen($pre)>0)
-	{
-		if(substr($t,0,strlen($pre))==$pre)
-		{
-			return TRUE;
-		}
-		else 
-		  return FALSE;
-	}
-	else
-	  return TRUE;
-}
-
-function AddTablePrefix($t)
-{
-	if(!TableHasPrefix($t))
-	  $t = GetTablePrefix().$t;
-	  
-	return $t;
-}
-
-function ThisDomain()
-{
-	global $objConfig, $g_Domain;
-	
-	if($objConfig->Get("DomainDetect"))
-	{
-		$d = $_SERVER['HTTP_HOST'];
-	}
-	else
-	  $d = $g_Domain;
-	  
-	return $d;
-}
-
-function GetIndexUrl($secure=0)
-{
-    global $indexURL, $rootURL, $secureURL;
-    switch($secure)
-    {
-    	case 0:
-    		$ret = $indexURL;
-    		break;
-    		
-    	case 1:
-    		$ret = $secureURL."index.php";
-    		break;
-    		
-    	case 2:
-    		$ret = $rootURL."index.php";
-    		break;
-    		
-    	default:
-    		$ret = $i;
-    		break;
-    }					
-    return $ret;
-}
-
-function GetLimitSQL($Page,$PerPage)
-{
-  if($Page<1)
-    $Page=1;
-
-  if(is_numeric($PerPage))
-  {
-  	  if($PerPage==0)  	  
-  	    $PerPage = 20;
-      $Start = ($Page-1)*$PerPage;
-      $limit = "LIMIT ".$Start.",".$PerPage;
-  }
-  else
-      $limit = NULL;
-  return $limit;
-}
-
-function filelist ($currentdir, $startdir=NULL,$ext=NULL) 
-{
-  global $pathchar;
-
-  //chdir ($currentdir);
-
-  // remember where we started from
-  if (!$startdir) 
-  {
-      $startdir = $currentdir;
-  }
-
-  $d = @opendir($currentdir);
-
-  $files = array();
-  if(!$d)
-    return $files;  
-  //list the files in the dir
-  while (false !== ($file = readdir($d))) 
-  {
-      if ($file != ".." && $file != ".") 
-      {
-          if (is_dir($currentdir."/".$file)) 
-          {
-              // If $file is a directory take a look inside
-              $a = filelist ($currentdir."/".$file, $startdir,$ext); 
-              if(is_array($a))
-                $files = array_merge($files,$a);
-          } 
-          else 
-          {
-              if($ext!=NULL)
-              {
-                  $extstr = stristr($file,".".$ext);
-                  if(strlen($extstr))
-                      $files[] = $currentdir."/".$file;
-              }
-              else
-                $files[] = $currentdir.'/'.$file;
-          }
-      }
-  }
-
-  closedir ($d);
-
-  return $files;
-}        
-
-function DecimalToBin($dec,$WordLength=8)
-{
-  $bits = array();
-  
-  $str = str_pad(decbin($dec),$WordLength,"0",STR_PAD_LEFT);
-  for($i=$WordLength;$i>0;$i--)
-  {
-      $bits[$i-1] = (int)substr($str,$i-1,1);
-  }
-  return $bits;
-}
-/*
-function inp_escape($in, $html_enable=0)
-{
-	$out = stripslashes($in);
-	$out = str_replace("\n", "\n^br^", $out);
-	if($html_enable==0)
-	{
-		$out=ereg_replace("<","&lt;",$out);
-		$out=ereg_replace(">","&gt;",$out);
-		$out=ereg_replace("\"","&quot;",$out);
-		$out = str_replace("\n^br^", "\n<br />", $out);
-	}	
-	else
-		$out = str_replace("\n^br^", "\n", $out);
-	$out=addslashes($out);
-
-	return $out;
-}
-*/
-function inp_escape($var,$html=0)
-{
-	if($html)return $var;
-	if(is_array($var))
-		foreach($var as $k=>$v)
-			$var[$k]=inp_escape($v);
-	else
-//		$var=htmlspecialchars($var,ENT_NOQUOTES);
-		$var=strtr($var,Array('<'=>'&lt;','>'=>'&gt;',));
-	return $var;
-}
-function inp_striptags($var,$html=0)
-{
-	if($html)return $var;
-	if(is_array($var))
-		foreach($var as $k=>$v)
-			$var[$k]=inp_striptags($v);
-	else
-		$var=strip_tags($var);
-	return $var;
-}
-
-function inp_unescape($in)
-{
-	$out=stripslashes($in);
-
-	return $out;
-}
-
-function inp_textarea_unescape($in)
-{
-	return $in;
-	$out=stripslashes($in);
-	$out = str_replace("\n<br />", "\n", $out);
-	return $out;
-}
-
-function HighlightKeywords($Keywords, $html, $OpenTag="", $CloseTag="")
-{
-    global $objConfig;
-
-    if(!strlen($OpenTag))
-        $OpenTag = "<B>";
-    if(!strlen($CloseTag))
-            $CloseTag = "</B>";	
-	
-   	$r = preg_split('((>)|(<))', $html, -1, PREG_SPLIT_DELIM_CAPTURE);
-   	
-   	foreach ($Keywords as $k) {	   	
-	   	for ($i = 0; $i < count($r); $i++) {
-	       if ($r[$i] == "<") {
-	           $i++; continue;
-	       }
-	       $r[$i] = preg_replace("/($k)/i", "$OpenTag\\1$CloseTag", $r[$i]);
-	    }
-   	}
-   	return join("", $r);
-}
-
-/*
-function HighlightKeywords($Keywords,$html, $OpenTag="", $CloseTag="")
-{
-    global $objConfig;
-
-    if(!strlen($OpenTag))
-        $OpenTag = "<B>";
-    if(!strlen($CloseTag))
-            $CloseTag = "</B>";
-    $ret = strip_tags($html);
-
-    foreach ($Keywords as $k)
-    {   
-        if(strlen($k))
-        {        
-          //$html = str_replace("<$k>", ":#:", $html);
-          //$html = str_replace("</$k>", ":##:", $html);
-          //$html = strip_tags($html);
-          if ($html = preg_replace("/($k)/Ui","$OpenTag\\1$CloseTag", $html))
-          //if ($html = preg_replace("/(>[^<]*)($k)([^<]*< )/Ui","$OpenTag\\1$CloseTag", $html))
-            $ret = $html;
-          //$ret = str_replace(":#:", "<$k>", $ret);
-          //$ret = str_replace(":##:", "</$k>", $ret);
-        }
-    }
-    return $ret;        
-}
-*/
-function ExtractDatePart($part,$datestamp)
-{
-    switch($part)
-    {
-        case "month":
-            if($datestamp<=0)
-            {                        
-                $ret = "";
-            }
-            else
-              $ret = adodb_date("m",$datestamp);
-        break;		
-        case "day":
-            if($datestamp<=0)
-            {                        
-                $ret = "";
-            }
-            else
-                $ret = adodb_date("d", $datestamp);
-        break;		
-        case "year":
-            if($datestamp<=0)
-            {                        
-                $ret = "";
-            }
-            else
-                $ret = adodb_date("Y", $datestamp);
-        break;
-        case "time_24hr":
-            if($datestamp<=0)
-            {                        
-                $ret = "";
-            }
-            else
-                $ret = adodb_date("H:i", $datestamp);
-        break;
-        case "time_12hr":
-            if($datestamp<=0)
-            {
-                $ret = "";
-            }
-            else
-                $ret = adodb_date("g:i a",$datestamp);
-       		break;
-       	default:
-       		$ret = adodb_date($part, $datestamp);
-       		break;
-     }
-    return $ret;
-}
-
-function GetLocalTime($TimeStamp,$TargetZone=NULL)
-{
-    if($TargetZone==NULL)
-        $TargetZone = $objConfig->Get("Config_Site_Time");   
-    $server = $objConfig->Get("Config_Server_Time");
-    if($TargetZone!=$server)
-    {    
-      $offset = ($server - $TargetZone) * -1;
-      $TimeStamp = $TimeStamp + (3600 * $offset);
-    }
-    return $TimeStamp;
-}
-
-function _unhtmlentities ($string)
-{
-    $trans_tbl = get_html_translation_table (HTML_ENTITIES);
-    $trans_tbl = array_flip ($trans_tbl);
-    return strtr ($string, $trans_tbl);
-}
-
-function getLastStr($hay, $need){
-  $getLastStr = 0;
-  $pos = strpos($hay, $need);
-  if (is_int ($pos)){ //this is to decide whether it is "false" or "0"
-   while($pos) {
-     $getLastStr = $getLastStr + $pos + strlen($need);
-     $hay = substr ($hay , $pos + strlen($need));
-     $pos = strpos($hay, $need);
-   }
-   return $getLastStr - strlen($need);
-  } else {
-   return -1; //if $need wasn´t found it returns "-1" , because it could return "0" if it´s found on position "0".
-  }
-} 
-
-function ReplaceSingleTag($tag,$text)
-{
-	$tag = strtolower($tag);
-	$opentag = '['.$tag;
-  	$closetag = '[/'.$tag.']';
-  
-  	if( stristr($text,$opentag) )
-  	{
-  		$pos = strpos( strtolower($text), $opentag.' '); // tag has parameters
-  		if($pos === false)
-  		{
-  			$pos = strpos( strtolower($text), $opentag.']');
-  		}
-
-  		$endopen = strpos($text,']',$pos);
-  		$closepos = strpos( strtolower($text),$closetag,$pos);
-
-  		if($closepos)
-  		{
-  			$taglength = ($closepos - $endopen) + strlen($closetag);
-  			$tagText = substr($text,$pos, $closepos + strlen($closetag) - $pos);
-  			$innerText = substr($text,$endopen+1,$closepos - $endopen-1);
-  			if($tag=="UL")
-  			{
-  				$innerText = str_replace("[*]","<LI>",$innerText);
-  			}
-  			$tagText = substr($tagText,1,($endopen - $pos)-1);
-  			//echo "Matched $tagText <br>\n";
-  			$tagText = "<".$tagText.">";
-  			$replace_text = $tagText.$innerText."</".$tag.">";
-  			$text = substr($text,0,$pos).$replace_text.substr($text,$closepos+strlen($closetag));
-  			return $text;
-  		}
-  		else
-  		return $text;
-  	}
-  	else
-  	return $text;
-}
-
-function ReplaceTag($tag,$text)
-{
-  $new_text = ReplaceSingleTag($tag,$text);
-  
-  while($new_text != $text)
-  {
-      $text = $new_text;
-      $new_text = ReplaceSingleTag($tag,$text);
-  }
-  return $new_text;
-}
-
-function ReplaceURL($text)
-{  
-  
-	// process url bbtags without href parameter
-	$text = preg_replace('/\[url\]([^\]]*)\[\/url\]/U', '[url href="$1"]$1[/url]', $text);
-	
-	// change bbcode to href's
-	while( stristr($text,'[url') )
-	{
-		$urlpos = strpos( strtolower($text), '[url');
-		$endopen = strpos($text,']',$urlpos);
-		if($endopen)
-		{
-			$url = '<a target="_blank"'.substr($text,$urlpos+4,$endopen - ($urlpos+4));
-			$url .= '>';
-			$url = _unhtmlentities($url);
-			$text = substr($text,0,$urlpos).$url.substr($text,$endopen+1);
-		}
-	}
-	$text = str_replace(Array('[/url]','[/URL]'),Array('</a>','</a>'),$text);
-	return $text;
-}
-
-
-function ReplaceBBCode($text)
-{
-  	global $objConfig;
-
-  	// BBCode: [b], [i], [u], [ul], [font]
-  	$tags = explode(",",$objConfig->Get("BBTags"));
-  	for($i = 0; $i < count($tags); $i++)
-  	{
-  		$text = ReplaceTag(strtoupper($tags[$i]),$text);
-  	}
-
-  	// BBCode: [url href="xxx"]xxx[/url]
-  	$text = ReplaceURL($text);
-  	
-  	// BBCode: [code]xxx[/code]
-  	$text = preg_replace('/\[code[^\]]*\](.*)\[\/code[^\]]*\]/Ues', 'highlight_string( _unhtmlentities(\'$1\') , true);', $text);
-  	
-  	return $text;
-}
-
-function GetMinValue($Table,$Field, $Where=NULL)
-{
-    $ret = 0;
-    $sql = "SELECT min($Field) as val FROM $Table ";
-    if(strlen($where))
-        $sql .= "WHERE $Where";
-    $ado = &GetADODBConnection();
-    $rs = $ado->execute($sql);
-    if($rs)
-        $ret = (int)$rs->fields["val"];
-    return $ret;
-}
-
-function getmicrotime()
-{ 
-    list($usec, $sec) = explode(" ",microtime()); 
-    return ((float)$usec + (float)$sec); 
-} 
-
-function SetMissingDataErrors($f)
-{
-    global $FormError;
-
-    $count = 0;
-    if(is_array($_POST))
-    {    
-      if(is_array($_POST["required"]))
-      {      
-        foreach($_POST["required"] as $r)
-        {
-          $found = FALSE;
-          if(is_array($_FILES))
-          {
-            if( isset($_FILES[$r]) && $_FILES[$r]['size'] > 0 ) $found = TRUE;
-          }
-        
-          if(!strlen(trim($_POST[$r])) && !$found)
-          {           
-            $count++;
-            
-            if (($r == "dob_day") || ($r == "dob_month") || ($r == "dob_year"))
-            	$r = "dob";            	
-            	
-            $tag = isset($_POST["errors"]) ? $_POST["errors"][$r] : '';
-            if(!strlen($tag))
-              $tag = "lu_ferror_".$f."_".$r; 
-            $FormError[$f][$r] = language($tag);
-          }
-        }
-      }
-    }
-    return $count;
-}
-
-function makepassword($length=10)
-{
-  $pass_length=$length; 
-
-  $p1=array('b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z');
-  $p2=array('a','e','i','o','u'); 
-  $p3=array('1','2','3','4','5','6','7','8','9');   
-  $p4=array('(','&',')',';','%');    // if you need real strong stuff 
-
-  // how much elements in the array 
-  // can be done with a array count but counting once here is faster 
-
-  $s1=21;// this is the count of $p1    
-  $s2=5; // this is the count of $p2 
-  $s3=9; // this is the count of $p3 
-  $s4=5; // this is the count of $p4 
-
-  // possible readable combinations 
-
-  $c1='121';    // will be like 'bab' 
-  $c2='212';      // will be like 'aba' 
-  $c3='12';      // will be like 'ab' 
-  $c4='3';        // will be just a number '1 to 9'  if you dont like number delete the 3 
-// $c5='4';        // uncomment to active the strong stuff 
-
-  $comb='4'; // the amount of combinations you made above (and did not comment out) 
-
-
-
-  for ($p=0;$p<$pass_length;) 
-  { 
-    mt_srand((double)microtime()*1000000); 
-    $strpart=mt_rand(1,$comb); 
-    // checking if the stringpart is not the same as the previous one 
-    if($strpart<>$previous) 
-    { 
-      $pass_structure.=${'c'.$strpart}; 
-
-      // shortcutting the loop a bit 
-      $p=$p+strlen(${'c'.$strpart}); 
-    } 
-    $previous=$strpart; 
-  } 
-
-
-  // generating the password from the structure defined in $pass_structure 
-  for ($g=0;$g<strlen($pass_structure);$g++) 
-  { 
-    mt_srand((double)microtime()*1000000); 
-    $sel=substr($pass_structure,$g,1); 
-    $pass.=${'p'.$sel}[mt_rand(0,-1+${'s'.$sel})]; 
-
-  } 
-  return $pass; 
-}
-
-function LogEntry($text,$writefile=FALSE)
-{
-  global $g_LogFile,$LogFile, $LogData, $LogLevel, $timestart;
-  
-  static $last;
-
-  if(strlen($g_LogFile))
-  { 
-    $el = str_pad(getmicrotime()- $timestart,10," "); 
-    if($last>0)
-      $elapsed = getmicrotime() - $last; 
-      
-    if(strlen($el)>10)
-        $el = substr($el,0,10);      
-    $indent = str_repeat("  ",$LogLevel);
-    $text = str_pad($text,$LogLevel,"==",STR_PAD_LEFT);
-    $LogData .= "$el:". round($elapsed,6).":$indent $text";
-    $last = getmicrotime();
-    if($writefile==TRUE && is_writable($g_LogFile))
-    {
-      if(!$LogFile)       
-      {
-         if(file_exists($g_LogFile))
-            unlink($g_LogFile);
-        $LogFile=@fopen($g_LogFile,"w");
-      }
-      if($LogFile)
-      {    
-        fputs($LogFile,$LogData);
-      }
-    }
-  }
-}
-
-function ValidEmail($email) 
-{
-    if (eregi("^[a-z0-9]+([-_\.]?[a-z0-9])+@[a-z0-9]+([-_\.]?[a-z0-9])+\.[a-z]{2,4}", $email))
-    {
-        return TRUE;
-    } 
-    else 
-    {
-        return FALSE;
-    }
-} 
-
-function language($phrase,$LangId=0)
-{
-    global $objSession, $objLanguageCache, $objLanguages;
-
-    if($LangId==0)
-        $LangId = $objSession->Get("Language");
-        
-	if($LangId==0)
-      $LangId = $objLanguages->GetPrimary();        
-
-    $translation = $objLanguageCache->GetTranslation($phrase,$LangId);
-
-    return $translation;
-}
-
-function admin_language($phrase,$lang=0,$LinkMissing=FALSE)
-{
-    global $objSession, $objLanguageCache, $objLanguages;
-    
-	//echo "Language passed: $lang<br>";
-	
-    if($lang==0)
-       $lang = $objSession->Get("Language");
-
-    //echo "Language from session: $lang<br>";
-    
-	if($lang==0)
-      $lang = $objLanguages->GetPrimary();   
-	
-    //echo "Language after primary: $lang<br>";
-    //echo "Phrase: $phrase<br>";
-	$translation = $objLanguageCache->GetTranslation($phrase,$lang);
-    if($LinkMissing && substr($translation,0,1)=="!" && substr($translation,-1)=="!")
-    {    	
-    	$res = "<A href=\"javascript:OpenPhraseEditor('&direct=1&label=$phrase'); \">$translation</A>";
-    	return $res;
-    }
-    else
-    	return $translation;
-}
-
-function prompt_language($phrase,$lang=0)
-{
-  return admin_language($phrase,$lang,TRUE);	
-}
-
-function GetPrimaryTranslation($Phrase)
-{
-	global $objLanguages;
-
-	$l = $objLanguages->GetPrimary();
-	return language($Phrase,$l);
-}
-
-function CategoryNameCount($ParentId,$Name)
-{
-	$cat_table = GetTablePrefix()."Category";
-	$sql = "SELECT Name from $cat_table WHERE ParentId=$ParentId AND ";
-	$sql .="(Name LIKE '".addslashes($Name)."' OR Name LIKE 'Copy of ".addslashes($Name)."' OR Name LIKE 'Copy % of ".addslashes($Name)."')";
-
-	$ado = &GetADODBConnection();
-	$rs = $ado->Execute($sql);
-	$ret = array();
-	while($rs && !$rs->EOF)
-	{
-		$ret[] = $rs->fields["Name"];
-		$rs->MoveNext();
-	}
-   	return $ret;
-}	
-
-function CategoryItemNameCount($CategoryId,$Table,$Field,$Name)
-{
-	$cat_table = GetTablePrefix()."CategoryItems";
-	$sql = "SELECT $Field FROM $Table INNER JOIN $cat_table ON ($Table.ResourceId=$cat_table.ItemResourceId) ";
-	$sql .=" WHERE ($Field LIKE 'Copy % of $Name' OR $Field LIKE '$Name' OR $Field LIKE 'Copy of $Name') AND CategoryId=$CategoryId";
-	//echo $sql."<br>\n ";
-	$ado = &GetADODBConnection();
-	$rs = $ado->Execute($sql);
-	$ret = array();
-	while($rs && !$rs->EOF)
-	{
-		$ret[] = $rs->fields[$Field];
-		$rs->MoveNext();
-	}
-   	return $ret;   	
-}
-
-function &GetItemCollection($ItemName)
-{
-  global $objItemTypes;
-
-  if(is_numeric($ItemName))
-  {
-  	$item = $objItemTypes->GetItem($ItemName);
-  }
-  else
-    $item = $objItemTypes->GetTypeByName($ItemName);
-  if(is_object($item))
-  {
-  	$module = $item->Get("Module");
-  	$prefix = ModuleTagPrefix($module);
-  	$func = $prefix."_ItemCollection";
-  	if(function_exists($func))
-  	{
-  	  $var =& $func();
-  	}
-  }
-  return $var;
-}
-
-	  
-function UpdateCategoryCount($ItemTypeName=0,$ListType=NULL)
-{
-	global $objCountCache, $objItemTypes;
-
-  	if(is_numeric($ItemTypeName))
-  		$item = $objItemTypes->GetItem($ItemTypeName);
-  	else
-    	$item = $objItemTypes->GetTypeByName($ItemTypeName);
-  
-  	if(is_object($item))
-  	{	
-  		$ItemType  = $item->Get("ItemType");
-  	
-		$sql = "DELETE FROM ".$objCountCache->SourceTable." WHERE ItemType=$ItemType";
-		if( is_numeric($ListType) ) $sql .= " AND ListType=$ListType";
-		$objCountCache->adodbConnection->Execute($sql);
-  	}  
-}
-
-function UpdateModifiedCategoryCount($ItemTypeName,$CatId=NULL,$Modifier=0,$ExtraId=NULL)
-{
-}
-
-function UpdateGroupCategoryCount($ItemTypeName,$CatId=NULL,$Modifier=0,$GroupId=NULL)
-{
-}
-
-function GetTagCache($module,$tag,$attribs,$env)
-{
-    global $objSystemCache, $objSession, $objConfig;
-
-    if($objConfig->Get("SystemTagCache"))
-    { 
-        $name = $tag;
-        if(is_array($attribs))
-        {    
-            foreach($attribs as $n => $val)
-            {    
-                $name .= "-".$val;
-            }
-        }
-        $CachedValue = $objSystemCache->GetContextValue($name,$module,$env, $objSession->Get("GroupList"));
-    }
-    else
-        $CachedValue="";
-    return $CachedValue;
-}
-
-function SaveTagCache($module, $tag, $attribs, $env, $newvalue)
-{
-    global $objSystemCache, $objSession, $objConfig;
-
-    if($objConfig->Get("SystemTagCache"))
-    {
-        $name = $tag;
-        if(is_array($attribs))
-        {    
-            foreach($attribs as $a => $val)
-            {    
-                $name .= "-".$val;
-            }
-        }
-        $objSystemCache->EditCacheItem($name,$newvalue,$module,0,$env,$objSession->Get("GroupList"));
-    }
-}
-
-function DeleteTagCache($name,$extraparams, $env="")
-{
-    global $objSystemCache, $objConfig;
-
-    if($objConfig->Get("SystemTagCache"))
-    { 
-        $where = "Name LIKE '$name%".$extraparams."'";
-        if(strlen($env))
-            $where .= " AND Context LIKE $env";
-        $objSystemCache->DeleteCachedItem($where);
-    }
-}
-
-function ParseTagLibrary()
-{
-	$objTagList = new clsTagList();
-	$objTagList->ParseInportalTags();
-	unset($objTagList);
-}
-
-function GetDateFormat($LangId=0)
-{
-  global $objLanguages;	
-  
-  if(!$LangId)
-    $LangId= $objLanguages->GetPrimary();
-  $l = $objLanguages->GetItem($LangId);	
-  if(is_object($l))
-  {
-  	$fmt = $l->Get("DateFormat");
-  }
-  else
-    $fmt = "m-d-Y";
-
-	if(isset($GLOBALS['FrontEnd'])&&$GLOBALS['FrontEnd'])
-		return $fmt;
-	return preg_replace('/y+/i','Y',$fmt);
-}
-
-function GetTimeFormat($LangId=0)
-{
-  global $objLanguages;	
-  
-  if(!$LangId)
-    $LangId= $objLanguages->GetPrimary();
-  $l = $objLanguages->GetItem($LangId);	
-  if(is_object($l))
-  {
-  	$fmt = $l->Get("TimeFormat");
-  }
-  else
-    $fmt = "H:i:s";
-  return $fmt;	
-}
-
-function LangDate($TimeStamp=NULL,$LangId=0)
-{  
-  $fmt = GetDateFormat($LangId);
-  $ret = adodb_date($fmt,$TimeStamp);
-  return $ret;
-}
-
-function LangTime($TimeStamp=NULL,$LangId=0)
-{ 
-  $fmt = GetTimeFormat($LangId);
-  $ret = adodb_date($fmt,$TimeStamp);
-  return $ret;
-}
-
-function LangNumber($Num,$DecPlaces=NULL,$LangId=0)
-{
-	global $objLanguages;
-	
-  if(!$LangId)
-    $LangId= $objLanguages->GetPrimary();
-  $l = $objLanguages->GetItem($LangId);	
-  if(is_object($l))
-  {
-  	$ret = number_format($Num,$DecPlaces,$l->Get("DecimalPoint"),$l->Get("ThousandSep"));
-  }
-  else 
-    $ret = $num;
-    
-  return $ret;	
-}
-
-function replacePngTags($x, $spacer="images/spacer.gif")
-{
-	global $rootURL,$pathtoroot;
-	
-    // make sure that we are only replacing for the Windows versions of Internet
-    // Explorer 5+, and not Opera identified as MSIE
-    $msie='/msie\s([5-9])\.?[0-9]*.*(win)/i';
-    $opera='/opera\s+[0-9]+/i';
-    if(!isset($_SERVER['HTTP_USER_AGENT']) ||
-        !preg_match($msie,$_SERVER['HTTP_USER_AGENT']) ||
-        preg_match($opera,$_SERVER['HTTP_USER_AGENT']))
-        return $x;
-    
-    // find all the png images in backgrounds
-    preg_match_all('/background-image:\s*url\(\'(.*\.png)\'\);/Uis',$x,$background);
-    for($i=0;$i<count($background[0]);$i++){
-        // simply replace:
-        //  "background-image: url('image.png');"
-        // with:
-        //  "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(
-        //      enabled=true, sizingMethod=scale src='image.png');"
-        // haven't tested to see if background-repeat styles work...
-        $x=str_replace($background[0][$i],'filter:progid:DXImageTransform.'.
-                'Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale'.
-                ' src=\''.$background[1][$i].'\');',$x);
-    }
-
-    // OK, time to find all the IMG tags with ".png" in them
-    preg_match_all('/(<img.*\.png.*>|<input.*type=([\'"])image\\2.*\.png.*>)/Uis',$x,$images);
-    while(list($imgnum,$v)=@each($images[0])){
-        $original=$v;
-        $atts=''; $width=0; $height=0;
-        // If the size is defined by styles, find
-        preg_match_all('/style=".*(width: ([0-9]+))px.*'.
-                        '(height: ([0-9]+))px.*"/Ui',$v,$arr2);
-        if(is_array($arr2) && count($arr2[0])){
-            // size was defined by styles, get values
-            $width=$arr2[2][0];
-            $height=$arr2[4][0];
-        }
-        // size was not defined by styles, get values
-        preg_match_all('/width=\"?([0-9]+)\"?/i',$v,$arr2);
-        if(is_array($arr2) && count($arr2[0])){
-            $width=$arr2[1][0];
-        }
-        preg_match_all('/height=\"?([0-9]+)\"?/i',$v,$arr2);
-        if(is_array($arr2) && count($arr2[0])){
-            $height=$arr2[1][0];
-        }
-        preg_match_all('/src=\"([^\"]+\.png)\"/i',$v,$arr2);
-        if(isset($arr2[1][0]) && !empty($arr2[1][0]))
-            $image=$arr2[1][0];
-        else
-            $image=NULL;
-
-        // We do this so that we can put our spacer.gif image in the same
-        // directory as the image
-        $tmp=split('[\\/]',$image);
-        array_pop($tmp);
-        $image_path=join('/',$tmp);
-           if(substr($image,0,strlen($rootURL))==$rootURL)
-           {
-          		$path = str_replace($rootURL,$pathtoroot,$image);
-           }
-          else
-          {
-        		$path = $pathtoroot."themes/telestial/$image";
-          }	
-//        echo "Sizing $path.. <br>\n";
-//        echo "Full Tag: ".htmlentities($image)."<br>\n";        
-        //if(!$height || !$width)
-        //{
-
-          $g = imagecreatefrompng($path);
-          if($g)
-          {
-          	$height = imagesy($g);
-          	$width = imagesx($g);
-          }	
-        //}
-        if(strlen($image_path)) $image_path.='/';
-
-        // end quote is already supplied by originial src attribute
-        $replace_src_with=$spacer.'" style="width: '.$width.
-            'px; height: '.$height.'px; filter: progid:DXImageTransform.'.
-            'Microsoft.AlphaImageLoader(src=\''.$image.'\', sizingMethod='.
-            '\'scale\')';
-        
-        // now create the new tag from the old
-        $new_tag=str_replace($image,$replace_src_with,$original);
-        
-        // now place the new tag into the content
-        $x=str_replace($original,$new_tag,$x);
-    }
-    return $x;
-}
-
-function print_pre($str)
-{
-	// no comments here :)
-	echo '<pre>'.print_r($str, true).'</pre>';
-}
-
-function GetOptions($field) // by Alex
-{
-	// get dropdown values from custom field
-	$tmp =& new clsCustomField();
-	
-	$tmp->LoadFromDatabase($field, 'FieldName');
-	$tmp_values = $tmp->Get('ValueList');
-	unset($tmp);
-	$tmp_values = explode(',', $tmp_values);
-	
-	foreach($tmp_values as $mixed)
-	{
-		$elem = explode('=', trim($mixed));
-		$ret[ $elem[0] ] = $elem[1];
-	}
-	return $ret;
-}
-
-function ResetPage($module_prefix, $page_variable = 'p')
-{
-	// resets page in specific module when category is changed	
-	global $objSession;
-	if( !is_object($objSession) ) // when changing pages session doesn't exist -> InPortal BUG
-	{
-		global $var_list, $SessionQueryString, $FrontEnd;
-		//if(!$var_list["sid"]) $var_list["sid"] = $_COOKIE["sid"];
-		$objSession = new clsUserSession($var_list["sid"],($SessionQueryString && $FrontEnd==1));
-	}
-	//echo "SID_RESET: ".$GLOBALS['var_list']["sid"].'(COOKIE_SID: '.$_COOKIE["sid"].')<br>';
-	$last_cat = $objSession->GetVariable('last_category');
-	$prev_cat = $objSession->GetVariable('prev_category');
-	//echo "Resetting Page [$prev_cat] -> [$last_cat]<br>";
-	
-	if($prev_cat != $last_cat) $GLOBALS[$module_prefix.'_var_list'][$page_variable] = 1;
-}
-
-if( !function_exists('GetVar') )
-{
-	/**
-	* @return string
-	* @param string $name
-	* @param bool $post_priority
-	* @desc Get's variable from http query
-	*/
-	function GetVar($name, $post_priority = false)
-	{
-		if(!$post_priority) // follow gpc_order in php.ini
-			return isset($_REQUEST[$name]) ? $_REQUEST[$name] : false;
-		else	// get variable from post 1stly if not found then from get
-			return isset($_POST[$name]) && $_POST[$name] !== false ? $_POST[$name] : ( isset($_GET[$name]) && $_GET[$name] ? $_GET[$name] : false );	
-	}
-}
-
-function SetVar($VarName, $VarValue)
-{
-	$_REQUEST[$VarName] = $VarValue;	
-	$_POST[$VarName] = $VarValue;
-}
-
-function PassVar(&$source)
-{
-	// source array + any count of key names in passed array	
-	$params = func_get_args();
-	array_shift($params);
-	
-	if( count($params) )
-	{
-		$ret = Array();
-		foreach($params as $var_name)
-			if( isset($source[$var_name]) )
-				$ret[] = $var_name.'='.$source[$var_name];
-		$ret = '&'.implode('&', $ret);
-	}
-	return $ret;
-}
-
-function GetSubmitVariable(&$array, $postfix)
-{
-	// gets edit status of module
-	// used in case if some modules share
-	// common action parsed by kernel parser,
-	// but each module uses own EditStatus variable
-	
-	$modules = Array('In-Link' => 'Link', 'In-News' => 'News', 'In-Bulletin' => 'Topic');
-	foreach($modules as $module => $prefix)
-		if( isset($array[$prefix.$postfix]) )
-			return Array('Module' => $module, 'variable' => $array[$prefix.$postfix]);
-	return false;
-}
-
-function GetModuleByAction()
-{
-	$prefix2module = Array('m' => 'In-Portal', 'l' => 'In-Link', 'n' => 'In-News', 'bb' => 'In-Bulletin');
-	$action = GetVar('Action');
-	if($action)
-	{
-		$module_prefix = explode('_', $action);
-		return $prefix2module[ $module_prefix[0] ];
-	}
-	else
-		return false;
-}
-
-function dir_size($dir) {
-   // calculates folder size based on filesizes inside it (recursively)
-   $totalsize=0;
-   if ($dirstream = @opendir($dir)) {
-       while (false !== ($filename = readdir($dirstream))) {
-           if ($filename!="." && $filename!="..")
-           {
-               if (is_file($dir."/".$filename))
-                   $totalsize+=filesize($dir."/".$filename);
-               
-               if (is_dir($dir."/".$filename))
-                   $totalsize+=dir_size($dir."/".$filename);
-           }
-       }
-   }
-   closedir($dirstream);
-   return $totalsize;
-} 
-
-function size($bytes) {
-  // shows formatted file/directory size
-  $types =  Array("la_bytes","la_kilobytes","la_megabytes","la_gigabytes","la_terabytes");
-   $current = 0;
-  while ($bytes > 1024) {
-   $current++;
-   $bytes /= 1024;
-  }
-  return round($bytes,2)." ".language($types[$current]);
-} 
-
-function echod($str)
-{
-	// echo debug output
-	echo str_replace( Array('[',']'), Array('[<b>', '</b>]'), $str).'<br>';	
-}
-
-
-function PrepareParams($source, $to_lower, $mapping)
-{
-	// prepare array with form values to use with item
-	$result = Array();
-	foreach($to_lower as $field)
-		$result[ $field ] = $source[ strtolower($field) ];
-	
-	if( is_array($mapping) )
-	{
-		foreach($mapping as $field_from => $field_to)
-			$result[$field_to] = $source[$field_from];
-	}
-	
-	return $result;
-}
-
-function GetELT($field, $phrases = Array())
-{
-	// returns FieldOptions equivalent in In-Portal
-	$ret = Array();
-	foreach($phrases as $phrase)
-		$ret[] = admin_language($phrase);
-	$ret = "'".implode("','", $ret)."'";
-	return 'ELT('.$field.','.$ret.')';
-}
-
-function GetModuleImgPath($module)
-{
-	global $rootURL, $admin;
-	return $rootURL.$module.'/'.$admin.'/images';
-}
-
-function ActionPostProcess($StatusField, $ListClass, $ListObjectName = '', $IDField = null)
-{
-	// each action postprocessing stuff from admin
-	if( !isset($_REQUEST[$StatusField]) ) return false;
-	
-	$list =& $GLOBALS[$ListObjectName];
-	if( !is_object($list) ) $list = new $ListClass();
-	$SFValue = $_REQUEST[$StatusField]; // status field value
- 	switch($SFValue)
-	{
- 		case 1: // User hit "Save" button
-    		$list->CopyFromEditTable($IDField);     
-    		break;
-		case 2: // User hit "Cancel" button
-			$list->PurgeEditTable($IDField);
-			break;
- 	}
-	if( function_exists('SpecificProcessing') ) SpecificProcessing($StatusField, $SFValue);
- 	if($SFValue == 1 || $SFValue == 2) $list->Clear();
-}
-
-function GetElem(&$array, $index)
-{
-	// returns array element by index if
-	// such index exists
-	return isset($array[$index]) ? $array[$index] : false;
-}
-
-function MakeHTMLTag($element, $attrib_prefix)
-{
-	$result = Array();
-	$ap_length = strlen($attrib_prefix);
-	foreach($element->attributes as $attib_name => $attr_value)
-		if( substr($attib_name, $ap_length) == $ap_length )
-			$result[] = substr($attib_name, $ap_length, strlen($attib_name)).'="'.$attr_value.'"';
-	return count($result) ? implode(' ', $result) : false;
-}
-
-function GetImportScripts()
-{
-	// return currently installed import scripts	
-	static $import_scripts = Array();
-	if( count($import_scripts) == 0 )
-	{
-		$sql = 'SELECT * FROM '.GetTablePrefix().'ImportScripts ORDER BY is_id';
-		$db =&GetADODBConnection();
-		$rs = $db->Execute($sql);
-		if( $rs && $rs->RecordCount() > 0 )
-		{
-			while(!$rs->EOF)
-			{
-				$rec =& $rs->fields;
-				$import_scripts[] = Array(	'label' => $rec['is_label'], 'url' => $rec['is_script'], 
-											'enabled' => $rec['is_enabled'], 'field_prefix' => $rec['is_field_prefix'],
-											'id' => $rec['is_string_id'], 'required_fields' => $rec['is_requred_fields'],
-											'module' => strtolower($rec['is_Module']) );
-				$rs->MoveNext();	
-			}
-		}
-		else
-		{
-			$import_scripts = Array();	
-		}
-	}
-	return $import_scripts;
-}
-
-function GetImportScript($id)
-{
-	$scripts = GetImportScripts();
-	return isset($scripts[$id]) ? $scripts[$id] : false;
-}
-function GetNextTemplate($current_template) 
-{ 
-	// used on front, returns next template to make 
-	// redirect to 
-	$dest = GetVar('dest', true); 
-	if(!$dest) $dest = GetVar('DestTemplate', true); 
-	return $dest ? $dest : $current_template; 
-}
-
-
-// functions for dealign with enviroment variable construction
-function GenerateModuleEnv($prefix, $var_list)
-{ 
-	// globalize module varible arrays
-	$main =& $GLOBALS[$prefix.'_var_list'];
-	$update =& $GLOBALS[$prefix.'_var_list_update'];
-	//echo "VAR: [$main]; VAR_UPDATE: [$update]<br>";
-	
-	// ensure that we have no empty values in enviroment variable
-	foreach($update as $vl_key => $vl_value)
-    	if(!$vl_value) $update[$vl_key] = '0'; // unset($update[$vl_key]);
-   
-    // if update var count is zero, then do nothing
-    if(count($update) == 0) return '';
-
-    foreach($main as $vl_key => $vl_value)
-    	if(!$vl_value) $main[$vl_key] = '0'; // unset($main[$vl_key]);
-    
-	$ret = Array();
-	foreach($var_list as $var_name)
-		$ret[] = GetEnvVar($prefix, $var_name);
-	
-	return ':'.$prefix.implode('-',$ret);
-}
-
-function GetEnvVar($prefix, $name)
-{
-	// get variable from template variable's list
-	// (used in module parsers to build env string)
-	$main =& $GLOBALS[$prefix.'_var_list'];
-	$update =& $GLOBALS[$prefix.'_var_list_update'];
-
-	return isset($update[$name]) ? $update[$name] : ( isset($main[$name]) ? $main[$name] : '');
-}
-
-/**
- * @return int
- * @desc Checks for debug mode
-*/
-function IsDebugMode()
-{
-	return defined('DEBUG_MODE') && constant('DEBUG_MODE') == 1 ? 1 : 0;	
-}
-
-
-?>
+<?php
+
+$vars = parse_portal_ini($pathtoroot."config.php");
+
+while($key = key($vars))
+{
+  $key = "g_".$key;
+  global $$key;
+  $$key = current($vars); //variable variables
+  next($vars);
+}
+
+/*list the tables which contain item data */
+$ItemTables = array();
+
+$KeywordIgnore = array();
+global $debuglevel;
+
+$debuglevel = 0;
+//$GLOBALS['debuglevel'] = 0;
+
+/*New, Hot, Pop field values */
+define('NEVER', 0);
+define('ALWAYS', 1);
+define('AUTO', 2);
+
+/*Status Values */
+define('STATUS_DISABLED', 0);
+define('STATUS_ACTIVE', 1);
+define('STATUS_PENDING', 2);
+
+$LogLevel=0;
+$LogFile = NULL;
+
+
+function parse_portal_ini($file, $parse_section = false) { 
+    if(!file_exists($file) && !is_readable($file))  
+        die('Could Not Open Ini File'); 
+     
+    $contents = file($file); 
+     
+    $retval = array(); 
+     
+    $section = ''; 
+    $ln = 1;
+    $resave = false;
+    foreach($contents as $line) { 
+    		if ($ln == 1 && $line != '<'.'?'.'php die() ?'.">\n") {
+    			$resave = true;
+    		}
+    		$ln++;
+        $line = trim($line); 
+        $line = eregi_replace(';[.]*','',$line); 
+        if(strlen($line) > 0) { 
+            //echo $line . " - "; 
+            if(eregi('^[[a-z]+]$',str_replace(' ', '', $line))) { 
+                //echo 'section'; 
+                $section = substr($line,1,(strlen($line)-2)); 
+                if ($parse_section) {
+                	$retval[$section] = array(); 
+                }
+                continue;
+            } elseif(eregi('=',$line)) { 
+                //echo 'main element'; 
+                list($key,$val) = explode(' = ',$line); 
+                if (!$parse_section) {
+                	$retval[trim($key)] = str_replace('"', '', $val); 
+                }
+                else {
+					$retval[$section][trim($key)] = str_replace('"', '', $val);                 	
+                }
+            } //end if 
+            //echo '<br />'; 
+        } //end if 
+    } //end foreach 
+    if ($resave) {
+    	$fp = fopen($file, "w");
+    	reset($contents);
+			fwrite($fp,'<'.'?'.'php die() ?'.">\n\n");
+			foreach($contents as $line) fwrite($fp,"$line");
+			fclose($fp);
+		}   
+    
+    return $retval; 
+}
+
+/**
+ * @return object
+ * @desc Returns reference to database connection
+*/
+function &GetADODBConnection()
+{
+	static $DB = null;
+	
+	global $g_DBType, $g_DBHost, $g_DBUser, $g_DBUserPassword, $g_DBName, $g_DebugMode;
+	global $ADODB_FETCH_MODE, $ADODB_COUNTRECS, $ADODB_CACHE_DIR, $pathtoroot;
+	
+	if( !isset($DB) && strlen($g_DBType) > 0 )
+	{
+		$DB = ADONewConnection($g_DBType);
+		$connected = $DB->Connect($g_DBHost, $g_DBUser, $g_DBUserPassword, $g_DBName);
+		if(!$connected) die("Error connecting to database $g_DBHost <br>\n");
+		
+		$ADODB_CACHE_DIR = $pathtoroot."cache";
+		$ADODB_FETCH_MODE = 2;
+		$ADODB_COUNTRECS = false;
+		$DB->debug = defined('ADODB_OUTP') ? 1 : 0;
+		$DB->cacheSecs = 3600;
+		$DB->Execute('SET SQL_BIG_SELECTS = 1');
+	}
+	elseif( !strlen($g_DBType) )
+	{
+		global $rootURL;
+		echo 'In-Portal is probably not installed, or configuration file is missing.<br>';
+		echo 'Please use the installation script to fix the problem.<br><br>';
+		if ( !preg_match('/admin/', __FILE__) ) $ins = 'admin/';
+		
+		echo '<a href="'.$rootURL.$ins.'install.php">Go to installation script</a><br><br>';
+		flush();
+		exit;
+	}
+	return $DB;
+}
+
+function GetNextResourceId($Increment=1)
+{
+	$sql = "UPDATE ".GetTablePrefix()."IdGenerator SET lastid=lastid+".$Increment;
+    $adodbConnection = &GetADODBConnection();
+    $adodbConnection->Execute($sql);    
+    $rs = $adodbConnection->Execute("SELECT lastid FROM ".GetTablePrefix()."IdGenerator");
+    $val = $rs->fields["lastid"];
+    if(!$rs || $rs->EOF)
+    {   
+    	echo $adodbConnection->ErrorMsg(); 
+        $sql = "INSERT INTO ".GetTablePrefix()."IdGenerator (lastid) VALUES ($Increment)";
+        $adodbConnection->Execute($sql);
+        $val = 1;
+    }
+    $val = $val-($Increment-1); 
+    return $val;
+}
+
+function AddSlash($s)
+{
+    if(substr($s,-1) != "/")
+    {
+        return $s."/";
+    }
+    else
+        return $s;
+}
+
+function StripNewline($s)
+{
+	$bfound = false;
+	while (strlen($s)>0 && !$bfound)
+	{
+		if(ord(substr($s,-1))<32)
+		{
+			$s = substr($s,0,-1);
+		}
+		else
+		  $bfound = true;
+	}
+	return $s;
+}
+
+function DeleteElement($array, $indice) 
+{
+  for($i=$indice;$i<count($array)-1;$i++) 
+        $array[$i] = $array[$i+1]; 
+  unset($array[count($array)-1]);
+  return $array;
+}
+
+function DeleteElementValue($needle, &$haystack) 
+{
+  while(($gotcha = array_search($needle,$haystack)) > -1)
+   unset($haystack[$gotcha]);
+}	
+
+function TableCount($TableName, $where="",$JoinCats=1)
+{
+    $db = &GetADODBConnection();
+    if(!$JoinCats)
+    {    
+      $sql = "SELECT count(*) as TableCount FROM $TableName";
+    }
+    else
+        $sql = "SELECT count(*) as TableCount FROM $TableName INNER JOIN ".GetTablePrefix()."CategoryItems ON ".GetTablePrefix()."CategoryItems.ItemResourceId=$TableName.ResourceId";
+    if(strlen($where)>0)
+        $sql .= " WHERE ".$where;
+   
+    $rs = $db->Execute($sql);
+        
+//    echo "SQL TABLE COUNT: ".$sql."<br>\n";
+    
+    $res = $rs->fields["TableCount"];
+    return $res;
+}
+
+Function QueryCount($sql)
+{
+	$sql = preg_replace('/SELECT(.*)FROM[ \n\r](.*)/is','SELECT COUNT(*) AS TableCount FROM $2', $sql);
+	$sql = preg_replace('/(.*)LIMIT(.*)/is','$1', $sql);
+	$sql = preg_replace('/(.*)ORDER BY(.*)/is','$1', $sql);
+	
+  	$db =& GetADODBConnection();
+  	return $db->GetOne($sql);
+}
+    
+function GetPageCount($ItemsPerPage,$NumItems)
+{
+ if($ItemsPerPage==0 || $NumItems==0)
+ {
+   return 1;
+ }            
+ $value = $NumItems/$ItemsPerPage;
+ return ceil($value);        
+}
+
+
+/**
+ * @return string
+ * @desc Returns database table prefix entered while installation
+*/
+function GetTablePrefix()
+{
+    global $g_TablePrefix;
+
+    return $g_TablePrefix;
+}
+
+function TableHasPrefix($t)
+{
+	$pre = GetTablePrefix();
+	
+	if(strlen($pre)>0)
+	{
+		if(substr($t,0,strlen($pre))==$pre)
+		{
+			return TRUE;
+		}
+		else 
+		  return FALSE;
+	}
+	else
+	  return TRUE;
+}
+
+function AddTablePrefix($t)
+{
+	if(!TableHasPrefix($t))
+	  $t = GetTablePrefix().$t;
+	  
+	return $t;
+}
+
+function ThisDomain()
+{
+	global $objConfig, $g_Domain;
+	
+	if($objConfig->Get("DomainDetect"))
+	{
+		$d = $_SERVER['HTTP_HOST'];
+	}
+	else
+	  $d = $g_Domain;
+	  
+	return $d;
+}
+
+function GetIndexUrl($secure=0)
+{
+    global $indexURL, $rootURL, $secureURL;
+    switch($secure)
+    {
+    	case 0:
+    		$ret = $indexURL;
+    		break;
+    		
+    	case 1:
+    		$ret = $secureURL."index.php";
+    		break;
+    		
+    	case 2:
+    		$ret = $rootURL."index.php";
+    		break;
+    		
+    	default:
+    		$ret = $i;
+    		break;
+    }					
+    return $ret;
+}
+
+function GetLimitSQL($Page,$PerPage)
+{
+  if($Page<1)
+    $Page=1;
+
+  if(is_numeric($PerPage))
+  {
+  	  if($PerPage==0)  	  
+  	    $PerPage = 20;
+      $Start = ($Page-1)*$PerPage;
+      $limit = "LIMIT ".$Start.",".$PerPage;
+  }
+  else
+      $limit = NULL;
+  return $limit;
+}
+
+function filelist ($currentdir, $startdir=NULL,$ext=NULL) 
+{
+  global $pathchar;
+
+  //chdir ($currentdir);
+
+  // remember where we started from
+  if (!$startdir) 
+  {
+      $startdir = $currentdir;
+  }
+
+  $d = @opendir($currentdir);
+
+  $files = array();
+  if(!$d)
+    return $files;  
+  //list the files in the dir
+  while (false !== ($file = readdir($d))) 
+  {
+      if ($file != ".." && $file != ".") 
+      {
+          if (is_dir($currentdir."/".$file)) 
+          {
+              // If $file is a directory take a look inside
+              $a = filelist ($currentdir."/".$file, $startdir,$ext); 
+              if(is_array($a))
+                $files = array_merge($files,$a);
+          } 
+          else 
+          {
+              if($ext!=NULL)
+              {
+                  $extstr = stristr($file,".".$ext);
+                  if(strlen($extstr))
+                      $files[] = $currentdir."/".$file;
+              }
+              else
+                $files[] = $currentdir.'/'.$file;
+          }
+      }
+  }
+
+  closedir ($d);
+
+  return $files;
+}        
+
+function DecimalToBin($dec,$WordLength=8)
+{
+  $bits = array();
+  
+  $str = str_pad(decbin($dec),$WordLength,"0",STR_PAD_LEFT);
+  for($i=$WordLength;$i>0;$i--)
+  {
+      $bits[$i-1] = (int)substr($str,$i-1,1);
+  }
+  return $bits;
+}
+/*
+function inp_escape($in, $html_enable=0)
+{
+	$out = stripslashes($in);
+	$out = str_replace("\n", "\n^br^", $out);
+	if($html_enable==0)
+	{
+		$out=ereg_replace("<","&lt;",$out);
+		$out=ereg_replace(">","&gt;",$out);
+		$out=ereg_replace("\"","&quot;",$out);
+		$out = str_replace("\n^br^", "\n<br />", $out);
+	}	
+	else
+		$out = str_replace("\n^br^", "\n", $out);
+	$out=addslashes($out);
+
+	return $out;
+}
+*/
+function inp_escape($var,$html=0)
+{
+	if($html)return $var;
+	if(is_array($var))
+		foreach($var as $k=>$v)
+			$var[$k]=inp_escape($v);
+	else
+//		$var=htmlspecialchars($var,ENT_NOQUOTES);
+		$var=strtr($var,Array('<'=>'&lt;','>'=>'&gt;',));
+	return $var;
+}
+function inp_striptags($var,$html=0)
+{
+	if($html)return $var;
+	if(is_array($var))
+		foreach($var as $k=>$v)
+			$var[$k]=inp_striptags($v);
+	else
+		$var=strip_tags($var);
+	return $var;
+}
+
+function inp_unescape($in)
+{
+	$out=stripslashes($in);
+
+	return $out;
+}
+
+function inp_textarea_unescape($in)
+{
+	return $in;
+	$out=stripslashes($in);
+	$out = str_replace("\n<br />", "\n", $out);
+	return $out;
+}
+
+function HighlightKeywords($Keywords, $html, $OpenTag="", $CloseTag="")
+{
+    global $objConfig;
+
+    if(!strlen($OpenTag))
+        $OpenTag = "<B>";
+    if(!strlen($CloseTag))
+            $CloseTag = "</B>";	
+	
+   	$r = preg_split('((>)|(<))', $html, -1, PREG_SPLIT_DELIM_CAPTURE);
+   	
+   	foreach ($Keywords as $k) {	   	
+	   	for ($i = 0; $i < count($r); $i++) {
+	       if ($r[$i] == "<") {
+	           $i++; continue;
+	       }
+	       $r[$i] = preg_replace("/($k)/i", "$OpenTag\\1$CloseTag", $r[$i]);
+	    }
+   	}
+   	return join("", $r);
+}
+
+/*
+function HighlightKeywords($Keywords,$html, $OpenTag="", $CloseTag="")
+{
+    global $objConfig;
+
+    if(!strlen($OpenTag))
+        $OpenTag = "<B>";
+    if(!strlen($CloseTag))
+            $CloseTag = "</B>";
+    $ret = strip_tags($html);
+
+    foreach ($Keywords as $k)
+    {   
+        if(strlen($k))
+        {        
+          //$html = str_replace("<$k>", ":#:", $html);
+          //$html = str_replace("</$k>", ":##:", $html);
+          //$html = strip_tags($html);
+          if ($html = preg_replace("/($k)/Ui","$OpenTag\\1$CloseTag", $html))
+          //if ($html = preg_replace("/(>[^<]*)($k)([^<]*< )/Ui","$OpenTag\\1$CloseTag", $html))
+            $ret = $html;
+          //$ret = str_replace(":#:", "<$k>", $ret);
+          //$ret = str_replace(":##:", "</$k>", $ret);
+        }
+    }
+    return $ret;        
+}
+*/
+function ExtractDatePart($part,$datestamp)
+{
+    switch($part)
+    {
+        case "month":
+            if($datestamp<=0)
+            {                        
+                $ret = "";
+            }
+            else
+              $ret = adodb_date("m",$datestamp);
+        break;		
+        case "day":
+            if($datestamp<=0)
+            {                        
+                $ret = "";
+            }
+            else
+                $ret = adodb_date("d", $datestamp);
+        break;		
+        case "year":
+            if($datestamp<=0)
+            {                        
+                $ret = "";
+            }
+            else
+                $ret = adodb_date("Y", $datestamp);
+        break;
+        case "time_24hr":
+            if($datestamp<=0)
+            {                        
+                $ret = "";
+            }
+            else
+                $ret = adodb_date("H:i", $datestamp);
+        break;
+        case "time_12hr":
+            if($datestamp<=0)
+            {
+                $ret = "";
+            }
+            else
+                $ret = adodb_date("g:i a",$datestamp);
+       		break;
+       	default:
+       		$ret = adodb_date($part, $datestamp);
+       		break;
+     }
+    return $ret;
+}
+
+function GetLocalTime($TimeStamp,$TargetZone=NULL)
+{
+    if($TargetZone==NULL)
+        $TargetZone = $objConfig->Get("Config_Site_Time");   
+    $server = $objConfig->Get("Config_Server_Time");
+    if($TargetZone!=$server)
+    {    
+      $offset = ($server - $TargetZone) * -1;
+      $TimeStamp = $TimeStamp + (3600 * $offset);
+    }
+    return $TimeStamp;
+}
+
+function _unhtmlentities ($string)
+{
+    $trans_tbl = get_html_translation_table (HTML_ENTITIES);
+    $trans_tbl = array_flip ($trans_tbl);
+    return strtr ($string, $trans_tbl);
+}
+
+function getLastStr($hay, $need){
+  $getLastStr = 0;
+  $pos = strpos($hay, $need);
+  if (is_int ($pos)){ //this is to decide whether it is "false" or "0"
+   while($pos) {
+     $getLastStr = $getLastStr + $pos + strlen($need);
+     $hay = substr ($hay , $pos + strlen($need));
+     $pos = strpos($hay, $need);
+   }
+   return $getLastStr - strlen($need);
+  } else {
+   return -1; //if $need wasn´t found it returns "-1" , because it could return "0" if it´s found on position "0".
+  }
+} 
+
+function ReplaceSingleTag($tag,$text)
+{
+	$tag = strtolower($tag);
+	$opentag = '['.$tag;
+  	$closetag = '[/'.$tag.']';
+  
+  	if( stristr($text,$opentag) )
+  	{
+  		$pos = strpos( strtolower($text), $opentag.' '); // tag has parameters
+  		if($pos === false)
+  		{
+  			$pos = strpos( strtolower($text), $opentag.']');
+  		}
+
+  		$endopen = strpos($text,']',$pos);
+  		$closepos = strpos( strtolower($text),$closetag,$pos);
+
+  		if($closepos)
+  		{
+  			$taglength = ($closepos - $endopen) + strlen($closetag);
+  			$tagText = substr($text,$pos, $closepos + strlen($closetag) - $pos);
+  			$innerText = substr($text,$endopen+1,$closepos - $endopen-1);
+  			if($tag=="UL")
+  			{
+  				$innerText = str_replace("[*]","<LI>",$innerText);
+  			}
+  			$tagText = substr($tagText,1,($endopen - $pos)-1);
+  			//echo "Matched $tagText <br>\n";
+  			$tagText = "<".$tagText.">";
+  			$replace_text = $tagText.$innerText."</".$tag.">";
+  			$text = substr($text,0,$pos).$replace_text.substr($text,$closepos+strlen($closetag));
+  			return $text;
+  		}
+  		else
+  		return $text;
+  	}
+  	else
+  	return $text;
+}
+
+function ReplaceTag($tag,$text)
+{
+  $new_text = ReplaceSingleTag($tag,$text);
+  
+  while($new_text != $text)
+  {
+      $text = $new_text;
+      $new_text = ReplaceSingleTag($tag,$text);
+  }
+  return $new_text;
+}
+
+function ReplaceURL($text)
+{  
+  
+	// process url bbtags without href parameter
+	$text = preg_replace('/\[url\]([^\]]*)\[\/url\]/U', '[url href="$1"]$1[/url]', $text);
+	
+	// change bbcode to href's
+	while( stristr($text,'[url') )
+	{
+		$urlpos = strpos( strtolower($text), '[url');
+		$endopen = strpos($text,']',$urlpos);
+		if($endopen)
+		{
+			$url = '<a target="_blank"'.substr($text,$urlpos+4,$endopen - ($urlpos+4));
+			$url .= '>';
+			$url = _unhtmlentities($url);
+			$text = substr($text,0,$urlpos).$url.substr($text,$endopen+1);
+		}
+		else
+		{
+			break;	
+		}
+	}
+	$text = str_replace(Array('[/url]','[/URL]'),Array('</a>','</a>'),$text);
+	return $text;
+}
+
+
+function ReplaceBBCode($text)
+{
+  	global $objConfig;
+
+  	// BBCode: [b], [i], [u], [ul], [font]
+  	$tags = explode(",",$objConfig->Get("BBTags"));
+  	for($i = 0; $i < count($tags); $i++)
+  	{
+  		$text = ReplaceTag(strtoupper($tags[$i]),$text);
+  	}
+
+  	// BBCode: [url href="xxx"]xxx[/url]
+  	$text = ReplaceURL($text);
+  	
+  	// BBCode: [code]xxx[/code]
+  	//$text = preg_replace('/\[code[^\]]*\](.*)\[\/code[^\]]*\]/Ues', 'highlight_string( _unhtmlentities(\'$1\') , true);', $text);
+  	$text = preg_replace('/\[code[^\]]*\](.*)\[\/code[^\]]*\]/Ues', 'highlight_string( _unhtmlentities( stripslashes("$1") ) , true);', $text);
+  	return $text;
+}
+
+function GetMinValue($Table,$Field, $Where=NULL)
+{
+    $ret = 0;
+    $sql = "SELECT min($Field) as val FROM $Table ";
+    if(strlen($where))
+        $sql .= "WHERE $Where";
+    $ado = &GetADODBConnection();
+    $rs = $ado->execute($sql);
+    if($rs)
+        $ret = (int)$rs->fields["val"];
+    return $ret;
+}
+
+function getmicrotime()
+{ 
+    list($usec, $sec) = explode(" ",microtime()); 
+    return ((float)$usec + (float)$sec); 
+} 
+
+function SetMissingDataErrors($f)
+{
+    global $FormError;
+
+    $count = 0;
+    if(is_array($_POST))
+    {    
+      if(is_array($_POST["required"]))
+      {      
+        foreach($_POST["required"] as $r)
+        {
+          $found = FALSE;
+          if(is_array($_FILES))
+          {
+            if( isset($_FILES[$r]) && $_FILES[$r]['size'] > 0 ) $found = TRUE;
+          }
+        
+          if(!strlen(trim($_POST[$r])) && !$found)
+          {           
+            $count++;
+            
+            if (($r == "dob_day") || ($r == "dob_month") || ($r == "dob_year"))
+            	$r = "dob";            	
+            	
+            $tag = isset($_POST["errors"]) ? $_POST["errors"][$r] : '';
+            if(!strlen($tag))
+              $tag = "lu_ferror_".$f."_".$r; 
+            $FormError[$f][$r] = language($tag);
+          }
+        }
+      }
+    }
+    return $count;
+}
+
+function makepassword($length=10)
+{
+  $pass_length=$length; 
+
+  $p1=array('b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z');
+  $p2=array('a','e','i','o','u'); 
+  $p3=array('1','2','3','4','5','6','7','8','9');   
+  $p4=array('(','&',')',';','%');    // if you need real strong stuff 
+
+  // how much elements in the array 
+  // can be done with a array count but counting once here is faster 
+
+  $s1=21;// this is the count of $p1    
+  $s2=5; // this is the count of $p2 
+  $s3=9; // this is the count of $p3 
+  $s4=5; // this is the count of $p4 
+
+  // possible readable combinations 
+
+  $c1='121';    // will be like 'bab' 
+  $c2='212';      // will be like 'aba' 
+  $c3='12';      // will be like 'ab' 
+  $c4='3';        // will be just a number '1 to 9'  if you dont like number delete the 3 
+// $c5='4';        // uncomment to active the strong stuff 
+
+  $comb='4'; // the amount of combinations you made above (and did not comment out) 
+
+
+
+  for ($p=0;$p<$pass_length;) 
+  { 
+    mt_srand((double)microtime()*1000000); 
+    $strpart=mt_rand(1,$comb); 
+    // checking if the stringpart is not the same as the previous one 
+    if($strpart<>$previous) 
+    { 
+      $pass_structure.=${'c'.$strpart}; 
+
+      // shortcutting the loop a bit 
+      $p=$p+strlen(${'c'.$strpart}); 
+    } 
+    $previous=$strpart; 
+  } 
+
+
+  // generating the password from the structure defined in $pass_structure 
+  for ($g=0;$g<strlen($pass_structure);$g++) 
+  { 
+    mt_srand((double)microtime()*1000000); 
+    $sel=substr($pass_structure,$g,1); 
+    $pass.=${'p'.$sel}[mt_rand(0,-1+${'s'.$sel})]; 
+
+  } 
+  return $pass; 
+}
+
+function LogEntry($text,$writefile=FALSE)
+{
+  global $g_LogFile,$LogFile, $LogData, $LogLevel, $timestart;
+  
+  static $last;
+
+  if(strlen($g_LogFile))
+  { 
+    $el = str_pad(getmicrotime()- $timestart,10," "); 
+    if($last>0)
+      $elapsed = getmicrotime() - $last; 
+      
+    if(strlen($el)>10)
+        $el = substr($el,0,10);      
+    $indent = str_repeat("  ",$LogLevel);
+    $text = str_pad($text,$LogLevel,"==",STR_PAD_LEFT);
+    $LogData .= "$el:". round($elapsed,6).":$indent $text";
+    $last = getmicrotime();
+    if($writefile==TRUE && is_writable($g_LogFile))
+    {
+      if(!$LogFile)       
+      {
+         if(file_exists($g_LogFile))
+            unlink($g_LogFile);
+        $LogFile=@fopen($g_LogFile,"w");
+      }
+      if($LogFile)
+      {    
+        fputs($LogFile,$LogData);
+      }
+    }
+  }
+}
+
+function ValidEmail($email) 
+{
+    if (eregi("^[a-z0-9]+([-_\.]?[a-z0-9])+@[a-z0-9]+([-_\.]?[a-z0-9])+\.[a-z]{2,4}", $email))
+    {
+        return TRUE;
+    } 
+    else 
+    {
+        return FALSE;
+    }
+} 
+
+function language($phrase,$LangId=0)
+{
+    global $objSession, $objLanguageCache, $objLanguages;
+
+    if($LangId==0)
+        $LangId = $objSession->Get("Language");
+        
+	if($LangId==0)
+      $LangId = $objLanguages->GetPrimary();        
+
+    $translation = $objLanguageCache->GetTranslation($phrase,$LangId);
+
+    return $translation;
+}
+
+function admin_language($phrase,$lang=0,$LinkMissing=FALSE)
+{
+    global $objSession, $objLanguageCache, $objLanguages;
+    
+	//echo "Language passed: $lang<br>";
+	
+    if($lang==0)
+       $lang = $objSession->Get("Language");
+
+    //echo "Language from session: $lang<br>";
+    
+	if($lang==0)
+      $lang = $objLanguages->GetPrimary();   
+	
+    //echo "Language after primary: $lang<br>";
+    //echo "Phrase: $phrase<br>";
+	$translation = $objLanguageCache->GetTranslation($phrase,$lang);
+    if($LinkMissing && substr($translation,0,1)=="!" && substr($translation,-1)=="!")
+    {    	
+    	$res = "<A href=\"javascript:OpenPhraseEditor('&direct=1&label=$phrase'); \">$translation</A>";
+    	return $res;
+    }
+    else
+    	return $translation;
+}
+
+function prompt_language($phrase,$lang=0)
+{
+  return admin_language($phrase,$lang,TRUE);	
+}
+
+function GetPrimaryTranslation($Phrase)
+{
+	global $objLanguages;
+
+	$l = $objLanguages->GetPrimary();
+	return language($Phrase,$l);
+}
+
+function CategoryNameCount($ParentId,$Name)
+{
+	$cat_table = GetTablePrefix()."Category";
+	$sql = "SELECT Name from $cat_table WHERE ParentId=$ParentId AND ";
+	$sql .="(Name LIKE '".addslashes($Name)."' OR Name LIKE 'Copy of ".addslashes($Name)."' OR Name LIKE 'Copy % of ".addslashes($Name)."')";
+
+	$ado = &GetADODBConnection();
+	$rs = $ado->Execute($sql);
+	$ret = array();
+	while($rs && !$rs->EOF)
+	{
+		$ret[] = $rs->fields["Name"];
+		$rs->MoveNext();
+	}
+   	return $ret;
+}	
+
+function CategoryItemNameCount($CategoryId,$Table,$Field,$Name)
+{
+	$cat_table = GetTablePrefix()."CategoryItems";
+	$sql = "SELECT $Field FROM $Table INNER JOIN $cat_table ON ($Table.ResourceId=$cat_table.ItemResourceId) ";
+	$sql .=" WHERE ($Field LIKE 'Copy % of $Name' OR $Field LIKE '$Name' OR $Field LIKE 'Copy of $Name') AND CategoryId=$CategoryId";
+	//echo $sql."<br>\n ";
+	$ado = &GetADODBConnection();
+	$rs = $ado->Execute($sql);
+	$ret = array();
+	while($rs && !$rs->EOF)
+	{
+		$ret[] = $rs->fields[$Field];
+		$rs->MoveNext();
+	}
+   	return $ret;   	
+}
+
+function &GetItemCollection($ItemName)
+{
+  global $objItemTypes;
+
+  if(is_numeric($ItemName))
+  {
+  	$item = $objItemTypes->GetItem($ItemName);
+  }
+  else
+    $item = $objItemTypes->GetTypeByName($ItemName);
+  if(is_object($item))
+  {
+  	$module = $item->Get("Module");
+  	$prefix = ModuleTagPrefix($module);
+  	$func = $prefix."_ItemCollection";
+  	if(function_exists($func))
+  	{
+  	  $var =& $func();
+  	}
+  }
+  return $var;
+}
+
+	  
+function UpdateCategoryCount($ItemTypeName=0,$ListType=NULL)
+{
+	global $objCountCache, $objItemTypes;
+
+  	if(is_numeric($ItemTypeName))
+  		$item = $objItemTypes->GetItem($ItemTypeName);
+  	else
+    	$item = $objItemTypes->GetTypeByName($ItemTypeName);
+  
+  	if(is_object($item))
+  	{	
+  		$ItemType  = $item->Get("ItemType");
+  	
+		$sql = "DELETE FROM ".$objCountCache->SourceTable." WHERE ItemType=$ItemType";
+		if( is_numeric($ListType) ) $sql .= " AND ListType=$ListType";
+		$objCountCache->adodbConnection->Execute($sql);
+  	}  
+}
+
+function UpdateModifiedCategoryCount($ItemTypeName,$CatId=NULL,$Modifier=0,$ExtraId=NULL)
+{
+}
+
+function UpdateGroupCategoryCount($ItemTypeName,$CatId=NULL,$Modifier=0,$GroupId=NULL)
+{
+}
+
+function GetTagCache($module,$tag,$attribs,$env)
+{
+    global $objSystemCache, $objSession, $objConfig;
+
+    if($objConfig->Get("SystemTagCache"))
+    { 
+        $name = $tag;
+        if(is_array($attribs))
+        {    
+            foreach($attribs as $n => $val)
+            {    
+                $name .= "-".$val;
+            }
+        }
+        $CachedValue = $objSystemCache->GetContextValue($name,$module,$env, $objSession->Get("GroupList"));
+    }
+    else
+        $CachedValue="";
+    return $CachedValue;
+}
+
+function SaveTagCache($module, $tag, $attribs, $env, $newvalue)
+{
+    global $objSystemCache, $objSession, $objConfig;
+
+    if($objConfig->Get("SystemTagCache"))
+    {
+        $name = $tag;
+        if(is_array($attribs))
+        {    
+            foreach($attribs as $a => $val)
+            {    
+                $name .= "-".$val;
+            }
+        }
+        $objSystemCache->EditCacheItem($name,$newvalue,$module,0,$env,$objSession->Get("GroupList"));
+    }
+}
+
+function DeleteTagCache($name,$extraparams, $env="")
+{
+    global $objSystemCache, $objConfig;
+
+    if($objConfig->Get("SystemTagCache"))
+    { 
+        $where = "Name LIKE '$name%".$extraparams."'";
+        if(strlen($env))
+            $where .= " AND Context LIKE $env";
+        $objSystemCache->DeleteCachedItem($where);
+    }
+}
+
+function ParseTagLibrary()
+{
+	$objTagList = new clsTagList();
+	$objTagList->ParseInportalTags();
+	unset($objTagList);
+}
+
+function GetDateFormat($LangId=0)
+{
+  global $objLanguages;	
+  
+  if(!$LangId)
+    $LangId= $objLanguages->GetPrimary();
+  $l = $objLanguages->GetItem($LangId);	
+  if(is_object($l))
+  {
+  	$fmt = $l->Get("DateFormat");
+  }
+  else
+    $fmt = "m-d-Y";
+
+	if(isset($GLOBALS['FrontEnd'])&&$GLOBALS['FrontEnd'])
+		return $fmt;
+	return preg_replace('/y+/i','Y',$fmt);
+}
+
+function GetTimeFormat($LangId=0)
+{
+  global $objLanguages;	
+  
+  if(!$LangId)
+    $LangId= $objLanguages->GetPrimary();
+  $l = $objLanguages->GetItem($LangId);	
+  if(is_object($l))
+  {
+  	$fmt = $l->Get("TimeFormat");
+  }
+  else
+    $fmt = "H:i:s";
+  return $fmt;	
+}
+
+function LangDate($TimeStamp=NULL,$LangId=0)
+{  
+  $fmt = GetDateFormat($LangId);
+  $ret = adodb_date($fmt,$TimeStamp);
+  return $ret;
+}
+
+function LangTime($TimeStamp=NULL,$LangId=0)
+{ 
+  $fmt = GetTimeFormat($LangId);
+  $ret = adodb_date($fmt,$TimeStamp);
+  return $ret;
+}
+
+function LangNumber($Num,$DecPlaces=NULL,$LangId=0)
+{
+	global $objLanguages;
+	
+  if(!$LangId)
+    $LangId= $objLanguages->GetPrimary();
+  $l = $objLanguages->GetItem($LangId);	
+  if(is_object($l))
+  {
+  	$ret = number_format($Num,$DecPlaces,$l->Get("DecimalPoint"),$l->Get("ThousandSep"));
+  }
+  else 
+    $ret = $num;
+    
+  return $ret;	
+}
+
+function replacePngTags($x, $spacer="images/spacer.gif")
+{
+	global $rootURL,$pathtoroot;
+	
+    // make sure that we are only replacing for the Windows versions of Internet
+    // Explorer 5+, and not Opera identified as MSIE
+    $msie='/msie\s([5-9])\.?[0-9]*.*(win)/i';
+    $opera='/opera\s+[0-9]+/i';
+    if(!isset($_SERVER['HTTP_USER_AGENT']) ||
+        !preg_match($msie,$_SERVER['HTTP_USER_AGENT']) ||
+        preg_match($opera,$_SERVER['HTTP_USER_AGENT']))
+        return $x;
+    
+    // find all the png images in backgrounds
+    preg_match_all('/background-image:\s*url\(\'(.*\.png)\'\);/Uis',$x,$background);
+    for($i=0;$i<count($background[0]);$i++){
+        // simply replace:
+        //  "background-image: url('image.png');"
+        // with:
+        //  "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(
+        //      enabled=true, sizingMethod=scale src='image.png');"
+        // haven't tested to see if background-repeat styles work...
+        $x=str_replace($background[0][$i],'filter:progid:DXImageTransform.'.
+                'Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale'.
+                ' src=\''.$background[1][$i].'\');',$x);
+    }
+
+    // OK, time to find all the IMG tags with ".png" in them
+    preg_match_all('/(<img.*\.png.*>|<input.*type=([\'"])image\\2.*\.png.*>)/Uis',$x,$images);
+    while(list($imgnum,$v)=@each($images[0])){
+        $original=$v;
+        $atts=''; $width=0; $height=0;
+        // If the size is defined by styles, find
+        preg_match_all('/style=".*(width: ([0-9]+))px.*'.
+                        '(height: ([0-9]+))px.*"/Ui',$v,$arr2);
+        if(is_array($arr2) && count($arr2[0])){
+            // size was defined by styles, get values
+            $width=$arr2[2][0];
+            $height=$arr2[4][0];
+        }
+        // size was not defined by styles, get values
+        preg_match_all('/width=\"?([0-9]+)\"?/i',$v,$arr2);
+        if(is_array($arr2) && count($arr2[0])){
+            $width=$arr2[1][0];
+        }
+        preg_match_all('/height=\"?([0-9]+)\"?/i',$v,$arr2);
+        if(is_array($arr2) && count($arr2[0])){
+            $height=$arr2[1][0];
+        }
+        preg_match_all('/src=\"([^\"]+\.png)\"/i',$v,$arr2);
+        if(isset($arr2[1][0]) && !empty($arr2[1][0]))
+            $image=$arr2[1][0];
+        else
+            $image=NULL;
+
+        // We do this so that we can put our spacer.gif image in the same
+        // directory as the image
+        $tmp=split('[\\/]',$image);
+        array_pop($tmp);
+        $image_path=join('/',$tmp);
+           if(substr($image,0,strlen($rootURL))==$rootURL)
+           {
+          		$path = str_replace($rootURL,$pathtoroot,$image);
+           }
+          else
+          {
+        		$path = $pathtoroot."themes/telestial/$image";
+          }	
+//        echo "Sizing $path.. <br>\n";
+//        echo "Full Tag: ".htmlentities($image)."<br>\n";        
+        //if(!$height || !$width)
+        //{
+
+          $g = imagecreatefrompng($path);
+          if($g)
+          {
+          	$height = imagesy($g);
+          	$width = imagesx($g);
+          }	
+        //}
+        if(strlen($image_path)) $image_path.='/';
+
+        // end quote is already supplied by originial src attribute
+        $replace_src_with=$spacer.'" style="width: '.$width.
+            'px; height: '.$height.'px; filter: progid:DXImageTransform.'.
+            'Microsoft.AlphaImageLoader(src=\''.$image.'\', sizingMethod='.
+            '\'scale\')';
+        
+        // now create the new tag from the old
+        $new_tag=str_replace($image,$replace_src_with,$original);
+        
+        // now place the new tag into the content
+        $x=str_replace($original,$new_tag,$x);
+    }
+    return $x;
+}
+
+function print_pre($str)
+{
+	// no comments here :)
+	echo '<pre>'.print_r($str, true).'</pre>';
+}
+
+function GetOptions($field) // by Alex
+{
+	// get dropdown values from custom field
+	$tmp =& new clsCustomField();
+	
+	$tmp->LoadFromDatabase($field, 'FieldName');
+	$tmp_values = $tmp->Get('ValueList');
+	unset($tmp);
+	$tmp_values = explode(',', $tmp_values);
+	
+	foreach($tmp_values as $mixed)
+	{
+		$elem = explode('=', trim($mixed));
+		$ret[ $elem[0] ] = $elem[1];
+	}
+	return $ret;
+}
+
+function ResetPage($module_prefix, $page_variable = 'p')
+{
+	// resets page in specific module when category is changed	
+	global $objSession;
+	if( !is_object($objSession) ) // when changing pages session doesn't exist -> InPortal BUG
+	{
+		global $var_list, $SessionQueryString, $FrontEnd;
+		//if(!$var_list["sid"]) $var_list["sid"] = $_COOKIE["sid"];
+		$objSession = new clsUserSession($var_list["sid"],($SessionQueryString && $FrontEnd==1));
+	}
+	//echo "SID_RESET: ".$GLOBALS['var_list']["sid"].'(COOKIE_SID: '.$_COOKIE["sid"].')<br>';
+	$last_cat = $objSession->GetVariable('last_category');
+	$prev_cat = $objSession->GetVariable('prev_category');
+	//echo "Resetting Page [$prev_cat] -> [$last_cat]<br>";
+	
+	if($prev_cat != $last_cat) $GLOBALS[$module_prefix.'_var_list'][$page_variable] = 1;
+}
+
+if( !function_exists('GetVar') )
+{
+	/**
+	* @return string
+	* @param string $name
+	* @param bool $post_priority
+	* @desc Get's variable from http query
+	*/
+	function GetVar($name, $post_priority = false)
+	{
+		if(!$post_priority) // follow gpc_order in php.ini
+			return isset($_REQUEST[$name]) ? $_REQUEST[$name] : false;
+		else	// get variable from post 1stly if not found then from get
+			return isset($_POST[$name]) && $_POST[$name] !== false ? $_POST[$name] : ( isset($_GET[$name]) && $_GET[$name] ? $_GET[$name] : false );	
+	}
+}
+
+function SetVar($VarName, $VarValue)
+{
+	$_REQUEST[$VarName] = $VarValue;	
+	$_POST[$VarName] = $VarValue;
+}
+
+function PassVar(&$source)
+{
+	// source array + any count of key names in passed array	
+	$params = func_get_args();
+	array_shift($params);
+	
+	if( count($params) )
+	{
+		$ret = Array();
+		foreach($params as $var_name)
+			if( isset($source[$var_name]) )
+				$ret[] = $var_name.'='.$source[$var_name];
+		$ret = '&'.implode('&', $ret);
+	}
+	return $ret;
+}
+
+function GetSubmitVariable(&$array, $postfix)
+{
+	// gets edit status of module
+	// used in case if some modules share
+	// common action parsed by kernel parser,
+	// but each module uses own EditStatus variable
+	
+	$modules = Array('In-Link' => 'Link', 'In-News' => 'News', 'In-Bulletin' => 'Topic');
+	foreach($modules as $module => $prefix)
+		if( isset($array[$prefix.$postfix]) )
+			return Array('Module' => $module, 'variable' => $array[$prefix.$postfix]);
+	return false;
+}
+
+function GetModuleByAction()
+{
+	$prefix2module = Array('m' => 'In-Portal', 'l' => 'In-Link', 'n' => 'In-News', 'bb' => 'In-Bulletin');
+	$action = GetVar('Action');
+	if($action)
+	{
+		$module_prefix = explode('_', $action);
+		return $prefix2module[ $module_prefix[0] ];
+	}
+	else
+		return false;
+}
+
+function dir_size($dir) {
+   // calculates folder size based on filesizes inside it (recursively)
+   $totalsize=0;
+   if ($dirstream = @opendir($dir)) {
+       while (false !== ($filename = readdir($dirstream))) {
+           if ($filename!="." && $filename!="..")
+           {
+               if (is_file($dir."/".$filename))
+                   $totalsize+=filesize($dir."/".$filename);
+               
+               if (is_dir($dir."/".$filename))
+                   $totalsize+=dir_size($dir."/".$filename);
+           }
+       }
+   }
+   closedir($dirstream);
+   return $totalsize;
+} 
+
+function size($bytes) {
+  // shows formatted file/directory size
+  $types =  Array("la_bytes","la_kilobytes","la_megabytes","la_gigabytes","la_terabytes");
+   $current = 0;
+  while ($bytes > 1024) {
+   $current++;
+   $bytes /= 1024;
+  }
+  return round($bytes,2)." ".language($types[$current]);
+} 
+
+function echod($str)
+{
+	// echo debug output
+	echo str_replace( Array('[',']'), Array('[<b>', '</b>]'), $str).'<br>';	
+}
+
+
+function PrepareParams($source, $to_lower, $mapping)
+{
+	// prepare array with form values to use with item
+	$result = Array();
+	foreach($to_lower as $field)
+		$result[ $field ] = $source[ strtolower($field) ];
+	
+	if( is_array($mapping) )
+	{
+		foreach($mapping as $field_from => $field_to)
+			$result[$field_to] = $source[$field_from];
+	}
+	
+	return $result;
+}
+
+function GetELT($field, $phrases = Array())
+{
+	// returns FieldOptions equivalent in In-Portal
+	$ret = Array();
+	foreach($phrases as $phrase)
+		$ret[] = admin_language($phrase);
+	$ret = "'".implode("','", $ret)."'";
+	return 'ELT('.$field.','.$ret.')';
+}
+
+function GetModuleImgPath($module)
+{
+	global $rootURL, $admin;
+	return $rootURL.$module.'/'.$admin.'/images';
+}
+
+function ActionPostProcess($StatusField, $ListClass, $ListObjectName = '', $IDField = null)
+{
+	// each action postprocessing stuff from admin
+	if( !isset($_REQUEST[$StatusField]) ) return false;
+	
+	$list =& $GLOBALS[$ListObjectName];
+	if( !is_object($list) ) $list = new $ListClass();
+	$SFValue = $_REQUEST[$StatusField]; // status field value
+ 	switch($SFValue)
+	{
+ 		case 1: // User hit "Save" button
+    		$list->CopyFromEditTable($IDField);     
+    		break;
+		case 2: // User hit "Cancel" button
+			$list->PurgeEditTable($IDField);
+			break;
+ 	}
+	if( function_exists('SpecificProcessing') ) SpecificProcessing($StatusField, $SFValue);
+ 	if($SFValue == 1 || $SFValue == 2) $list->Clear();
+}
+
+function GetElem(&$array, $index)
+{
+	// returns array element by index if
+	// such index exists
+	return isset($array[$index]) ? $array[$index] : false;
+}
+
+function MakeHTMLTag($element, $attrib_prefix)
+{
+	$result = Array();
+	$ap_length = strlen($attrib_prefix);
+	foreach($element->attributes as $attib_name => $attr_value)
+		if( substr($attib_name, $ap_length) == $ap_length )
+			$result[] = substr($attib_name, $ap_length, strlen($attib_name)).'="'.$attr_value.'"';
+	return count($result) ? implode(' ', $result) : false;
+}
+
+function GetImportScripts()
+{
+	// return currently installed import scripts	
+	static $import_scripts = Array();
+	if( count($import_scripts) == 0 )
+	{
+		$sql = 'SELECT * FROM '.GetTablePrefix().'ImportScripts ORDER BY is_id';
+		$db =&GetADODBConnection();
+		$rs = $db->Execute($sql);
+		if( $rs && $rs->RecordCount() > 0 )
+		{
+			while(!$rs->EOF)
+			{
+				$rec =& $rs->fields;
+				$import_scripts[] = Array(	'label' => $rec['is_label'], 'url' => $rec['is_script'], 
+											'enabled' => $rec['is_enabled'], 'field_prefix' => $rec['is_field_prefix'],
+											'id' => $rec['is_string_id'], 'required_fields' => $rec['is_requred_fields'],
+											'module' => strtolower($rec['is_Module']) );
+				$rs->MoveNext();	
+			}
+		}
+		else
+		{
+			$import_scripts = Array();	
+		}
+	}
+	return $import_scripts;
+}
+
+function GetImportScript($id)
+{
+	$scripts = GetImportScripts();
+	return isset($scripts[$id]) ? $scripts[$id] : false;
+}
+function GetNextTemplate($current_template) 
+{ 
+	// used on front, returns next template to make 
+	// redirect to 
+	$dest = GetVar('dest', true); 
+	if(!$dest) $dest = GetVar('DestTemplate', true); 
+	return $dest ? $dest : $current_template; 
+}
+
+
+// functions for dealign with enviroment variable construction
+function GenerateModuleEnv($prefix, $var_list)
+{ 
+	// globalize module varible arrays
+	$main =& $GLOBALS[$prefix.'_var_list'];
+	$update =& $GLOBALS[$prefix.'_var_list_update'];
+	//echo "VAR: [$main]; VAR_UPDATE: [$update]<br>";
+	
+	// ensure that we have no empty values in enviroment variable
+	foreach($update as $vl_key => $vl_value)
+    	if(!$vl_value) $update[$vl_key] = '0'; // unset($update[$vl_key]);
+   
+    // if update var count is zero, then do nothing
+    if(count($update) == 0) return '';
+
+    foreach($main as $vl_key => $vl_value)
+    	if(!$vl_value) $main[$vl_key] = '0'; // unset($main[$vl_key]);
+    
+	$ret = Array();
+	foreach($var_list as $var_name)
+		$ret[] = GetEnvVar($prefix, $var_name);
+	
+	return ':'.$prefix.implode('-',$ret);
+}
+
+function GetEnvVar($prefix, $name)
+{
+	// get variable from template variable's list
+	// (used in module parsers to build env string)
+	$main =& $GLOBALS[$prefix.'_var_list'];
+	$update =& $GLOBALS[$prefix.'_var_list_update'];
+
+	return isset($update[$name]) ? $update[$name] : ( isset($main[$name]) ? $main[$name] : '');
+}
+
+/**
+ * @return int
+ * @desc Checks for debug mode
+*/
+function IsDebugMode()
+{
+	return defined('DEBUG_MODE') && constant('DEBUG_MODE') == 1 ? 1 : 0;	
+}
+
+
+?>

Property changes on: trunk/globals.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.44
\ No newline at end of property
+1.45
\ No newline at end of property