a:8:{s:4:"name";s:13:"cjs_countdown";s:6:"author";s:10:"Sam Tardif";s:10:"author_uri";s:27:"http://www.creativejoos.com";s:7:"version";s:3:"0.2";s:11:"description";s:50:"Provides the ability to countdown to a given time.";s:4:"help";s:103:"

	<p>Extended help</p>

	<p>See http://www.creativejoos.com/article/more-countdown-improvements</p>
	
";s:4:"code";s:2097:"function cjs_countdown($atts, $thing)	
{
	if (is_array($atts)) extract($atts);

	$hour = (empty($hour)) ? 0 : $hour;
	$minute = (empty($minute)) ? 0 : $minute;
	$second = (empty($second)) ? 0 : $second;
	$month = (empty($month)) ? 11 : $month;
	$day = (empty($day)) ? 24 : $day;
	$year = (empty($year)) ? 2004 : $year;
	$delimiter = (empty($delimiter)) ? ", " : $delimiter;
        $format = (empty($format)) ? "ymwdhms" : $format;
        $timezone = (empty($timezone)) ? 0 : $timezone;

        $old_timezone = date("O");
        if ($old_timezone != 0) { 
                $old_timezone /= 100;
        }

        if ($old_timezone < 0) {
                $timezone += ($old_timezone * -1);
        } else {
                $timezone -= $old_timezone;
        }

	// array of time period chunks
	// Edit below this to suit your language
	$chunks = array(
		array(60 * 60 * 24 * 365 , "yr", "yrs"), // year
		array(60 * 60 * 24 * 30 , "mnth", "mnths"), // month
		array(60 * 60 * 24 * 7, "wk", "wks"), // week
		array(60 * 60 * 24 , "day", "days"), // day
		array(60 * 60 , "hr", "hrs"), // hour
		array(60 , "min", "mins"), // minute
		array(1, "sec", "secs") // seconds
	);

        while (strlen($format) < count($chunks)) {
                $format = "-" . $format;
        }

	// Today
	$now = time() + (60 * 60 * $timezone);
	// When
	$when = mktime($hour, $minute, $second, $month, $day, $year);	
	// The difference between when and now
	$diff = $when - $now;

	// build our output array, to be joined later
	$output = array();
	for ($i = 0; $i < count($chunks); $i++) {
                if ($format[$i] == "-") { continue; }
		if ($chunks[$i][0] >= $diff) {
			$output[] = "0 " . $chunks[$i][2];
		} else {
			$into = floor($diff / $chunks[$i][0]);
			$output[] = "$into " . ($into>1 ? $chunks[$i][2] : $chunks[$i][1]);
			$diff -= ($chunks[$i][0] * $into);
		}
	}

	// trim the "0 xs" off the front
	$start = 0;
	for ($j = 0; $j < count($output); $j++) {
		if ($output[$j][0] == "0") {
			$start++;
		} else {
			break;
		}
	}

	return implode($delimiter, array_slice($output, $start));
}

";s:3:"md5";s:32:"56a297b2c106d7173e9a84458bcccebc";}