var offset1 = new Date(2010, 1, 1).getTimezoneOffset();
var offset2 = new Date(2010, 6, 1).getTimezoneOffset();
var localOffset = Math.max(offset1, offset2) * 60000;

function startClock(aClock, utc_offset, useDaylightSaving, refreshTime, minuteHand, hourHand) 
{
    var safari = navigator.userAgent.indexOf('Safari');
    var firefox = navigator.userAgent.indexOf('Firefox');    
    var clockHeight = 45;
    aClock.css({ "height": clockHeight + "px" });

    try {
        aClock.show();

        setInterval(function() { rotateHands(utc_offset, useDaylightSaving, minuteHand, hourHand); }, refreshTime * 1000);
        if (safari > -1 || firefox > -1) {
            setTimeout(function() { rotateHands(utc_offset, useDaylightSaving, minuteHand, hourHand); }, 300);
            setTimeout(function() { rotateHands(utc_offset, useDaylightSaving, minuteHand, hourHand); }, 1500);
            setTimeout(function() { rotateHands(utc_offset, useDaylightSaving, minuteHand, hourHand); }, 5000);
        }
        else {
            rotateHands(utc_offset, useDaylightSaving, minuteHand, hourHand);
        }
    }
    catch (e) {
        aClock.hide();
    }
}


function rotateHands(utc_offset, useDaylightSaving, minuteHand, hourHand) {
    var clockHeight = 45;
    var clockWidth = 45;
    var now = new Date();
    var localTime = now.getTime();
    var DST = 0;
    
    if (useDaylightSaving == "1") {
        if (IsDaylightSavingTime(now)) {
            DST = 1 * 3600000;
        }
    }

    var utc = localTime + localOffset;
    if (IsDaylightSavingTime(now))
        utc = utc - 3600000;
    
    var utcTime = utc + (3600000 * utc_offset) + DST;
    
    now = new Date(utcTime);    
    
    var minuteAngle = 360 / 60 * now.getMinutes();
    $('#' + minuteHand).rotate(minuteAngle, 'abs');
    var l = (clockWidth - $('#' + minuteHand).width()) / 2;
    var t = (clockHeight - $('#' + minuteHand).height()) / 2;
    $('#' + minuteHand).css({ "left": l + "px", "top": t + "px" });

    var hourAngle = 360 / 12 * now.getHours();
    
    $('#' + hourHand).rotate((hourAngle + minuteAngle / 12) % 360, 'abs'); 
    var l2 = (clockWidth - $('#' + hourHand).width()) / 2;
    var t2 = (clockHeight - $('#' + hourHand).height()) / 2;    
    
    $('#' + hourHand).css({ "left": l2 + "px", "top": t2 + "px" }); 

}

function IsDaylightSavingTime(date) 
{
    var year = date.getYear();
    if (year < 2000) year = 2000 + year - 100;
    var LastSundayOfMarch = new Date(year, 2, LastDay(1, 3, year));
    var LastSundayOfOctober = new Date(year, 9, LastDay(1, 10, year));

    if (date >= LastSundayOfMarch && date <= LastSundayOfOctober) 
    {
        return true;
    }
    else 
    {
        return false;
    }
}

function makeArray() 
{
    this[0] = makeArray.arguments.length;
    for (i = 0; i < makeArray.arguments.length; i++)
        this[i + 1] = makeArray.arguments[i];
}

function LeapYear(year) 
{
    if ((year / 4) != Math.floor(year / 4)) return false;
    if ((year / 100) != Math.floor(year / 100)) return true;
    if ((year / 400) != Math.floor(year / 400)) return false;
    return true;
}

function LastDay(weekday, month, year) 
{
    var DaysOfMonth = new makeArray(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
    var DaysOfMonthLY = new makeArray(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
    if (LeapYear(year))
        var Days = DaysOfMonthLY[month];
    else
        var Days = DaysOfMonth[month];
    return Days - (DayOfWeek(Days, month, year) - weekday + 7) % 7;
}

function DayOfWeek(day, month, year) 
{
    var a = Math.floor((14 - month) / 12);
    var y = year - a;
    var m = month + 12 * a - 2;
    var d = (day + y + Math.floor(y / 4) - Math.floor(y / 100) + Math.floor(y / 400) + Math.floor((31 * m) / 12)) % 7;
    return d + 1;
}

    
