﻿var _months = new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
var _dows = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
var _day_mills = (24 * 60 * 60 * 1000);
var sUserAgent = navigator.userAgent;
var fAppVersion = parseFloat(navigator.appVersion);

function compareVersions(sVersion1, sVersion2) {

    var aVersion1 = sVersion1.split('.');
    var aVersion2 = sVersion2.split('.');
    
    if (aVersion1.length > aVersion2.length) {
        for (var i=0; i < aVersion1.length - aVersion2.length; i++) {
            aVersion2.push('0');
        }
    } else if (aVersion1.length < aVersion2.length) {
        for (var i=0; i < aVersion2.length - aVersion1.length; i++) {
            aVersion1.push('0');
        }    
    }
    
    for (var i=0; i < aVersion1.length; i++) {
 
        if (aVersion1[i] < aVersion2[i]) {
            return -1;
        } else if (aVersion1[i] > aVersion2[i]) {
            return 1;
        }    
    }
    
    return 0;
}

var isOpera = sUserAgent.indexOf('Opera') > -1;
var isMinOpera4 = isMinOpera5 = isMinOpera6 = isMinOpera7 = isMinOpera7_5 = false;

if (isOpera) {
    var fOperaVersion;
    if(navigator.appName == 'Opera') {
        fOperaVersion = fAppVersion;
    } else {
        var reOperaVersion = new RegExp('Opera (\\d+\\.\\d+)');
        reOperaVersion.test(sUserAgent);
        fOperaVersion = parseFloat(RegExp['$1']);
    }

    isMinOpera4 = fOperaVersion >= 4;
    isMinOpera5 = fOperaVersion >= 5;
    isMinOpera6 = fOperaVersion >= 6;
    isMinOpera7 = fOperaVersion >= 7;
    isMinOpera7_5 = fOperaVersion >= 7.5;
}

var isKHTML = sUserAgent.indexOf('KHTML') > -1 
              || sUserAgent.indexOf('Konqueror') > -1 
              || sUserAgent.indexOf('AppleWebKit') > -1; 
              
var isSafari = isMinSafari1 = isMinSafari1_2 = false;
var isKonq = isMinKonq2_2 = isMinKonq3 = isMinKonq3_1 = isMinKonq3_2 = false;

if (isKHTML) {
    isSafari = sUserAgent.indexOf('AppleWebKit') > -1;
    isKonq = sUserAgent.indexOf('Konqueror') > -1;

    if (isSafari) {
        var reAppleWebKit = new RegExp('AppleWebKit\\/(\\d+(?:\\.\\d*)?)');
        reAppleWebKit.test(sUserAgent);
        var fAppleWebKitVersion = parseFloat(RegExp['$1']);

        isMinSafari1 = fAppleWebKitVersion >= 85;
        isMinSafari1_2 = fAppleWebKitVersion >= 124;
    } else if (isKonq) {

        var reKonq = new RegExp('Konqueror\\/(\\d+(?:\\.\\d+(?:\\.\\d)?)?)');
        reKonq.test(sUserAgent);
        isMinKonq2_2 = compareVersions(RegExp['$1'], '2.2') >= 0;
        isMinKonq3 = compareVersions(RegExp['$1'], '3.0') >= 0;
        isMinKonq3_1 = compareVersions(RegExp['$1'], '3.1') >= 0;
        isMinKonq3_2 = compareVersions(RegExp['$1'], '3.2') >= 0;
    } 
    
}

var isIE = sUserAgent.indexOf('compatible') > -1 
           && sUserAgent.indexOf('MSIE') > -1
           && !isOpera;
           
var isMinIE4 = isMinIE5 = isMinIE5_5 = isMinIE6 = false;

if (isIE) {
    var reIE = new RegExp('MSIE (\\d+\\.\\d+);');
    reIE.test(sUserAgent);
    var fIEVersion = parseFloat(RegExp['$1']);

    isMinIE4 = fIEVersion >= 4;
    isMinIE5 = fIEVersion >= 5;
    isMinIE5_5 = fIEVersion >= 5.5;
    isMinIE6 = fIEVersion >= 6.0;
}

var isMoz = sUserAgent.indexOf('Gecko') > -1
            && !isKHTML;

