function cd(id, now, target, timeperiod, horizvert, displayunits, displayzero, delimiter, weektext, weekstext, daytext, daystext, hourtext, hourstext, minutetext, minutestext, secondtext, secondstext, whatnow, showpre, showpost, redirect)
{
	
	function addDelimiter(number) {
		number = '' + number;
		if (number.length > 3) {
			var mod = number.length % 3;
			var output = (mod > 0 ? (number.substring(0,mod)) : '');
			for (i=0 ; i < Math.floor(number.length / 3); i++) {
				if ((mod == 0) && (i == 0)) {
					output += number.substring(mod + 3 * i, mod + 3 * i + 3);
				} else {
					output += delimiter + number.substring(mod + 3 * i, mod + 3 * i + 3);
				}
			}
			return (output);
		} else {
			return number;
		}
	}
	
	function zeroPad(num) {
		var numZeropad = num + '';
		if (displayzero == 'displayzero') {
			while(numZeropad.length < 2) {
				numZeropad = '0' + numZeropad;
			}
			return numZeropad;
		} else {
			return num;
		}
	}
	
	var timediff = target - now;
	
	var weeksleft = 0;
	var daysleft = 0;
	var hoursleft = 0;
	var minutesleft = 0;
	var secondsleft = timediff;
	
	if (timediff >= 60) {
		secondsleft = timediff % 60;
		minutesleft = (timediff - secondsleft) / 60;
	}

	if (minutesleft >= 60) {
		timediff = minutesleft;
		minutesleft = timediff % 60;
		hoursleft = (timediff - minutesleft) / 60;
	}

	if (hoursleft >= 24) {
		timediff = hoursleft;
		hoursleft = timediff % 24;
		daysleft = (timediff - hoursleft) / 24;
	}
	
	if (daysleft >= 7) {
		timediff = daysleft;
		daysleft = timediff % 7;
		weeksleft = (timediff - daysleft) / 7;
	}
	
	if (displayunits == 'displaydhms' || displayunits == 'displaydhm' || displayunits == 'displaydh' || displayunits == 'displayd') {
		daysleft += weeksleft * 7;
	}
	if (displayunits == 'displayhms' || displayunits == 'displayhm' || displayunits == 'displayh') {
		hoursleft += (daysleft * 24) + (weeksleft * 7 * 24);
	}
	if (displayunits == 'displayms' || displayunits == 'displaym') {
		minutesleft += (hoursleft * 60) + (daysleft * 24 * 60) + (weeksleft * 7 * 24 * 60);
	}
	if (displayunits == 'displays') {
		secondsleft += (minutesleft * 60) + (hoursleft * 60 * 60) + (daysleft * 24 * 60 * 60) + (weeksleft * 7 * 24 * 60 * 60);
	}
	
	
	var gmctime = document.getElementById('gmctime' + id);
	var gmctimetext = '';
	
	var gmccountdown_timer = setInterval(gmcTimer, 1000);

	function gmcUpdateDivHorizontal() {
		gmctimetext = '';
		// display weeks
		if (displayunits == 'displaywdhms' || displayunits == 'displaywdhm' || displayunits == 'displaywdh' || displayunits == 'displaywd' || displayunits == 'displayw') {
			gmctimetext += (weeksleft) ? zeroPad(addDelimiter(weeksleft)) + (weeksleft==1 ? ' '+weektext+' ' : ' '+weekstext+' ') : '';
		}
		// display days
		if (displayunits == 'displaywdhms' || displayunits == 'displaywdhm' || displayunits == 'displaywdh' || displayunits == 'displaywd' || displayunits == 'displaydhms' || displayunits == 'displaydhm' || displayunits == 'displaydh' || displayunits == 'displayd') {
			gmctimetext += (daysleft) ? zeroPad(addDelimiter(daysleft)) + (daysleft==1 ? ' '+daytext+' ' : ' '+daystext+' ') : '';
		}
		// display hours
		if (displayunits == 'displaywdhms' || displayunits == 'displaywdhm' || displayunits == 'displaywdh' || displayunits == 'displaydhms' || displayunits == 'displaydhm' || displayunits == 'displaydh' || displayunits == 'displayhms' || displayunits == 'displayhm' || displayunits == 'displayh') {
			gmctimetext += (hoursleft || daysleft) ? zeroPad(addDelimiter(hoursleft)) + (hoursleft==1 ? ' '+hourtext+' ' : ' '+hourstext+' ') : '';
		}
		// display minutes
		if (displayunits == 'displaywdhms' || displayunits == 'displaywdhm' || displayunits == 'displaydhms' || displayunits == 'displaydhm' || displayunits == 'displayhms' || displayunits == 'displayhm' || displayunits == 'displayms' || displayunits == 'displaym') {
			gmctimetext += (minutesleft || hoursleft || daysleft) ? zeroPad(addDelimiter(minutesleft)) + (minutesleft==1 ? ' '+minutetext+' ' : ' '+minutestext+' ') : '';
		}
		// display seconds
		if (displayunits == 'displaywdhms' || displayunits == 'displaydhms' || displayunits == 'displayhms' || displayunits == 'displayms' || displayunits == 'displays') {
			gmctimetext += zeroPad(addDelimiter(secondsleft)) + (secondsleft==1 ? ' '+secondtext+' ' : ' '+secondstext+' ');
		}
		if (gmctimetext == '') {
			gmctime.innerHTML = 'Finished';
		} else {
			gmctime.innerHTML = gmctimetext;
		}
	}
	
	function gmcUpdateDivVertical() {
		gmctimetext = '';
		// display weeks
		if (displayunits == 'displaywdhms' || displayunits == 'displaywdhm' || displayunits == 'displaywdh' || displayunits == 'displaywd' || displayunits == 'displayw') {
			gmctimetext += (weeksleft) ? zeroPad(addDelimiter(weeksleft)) + (weeksleft==1 ? ' '+weektext+'<br />' : ' '+weekstext+'<br />') : '';
		}
		// display days
		if (displayunits == 'displaywdhms' || displayunits == 'displaywdhm' || displayunits == 'displaywdh' || displayunits == 'displaywd' || displayunits == 'displaydhms' || displayunits == 'displaydhm' || displayunits == 'displaydh' || displayunits == 'displayd') {
			gmctimetext += (daysleft) ? zeroPad(addDelimiter(daysleft)) + (daysleft==1 ? ' '+daytext+'<br />' : ' '+daystext+'<br />') : '';
		}
		// display hours
		if (displayunits == 'displaywdhms' || displayunits == 'displaywdhm' || displayunits == 'displaywdh' || displayunits == 'displaydhms' || displayunits == 'displaydhm' || displayunits == 'displaydh' || displayunits == 'displayhms' || displayunits == 'displayhm' || displayunits == 'displayh') {
			gmctimetext += (hoursleft || daysleft) ? zeroPad(addDelimiter(hoursleft)) + (hoursleft==1 ? ' '+hourtext+'<br />' : ' '+hourstext+'<br />') : '';
		}
		// display minutes
		if (displayunits == 'displaywdhms' || displayunits == 'displaywdhm' || displayunits == 'displaydhms' || displayunits == 'displaydhm' || displayunits == 'displayhms' || displayunits == 'displayhm' || displayunits == 'displayms' || displayunits == 'displaym') {
			gmctimetext += (minutesleft || hoursleft || daysleft) ? zeroPad(addDelimiter(minutesleft)) + (minutesleft==1 ? ' '+minutetext+'<br />' : ' '+minutestext+'<br />') : '';
		}
		// display seconds
		if (displayunits == 'displaywdhms' || displayunits == 'displaydhms' || displayunits == 'displayhms' || displayunits == 'displayms' || displayunits == 'displays') {
			gmctimetext += zeroPad(addDelimiter(secondsleft)) + (secondsleft==1 ? ' '+secondtext+'<br />' : ' '+secondstext+'<br />');
		}
		if (gmctimetext == null) {
			gmctime.innerHTML = 'Finished';
		} else {
			gmctime.innerHTML = gmctimetext;
		}
	}
	
	function gmcTimer() {
		if (secondsleft <= 1 && minutesleft == 0 && hoursleft == 0 && daysleft == 0 && weeksleft == 0) {
			clearInterval(gmccountdown_timer);
			if (whatnow == 'text') {
				if (showpre == 'yes') {
					document.getElementById('gmcpre' + id).style.display = 'block';
				} else {
					document.getElementById('gmcpre' + id).style.display = 'none';
				}
				document.getElementById('datetime' + id).style.display = 'none';
				document.getElementById('gmctime' + id).style.display = 'none';
				if (showpost == 'yes') {
					document.getElementById('gmcpost' + id).style.display = 'block';
				} else {
					document.getElementById('gmcpost' + id).style.display = 'none';
				}
				document.getElementById('gmcafter' + id).style.display = 'block';
			} else {
				window.location = redirect;
			}
			return;
		}
	
		if (secondsleft > 0) secondsleft--;
		else {
			secondsleft = (minutesleft || hoursleft || daysleft || weeksleft) ? 59 : 0;
			if (minutesleft > 0) minutesleft--;
			else {
				minutesleft = (hoursleft || daysleft || weeksleft) ? 59 : 0;
				if (hoursleft > 0) hoursleft--;
				else {
					hoursleft = (daysleft || weeksleft) ? 23 : 0;
					if (daysleft) daysleft--;
					else {
						daysleft = (weeksleft) ? 6 : 0;
						if (weeksleft) weeksleft--;
					}
				}
			}
		}
		
		if (horizvert == 'Horizontal') {
			gmcUpdateDivHorizontal();
		} else {
			gmcUpdateDivVertical();
		}
	}
}
