/*******************************************************************************************
 * calendar
 * Written by Craig Francis
 * Allow the
 *******************************************************************************************/

	var calendar = new function() {

		//--------------------------------------------------
		// Old browsers

			if (!document.getElementById || !document.getElementsByTagName) {
				return;
			}

		//--------------------------------------------------
		// Initialisation

			this.init = function() {

				//--------------------------------------------------
				// Debug

					console.log('calendar.js: Initialisation');

				//--------------------------------------------------
				// Get a reference to the calendar

					calendar.ref_main = $('#calendar');
					if (calendar.ref_main.length != 1) {
						console.log('calendar.js: Could not find "#calendar"');
						return;
					}

					calendar.ref_weeks = $('#calendar div.weeks');
					if (calendar.ref_weeks.length != 1) {
						console.log('calendar.js: Could not find "#calendar div.weeks"');
						return;
					}

				//--------------------------------------------------
				// Remove the "no_js" class

					calendar.ref_main.removeClass('no_js');

				//--------------------------------------------------
				// Defaults

					calendar.default_week = 0;
					calendar.default_trimester = 0;
					calendar.current_week = 0;
					calendar.current_trimester = 0;

					var d;
					var matches;

					d = $('#calendar li.week.active');
					if (d.length == 1) {
						matches = d.children().attr('id').match(/week_([0-9]+)/);
						if (matches) {
							calendar.default_week = matches[1];
						}
					}

					d = $('#calendar li.trimester.active');
					if (d.length == 1) {
						matches = d.attr('class').match(/trimester_([0-9]+)/);
						if (matches) {
							calendar.default_trimester = matches[1];
						}
					}

					console.log('calendar.js: Default week "' + calendar.default_week + '", trimester "' + calendar.default_trimester + '"');

				//--------------------------------------------------
				// Add hover events

					$('#calendar .weeks a').mouseenter(function(e) {
						var week = parseInt(e.target.id.replace('week_', ''), 10)
						calendar.hover(week);
					});

					$('#calendar .weeks').mouseleave(function(e) {
						calendar.hover(0);
					});

				//--------------------------------------------------
				// Add child

					var week_hover = createElement('p');
					var week_child = createElement('span');
					var week_text = document.createTextNode('');

					week_hover.appendChild(week_child);
					week_child.appendChild(week_text);

					$('#calendar .weeks').append(week_hover);

					calendar.week_hover = $(week_hover);
					calendar.week_text = week_text;

				//--------------------------------------------------
				// IE6 png fix

					if ($.browser.msie && $.browser.version < 7) {

						var week_fix = createElement('div');
						week_fix.style.height = '10px';
						week_fix.style.fontSize = '1px';
						week_hover.appendChild(week_fix);

						var bg = week_hover.currentStyle.backgroundImage;
						var src = bg.substring(5, (bg.length - 2));
						var blk = src.replace('/img/template/calendar_hover_bottom.png', '/img/template/spacer.gif');

						week_hover.style.backgroundImage = 'url(' + blk + ')';
						week_hover.style.paddingBottom = '0';

						week_fix.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='crop')";
						week_fix.style.backgroundImage = 'url(' + blk + ')';

					}

			}

		//--------------------------------------------------
		// Over state

			this.hover = function(week) {

				//--------------------------------------------------
				// Log

					//console.log('calendar.js: Change from "' + calendar.current_week + '" to "' + week + '"');

				//--------------------------------------------------
				// Restore default week

					if (week == 0) {
						week = calendar.default_week;
					}

				//--------------------------------------------------
				// Week text

					var new_trimester = 0;

					if (week > 0) {

						//--------------------------------------------------
						// Element

							var el = $('#week_' + week);

							if (el.length != 1) {
								console.log('calendar.js: Could not find week "' + week + '"');
								return;
							}

						//--------------------------------------------------
						// Text

							calendar.week_text.nodeValue = el.text();

						//--------------------------------------------------
						// Position

							var left = (el.position().left - (calendar.week_hover.outerWidth() / 2));
							left += 8; // Left margin (15) on <ul>, minus half the width (14) of each li

							var top = (0 - calendar.week_hover.outerHeight());
							top += 3;

							calendar.week_hover.css('left', left + 'px');
							calendar.week_hover.css('top', top + 'px');

						//--------------------------------------------------
						// Trimester

							var matches = el.parent().attr('class').match(/trimester_([0-9]+)/);
							if (matches) {
								new_trimester = parseInt(matches[1], 10);
							}

					} else {

						//--------------------------------------------------
						// Hide

							calendar.week_hover.css('left', '-5000px');

					}

				//--------------------------------------------------
				// Change <div class="weeks"> background

					calendar.ref_weeks.css('background-position', (week > 0 ? '50% -30px' : '50% 0'));

				//--------------------------------------------------
				// Change <li> background(s).

					var new_week = calendar.current_week;

					while (new_week < week) {
						new_week++;
						if (new_week == calendar.default_week) {
							//$('#week_' + new_week).css('background-position', '0 -90px');
						} else if ((new_week - 1) == calendar.default_week && calendar.default_week > 0) {
							$('#week_' + new_week).css('background-position', '0 -60px');
						} else {
							$('#week_' + new_week).css('background-position', '0 -30px');
						}
					}

					while (new_week > week) {
						if (new_week == calendar.default_week) {
							//$('#week_' + new_week).css('background-position', '0 -120px');
						} else {
							$('#week_' + new_week).css('background-position', '0 0');
						}
						new_week--;
					}

					calendar.current_week = new_week;

				//--------------------------------------------------
				// Trimester

					if (new_trimester != calendar.current_trimester) {
						if (calendar.current_trimester > 0) {
							$('#trimester_' + calendar.current_trimester).removeClass('active');
						}
						if (new_trimester > 0) {
							$('#trimester_' + new_trimester).addClass('active');
						}
						calendar.current_trimester = new_trimester;
					}

			}

		//--------------------------------------------------
		// On load

			addLoadEvent(function() {
				calendar.init();
			});

		//--------------------------------------------------
		// On window load - after images and css

			$(window).load(function () {
				if (calendar.default_week) {
					calendar.hover(calendar.default_week);
				}
			});

	}
