function initPuchiDragAndDrop(drag_and_drop_id, limit) {
	current_mousedown_element = null;

	var dragAndDropElement = $('#' + drag_and_drop_id);

	var dragElements = $('.drag', dragAndDropElement);
	dragElements.each(function(i_2) {
		addCustomDraggable(this);
	});

	$(".drop", dragAndDropElement).droppable({
		accept: ".drag",
		activeClass: 'droppable-active',
		hoverClass: 'droppable-hover',
		drop: function(ev, ui) {
			if ($(this).children().size() < limit) {
				handleDrop(ui.draggable, this);
			} else {
				alert('Only ' + limit + ' item(s) per box please.');
			}
		}
	});
}

function handleDrop(dragged_element, drop_element) {
	var dragged_element = $(dragged_element);
	var drop_element = $(drop_element);

	dragged_element.effect('scale', { direction: 'both', percent: 50 }, 0 );

	var dragged_element_id_parts = dragged_element.attr('id').split('-');
	var input_key = dragged_element_id_parts.pop();
	var input_name = dragged_element_id_parts.join('-');

	var drop_element_id_parts = drop_element.attr('id').split('-');
	var input_value = drop_element_id_parts.pop();

	$('input[name=' + input_name + '[' + input_key + ']' + ']').attr('value', input_value);
	
	dragged_element.attr('id');

	dragged_element.draggable('disable');

	var drag_container = dragged_element.parent();
	dragged_element.appendTo(drop_element);
	$('.icon', dragged_element).hide();
	drag_container.empty();

	$('.drag-handle', dragged_element).unbind('mousedown').unbind('mouseup');

	dragged_element.bind('click', function() {
		$(this).css( { left: '0px', top: '0px' } );
		$('.icon', $(this)).show();
		$(this).appendTo(drag_container);
		$(this).effect('scale', { direction: 'both', percent: 200 }, 0 );

		$(this).unbind('click');
		$(this).draggable('enable');

		//addCustomMouseEvents($('.drag-handle', $(this)));
	});
}

function addCustomDraggable(element) {
	$(element)
	.draggable({
		zIndex: 1000,
		containment: $(element).closest('.drag-and-drop-element'),
		opacity: 0.75,
		handle: '.drag-handle',
		revert: true,
		cursorAt: { left: 35, top: 35 }
	});

	//addCustomMouseEvents($('.drag-handle', element));
}

function addCustomMouseEvents(element) {
	var clone = $(element).closest('.drag').clone().addClass('active').css('opacity', 0.5);
	$('.icon', clone).remove();

	$(element)
	.bind('mousedown', function(event) {
		current_mousedown_element = $(this);

		var corresponding_drag = $(this).closest('.drag');
		clone.insertBefore(corresponding_drag);

		corresponding_drag.effect('scale', { direction: 'both', percent: 50 }, 0 );
		$('.icon', corresponding_drag).hide();
	})
	.bind('mouseup', function(event) {
		current_mousedown_element = null;

		var corresponding_drag = $(this).closest('.drag');
		//console.log($('.icon', corresponding_drag));
		clone.remove();
		$('.icon', corresponding_drag).show();
		corresponding_drag.effect('scale', { direction: 'both', percent: 200 }, 0 );
	});

	$('html')
	.bind('mouseup', function(event) {
		if (current_mousedown_element != null) {
			current_mousedown_element.trigger('mouseup');
		}
	});
}

function slideLeft(event){
	$(this).unbind('click', slideLeft);

	var slider_left = $(this);
	
	var new_left = calculateMoveLeft(slider_id, slider_container_width) + 'px';
	var old_left = $('#' + slider_id).css('left');

	if (old_left == new_left) {
		var slider = $('#' + slider_id);
		var first_td = $('td:first', slider);
		var current_left = parseInt(slider.css('left'));
		var current_width = parseInt(slider.width());
		$('td', slider).clone().insertBefore(first_td);
		slider.css('left', current_left - current_width + 'px');

		$(this).bind('click', slideLeft);
		$(this).trigger('click');
	} else {
		$('#' + slider_id).animate( { left: new_left },
			{
				duration: 750,
				complete: function() {
					var next_left = calculateMoveLeft(slider_id, slider_container_width);
					var current_left = parseInt($('#' + slider_id).css('left'));

					slider_left.bind('click', slideLeft);
				}
			}
		);
	}
}

function slideRight(event) {
	$(this).unbind('click', slideRight);

	var slider_right = $(this);
	
	var new_left = calculateMoveRight(slider_id, slider_container_width) + 'px';
	var old_left = $('#' + slider_id).css('left');

	if (old_left == new_left) {
		var slider = $('#' + slider_id);
		var first_td = $('td:first', slider);
		var last_td = $('td:last', slider);
		$('td', slider).clone().insertAfter(last_td);

		$(this).bind('click', slideRight);
		$(this).trigger('click');
	} else {
		$('#' + slider_id).animate( { left: new_left },
			{
				duration: 750,
				complete: function() {
					var next_left = calculateMoveRight(slider_id, slider_container_width);
					var current_left = parseInt($('#' + slider_id).css('left'));

					slider_right.bind('click', slideRight);
				}
			}
		);
	}
}

