<?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; 
}

function &GetADODBConnection()
{
	global $g_adodbConnection, $g_DBType, $g_DBHost,$g_DBUser,$g_DBUserPassword,$g_DBName,$g_DebugMode;
    global $ADODB_FETCH_MODE,$ADODB_COUNTRECS,$ADODB_CACHE_DIR,$pathtoroot; 
	//echo '<pre>'.print_r( debug_backtrace() , true).'</pre>';
    if(!isset($g_adodbConnection) && strlen($g_DBType)>0)
    {
		$g_adodbConnection = ADONewConnection($g_DBType);
		
		$connected = $g_adodbConnection->Connect($g_DBHost,$g_DBUser,$g_DBUserPassword,$g_DBName);
        if(!$connected)
        {
            echo "Error connecting to database $g_DBHost <br>\n";
            die();
        }
        $ADODB_CACHE_DIR = $pathtoroot."cache"; 
        $ADODB_FETCH_MODE = 2;    
        $ADODB_COUNTRECS = FALSE; 
        $g_adodbConnection->debug = defined('ADODB_OUTP') ? 1 : 0;
        $g_adodbConnection->cacheSecs = 3600;
        $g_adodbConnection->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/', $_SERVER['SCRIPT_FILENAME'])) {
				$ins = 'admin/'; 
			}
			echo "<a href='$rootURL".$ins."install.php'>Go to installation script</a><br><br>";
			flush();
			die();
    }
	return $g_adodbConnection;
}

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)
{
  $countsql = "SELECT count(*) as TableCount ".substr($sql,strpos($sql," FROM "));
  if(strpos($countsql,"LIMIT"))
    $countsql = substr($countsql,0,strpos($countsql,"LIMIT"));
  if(strpos($countsql,"ORDER BY"))
    $countsql = substr($countsql,0,strpos($countsql,"ORDER BY"));
    
  $db = GetADODBConnection();
  $rs = $db->Execute($countsql);
  //echo $countsql."<br>\n";
  $res = $rs->fields["TableCount"];
  return $res;  
}
    
function GetPageCount($ItemsPerPage,$NumItems)
{
 if($ItemsPerPage==0 || $NumItems==0)
 {
   return 1;
 }            
 $value = $NumItems/$ItemsPerPage;
 return ceil($value);        
}


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;    	
    }					
    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_unescape($in)
{
	$out=stripslashes($in);

	return $out;
}

function inp_textarea_unescape($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;
     }
    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)
{
  $opentag = "[".$tag;
  $closetag = "[/".$tag."]";
  
  if(strstr($text,$opentag))
  {   
    $pos = strpos($text,$opentag." ");
    if($pos === false)
    {
        $pos = strpos($text,$opentag."]");
    }
    $endopen = strpos($text,"]",$pos);
    $closepos = strpos($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)
{  
  while(strstr($text,"[URL"))
  {
    $urlpos = strpos($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("[/URL]","</A>",$text);
  return $text;
}


function ReplaceBBCode($text)
{
  global $objConfig;

  $tags = explode(",",$objConfig->Get("BBTags"));
  for($i=0;$i<count($tags);$i++)
  {    
    $text = ReplaceTag(strtoupper($tags[$i]),$text);
  }
  $text = ReplaceURL($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";
  return $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') )
{
	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] ? $_POST[$name] : ( isset($_GET[$name]) && $_GET[$name] ? $_GET[$name] : false );	
	}
}

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 = $_REQUEST['Action'];
	$module_prefix = explode('_', $action);
	return $prefix2module[ $module_prefix[0] ];
}

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);
		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();	
		}
	}
	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>";
	
	// enshure 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] : '');
}



?>