/**
 * Disable console if there is no Firebug installed.
 */
if(typeof console == "undefined") {
    var console = {
      log: function () {},
      dir: function () {}
    };
}
else {
    if(console.log == "undefined") {
        console.log = function () {};
    }
    if(console.dir == "undefined") {
        console.dir = function () {};
    }
}

jQuery.noConflict();

jQuery(document).ready( function() {

	// Adds speech bubble to an element.
	
	var addSpeechBubble = function(index, elem) {
		var text = jQuery(elem).attr("title");
		text = jQuery.trim(text);
		
		if(text.length == 0) {
			return;
		}
		jQuery(elem).removeAttr("title");
		jQuery(elem).qtip( {
			content: text,
			style: { name: 'dark' },
			show: 'mouseover',
			hide: 'mouseout',
			position: {
				corner: {
			    target: 'topMiddle',
			    tooltip: 'bottomMiddle'
			    }
			},
			style: { 
				tip: true,
				width: 160,
				border: {
			         width: 8,
			         radius: 8,
			    },
				name: 'cream'
			}
		});
	};
			
	jQuery(".unplaced-elems").draggable( { revert: "invalid" } );
	
	// Change background of dragged object to transparent and display target droppables.
	
	jQuery(".unplaced-elems").mousedown( function(event) {
		var element	= 	jQuery(this);
		var zoneClass, allowedZones, zoneSelector = '';
		
		element.css("background-color", "transparent");
		
		zoneClass = element.attr('class').split(' ')[0];
		console.log(zoneClass);
		allowedZones = zoneClass.split('_').slice(1);
		console.log(allowedZones);
		jQuery.each(allowedZones, function(index, value) {
			zoneSelector += '.forest_zone_' + value + ', ';
		});
		console.log( jQuery.trim(zoneSelector) );
		jQuery(zoneSelector).fadeIn();
	});
	
	jQuery(".unplaced-elems").mouseup( function(event) {
		jQuery(this).css("background-color", "#00C2F3");
		jQuery('.swforest-freepos').fadeOut();
	});
	
	// Handle elements drops on target area.
	
	jQuery(".swforest-freepos").droppable( {
		
		over: function( event, ui ) {		
			jQuery( this ).addClass( "freepos-highlight");
		},
		
		out: function( event, ui ) {
			jQuery( this ).removeClass( "freepos-highlight");
			jQuery( this).removeData();			
		},
		
		drop: function( event, ui ) {
			
			var elementData = new Array();
			var target = jQuery(this);
			var targetPos = target.offset();
			var element = ui.draggable;
			element.css("background-color", "transparent");
			var xPos = targetPos.left + (target.width() - element.width()) / 2;
			var yPos = targetPos.top + target.height() - element.height();
			element.offset( { top: yPos, left: xPos } );
			
			var info = { "objectId": element.attr("id"), "targetId": target.attr("id") };
			
			target.data("info", info);
	
			elementData.push(info);
		
			jQuery.post("swforest_ajax.php", { placedElements: elementData }, function(data) { 
				
				var response = data;
				jQuery("#swforest-scene").attr("src", response.scenePath );	
				for( var i=0; i < elementData.length; i++) {
					if(elementData[i] != undefined) {
						id = "#" + elementData[i].objectId; 
						jQuery(id).removeClass("unplaced-elems").hide();
						id = "#" + elementData[i].targetId;
						jQuery(id).remove();
					}
					
				}
				var unplacedElems = jQuery(".unplaced-elems");
				jQuery("#swforest-unplaced-count").text( '(' + unplacedElems.length + ')' );
				
				if(unplacedElems.length == 0) {
					jQuery(".swforest-freepos").hide();
				}
				
				var removeThis = "#swforest-wrapper #swforest-give-item_" + element.attr("id").split('_').pop();
				jQuery(removeThis).remove();
				
				var defaultScene = jQuery("div.swforest-default-scene");
				defaultScene.children(".swforest-elem").remove();			
				jQuery.each(response.elementLinks, function() {
					var newElemHtml = "<a class=\"swforest-elem\" href=\"\" title=\"" + this.text
					+ "\" style=\"top:" + this.yPos + "px;left:" + this.xPos + "px;width:" + this.width
					+ "px;height:" + this.height + "px\"></a>";
					
					defaultScene.prepend( newElemHtml);
				});
				
				defaultScene.children(".swforest-elem").each( addSpeechBubble );
					
			});	
		
		
		
		}
	});
	
	/*
	jQuery("#add-button").click( function () {
		var elementData = new Array();
		var objectCounter = 0;
		
		jQuery(".freepos").each( function (index) {
			
			elementData[index] = jQuery.data(this, "info"); 
			if( elementData[index] != undefined) {
				objectCounter++;
			}
			
		});
		
		if(objectCounter == 0) {
			return false;
		}
		
		jQuery.post("ajax.php", { placedElements: elementData }, function(data) { 
			
			console.log("Ajax success!"); 
			console.log(elementData.length);
			var newPath = jQuery("#forest-scene").attr("src") +"?x=" + Math.random().toString();
			jQuery("#forest-scene").attr("src", newPath );	
			console.log(elementData);
			console.log(objectCounter);
			for( var i=0; i < elementData.length; i++) {
				if(elementData[i] != undefined) {
					id = "#" + elementData[i].objectId; 
					jQuery(id).removeClass("unplaced").hide();
					id = "#" + elementData[i].targetId;
					jQuery(id).hide();
					console.log('Yo!');
				}
				
			}
			var unplacedElems = jQuery(".unplaced");
			
			if(unplacedElems.length == 0) {
				jQuery(".freepos").hide();
			}
				
		});		
		
		return false;
	});*/
	
	jQuery(".swforest-elem").each( addSpeechBubble );
	
	jQuery(".swforest-elem").live("click", function(event) {
		event.preventDefault();
	});
	
	jQuery("#scene-wrapper").mouseenter( function(event) {
		
		if( swforest.sceneData.length > 1) {
			if(swforest.scenePos <= 0) {
				jQuery("#swforest-scroll-right").fadeIn("slow");
			}
			else if(swforest.scenePos >= swforest.sceneData.length - 1) {
				jQuery("#swforest-scroll-left").fadeIn("slow");
			}
			else {
				jQuery(".swforest-scroll").fadeIn("slow");
			}
		}
	});
	
	jQuery("#scene-wrapper").mouseleave( function(event) {
		jQuery(".swforest-scroll").fadeOut("slow");
	});
	
	// Handles forest scrolling. Loads new content from back-end if forest div is empty.
	
	jQuery(".swforest-scroll").click( function(event) {
		var sliderPos = jQuery("#scene-item-wrapper").position().left;
		var direction = parseInt( jQuery(this).attr("href") );
		var newScenePos = swforest.scenePos + direction * -1;
		var newScene = jQuery(".swforest-scene-item").eq(newScenePos);
		
		if(newScenePos < 0 || newScenePos > swforest.sceneData.length - 1) {
			event.preventDefault();
			return true;
		}
		
		if( newScene.hasClass("swforest-no-content") ) {
			console.log("LOAD!");
			var userId = swforest.sceneData[newScenePos].id;
			swforest.scenePos = newScenePos;
			
			jQuery.post("swforest_ajax.php", { uid: userId }, function(data) { 
							
				var response = data;
				console.log(response);
				var imgHtml = "<img src=\"" + response.scenePath +"\" />";
				newScene.prepend( imgHtml );
				newScene.removeClass('swforest-no-content');
				console.log(sliderPos);
				sliderPos = newScenePos * -940;
				console.log(sliderPos);
				
				jQuery("#scene-item-wrapper").animate( {"left": sliderPos.toString() + "px"} );
				
				jQuery.each(response.elementLinks, function() {
					var newElemHtml = "<a class=\"swforest-elem\" href=\"\" title=\"" + this.text
					+ "\" style=\"top:" + this.yPos + "px;left:" + this.xPos + "px;width:" + this.width
					+ "px;height:" + this.height + "px\"></a>";
					
					newScene.prepend( newElemHtml);
				});
				
				newScene.children(".swforest-elem").each( addSpeechBubble );
				
			});	
		}
		else {
			sliderPos = newScenePos * -940;
			swforest.scenePos = newScenePos;
			jQuery("#scene-item-wrapper").animate( {"left": sliderPos + "px"} );
		}
		
		if(newScenePos <= 0) {
			jQuery("#swforest-scroll-left").fadeOut("fast");
		}
		if(newScenePos == 1) {
			jQuery("#swforest-scroll-left").fadeIn("fast");
		}
		
		if(newScenePos >= swforest.sceneData.length - 1) {
			jQuery("#swforest-scroll-right").fadeOut("fast");
		}
		if(newScenePos == swforest.sceneData.length - 2) {
			jQuery("#swforest-scroll-right").fadeIn("fast");
		}
		
		console.log(swforest.scenePos);
		event.preventDefault();	
	});
	
	jQuery(".swforest-return-button").click( function(event) {
		var defaultPos = jQuery(this).attr("href");
		console.log(defaultPos);
		swforest.scenePos = parseInt( defaultPos );
		jQuery("#scene-item-wrapper").animate( { "left": defaultPos * -940 + "px" } );
		event.preventDefault();
	});
	
	jQuery(".swforest-give-button").click( function(event) {
		jQuery("#give-dialog-message p").css("color", "red").html("");
		return true;
	});
	
	jQuery(".swforest-give-item").live( "click", function(event) {
		jQuery(".selected-give-item").removeClass('selected-give-item');
		jQuery(this).addClass("selected-give-item");
		console.log("Click!");
	});
	
	jQuery(".swforest-give-item a").live( "click", function(event) {
		event.preventDefault();
	});
	
	jQuery("#give-dialog-cancel").live( "click", function(event) {
		parent.TB_remove();
	});
	
	jQuery("#give-dialog-submit").live( "click", function(event) {
		var friendId = jQuery("#give-dialog-friends").val();
		var itemId = jQuery(".selected-give-item").attr("id");
		
		if(friendId == 0 || itemId == undefined) {
			jQuery("#give-dialog-message p").html("Valitse elementti ja kaveri.");		
			return;
		}
		
		itemId = itemId.split("_").pop();
		
		jQuery.post("swforest_ajax.php", { giveItem: true, friendId: friendId, itemId: itemId }, function(data) {
			jQuery("#give-dialog-message p").css("color", "green").html("Elementti on l&auml;hetetty kaverillesi.");
			setTimeout("parent.TB_remove()", 1000);
			
			var removeThis = "#swf-elem_" + itemId;
			jQuery(removeThis).remove();
			removeThis = "#swforest-wrapper #swforest-give-item_" + itemId;
			jQuery(removeThis).remove();
			
			var unplacedElems = jQuery(".unplaced-elems");
			jQuery("#swforest-unplaced-count").text( '(' + unplacedElems.length + ')' );
		});	
		
		console.log("Close! " + friendId + " " + itemId);
		//parent.TB_remove();
	});
	
	jQuery(".swforest-message").last().addClass("swforest-message-current").fadeIn(2000);
	
	// Handles forest message closing
	
	jQuery(".swforest-message-close").click( function(event) {
		jQuery("div.swforest-message-current").fadeOut(300).removeClass("swforest-message-current").prev(".swforest-message").fadeIn(300).addClass("swforest-message-current");
		event.preventDefault();
	});
	
	// Handles switching between unplaced elements & 5-ways-panels
	
	jQuery('.swforest-switch-panel').click( function(event) {
		var panel1 = jQuery('#swforest-panel-1');
		var panel2 = jQuery('#swforest-panel-2');
		var state = panel1.hasClass('swforest-hidden');
		
		if(state) {
			panel1.removeClass('swforest-hidden');
			panel2.addClass('swforest-hidden');
			panel2.fadeOut('fast', function() { panel1.fadeIn('fast'); } );
		}
		else {
			panel2.removeClass('swforest-hidden');
			panel1.addClass('swforest-hidden');
			panel1.fadeOut('fast', function() { panel2.fadeIn('fast'); } );
		}
		event.preventDefault();
	});
	
	// Open 5-way-box
	
	jQuery('.5ways-button').click( function(event) {
		var fragments = jQuery(this).attr('id').split('-')
		var targetBox = fragments[fragments.length - 1];
		var selector = '#swforest-5ways-box-' + targetBox;
		
		jQuery('.swforest-5ways-box').fadeOut('fast');
		jQuery(selector).fadeIn('fast');
		
		console.log(selector);
		event.preventDefault();
	});
	
	// Close 5-way-box
	
	jQuery('.swforest-5ways-box-close').click( function(event){
		jQuery('.swforest-5ways-box').fadeOut('fast');
		event.preventDefault();
	});
});
