/* http://keith-wood.name/countdown.html
   Countdown for jQuery v1.5.8.
   Written by Keith Wood (kbwood{at}iinet.com.au) January 2008.
   Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and 
   MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. 
   Please attribute the author if you use it. */
(function($) {
	function Countdown() {
		this.regional = [];
		this.regional[''] = {
			labels : [ 'Years', 'Months', 'Weeks', 'Days', 'Hours', 'Minutes',
					'Seconds' ],
			labels1 : [ 'Year', 'Month', 'Week', 'Day', 'Hour', 'Minute',
					'Second' ],
			compactLabels : [ 'y', 'm', 'w', 'd' ],
			whichLabels : null,
			timeSeparator : ':',
			isRTL : false
		};
		this._defaults = {
			until : null,
			since : null,
			timezone : null,
			serverSync : null,
			format : 'dHMS',
			layout : '',
			compact : false,
			significant : 0,
			description : '',
			expiryUrl : '',
			expiryText : '',
			alwaysExpire : false,
			onExpiry : null,
			onTick : null,
			tickInterval : 1
		};
		$.extend(this._defaults, this.regional['']);
		this._serverSyncs = []
	}
	var w = 'countdown';
	var Y = 0;
	var O = 1;
	var W = 2;
	var D = 3;
	var H = 4;
	var M = 5;
	var S = 6;
	$
			.extend(
					Countdown.prototype,
					{
						markerClassName : 'hasCountdown',
						_timer : setInterval(function() {
							$.countdown._updateTargets()
						}, 980),
						_timerTargets : [],
						setDefaults : function(a) {
							this._resetExtraLabels(this._defaults, a);
							extendRemove(this._defaults, a || {})
						},
						UTCDate : function(a, b, c, e, f, g, h, i) {
							if (typeof b == 'object' && b.constructor == Date) {
								i = b.getMilliseconds();
								h = b.getSeconds();
								g = b.getMinutes();
								f = b.getHours();
								e = b.getDate();
								c = b.getMonth();
								b = b.getFullYear()
							}
							var d = new Date();
							d.setUTCFullYear(b);
							d.setUTCDate(1);
							d.setUTCMonth(c || 0);
							d.setUTCDate(e || 1);
							d.setUTCHours(f || 0);
							d.setUTCMinutes((g || 0)
									- (Math.abs(a) < 30 ? a * 60 : a));
							d.setUTCSeconds(h || 0);
							d.setUTCMilliseconds(i || 0);
							return d
						},
						periodsToSeconds : function(a) {
							return a[0] * 31557600 + a[1] * 2629800 + a[2]
									* 604800 + a[3] * 86400 + a[4] * 3600
									+ a[5] * 60 + a[6]
						},
						_settingsCountdown : function(a, b) {
							if (!b) {
								return $.countdown._defaults
							}
							var c = $.data(a, w);
							return (b == 'all' ? c.options : c.options[b])
						},
						_attachCountdown : function(a, b) {
							var c = $(a);
							if (c.hasClass(this.markerClassName)) {
								return
							}
							c.addClass(this.markerClassName);
							var d = {
								options : $.extend({}, b),
								_periods : [ 0, 0, 0, 0, 0, 0, 0 ]
							};
							$.data(a, w, d);
							this._changeCountdown(a)
						},
						_addTarget : function(a) {
							if (!this._hasTarget(a)) {
								this._timerTargets.push(a)
							}
						},
						_hasTarget : function(a) {
							return ($.inArray(a, this._timerTargets) > -1)
						},
						_removeTarget : function(b) {
							this._timerTargets = $.map(this._timerTargets,
									function(a) {
										return (a == b ? null : a)
									})
						},
						_updateTargets : function() {
							for ( var i = this._timerTargets.length - 1; i >= 0; i--) {
								this._updateCountdown(this._timerTargets[i])
							}
						},
						_updateCountdown : function(a, b) {
							var c = $(a);
							b = b || $.data(a, w);
							if (!b) {
								return
							}
							c.html(this._generateHTML(b));
							c[(this._get(b, 'isRTL') ? 'add' : 'remove')
									+ 'Class']('countdown_rtl');
							var d = this._get(b, 'onTick');
							if (d) {
								var e = b._hold != 'lap' ? b._periods : this
										._calculatePeriods(b, b._show, this
												._get(b, 'significant'),
												new Date());
								var f = this._get(b, 'tickInterval');
								if (f == 1 || this.periodsToSeconds(e) % f == 0) {
									d.apply(a, [ e ])
								}
							}
							var g = b._hold != 'pause'
									&& (b._since ? b._now.getTime() < b._since
											.getTime()
											: b._now.getTime() >= b._until
													.getTime());
							if (g && !b._expiring) {
								b._expiring = true;
								if (this._hasTarget(a)
										|| this._get(b, 'alwaysExpire')) {
									this._removeTarget(a);
									var h = this._get(b, 'onExpiry');
									if (h) {
										h.apply(a, [])
									}
									var i = this._get(b, 'expiryText');
									if (i) {
										var j = this._get(b, 'layout');
										b.options.layout = i;
										this._updateCountdown(a, b);
										b.options.layout = j
									}
									var k = this._get(b, 'expiryUrl');
									if (k) {
										window.location = k
									}
								}
								b._expiring = false
							} else if (b._hold == 'pause') {
								this._removeTarget(a)
							}
							$.data(a, w, b)
						},
						_changeCountdown : function(a, b, c) {
							b = b || {};
							if (typeof b == 'string') {
								var d = b;
								b = {};
								b[d] = c
							}
							var e = $.data(a, w);
							if (e) {
								this._resetExtraLabels(e.options, b);
								extendRemove(e.options, b);
								this._adjustSettings(a, e);
								$.data(a, w, e);
								var f = new Date();
								if ((e._since && e._since < f)
										|| (e._until && e._until > f)) {
									this._addTarget(a)
								}
								this._updateCountdown(a, e)
							}
						},
						_resetExtraLabels : function(a, b) {
							var c = false;
							for ( var n in b) {
								if (n != 'whichLabels' && n.match(/[Ll]abels/)) {
									c = true;
									break
								}
							}
							if (c) {
								for ( var n in a) {
									if (n.match(/[Ll]abels[0-9]/)) {
										a[n] = null
									}
								}
							}
						},
						_adjustSettings : function(a, b) {
							var c;
							var d = this._get(b, 'serverSync');
							var e = 0;
							var f = null;
							for ( var i = 0; i < this._serverSyncs.length; i++) {
								if (this._serverSyncs[i][0] == d) {
									f = this._serverSyncs[i][1];
									break
								}
							}
							if (f != null) {
								e = (d ? f : 0);
								c = new Date()
							} else {
								var g = (d ? d.apply(a, []) : null);
								c = new Date();
								e = (g ? c.getTime() - g.getTime() : 0);
								this._serverSyncs.push([ d, e ])
							}
							var h = this._get(b, 'timezone');
							h = (h == null ? -c.getTimezoneOffset() : h);
							b._since = this._get(b, 'since');
							if (b._since != null) {
								b._since = this.UTCDate(h, this._determineTime(
										b._since, null));
								if (b._since && e) {
									b._since.setMilliseconds(b._since
											.getMilliseconds()
											+ e)
								}
							}
							b._until = this.UTCDate(h, this._determineTime(this
									._get(b, 'until'), c));
							if (e) {
								b._until.setMilliseconds(b._until
										.getMilliseconds()
										+ e)
							}
							b._show = this._determineShow(b)
						},
						_destroyCountdown : function(a) {
							var b = $(a);
							if (!b.hasClass(this.markerClassName)) {
								return
							}
							this._removeTarget(a);
							b.removeClass(this.markerClassName).empty();
							$.removeData(a, w)
						},
						_pauseCountdown : function(a) {
							this._hold(a, 'pause')
						},
						_lapCountdown : function(a) {
							this._hold(a, 'lap')
						},
						_resumeCountdown : function(a) {
							this._hold(a, null)
						},
						_hold : function(a, b) {
							var c = $.data(a, w);
							if (c) {
								if (c._hold == 'pause' && !b) {
									c._periods = c._savePeriods;
									var d = (c._since ? '-' : '+');
									c[c._since ? '_since' : '_until'] = this
											._determineTime(d + c._periods[0]
													+ 'y' + d + c._periods[1]
													+ 'o' + d + c._periods[2]
													+ 'w' + d + c._periods[3]
													+ 'd' + d + c._periods[4]
													+ 'h' + d + c._periods[5]
													+ 'm' + d + c._periods[6]
													+ 's');
									this._addTarget(a)
								}
								c._hold = b;
								c._savePeriods = (b == 'pause' ? c._periods
										: null);
								$.data(a, w, c);
								this._updateCountdown(a, c)
							}
						},
						_getTimesCountdown : function(a) {
							var b = $.data(a, w);
							return (!b ? null : (!b._hold ? b._periods : this
									._calculatePeriods(b, b._show, this._get(b,
											'significant'), new Date())))
						},
						_get : function(a, b) {
							return (a.options[b] != null ? a.options[b]
									: $.countdown._defaults[b])
						},
						_determineTime : function(k, l) {
							var m = function(a) {
								var b = new Date();
								b.setTime(b.getTime() + a * 1000);
								return b
							};
							var n = function(a) {
								a = a.toLowerCase();
								var b = new Date();
								var c = b.getFullYear();
								var d = b.getMonth();
								var e = b.getDate();
								var f = b.getHours();
								var g = b.getMinutes();
								var h = b.getSeconds();
								var i = /([+-]?[0-9]+)\s*(s|m|h|d|w|o|y)?/g;
								var j = i.exec(a);
								while (j) {
									switch (j[2] || 's') {
									case 's':
										h += parseInt(j[1], 10);
										break;
									case 'm':
										g += parseInt(j[1], 10);
										break;
									case 'h':
										f += parseInt(j[1], 10);
										break;
									case 'd':
										e += parseInt(j[1], 10);
										break;
									case 'w':
										e += parseInt(j[1], 10) * 7;
										break;
									case 'o':
										d += parseInt(j[1], 10);
										e = Math.min(e, $.countdown
												._getDaysInMonth(c, d));
										break;
									case 'y':
										c += parseInt(j[1], 10);
										e = Math.min(e, $.countdown
												._getDaysInMonth(c, d));
										break
									}
									j = i.exec(a)
								}
								return new Date(c, d, e, f, g, h, 0)
							};
							var o = (k == null ? l
									: (typeof k == 'string' ? n(k)
											: (typeof k == 'number' ? m(k) : k)));
							if (o)
								o.setMilliseconds(0);
							return o
						},
						_getDaysInMonth : function(a, b) {
							return 32 - new Date(a, b, 32).getDate()
						},
						_normalLabels : function(a) {
							return a
						},
						_generateHTML : function(c) {
							var d = this._get(c, 'significant');
							c._periods = (c._hold ? c._periods : this
									._calculatePeriods(c, c._show, d,
											new Date()));
							var e = false;
							var f = 0;
							var g = d;
							var h = $.extend({}, c._show);
							for ( var i = Y; i <= S; i++) {
								e |= (c._show[i] == '?' && c._periods[i] > 0);
								h[i] = (c._show[i] == '?' && !e ? null
										: c._show[i]);
								f += (h[i] ? 1 : 0);
								g -= (c._periods[i] > 0 ? 1 : 0)
							}
							var j = [ false, false, false, false, false, false,
									false ];
							for ( var i = S; i >= Y; i--) {
								if (c._show[i]) {
									if (c._periods[i]) {
										j[i] = true
									} else {
										j[i] = g > 0;
										g--
									}
								}
							}
							var k = this._get(c, 'compact');
							var l = this._get(c, 'layout');
							var m = (k ? this._get(c, 'compactLabels') : this
									._get(c, 'labels'));
							var n = this._get(c, 'whichLabels')
									|| this._normalLabels;
							var o = this._get(c, 'timeSeparator');
							var p = this._get(c, 'description') || '';
							var q = function(a) {
								var b = $.countdown._get(c, 'compactLabels'
										+ n(c._periods[a]));
								return (h[a] ? c._periods[a]
										+ (b ? b[a] : m[a]) + ' ' : '')
							};
							var r = function(a) {
								var b = $.countdown._get(c, 'labels'
										+ n(c._periods[a]));
								return ((!d && h[a]) || (d && j[a]) ? '<span class="countdown_section"><span class="countdown_amount">'
										+ c._periods[a]
										+ '</span><br/>'
										+ (b ? b[a] : m[a]) + '</span>'
										: '')
							};
							return (l ? this._buildLayout(c, h, l, k, d, j)
									: ((k ? '<span class="countdown_row countdown_amount'
											+ (c._hold ? ' countdown_holding'
													: '')
											+ '">'
											+ q(Y)
											+ q(O)
											+ q(W)
											+ q(D)
											+ (h[H] ? this._minDigits(
													c._periods[H], 2) : '')
											+ (h[M] ? (h[H] ? o : '')
													+ this._minDigits(
															c._periods[M], 2)
													: '')
											+ (h[S] ? (h[H] || h[M] ? o : '')
													+ this._minDigits(
															c._periods[S], 2)
													: '')
											: '<span class="countdown_row countdown_show'
													+ (d || f)
													+ (c._hold ? ' countdown_holding'
															: '')
													+ '">'
													+ r(Y)
													+ r(O)
													+ r(W)
													+ r(D)
													+ r(H)
													+ r(M) + r(S))
											+ '</span>' + (p ? '<span class="countdown_row countdown_descr">'
											+ p + '</span>'
											: '')))
						},
						_buildLayout : function(c, d, e, f, g, h) {
							var j = this._get(c, (f ? 'compactLabels'
									: 'labels'));
							var k = this._get(c, 'whichLabels')
									|| this._normalLabels;
							var l = function(a) {
								return ($.countdown._get(c,
										(f ? 'compactLabels' : 'labels')
												+ k(c._periods[a])) || j)[a]
							};
							var m = function(a, b) {
								return Math.floor(a / b) % 10
							};
							var o = {
								desc : this._get(c, 'description'),
								sep : this._get(c, 'timeSeparator'),
								yl : l(Y),
								yn : c._periods[Y],
								ynn : this._minDigits(c._periods[Y], 2),
								ynnn : this._minDigits(c._periods[Y], 3),
								y1 : m(c._periods[Y], 1),
								y10 : m(c._periods[Y], 10),
								y100 : m(c._periods[Y], 100),
								y1000 : m(c._periods[Y], 1000),
								ol : l(O),
								on : c._periods[O],
								onn : this._minDigits(c._periods[O], 2),
								onnn : this._minDigits(c._periods[O], 3),
								o1 : m(c._periods[O], 1),
								o10 : m(c._periods[O], 10),
								o100 : m(c._periods[O], 100),
								o1000 : m(c._periods[O], 1000),
								wl : l(W),
								wn : c._periods[W],
								wnn : this._minDigits(c._periods[W], 2),
								wnnn : this._minDigits(c._periods[W], 3),
								w1 : m(c._periods[W], 1),
								w10 : m(c._periods[W], 10),
								w100 : m(c._periods[W], 100),
								w1000 : m(c._periods[W], 1000),
								dl : l(D),
								dn : c._periods[D],
								dnn : this._minDigits(c._periods[D], 2),
								dnnn : this._minDigits(c._periods[D], 3),
								d1 : m(c._periods[D], 1),
								d10 : m(c._periods[D], 10),
								d100 : m(c._periods[D], 100),
								d1000 : m(c._periods[D], 1000),
								hl : l(H),
								hn : c._periods[H],
								hnn : this._minDigits(c._periods[H], 2),
								hnnn : this._minDigits(c._periods[H], 3),
								h1 : m(c._periods[H], 1),
								h10 : m(c._periods[H], 10),
								h100 : m(c._periods[H], 100),
								h1000 : m(c._periods[H], 1000),
								ml : l(M),
								mn : c._periods[M],
								mnn : this._minDigits(c._periods[M], 2),
								mnnn : this._minDigits(c._periods[M], 3),
								m1 : m(c._periods[M], 1),
								m10 : m(c._periods[M], 10),
								m100 : m(c._periods[M], 100),
								m1000 : m(c._periods[M], 1000),
								sl : l(S),
								sn : c._periods[S],
								snn : this._minDigits(c._periods[S], 2),
								snnn : this._minDigits(c._periods[S], 3),
								s1 : m(c._periods[S], 1),
								s10 : m(c._periods[S], 10),
								s100 : m(c._periods[S], 100),
								s1000 : m(c._periods[S], 1000)
							};
							var p = e;
							for ( var i = Y; i <= S; i++) {
								var q = 'yowdhms'.charAt(i);
								var r = new RegExp('\\{' + q + '<\\}(.*)\\{'
										+ q + '>\\}', 'g');
								p = p.replace(r,
										((!g && d[i]) || (g && h[i]) ? '$1'
												: ''))
							}
							$.each(o, function(n, v) {
								var a = new RegExp('\\{' + n + '\\}', 'g');
								p = p.replace(a, v)
							});
							return p
						},
						_minDigits : function(a, b) {
							a = '' + a;
							if (a.length >= b) {
								return a
							}
							a = '0000000000' + a;
							return a.substr(a.length - b)
						},
						_determineShow : function(a) {
							var b = this._get(a, 'format');
							var c = [];
							c[Y] = (b.match('y') ? '?' : (b.match('Y') ? '!'
									: null));
							c[O] = (b.match('o') ? '?' : (b.match('O') ? '!'
									: null));
							c[W] = (b.match('w') ? '?' : (b.match('W') ? '!'
									: null));
							c[D] = (b.match('d') ? '?' : (b.match('D') ? '!'
									: null));
							c[H] = (b.match('h') ? '?' : (b.match('H') ? '!'
									: null));
							c[M] = (b.match('m') ? '?' : (b.match('M') ? '!'
									: null));
							c[S] = (b.match('s') ? '?' : (b.match('S') ? '!'
									: null));
							return c
						},
						_calculatePeriods : function(c, d, e, f) {
							c._now = f;
							c._now.setMilliseconds(0);
							var g = new Date(c._now.getTime());
							if (c._since) {
								if (f.getTime() < c._since.getTime()) {
									c._now = f = g
								} else {
									f = c._since
								}
							} else {
								g.setTime(c._until.getTime());
								if (f.getTime() > c._until.getTime()) {
									c._now = f = g
								}
							}
							var h = [ 0, 0, 0, 0, 0, 0, 0 ];
							if (d[Y] || d[O]) {
								var i = $.countdown._getDaysInMonth(f
										.getFullYear(), f.getMonth());
								var j = $.countdown._getDaysInMonth(g
										.getFullYear(), g.getMonth());
								var k = (g.getDate() == f.getDate() || (g
										.getDate() >= Math.min(i, j) && f
										.getDate() >= Math.min(i, j)));
								var l = function(a) {
									return (a.getHours() * 60 + a.getMinutes())
											* 60 + a.getSeconds()
								};
								var m = Math
										.max(
												0,
												(g.getFullYear() - f
														.getFullYear())
														* 12
														+ g.getMonth()
														- f.getMonth()
														+ ((g.getDate() < f
																.getDate() && !k)
																|| (k && l(g) < l(f)) ? -1
																: 0));
								h[Y] = (d[Y] ? Math.floor(m / 12) : 0);
								h[O] = (d[O] ? m - h[Y] * 12 : 0);
								f = new Date(f.getTime());
								var n = (f.getDate() == i);
								var o = $.countdown._getDaysInMonth(f
										.getFullYear()
										+ h[Y], f.getMonth() + h[O]);
								if (f.getDate() > o) {
									f.setDate(o)
								}
								f.setFullYear(f.getFullYear() + h[Y]);
								f.setMonth(f.getMonth() + h[O]);
								if (n) {
									f.setDate(o)
								}
							}
							var p = Math
									.floor((g.getTime() - f.getTime()) / 1000);
							var q = function(a, b) {
								h[a] = (d[a] ? Math.floor(p / b) : 0);
								p -= h[a] * b
							};
							q(W, 604800);
							q(D, 86400);
							q(H, 3600);
							q(M, 60);
							q(S, 1);
							if (p > 0 && !c._since) {
								var r = [ 1, 12, 4.3482, 7, 24, 60, 60 ];
								var s = S;
								var t = 1;
								for ( var u = S; u >= Y; u--) {
									if (d[u]) {
										if (h[s] >= t) {
											h[s] = 0;
											p = 1
										}
										if (p > 0) {
											h[u]++;
											p = 0;
											s = u;
											t = 1
										}
									}
									t *= r[u]
								}
							}
							if (e) {
								for ( var u = Y; u <= S; u++) {
									if (e && h[u]) {
										e--
									} else if (!e) {
										h[u] = 0
									}
								}
							}
							return h
						}
					});
	function extendRemove(a, b) {
		$.extend(a, b);
		for ( var c in b) {
			if (b[c] == null) {
				a[c] = null
			}
		}
		return a
	}
	$.fn.countdown = function(a) {
		var b = Array.prototype.slice.call(arguments, 1);
		if (a == 'getTimes' || a == 'settings') {
			return $.countdown['_' + a + 'Countdown'].apply($.countdown,
					[ this[0] ].concat(b))
		}
		return this.each(function() {
			if (typeof a == 'string') {
				$.countdown['_' + a + 'Countdown'].apply($.countdown, [ this ]
						.concat(b))
			} else {
				$.countdown._attachCountdown(this, a)
			}
		})
	};
	$.countdown = new Countdown()
})(jQuery);