var isMinMoz1 = sMinMoz1_4 = isMinMoz1_5 = false;

if (isMoz) {
    var reMoz = new RegExp('rv:(\\d+\\.\\d+(?:\\.\\d+)?)');
    reMoz.test(sUserAgent);
    isMinMoz1 = compareVersions(RegExp['$1'], '1.0') >= 0;
    isMinMoz1_4 = compareVersions(RegExp['$1'], '1.4') >= 0;
    isMinMoz1_5 = compareVersions(RegExp['$1'], '1.5') >= 0;
}

var isNS4 = !isIE && !isOpera && !isMoz && !isKHTML 
            && (sUserAgent.indexOf('Mozilla') == 0) 
            && (navigator.appName == 'Netscape') 
            && (fAppVersion >= 4.0 && fAppVersion < 5.0);

var isMinNS4 = isMinNS4_5 = isMinNS4_7 = isMinNS4_8 = isMinNS6 = false;

if (isNS4) {
    isMinNS4 = true;
    isMinNS4_5 = fAppVersion >= 4.5;
    isMinNS4_7 = fAppVersion >= 4.7;
    isMinNS4_8 = fAppVersion >= 4.8;
    isMinNS6 = fAppVersion >= 6;
}

var isWin = (navigator.platform == 'Win32') || (navigator.platform == 'Windows');
var isMac = (navigator.platform == 'Mac68K') || (navigator.platform == 'MacPPC') 
            || (navigator.platform == 'Macintosh');

var isUnix = (navigator.platform == 'X11') && !isWin && !isMac;

var isWin95 = isWin98 = isWinNT4 = isWin2K = isWinME = isWinXP = false;
var isMac68K = isMacPPC = false;
var isSunOS = isMinSunOS4 = isMinSunOS5 = isMinSunOS5_5 = false;

if (isWin) {
    isWin95 = sUserAgent.indexOf('Win95') > -1 
              || sUserAgent.indexOf('Windows 95') > -1;
    isWin98 = sUserAgent.indexOf('Win98') > -1 
              || sUserAgent.indexOf('Windows 98') > -1;
    isWinME = sUserAgent.indexOf('Win 9x 4.90') > -1 
              || sUserAgent.indexOf('Windows ME') > -1;
    isWin2K = sUserAgent.indexOf('Windows NT 5.0') > -1 
              || sUserAgent.indexOf('Windows 2000') > -1;
    isWinXP = sUserAgent.indexOf('Windows NT 5.1') > -1 
              || sUserAgent.indexOf('Windows XP') > -1;
    isWinNT4 = sUserAgent.indexOf('WinNT') > -1 
              || sUserAgent.indexOf('Windows NT') > -1 
              || sUserAgent.indexOf('WinNT4.0') > -1 
              || sUserAgent.indexOf('Windows NT 4.0') > -1 
              && (!isWinME && !isWin2K && !isWinXP);
} 

if (isMac) {
    isMac68K = sUserAgent.indexOf('Mac_68000') > -1 
               || sUserAgent.indexOf('68K') > -1;
    isMacPPC = sUserAgent.indexOf('Mac_PowerPC') > -1 
               || sUserAgent.indexOf('PPC') > -1;  
}

if (isUnix) {
    isSunOS = sUserAgent.indexOf('SunOS') > -1;

    if (isSunOS) {
        var reSunOS = new RegExp('SunOS (\\d+\\.\\d+(?:\\.\\d+)?)');
        reSunOS.test(sUserAgent);
        isMinSunOS4 = compareVersions(RegExp['$1'], '4.0') >= 0;
        isMinSunOS5 = compareVersions(RegExp['$1'], '5.0') >= 0;
        isMinSunOS5_5 = compareVersions(RegExp['$1'], '5.5') >= 0;
    }
}

var EventUtil = new Object;
EventUtil.addEventHandler = function (oTarget, sEventType, fnHandler) {
    if (oTarget.addEventListener) {
        oTarget.addEventListener(sEventType, fnHandler, false);
    } else if (oTarget.attachEvent) {
        oTarget.attachEvent('on' + sEventType, fnHandler);
    } else {
        oTarget['on' + sEventType] = fnHandler;
    }
};
        