function calculateMoveRight(element, container_width) {
	var slider = $('#' + element);

	var current_left = parseInt(slider.css('left'));
	
	
	var slider_width = parseInt(slider.width());

	var new_left = current_left - container_width;
	var new_left = Math.max(container_width - slider_width, new_left)

	return new_left;
}

function calculateMoveLeft(element, container_width) {
	var slider = $('#' + element);

	var current_left = slider.css('left');

	
	var new_left = parseInt(current_left) + container_width;
	var new_left = Math.min(0, new_left);

	return new_left;
}

function showMore(event) {
	event.preventDefault();

	var container = $(this).closest('.more');
	var content = $('.content', container);
	content.slideDown();

	$('.more-element .text', container).text('less');
	$('.more-element .next', container).css('display', 'none');
	$('.more-element .prev', container).css('display', 'inline');

	$(this).unbind('click', showMore);
	$(this).bind('click', hideMore);
}

function hideMore(event) {
	event.preventDefault();
	
	var container = $(this).closest('.more');
	var content = $('.content', container);
	content.slideUp();
	
	$('.more-element .text', container).text('more');
	$('.more-element .next', container).css('display', 'inline');
	$('.more-element .prev', container).css('display', 'none');
	
	$(this).unbind('click', hideMore);
	$(this).bind('click', showMore);
}

function loadViaAjax(url, params) {
	$('#layer-wrapper').html($('#layer-wrapper-backup').html()).show();
	$('html,body').animate( { scrollTop: 0 } , 1000);
	
	$('#layer-wrapper').load(url, params, function() {
		$('#layer-wrapper').show();

		$("#content-wrapper")
		.css('position', 'relative')
		.fadeTo(0, 0.3);
	});

	return false;
}

function showImageDetails(ideaid, emotionPic) {
	var emotionPicString = '';
	if (emotionPic != null) {
		emotionPicString = '/emotionPic/' + emotionPic;
	}

	loadViaAjax('ideaDetails/imagedetails/ideaId/' + ideaid + emotionPicString);
}

function resetLayer() {
	$("#content-wrapper").css('position', 'static');
	$("#content-wrapper").fadeTo(0, 1.0);
	$('#layer-wrapper').hide();
	$("#layer-wrapper").empty();
}

function startMainBodyAjaxIndicator() {
	$("#main_body").css('position', 'relative');
	$("#main_body").fadeTo(0, 0.3);
	$("#main-body-ajax-indicator").show();
}

function stopMainBodyAjaxIndicator() {
	$("#main-body-ajax-indicator").hide();
	$("#main_body").css('position', 'static');
	$("#main_body").fadeTo(0, 1.0);
}

function loadIdeaDetails(ideaid) {
	startMainBodyAjaxIndicator();
	
	$("#main_body").load('ideaDetails/show/ideaId/' + ideaid, null, function() {
		stopMainBodyAjaxIndicator();
	});
}

function updateIdeaList(sortation, limit, index) {
	//startMainBodyAjaxIndicator();
	
	$("#container_for_ideas").load('allIdeas/list/order/' + sortation + '/limit/' + limit + '/index/' + index, null, function() {
		//stopMainBodyAjaxIndicator();
	});
}

function updateUserList(sortation, limit, index) {
	//startMainBodyAjaxIndicator();
 
	$("#main_body").load('community/list/order/' + sortation + '/limit/' + limit + '/index/' + index, null, function() {
		initPuchiSortationLists();
		//stopMainBodyAjaxIndicator();
	});
}

function deleteCommentById(commentid) {
	document.getElementById(commentid).style.display="none";
}

function deleteMessageById(messageid) {
	document.getElementById(messageid).style.display="none";
}

function deleteUserById(userid) {
	document.getElementById(userid).style.display="none";
}

function isValidEmail(email) {
 return /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(email);
}

function initPuchiSortationLists() {
	$('ul.sortation-list li')
	.bind('mouseover', function(event) {
		$(this).addClass('highlighted');
	})
	.bind('mouseout', function(event) {
		$(this).removeClass('highlighted');
	});
	
	$('ul.sortation-list li:not(:first)')
	.bind('click', function(event) {
		$(this).insertBefore('ul.sortation-list li:first');
		$('ul.sortation-list li.current-sortation').removeClass('current-sortation');
		$('ul.sortation-list li:first').addClass('current-sortation');
		$(this).parent().removeClass('open');
		$(this).removeClass('highlighted');
	});
	
	$('ul.sortation-list li:first').show();
	
	$('ul.sortation-list li:first')
	.bind('click', function(event) {
		if (!$(this).parent().hasClass('open')) {
			$(this).parent().addClass('open');
		} else {
			$(this).parent().removeClass('open');
		}
	});
	
	$('ul.sortation-list')
	.bind('mouseleave', function(event) {
		$(this).removeClass('open');
	});
}