/**
 *
 *	A script by Florian Brinker
 *	for for the Die-Computer-Ecke.de advent calendar
 * 
 *	27.11.2010
 *	All rights reserved.
 *
 */
 
// main method
jQuery(document).ready(function() {	
	// create calendar
	var calendar	= jQuery('#calendar');
	var calWidth 	= (calendar.css('width')).replace('px', '');
	var calHeight 	= (calendar.css('height')).replace('px', '');
	var calDoor		= jQuery('#calendar').find('.doorDummy');
	
	createCalendar(calendar, calWidth, calHeight, calDoor);
	
	jQuery('#doorContentClose').click(function() {
		jQuery('#doorContent').fadeOut('fast');
		jQuery('#doorContent').find('#doorContentContent').html('');
	});
	
	jQuery('#doorContentSolution').click(function() {
		jQuery.post(	'./scripts/getDoor.php', 
						{ 	
							doorId		: jQuery(this).parent().parent().attr('rel'),
							solution	: 'true'
						},
						function(data) {
							handleDoor(data);
						},
						'json'
		);
	});
});

// Ajax Config
jQuery.ajaxSetup({
	cache	: false
})

// all the other functions
function errorMsg(msg) {
	if('' != msg) {
		msg = 'Script-Error:\n\t' + msg;
	
		if(typeof(console) == 'object')
			console.debug(msg);
		else
			alert(msg);
			
		return true;
	}
	
	return false;
}

function shuffleArray() {
  var tmp 		= new Array();
  var random 	= 0;
  var length 	= this.length;
  
  for(var i = 0; i < length; i++) {
    random 			= Math.floor(Math.random() * length);
    tmp 			= this[i]; 
    this[i] 		= this[random];
    this[random]	= tmp;
  }
}
Array.prototype.shuffle = shuffleArray;

function createCalendar(calendar, width, height, door) {
	if(0 >= width  || 0 >= height || 'object' != typeof(calendar) || 'object' != typeof(door)) {
		errorMsg('Couldn\'t create the calendar.');
		return false;
	}
	
	var doorArray 	= new Array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24);
	doorArray.shuffle();	
	
	var doorWidth 	= parseInt((door.css('width')).replace('px', ''));
	var doorHeight 	= parseInt((door.css('height')).replace('px', ''));	
	var paddingX 	= (width - (6 * doorWidth)) / (6*2);
	var paddingY 	= (height - (4 * doorHeight)) / (4*2);	
	var offsetX 	= 60;
	var offsetY 	= 10;	
	var left 		= offsetX + paddingX;
	var top 		= offsetY + paddingY;
	
	for(var i = 0; i < 24; i++) {		
		newDoor = door.clone();
		newDoor.text(doorArray[i]);
		newDoor.attr('id', doorArray[i]);
		
		if(i % 6 == 0 && i != 0) {
			top 	= top + paddingY + parseInt(doorHeight);
			left	= offsetX + paddingX;
		}
		else if(i != 0)
			left = left + paddingX + parseInt(doorWidth);
			
		newDoor.css('left', left + 'px');
		newDoor.css('top', top + 'px');		
		newDoor.css('display', 'block');
		
		newDoor.click(function() {
			jQuery.post(	'./scripts/getDoor.php', 
							{ doorId: jQuery(this).attr('id') },
							function(data) {
								handleDoor(data);
							},
							'json'
			);
		});
		
		calendar.append(newDoor);
	}
	
	return true;
}

function handleDoor(data) {
	var doorContentObj 	= jQuery('#doorContent');
	var doorContent 	= '';
	
	if('object' != typeof(doorContentObj) || 'object' != typeof(doorContentObj.find('#doorContentContent'))) {
		errorMsg('Couldn\'t find doorContent-object.');
		return false;
	}
	
	if(0 < data.doorId)
		doorContentObj.attr('rel', data.doorId);
	
	if(undefined != data.errorcode) {
		switch(data.errorcode) {
			case 'wrongId'	: doorContent = 'Wrong DoorId.'; break;
			case 'tooEarly'	: doorContent = '<h1>Tür #' + data.doorId + '</h1>Huch, da musst du aber noch etwas warten! <img src="./design/images/ecki-baeh.gif" alt="*zunge raus smilie*"><br>Versuch es ab dem ' + data.waitUntil + ' erneut.'; break;
			case 'tooEarlyS': doorContent = '<h1>Tür #' + data.doorId + '</h1>Huch, da musst du aber noch etwas warten! <img src="./design/images/ecki-baeh.gif" alt="*zunge raus smilie*"><br>Versuch es morgen erneut.'; break;
			case 'noFile'	: doorContent = 'Door-Content-File does not exist.'; break;
			default			: doorContent = ('' == data.errorcode) ? 'Unknown error.' : data.errorcode;
		}
	}
	else if(undefined != data.content && '' != data.content) {
		jQuery('#doorContentSolution').show();
		doorContent = '<h1>Tür #' + data.doorId + '</h1>' + data.content;
	}
	else {
		doorContent = 'Empty.';
	}
	
	doorContentObj.find('#doorContentContent').html(doorContent)
	doorContentObj.fadeIn('fast');
	
	return true;
}
