$(function() {
		
	$('#pages_container .page div.actions').css('opacity', 0.1);
	
	$('#pages_container .page').hover(function() {
		if($('#pages_container .floating').length == 0) {
			$(this).find('.actions').css('opacity', 1.0);
		} else {
			$('#pages_container .floating .actions').css('opacity', 1.0);
		}
	}, function() {
		$('#pages_container .page div.actions').css('opacity', 0.1);
	});
	
	function updateSortHelper($helper, $el, pos) {
		var top = $el.offset().top - $('#pages_container').offset().top;
		
		if(pos == 0) {
			$helper.attr('class', 'helper top');
		} else if(pos == 1) {
			$helper.attr('class', 'helper middle');
		} else if(pos == 2) {
			$helper.attr('class', 'helper bottom');
		}
		
		$helper.css({
			top: top
		});
	}
	
	$.fn.updatePageLevel = function(level) {
		$(this).attr('data-level', level);
		$(this).attr('class', 'page level_'+level+($(this).hasClass('hidden') ? ' hidden' : ''));				
	};
	
	var preventPageSort = false;
	$('#pages_container .page .sort').mousedown(function(e) {
		
		if(preventPageSort) {
			return false;
		}
			
		var $page = $(this).closest('.page');
		var $placeholder = $('<div class="placeholder" />');
		var $helper = $('<div class="helper" />');
		
		$placeholder.attr('data-level', $page.attr('data-level'));
		
		$page.addClass('floating').css('opacity', 0.7).after($placeholder);
		
		$('#pages_container').append($helper);
		
		var start_y      = e.pageY;		
		var start_index  = Math.floor((start_y - $('#pages_container').offset().top) / 48);
		var start_offset = start_index * 48 + 24;		
		
		var min_margin = 0 - (start_index * 48) - 24;
		var max_margin = $('#pages_container .page').length * 48 - (start_index + 1) * 48 + 24;
		
		var previous_position = false;
		var $current = $placeholder;
		
		updateSortHelper($helper, $current);
		
		$(document).mousemove(function(e) {
			var offset = Math.min(Math.max(e.pageY - start_y, min_margin), max_margin);			
			var index  = Math.round((start_offset + offset - 24) / 48);
			
			var position = Math.floor((((offset + start_offset) % 48 / 48) + 0.25) * 2);
			
			if(position != previous_position) {
				$current = $('#pages_container .page:not(.floating), #pages_container .placeholder').eq(index);			
				if($current.length > 0) {
					updateSortHelper($helper, $current, position);
					
				}
			}
			
			previous_position = position;
			
			$page.css({
				marginTop: offset
			});
			return false;
		});
		
		$(document).one('mouseup', function() {
			preventPageSort = true;
			$(document).unbind();
			$page.removeClass('floating').css({
				opacity: 1.0,
				marginTop: 0
			});
			$placeholder.remove();
			$helper.remove();
			if($current.hasClass('placeholder')) {
				return false;
			}
			
			var current_level = parseInt($current.attr('data-level'));
			if(previous_position == 0) {
				$current.before($page);
				$page.updatePageLevel(current_level);
			} else if(previous_position == 1) {
				
				$el = $current;
				while(parseInt($el.next('.page').attr('data-level'), 10) >= current_level + 1) {
					$el = $el.next('.page');					
					if($el.length == 0) break;
				}
				$page.updatePageLevel(current_level + 1);
				$el.after($page);
			} else if(previous_position == 2) {
				$current.after($page);
				$page.updatePageLevel(current_level);
			}
			previous_level = -1;
			
			var data = [];
			
			var sort = 1;
			$('#pages_container .page').each(function() {				
				var current_level = parseInt($(this).attr('data-level'), 10);
				if(current_level > previous_level + 1) {					
					var $el = $(this);
					while(parseInt($el.attr('data-level')) == current_level) {
						$el.updatePageLevel(previous_level + 1);						
						$el = $el.next('.page');
						if($el.length == 0) break;
					}					
					previous_level = previous_level + 1;
				} else {
					previous_level = current_level;
				}
				
				var current_level = parseInt($(this).attr('data-level'), 10);
				
				if(current_level > 0) {
					$parent = $(this).prev('.page');
					while($parent.attr('data-level') != current_level - 1) {
						$parent = $parent.prev('.page');
						if($parent.length == 0) break;
					}
					var parent = $parent.attr('id').replace('page_', '');
				} else {
					var parent = null;
				}
				var id = $(this).attr('id').replace('page_', '');
				
				data.push({
					id: id,
					parent: parent,
					sort: sort
				});				
				sort++;
			});
			
			$.ajax({
				url: BASE_DIR+'admin/pages/updateSort/',
				data: {
					data: data
				},
				type: 'POST',
				success: function(r) {
					preventPageSort = false;
				}
			});
		});
		return false;
	});
	
	$('#pages_container .page a.visibility').click(function() {
		var $page = $(this).closest('.page');
		var id    = $page.attr('id').replace('page_', '');		
		var visibility = null;
		
		if($(this).hasClass('visible')) {
			$(this).removeClass('visible').addClass('hidden');
			$page.addClass('hidden');
			visibility = 0;
		} else {
			$(this).removeClass('hidden').addClass('visible');
			$page.removeClass('hidden');
			visibility = 1;			
		}
		
		if(visibility == 1 && parseInt($page.attr('data-level'), 10) > 0) {			
			var $el = $page;
			var current_level = parseInt($el.attr('data-level'), 10);
			while(true) {
				var level = parseInt($el.attr('data-level'), 10);
				
				if(level < current_level && $el.hasClass('hidden')) {
					$el.find('.visibility').click();
				}
				
				current_level = level;
				
				if($el.attr('data-level') == 0) break;
				$el = $el.prev();
			}
		}
		
		if(visibility == 0) {
			var current_level = parseInt($page.attr('data-level'), 10);
			var $el = $page.next();
			while(parseInt($el.attr('data-level'), 10) > current_level) {
				if(!$el.hasClass('hidden')) {
					$el.find('.visibility').click();
				}
				$el = $el.next();
				if($el.length == 0) break;
			}
		}
		
		$.ajax({
			type: 'post',
			url: BASE_DIR+'admin/pages/save_visibility/',
			data: {
				id: id,
				visibility: visibility
			},
			error: function() {
				alert("Näkyvyyden asettaminen ei onnistunut.");
			}
		});
		return false;
	});
	
	$('div.index span').mousedown(function(e) {
		
		var $star = $(this).addClass('floating');
		var start = { x: e.pageX, y: e.pageY };
		
		$(document).mousemove(function(e) {
			
			var offset = { x: e.pageX - start.x, y: e.pageY - start.y };
			
			$star.css({
				left: offset.x + 16,
				top: offset.y + 8
			});
			return false;
		});
		
		$(document).one('mouseup', function(e) {
			$(document).unbind();
			
			$('#pages_container .page').each(function() {
				var offset = $(this).offset();
				var x1 = offset.left;
				var y1 = offset.top;
				var x2 = x1 + $(this).width();
				var y2 = y1 + $(this).height();
				
				if(e.pageX >= x1 && e.pageX <= x2 && e.pageY >= y1 && e.pageY <= y2) {
					$(this).find('.index').append($star);
					$.ajax({
						url: BASE_DIR+'admin/pages/setIndex/',
						data: {
							index: $(this).attr('id').replace('page_', '')
						},
						type: 'POST'
					});					
					return false;
				}
			});
			
			$star.css({
				left: 'auto',
				top: 'auto'
			}).removeClass('floating');
		});
		return false;
	});

	if($('#locale-selector').length > 0) {
		$('#content-areas .content-area').hide();
			
		$('#add_language').click(function() {
				
			$ul = $('<ul id="locale-list" />');
			
			var languages = {
				fi: 'Suomi',
				en: 'Englanti',
				ru: 'Venäjä'
			}
			
			for(var locale in languages) {
				$ul.append('<li><a href="#" rel="'+locale+'" class="flag '+locale+'">'+languages[locale]+'</a></li>');
			}
				
			$ul.find('a').click(function() {
				$(this).closest('#modal').find('#modal-close').click();
				var locale = $(this).attr('rel');
				var language = $(this).html();
				
				$('#add_language').parent().before($(this).parent().clone());
				
				var active_content_area = $('.content-area:visible');
				var active_locale = active_content_area.attr('id').replace('locale_', '');			
				var clone = active_content_area.clone();
				
				var al_regex = new RegExp('\\['+active_locale+'\\]', 'gi');
				clone.html(clone.html().replace(al_regex, '['+locale+']')).attr('id', 'locale_'+locale);
				
				clone.find('textarea').show().removeClass('wysiwyg-original');
				clone.find('div.wysiwyg').remove();
				
				$('#content-areas').append(clone);
				clone.find('textarea.wysiwyg').wysiwyg({
					css: EDITOR_CSS,
					TOOLBAR: {
						insertImage: {
							visible: true,
							exec: function() {
								alert("foo");
							},
							tags: ['img'],
							tooltip: "afasf image"
						}
					}
				});
				clone.hide();			
				return false;
			});
				
			$.modal({
				title: 'Valitse kieli',
				message: $ul
			});
			return false;
		});
		
		
		$('#locale-selector a.flag').live('click', function() {
			
			$('#locale-selector .active').removeClass('active');
			var locale = $(this).removeClass('flag').attr('class');
			$(this).addClass('flag active');
			
			var c = $('.content-area:visible');
			if(c.size() > 0) {
				if(c.attr('id') != 'locale_'+locale) {
					c.fadeOut(200, function() {
						$('#locale_'+locale).fadeIn(300);
					});
				}
			} else {
				$('#locale_'+locale).fadeIn(300);
			}
			
			return false;
				
		});
		$('#locale-selector a.flag:first').click();
	}
	
	$('select.menu_select').change(function() {
		$.ajax({
			url: BASE_DIR+'admin/pages/changePageMenu/',
			data: {
				page: $(this).closest('li').attr('id').split('_')[1],
				layout: $(this).val()
			},
			type: 'POST',
			success: function(r) {
			}
		});
	});
	
	$('#page_editor').submit(function() {			
		$('textarea').each(function() {
			$(this).val($('<div>'+$(this).val()+'</div>').GoogleMapDestroy().html());
		});
	});
		
});