function DST(){
	var today = new Date;
	arrDST = DstDetect();
	
	if (today >= arrDST[0] && today < arrDST[1]){ //does today fall inside of DST period?
		return 1; //if so then return true
	}
	else{
		return 0; //if not then return false
	} 
}


/*********************** DST & Time Zone detection *************************/
/**Source: http://www.michaelapproved.com/articles/daylight-saving-time-dst-detect/*/

function TimezoneDetect(){
    var dtDate = new Date('1/1/' + (new Date()).getUTCFullYear());
    var intOffset = 10000; //set initial offset high so it is adjusted on the first attempt
    var intMonth;
    var intHoursUtc;
    var intHours;
    var intDaysMultiplyBy;
 
    //go through each month to find the lowest offset to account for DST
    for (intMonth=0;intMonth < 12;intMonth++){
        //go to the next month
        dtDate.setUTCMonth(dtDate.getUTCMonth() + 1);
 
        //To ignore daylight saving time look for the lowest offset.
        //Since, during DST, the clock moves forward, it'll be a bigger number.
        if (intOffset > (dtDate.getTimezoneOffset() * (-1))){
            intOffset = (dtDate.getTimezoneOffset() * (-1));
        }
    }
 
    return intOffset;
}

function DstDetect(){
    var dtDstDetect = new Date();
    var dtDstStart = '';
    var dtDstEnd = '';
    var dtDstStartHold = ''; //Temp date hold
    var intYearDayCount = 732; //366 (include leap year) * 2 (for two years)
    var intHourOfYear = 1;
    var intDayOfYear;
    var intOffset = TimezoneDetect(); //Custom function. Make sure you include it.
 
    //Start from a year ago to make sure we include any previously starting DST
    dtDstDetect = new Date()
    dtDstDetect.setUTCFullYear(dtDstDetect.getUTCFullYear() - 1);
    dtDstDetect.setUTCHours(0,0,0,0);
 
    //Going hour by hour through the year will detect DST with shorter code but that could result in 8760
    //FOR loops and several seconds of script execution time. Longer code narrows this down a little.
    //Go one day at a time and find out approx time of DST and if there even is DST on this computer.
    //Also need to make sure we catch the most current start and end cycle.
    for(intDayOfYear = 1; intDayOfYear <= intYearDayCount; intDayOfYear++){
        dtDstDetect.setUTCDate(dtDstDetect.getUTCDate() + 1);
 
        if ((dtDstDetect.getTimezoneOffset() * (-1)) != intOffset && dtDstStartHold == ''){
            dtDstStartHold = new Date(dtDstDetect);
        }
        if ((dtDstDetect.getTimezoneOffset() * (-1)) == intOffset && dtDstStartHold != ''){
            dtDstStart = new Date(dtDstStartHold);
            dtDstEnd = new Date(dtDstDetect);
            dtDstStartHold = '';
 
            //DST is being used in this timezone. Narrow the time down to the exact hour the change happens
            //Remove 48 hours (a few extra to be on safe side) from the start/end date and find the exact change point
            //Go hour by hour until a change in the timezone offset is detected.
            dtDstStart.setUTCHours(dtDstStart.getUTCHours() - 48);
            dtDstEnd.setUTCHours(dtDstEnd.getUTCHours() - 48);
 
            //First find when DST starts
            for(intHourOfYear=1; intHourOfYear <= 48; intHourOfYear++){
                dtDstStart.setUTCHours(dtDstStart.getUTCHours() + 1);
 
                //If we found it then exit the loop. dtDstStart will have the correct value left in it.
                if ((dtDstStart.getTimezoneOffset() * (-1)) != intOffset){
                    break;
                }
            }
 
            //Now find out when DST ends
            for(intHourOfYear=1; intHourOfYear <= 48; intHourOfYear++){
                dtDstEnd.setUTCHours(dtDstEnd.getUTCHours() + 1);
 
                //If we found it then exit the loop. dtDstEnd will have the correct value left in it.
                if ((dtDstEnd.getTimezoneOffset() * (-1)) != (intOffset + 60)){
                    break;
                }
            }
 
            //Check if DST is currently on for this time frame. If it is then return these values.
            //If not then keep going. The function will either return the last values collected
            //or another value that is currently in effect
            if ((new Date()).getTime() >= dtDstStart.getTime() && (new Date()).getTime() <= dtDstEnd.getTime()){
                return new Array(dtDstStart,dtDstEnd);
            }
 
        }
    }
    return new Array(dtDstStart,dtDstEnd);
}