EventUtil.removeEventHandler = function (oTarget, sEventType, fnHandler) {
    if (oTarget.removeEventListener) {
        oTarget.removeEventListener(sEventType, fnHandler, false);
    } else if (oTarget.detachEvent) {
        oTarget.detachEvent('on' + sEventType, fnHandler);
    } else { 
        oTarget['on' + sEventType] = null;
    }
};

EventUtil.formatEvent = function (oEvent) {
    if (isIE && isWin) {
        oEvent.charCode = (oEvent.type == 'keypress') ? oEvent.keyCode : 0;
        oEvent.eventPhase = 2;
        oEvent.isChar = (oEvent.charCode > 0);
        oEvent.pageX = oEvent.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
        oEvent.pageY = oEvent.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
        oEvent.preventDefault = function () {
            this.returnValue = false;
        };

        if (oEvent.type == 'mouseout') {
            oEvent.relatedTarget = oEvent.toElement;
        } else if (oEvent.type == 'mouseover') {
            oEvent.relatedTarget = oEvent.fromElement;
        }

        oEvent.stopPropagation = function () {
            this.cancelBubble = true;
        };

        oEvent.target = oEvent.srcElement;
        oEvent.time = (new Date).getTime();
    }
    return oEvent;
};

EventUtil.getEvent = function() {
    if (window.event) {
        return this.formatEvent(window.event);
    } else {
        return EventUtil.getEvent.caller.arguments[0];
    }
};

function plural(num, singular, plural) {
	if (num == 1) {
		return num + ' ' + singular;
	}
	else {
		return num + ' ' + plural;
	}
}

function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curleft += obj.offsetLeft;
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curtop += obj.offsetTop;
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

var Countdown = new Object;

Countdown.timer = new Array();
Countdown.id = new Array();
Countdown.style = new Array();
Countdown.exphtml = new Array();
Countdown.expcode = new Array();
Countdown.drawid = new Array();
Countdown.drawdate = new Array();
Countdown.drawstyle = new Array();
Countdown.drawdays = new Array();
Countdown.count = 0;
Countdown.interval = 0;

Countdown.add = function (aTime, sId, iStyle, sExpiredHtml, sExpiredCode, sDrawId, dDrawDate, iDrawStyle, aDrawDays) {
	if (document.getElementById) {
		this.timer[this.count] = aTime;
		this.id[this.count] = sId;
		this.style[this.count] = iStyle;
		this.exphtml[this.count] = sExpiredHtml;
		this.expcode[this.count] = sExpiredCode;
		this.drawid[this.count] = sDrawId;
		this.drawdate[this.count] = dDrawDate;
		this.drawstyle[this.count] = iDrawStyle;
		this.drawdays[this.count] = aDrawDays;
		this.count++;
		
		if (this.count == 1) {
			this.interval = window.setInterval('Countdown.tickTock()',1000);
		}
	}
};

