<?
	if (!defined ('_ARRAY_')) {	// Treat array handler special
		define ('_ARRAY_', 1);

		/*
			inArray

			Search an array for data
		*/
		function inArray ($needle, $haystack)
		{
			$found = false;

			for ($ptr = 0; $ptr < count ($haystack); $ptr++) {
				if ($haystack[$ptr] == $needle) {
					$found = true;
				}
			}
			return $found;
		}

		/*
			addToArray

			Add an element to an array
		*/
		function addToArray ($var, &$arr)
		{
			if (!inArray ($var, $arr)) {
				if (isset ($arr)) {
					$arr[count ($arr)] = $var;
				} else {
					$arr = array ($var);
				}
			}
		}

		addToArray ('array', $has);
	}
	
	if (!defined ('_LIBFUNCS_')) {
		define ('_LIBFUNCS_', 1);

		/*
			reqIfNeeded

			Require a library module if it hasn't already been.
		*/
		function reqIfNeeded ($libNames)
		{
			global $has, $needs;

			$libs = explode(' ', $libNames);

			for ($i = 0 ; $i < count ($libs) ; $i++ ) {
				$lib = $libs[$i];
				if ((inArray ($libs[$i], $needs)) && (!inArray ($libs[$i], $has))) {
					include siteHome . "/lib/$libs[$i].php";
				}
			}
		}

		/*
			have
			
			Tell the library that module X is loaded
		*/
		function have ($libName)
		{
			global $has;
			
			addToArray ($libName, $has);
		}
		
		/*
			need
			
			Load module X if it hasn't been already, taking care to retain the
			integrity of the $needs array.
		*/
		function need ($libNames)
		{
			global $needs;
			
			$libs = explode (' ', $libNames);
			for ($i = 0; $i < count ($libs); $i++) {
				addToArray ($libs[$i], $needs);
			}
			reqIfNeeded ($libNames);
		}

		// Actual code for the lib -- only one "$need" allowed from main system
		if ($need) {
			addToArray ($need, $needs);
			include siteHome . "/lib/$need.php";
			unset ($need);
		}
	}	// !_LIBFUNCS_
?>
