$(function() {
		
	$('#pages_container .page div.actions').css('opacity', 0.1);
	
	$('#add_media').click(function() {
		var page_id = $('input[name=update_id]').val();
		$.media({
			success: function(image) {
				$div = $('<div />').attr('id', 'image_'+image.id).addClass('page_image');
				$div.append('<input type="hidden" name="page_images[]" value="'+image.id+'" />');
				$div.append('<img src="'+BASE_DIR+'media/'+image.domain_id+'/1/0/0/150/120/'+image.filename+'" alt="'+image.title+'" />');
				$div.append('<p class="title">'+image.title+'</p>');
				$div.append('<p class="tools">' +
							'<a href="#" class="icon delete">Poista</a>' +
							'<a href="#" class="icon down">Poista</a>' +
							'<a href="#" class="icon up">Poista</a>' +
							'</p>');
				$div.append('<p class="clear"></p>');
				$('#page_images').append($div);
			}
		});
		return false;
	});
	
	$('#page_images .delete').live('click', function() {
		var page_id = $('input[name=update_id]').val();
		if(confirm('Oletko varma?')) {
			$(this).closest('div').animate({
				opacity: 0
			}, 300, function() {
				$(this).hide(300, function() {
					$(this).remove();
				});
			});
		}
		return false;
	});
	
	$('#page_images .up, #page_images .down').live('click', function() {
		var mode = $(this).hasClass('down') ? 'down' : 'up';
		
		if(mode == 'up') {
			var A = $(this).closest('div');
			var B = A.prev();
		} else {
			var B = $(this).closest('div');
			var A = B.next();
		}
		
		var page_id = $('input[name=update_id]').val();
		
		if(A.size() == 1 && B.size() == 1) {
			A.add(B).css('position', 'relative');
			
			A.animate({
				top: '-'+A.outerHeight()+'px'
			}, 500);
			B.animate({
				top: B.outerHeight()+'px'
			}, 500, function() {
				
				A.add(B).css({
					position: 'static',
					top: 0
				});
				B.before(A);
				
			});
		}
		return false;
	});
	
	$('#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);
	});
	
	$('a.icon.delete').click(function() {
		return confirm('Haluatko varmasti poistaa tämän sivun?');
	});
	
	$('.page_group .add').click(function() {
		var $page_group = $(this).closest('.page_group');
		$page_group.find('.page_group_existing').hide();
		$page_group.find('.page_group_new').show();
		return false;
	});
	
	$('.page_group select[name=page_group]').change(function() {
		var page_group_id = $(this).val();
		var page_id = $(this).closest('.page').attr('id').replace('page_', '');
		
		$.ajax({
			url: BASE_DIR+'admin/pages/update_page_group/',
			data: {
				page_id: page_id,
				page_group_id: page_group_id
			},
			type: 'POST'
		});
	});
	
	$('.page_group .check').click(function() {
		if(!$(this).hasClass('loading')) {
			$(this).addClass('loading');
			var $page_group = $(this).closest('.page_group');
			$page_group.find('.page_group_existing').show();
			$page_group.find('.page_group_new').hide();
			
			var page_id = $(this).closest('.page').attr('id').replace('page_', '');
			var $input = $page_group.find('input[name=page_group_new]');
			
			$.ajax({
				url: BASE_DIR+'admin/pages/add_page_group/',
				data: {
					page_id: page_id,
					name: $input.val()
				},
				type: 'POST',
				dataType: 'json',
				success: function(data) {
					var $new_select = $('<select />');
					$new_select.append('<option />').val(0);
					for(var option in data.options) {
						$new_select.append($('<option />').val(data.options[option].id).html(data.options[option].name));
					}
					
					$('select[name=page_group]').each(function() {
						var selected = $(this).val();
						$(this).html($new_select.html());
						$(this).find('option[value='+selected+']').attr('selected', true);
					});
					
					$page_group.find('select[name=page_group] option[value='+data.id+']').attr('selected', true);
					$input.val('');
					$(this).removeClass('loading');
				}
			});
		}
		return false;
	});
	
	$('.expand a').click(function() {
		var $page = $(this).closest('.page');
		var level = parseInt($page.attr('class').match(/level_(\d)/)[1], 10);
		var $item = $page.next('.level_'+(level+1));
		var $items = $();
		
		while($item.length) {
			$item.toggle();
			$item = $item.next('.level_'+(level+1));
		}
		
		$(this).toggleClass('minus').toggleClass('plus');
		return false;
	});
	
	$('.expand a').not('.plus').click();
	
	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').filter(':visible').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());
		});
	});
		
});

