<?
	### General functions version 1.02 17th july 2006
	$version_functions_general=1.02;
?>
<?
	$currentdate = date ("Y-m-d H:i:s", mktime (date("H"),date("i"),date("s"),date("m"),date("d"),date("Y")));
	$currentdateunix = time();

	# randomize
	$a=microtime();
	$i=2;
	$b="";
	do { $b.=$a[$i]; $i++; } while (($a[$i]<>" ") and ($i<=strlen($a)));
	srand ($b);

	function even($v) {
		if (!(1&$v)) {
 			return true;
 		} else {
 			return false;
 		}
	}
	function odd($v) {
		if (1&$v) {
 			return true;
 		} else {
 			return false;
 		}
	}

	function microtime_sec() {
   		list($usec, $sec) = explode(" ", microtime());
		return ((float)$usec + (float)$sec);
	}
	
	$auth_nb=3;
	
	function GiveAuthValue($nb) {
		switch ($nb) {
			case 1 : return "GZR23"; break;
			case 2 : return "8RBR1"; break;
			case 3 : return "6FOPZ"; break;
		}
	}

	function MakeList($dir) {
		global $found, $dirfound;
		global $basedir, $filezzz, $filenb, $filedir, $dirnbtotal, $dirname, $filezzzdir, $filename;
		global $savetext;
		
		chdir($basedir.$dir);
		$dirnb = 0;
		$zzzalert=false;
#		echo "goto dir : ".$basedir.$dir."<br>";
		$handle=opendir($basedir.$dir);
		while ((($file = readdir($handle))!=false) and (!($zzzalert))) {
				if ($file != ".") {
					if ($file != "..") {
						$filenb++;
						$filename[$filenb] = $file;
						$filedir[$filenb] = $dir;
						if (stristr($file,"zzzdir")) {
#							echo "*** zzz file found ***<br>";
							$zzzalert=true;
							$filezzz++;
							$filezzzdir[$filezzz] = $dir;
						}
#						echo "***".$dir."/".$file."***<br>";
						
						if (is_dir($file)) {
							$filenb--;
							$dirnb++;
							$dirarray[$dirnb] = $dir.'/'.$file;
							$dirnbtotal++;
							$dirname[$dirnbtotal] = $file;
#							echo "***".$dirnbtotal."/".$dirname[$dirnbtotal]."***<br>";
						}
					}
				}
		}
		closedir($handle); 
		
		for ($i=1; $i <= $dirnb; $i++) {
			$ok=true;
			for ($j=1; $j<=$filezzz; $j++) {
				if (strpos($dirarray[$i], $filezzzdir[$j]) === false) {
				} else {
#					echo "- not going into ".$dirarray[$i]."<br>";
					$ok=false;
				}
			}
			
			if ($ok) {
				MakeList($dirarray[$i]);
			}
		}
	}
	
	function MakeListImage($dir) {
		global $basedir, $filenb, $filename, $filedir, $filetime, $order, $filewidth, $fileheight;
		
		$filenb=0;
		$handle=opendir($basedir.$dir);
		while (($file = readdir($handle))!=false) {
			if (($file != ".") && ($file != "..") && ($file != "error_log")) {
				if (!is_dir($basedir.$dir."/".$file)) {
#					echo "***file=$file***<br>";
					$filenb++;
					$filename[$filenb] = $file;
					$filetime[$filenb] = filemtime($basedir.$dir."/".$file);

					$fn=$basedir.$dir."/".$file;
					$filedir[$filenb]=$dir;
					list($width, $height, $type, $attr) = getimagesize($fn);
					$filewidth[$filenb] = $width;
					$fileheight[$filenb] = $height;
#					echo "***".$filename[$filenb].":".$filetime[$filenb]."***<br>";
				}
			}
		}
		closedir($handle);
	}

	function GenPassword() {
		$possiblechars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrsturvwxyz1234567890";
		srand((double)microtime()*1000000);
		$rnd1 = rand(0, 62);
		$letter1 = $possiblechars[$rnd1];
		$rnd2 = rand(0, 62);
		$letter2 = $possiblechars[$rnd2];
		$rnd3 = rand(0, 62);
		$letter3 = $possiblechars[$rnd3];
		$rnd4 = rand(0, 62);
		$letter4 = $possiblechars[$rnd4];
		$rnd5 = rand(0, 62);
		$letter5 = $possiblechars[$rnd5];
		$rnd6 = rand(0, 62);
		$letter6 = $possiblechars[$rnd6];
		$newpwd = "$letter1$letter2$letter3$letter4$letter5$letter6";
		return $newpwd;
	}

	function Dice($sides) {
		$value = 0;
		if ($sides == 1) { $value = 1; }
		else { if ($sides <> 0) { $value = rand(1, $sides); } }
		return $value;
	}
	
	function Message($texttitle, $text) {
		echo "<div align=\"center\"><b>".$texttitle."</b>";
		if ($text <> "") { echo "<br>".$text; }
		echo "</div>";
	}
	
	function Messagelogin() {
		echo "<div align=\"center\"><b>User not registered or logged in</b><br>";
		echo "Please <a href=\"".IncL("login.php")."\" target=\"_top\">head on to login page</a> first";
		echo "</div>";
	}
	
	function echoA($text) {
		echo "<span class=\"arena\">".$text."</span>";
	}
	
	function echoAT($text) {
		echo "<span class=\"arenatitle\">".$text."</span>";
	}
	
	function echoAL($text) {
		echo "<span class=\"arenalink\">".$text."</span>";
	}
	
	function AddToLog($report) {
		global $login;
		global $currentdate;
		
		$report = $currentdate." : ".$report;
		$fn = "log".$login.".txt";
		$fn = Incref($fn, "zzzdirloginlogs.txt");
#		if (file_exists ($fn)) {
#			$fp = fopen ($fn, "r");
#			$oldreport = fread($fp, filesize($fn));
#			fclose($fp);
#			$report = $report.$oldreport;
#		}
		$fp = fopen ($fn, "a");
		fwrite($fp, $report);
		fclose($fp);
		$perm = 33279;
		chmod($fn, $perm);
	}
	
	function AddToConnectionLog($report) {
		global $login;
		
		$report = $report;
		$fn = "connectionlog.txt";
		$fn = Incref($fn, "zzzdirloginlogs.txt");
#		if (file_exists ($fn)) {
#			$fp = fopen ($fn, "r");
#			$oldreport = fread($fp, filesize($fn));
#			fclose($fp);
#			$report = $report.$oldreport;
#		}
		$fp = fopen ($fn, "a");
		fwrite($fp, $report);
		fclose($fp);
		$perm = 33279;
#		chmod($fn, $perm);
	}

	# ouvre un fichier, et retourne le contenu
	function OpenFile($fn) {
		if (file_exists($fn)) {
			$fp = fopen ($fn, "r"); # "r" is used to open a file in read mode
			$content = fread($fp, filesize($fn));
			fclose($fp);
		}
		return $content;
	}

	# ouvre un fichier excel, et ressort le tableau correspondant
	# fonctionne bien, mais beaucoup trop lent !! 15 secondes pour lire un fichier excel
	# qui prend moins d'un dixième de seconde à lire en format csv
	function DecrunchXLS($filename) {
		global $cell, $lin, $col;
		global $ex;

		$filename = str_replace("/", "\\", $filename);

		$wkb = $ex->application->Workbooks->Open($filename) or Die ("Did not open");
		$sheets = $wkb->Worksheets(1);

		$lin = $sheets->UsedRange->Rows->Count;
		$col = $sheets->UsedRange->Columns->Count;
#		echo "*** time inside ".microtime()."***<br>";

		for ($j=1; $j<=$lin; $j++) {
			for ($i=1; $i<=$col; $i++) {
				$c = $sheets->Cells($j,$i); # c'est cette instruction
				# qui prends 95% du temps de calcul de la fonction
#				$c->activate;
				$cell[$i][$j] = $c->value;
			}
		}
		$ex->application->ActiveWorkbook->Close("False");
#		echo "*** time closed ".microtime()."***<br>";
/*
		echo "<table border=1>";
		for ($j=1; $j<=$lin; $j++) {
			echo "<tr>";
			for ($i=1; $i<=$col; $i++) {
				echo "<td>";
				echo $cell[$i][$j]."<br>";
				echo "</td>";
			}
			echo "</tr>";
		}
		echo "</table>";
*/
	}

	# fonction recoit le contenu d'un fichier csv, et ressort le tableau correspondant
	function Decrunch($content) {
		global $cell, $lin, $col;
		if (($lin!=0) && ($col!=0)) {
			$cell = array_fill(0, $lin, array_fill(0, $col, null));
		}
/*		for ($j=1; $j<=500; $j++) {
			for ($i=1; $i<=100; $i++) {
				$cell[$j][$i]=0;
			}
		}*/
		
		$l = strlen($content);
		$lin=1; $col=0; $maxcol=0; $maxlin=0; $cel="";
		$incell=false;
		for ($i=0; $i<=$l-1; $i++) {
			$c = $content[$i];
			if ($c=="\"") {
				$incell=!$incell;
			}
			switch (ord($c)) {
				case 10 :
					if (!$incell) {
					$col++;
					if ($col>$maxcol) { $maxcol=$col; }
					if ($lin>$maxlin) { $maxlin=$lin; }
					if ($cel!="") { $cell[$lin][$col]=$cel; }
#					echo $cel." (10) ";
					$cel="";
					
					$col=0;
					$lin++;
					}
				break;
				case 13 :
					if (!$incell) {
					$col++;
					if ($col>$maxcol) { $maxcol=$col; }
					if ($lin>$maxlin) { $maxlin=$lin; }
					if ($cel!="") { $cell[$lin][$col]=$cel; }
#					echo $cel." (13) ";
					$cel="";
					}
				break;
				case 59 :
					if (!$incell) {
					$col++;
					if ($col>$maxcol) { $maxcol=$col; }
					if ($lin>$maxlin) { $maxlin=$lin; }
					if ($cel!="") { $cell[$lin][$col]=$cel; }
#					echo $cel."<br>";
					$cel="";
					}
				break;
				default :
					$cel.=$c;
				break;
			}
		}
		$lin=$maxlin;
		$col=$maxcol;
	}

	# fonctions d'affichage dans une table
	# affiche un nombre entier avec espaces pour les milliers
	function Nf($num) {
		if ($num==0) {
			return "<td></td>";
		} else {
			return "<td align=\"right\">&nbsp;".number_format((int)($num), 0, ',', ' ')."&nbsp;</td>";
		}
	}

	# idem, avec un pourcentage après :p
	function Nfp($num) {
		if ($num==0) {
			return "<td></td>";
		} else {
			return "<td align=\"right\">&nbsp;".number_format((int)($num), 0, ',', ' ')."%&nbsp;</td>";
		}
	}

	# affiche un texte, avec des espaces avant et après
	function Tf($txt) {
		if ($txt=="") {
			return "<td></td>";
		} else {
			return "<td align=\"right\">&nbsp;&nbsp;".$txt."&nbsp;</td>";
		}
	}

	# affiche un texte en gras, avec espaces après (titre)
	function Tit($txt) {
		if ($txt=="") {
			return "<td></td>";
		} else {
			return "<td><b>&nbsp;".$txt."&nbsp;&nbsp;&nbsp;</b></td>";
		}
	}

	# affiche des + ou - avec une case verte ou rouge
	function Co($txt) {
		if (($txt=="++") or ($txt=="+")) {
			return "<td bgcolor=#33FF33 align=\"center\">".$txt."</td>";
		} else {
			if (($txt=="--") or ($txt=="-")) {
				return "<td bgcolor=#FF3333 align=\"center\">".$txt."</td>";
			} else {
				return "<td></td>";
			}
		}
	}

	# affiche un nombre dans une case rouge, jaune ou blanche selon sa valeur
	function CocNeg($ch,$limite) {
		if ($ch<=0) {
			return "<td bgcolor=#33FF33 align=\"center\">".$ch."</td>";
		} else {
			if ($ch>=$limite) {
				return "<td bgcolor=#FF3333 align=\"center\">".$ch."</td>";
			} else {
				return "<td align=\"center\">".$ch."</td>";
			}
		}
	}

	# retourne un tableau remplit selon les dates d'une ligne et le contenu de la ligne suivante
	# fait une passe par date, pour remplir les mois suivants par la valeur en question
	function FillDate() {
		global $basemoistotal, $moisname, $col, $j, $cell;
		
		for ($i=2; $i<=$col; $i++) {
			if ($cell[$j][$i]<>"") {
				$fill=false;
				for ($m=1; $m<=$basemoistotal; $m++) {
					if ($moisname[$m]==$cell[$j][$i]) { $fill=true; }
					if ($fill) { $tab[$m]=$cell[$j+1][$i]; }
#					echo $moisname[$m].": ".$tab[$m]."<br>";
				}
#				echo "<br>";
			}
		}
		return $tab;
	}

	# vide un tableau
	function EmptyTab() {
		global $col, $lin, $cell;
		for ($j=1; $j<=$lin; $j++) {
			for ($i=1; $i<=$col; $i++) {
				$cell[$j][$i]="";
			}
		}
	}
	
	# sauve un fichier csv selon le contenu du tableau en cours
	function SaveCSV($filename) {
		global $col, $lin, $cell;
		if ($lin<>0) {
			$fn = $filename.".csv";
	
			$content="";
			for ($j=1; $j<=$lin; $j++) {
				for ($i=1; $i<=$col; $i++) {
					if ($i<>1) { $content.=";"; }
					$content.=$cell[$j][$i];
				}
				$content.=chr(13).chr(10);
			}
#			echo "***".$content."***<br>";
	
			$fp = fopen ($fn, "w");
			fwrite($fp, $content);
			fclose($fp);
			echo "<b>".$fn."</b> saved.<br>";
		}
	}

	# retourne le jour dans le mois, à partir du jour dans l'année
	function GiveDay($nbdays) {
		global $year;
		$sum=0;
		$m=0;
		$d=0;
		do {
			$m++;
			$sum+=date ("t", mktime(0,0,0,$m,1,$year));
		} while ($sum<$nbdays);
		$sum-=date ("t", mktime(0,0,0,$m,1,$year));
		$d=$nbdays-$sum;
		if ($d<10) { $d="0".$d; }
		return $d;
	}

	# retourne le mois, à partir du jour dans l'année
	function GiveMonth($nbdays) {
		global $year;
		$sum=0;
		$m=0;
		$d=0;
		do {
			$m++;
			$sum+=date ("t", mktime(0,0,0,$m,1,$year));
		} while ($sum<$nbdays);
		$sum-=date ("t", mktime(0,0,0,$m,1,$year));
		$d=$nbdays-$sum;
		if ($m<10) { $m="0".$m; }
		return $m;
	}

	# retourne la semaine, à partir du mois, et du jour dans le mois
	function GiveWeek($day, $month) {
		global $year;
		$sum=0;
		for ($m=1; $m<=$month*1-1; $m++) {
			$sum+=date ("t", mktime(0,0,0,$m,1,$year));
		}
		$sum+=$day*1;
		$week=ceil($sum/7);
		return $week;
	}

	# vide une chaine texte de tout point-virgule (séparateur de champ dans un fichier csv)
	function Strip($txt) {
		$txtstrip="";
		for ($i=0; $i<=strlen($txt); $i++) {
			if ($txt[$i]<>";") {
				$txtstrip.=$txt[$i];
			}
		}
		return $txtstrip;
	}
	
	# fait un arrondi en dessous
	function RoundIt($value,$r) {
		$value=$value/$r;
		$value=(int)($value)*$r;
		return $value;
	}
	
	# fait un arrondi
	function RoundItTrue($value,$r) {
		$value+=$r/2;
		$value=$value/$r;
		$value=(int)($value)*$r;
		return $value;
	}
?>