Countdown.tickTock = function() {
	try {
		var i, j, a, exp, msg, obj, day;
		var expary = new Array();
		
		for (i=0; i<this.count; i++) {
		
			try {
				a = this.timer[i];
				exp = false;
				a[3]--;
				
				if (a[3] < 0) {
					a[3] = 59;
					a[2]--;
					
					if (a[2] < 0) {
						a[2] = 59;
						a[1]--;
						
						if (a[1] < 0) {
							a[1] = 23;
							a[0]--;
							
							if (a[0] < 0) {
								exp = true;
							}
						}
					}
				}

				if (exp) {
					if (typeof this.drawdays[i] == 'object') {
						j = this.drawdate[i].getDay();
						day = -1;
						
						do {
							j = (j + 1) % 7;
							this.drawdate[i] = new Date(this.drawdate[i].getTime() + _day_mills);
							day++;
						} while (!this.drawdays[i][j]);

						this.timer[i] = new Array(day, 23, 59, 59);
						a = this.timer[i];

						if (this.expcode[i].length > 0) {
							eval(this.expcode[i]);
						}

						exp = false;
					}
					else {
						expary[expary.length] = i;
						msg = this.exphtml[i];
					}
				}
				
				if (!exp) {
				
					switch(this.style[i]) {
						case 0:   //  x days, x hours, x minutes, x seconds - days and hours only shown if > 0
							msg = a[2] + ' minute' + ((a[2] == 1) ? '' : 's') + ', ' + a[3] + ' second' + ((a[3] == 1) ? '' : 's');
							
							if ((a[0] > 0) || (a[1] > 0)) {
								msg = a[1] + ' hour' + ((a[1] == 1) ? '' : 's') + ', ' + msg;
								
								if (a[0] > 0) {
									msg = a[0] + ' day' + ((a[0] == 1) ? '' : 's') + ', ' + msg;
								}
							}
							
							break;

						case 1:   // Time Left: h:mm:ss
							msg = 'Time Left: ' + a[1] + ':' + (a[2] < 10 ? '0' : '') + a[2] + ':' + (a[3] < 10 ? '0' : '') + a[3];
							break;
							
						case 2:   //  x days, x hrs, x mins, x secs - days and hours only shown if > 0
							msg = a[2] + ' min' + ((a[2] == 1) ? '' : 's') + ', ' + a[3] + ' sec' + ((a[3] == 1) ? '' : 's');
							
							if ((a[0] > 0) || (a[1] > 0)) {
								msg = a[1] + ' hr' + ((a[1] == 1) ? '' : 's') + ', ' + msg;
								
								if (a[0] > 0) {
									msg = a[0] + ' day' + ((a[0] == 1) ? '' : 's') + ', ' + msg;
								}
							}
							
							break;
							
						case 3:   //  'x Days' or 'x Hours' or 'x Mins, x Secs'
							if (a[0] > 0) {
								msg = a[0] + ' day' + ((a[0] == 1) ? '' : 's');
							}
							else {
								if (a[1] > 0) {
									msg = a[1] + ' hour' + ((a[1] == 1) ? '' : 's');
									
									if (a[1] == 1) {
										msg += ', ' + a[2] + ' minute' + ((a[2] == 1) ? '' : 's');
									}
								}
								else {
									msg = a[2] + ' minute' + ((a[2] == 1) ? '' : 's') + ', ' + a[3] + ' second' + ((a[3] == 1) ? '' : 's');
								}
							}
							
							break;
							
						case 4:   //
							break;
							
					}

					if (this.drawid[i].length > 0) {
						this.writeDrawDate(i);
					}
				}
				
				obj = document.getElementById(this.id[i]);
				
				if (obj) {
					obj.innerHTML = msg;
				}
			}
			catch (e) {
			}
		}
		
		if (expary.length > 0) {
		
			for (i=0; i<expary.length; i++) {
				j = expary[i];
				
				if (this.expcode[j].length > 0) {
					eval(this.expcode[j]);
					this.remove(j);
				}
			}
		}
	}
	catch (e) {
	}
};

Countdown.remove = function(index) {
	try {
		this.timer.splice(index, 1);
		this.id.splice(index, 1);
		this.style.splice(index, 1);
		this.count--;
		
		if (this.count == 0) {
			window.clearInterval(this.interval);
		}
	}
	catch (e) {
	}
};

Countdown.writeDrawDate = function(index) {
	var msg;

	try {	
		switch(this.drawstyle[index]) {
			case 0:   //  Today/Tomm (Mon d)
				if (new Date().getDate() == this.drawdate[index].getDate()) {
					msg = '<strong>Today</strong> (';
				}
				else if (new Date(new Date().getTime() + _day_mills).getDate() == this.drawdate[index].getDate()) {
					msg = '<strong>Tomorrow</strong> (';
				} else {
					msg = '<strong>' + _dows[this.drawdate[index].getDay()] + '</strong> (';
				}

				msg += _months[this.drawdate[index].getMonth()] + ' ' + this.drawdate[index].getDate() + ')';
				break;

			case 1:   //  Tue, 11 Apr 2006
				msg = _dows[this.drawdate[index].getDay()].substr(0,3) + ', ' + this.drawdate[index].getDate() + ' ' + _months[this.drawdate[index].getMonth()] + ' ' + this.drawdate[index].getFullYear();
				break;
				
			case 2:   //
				break;
				
			case 3:   //
				break;
				
			case 4:   //
				break;
		}

		document.getElementById(this.drawid[index]).innerHTML = msg;
	}
	catch (e) {
	}
};
