var $ClockManager = {
	initMinutesFlag : false,
	initHoursFlag : false,
	initFlag : false,
	actAngleMinutes : 0,
	actAngleHour : 0,

	monthNames : [ 'Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj', 
	               'Czerwiec', 'Lipiec', 'Sierpień', 'Wrzesień', 
	               'Październik', 'Listopad', 'Grudzień' ],
	               
	weekDays : ['Niedziela', 'Poniedziałek', 'Wtorek', 'Środa', 'Czwartek', 'Piątek', 'Sobota'],               
	
	initMinutes : function() {

		var now = new Date();
		var minuteAngle = 360/60 * now.getMinutes();

		if ($ClockManager.actAngleMinutes >= minuteAngle) {
			$ClockManager.initMinutesFlag = true;
			return;
		}

		$ClockManager.actAngleMinutes += 10;
		
		$j('#minuteArrow').rotate($ClockManager.actAngleMinutes);

		setTimeout($ClockManager.initMinutes, 50);    
	},

	initHours : function() {

		var now = new Date();

		var hourAngle = 360/12 * now.getHours();
		var minuteAngle = 360/60 * now.getMinutes();

		hourAngle = (hourAngle + minuteAngle/12)%360;

		if ($ClockManager.actAngleHour >= hourAngle) {
			$ClockManager.initHoursFlag = true;
			return;
		}

		$ClockManager.actAngleHour += 5;
		
		$j('#hourArrow').rotate($ClockManager.actAngleHour);
	
		setTimeout($ClockManager.initHours, 50);    		
		
	},
	
	refreshClockDetails : function(now) {
		
		var nowYear = now.getFullYear();
		var nowMonth = now.getMonth();
		var nowDay = now.getDate();
		
		var nowWeekDay = now.getDay();
		
		var nowWeekDayName = $ClockManager.weekDays[nowWeekDay];
		var nowMonthName = $ClockManager.monthNames[nowMonth];
		
		$j('#clock_details_date').html(nowDay + ' ' + nowMonthName + ' ' + nowYear);
		$j('#clock_details_day').text(nowWeekDayName);		
		
	},
	
	initClockDetails : function() {
		var now = new Date();
		
		var nowYear = now.getFullYear();
		var nowMonth = now.getMonth();
		var nowDay = now.getDate();
		
		var nowWeekDay = now.getDay();
		
		var nowWeekDayName = $ClockManager.weekDays[nowWeekDay];
		var nowMonthName = $ClockManager.monthNames[nowMonth];
		
		$j('#clock_details_date').html(nowDay + ' ' + nowMonthName + ' ' + nowYear);
		$j('#clock_details_day').text(nowWeekDayName);
	},

	refreshClock : function() {
		
		var now = new Date();

		var hourAngle = 360/12 * now.getHours();
		var minuteAngle = 360/60 * now.getMinutes();

		hourAngle = (hourAngle + minuteAngle/12) % 360;

		$j('#minuteArrow').rotate(minuteAngle);
		$j('#hourArrow').rotate(hourAngle);
		
		$ClockManager.refreshClockDetails(now);

		setTimeout($ClockManager.refreshClock, 10000); 
	},	

	showClockDetails : function() {
		if ($j('#clock_details').data('animation')) {
			$j('#clock_details').data('destroy', false);
			$j('#clock_details').data('create', true);
			return;
		}
		
		$j('#clock_details').data('animation', true);
		$j('#clock_details').data('create', true);
		
		$j('#clock_details').fadeIn('slow', function() {
			
			$j('#clock_details').data('animation', false);
			
			if ($j('#clock_details').data('destroy')) {
				
				$ClockManager.hideClockDetails();	
				return;
			}
			
			$j('#clock_details').data('destroy', false);
			$j('#clock_details').data('create', false);			
		});		
	},
	
	hideClockDetails : function() {
		if ($j('#clock_details').data('animation')) {
			$j('#clock_details').data('destroy', true);
			$j('#clock_details').data('create', false);
			return;
		}
		
		$j('#clock_details').data('animation', true);
		$j('#clock_details').data('destroy', true);
		
		
		$j('#clock_details').fadeOut('slow', function() {
			
			$j('#clock_details').data('animation', false);
			
			if ($j('#clock_details').data('create')) {
				$ClockManager.showClockDetails();	
				return;
			}
			
			$j('#clock_details').data('destroy', false);
			$j('#clock_details').data('create', false);				
		});		
	},
	
	initClock : function() {
		
		if ($ClockManager.initMinutesFlag && $ClockManager.initHoursFlag) {
			$ClockManager.refreshClock();
			return;
		}

		if ($ClockManager.initFlag) {
			setTimeout($ClockManager.initClock, 1000); 
			return;
		}
		
		this.initFlag = true;
		
		$ClockManager.initHours();
		$ClockManager.initMinutes();
		
		
		this.initClockDetails();
		$j('#clock_details').data('animation', false);
		$j('#clock_details').data('destroy', false);
		$j('#clock_details').data('create', false);
		
		$j('#clock').mouseover(function() {
			$ClockManager.showClockDetails();	
		});
		
		$j('#clock').mouseout(function() {
			$ClockManager.hideClockDetails();	
		});		
		
		setTimeout($ClockManager.initClock, 1000);    
	}	
		
};
