$(document).ready(function(){
  $("#enable_placeholder_edit_link").click(function(){
    $("#edit_mode").animate({ height: "125px" }, 500);
		$(".is_editable").addClass("editable");
		$(this).fadeOut("fast");
		enable_edit_mode();
		return false;
  });
  $("#disable_placeholder_edit_link").click(function(){
		disable_edit_mode();
    $("#enable_placeholder_edit_link").fadeIn("fast")
    $("#edit_mode").animate({ height: "0px" }, 500, function(){
      $(this).hide();
    });
		$(".is_editable").removeClass("editable");
		$(".edit_saved").fadeIn("slow").text("Editing Complete");
    setTimeout('$(".edit_saved").fadeOut("slow")', 800);
		return false;
  });
  
  $("li.address_submit").click(function(){
    $(".edit_saved").fadeIn("slow").text("Editing Complete");
    setTimeout('$(".edit_saved").fadeOut("slow")', 800);
  })
});

/* Admin Edit Placeholders JS
---------------------------------------------*/
var edited_element;

function enable_edit_mode(){
	$('.is_editable').each(function(){
		// If the original element has special attributes/events, create a copy and store it in the obj's data to prevent interference
		if(element_requires_original_copy(this)){
			$(this).data('copy_of_original', $(this).clone(true));
			remove_events_and_attributres(this);
		};
		$(this).one('click.edit_mode', function(e){
			edit_element(this);
			return false;
		});
	});
};

// Required if...
// 		- element has an inline onclick
//  	- element has disabled attribute
// 		- element has an event bound via jquery
function element_requires_original_copy(element) {
	if($(element).attr('onclick') || $(element).attr('disabled') || $(element).data('events')){
		return true;
	}else{
		return false;
	};
}

function remove_events_and_attributres(element) {
	$(element).removeAttr('onclick');
	$(element).removeAttr('disabled');
	$(element).removeData('events');
}

function disable_edit_mode () {
	// unbind edit mode from placeholders
	if(edited_element)
		cancel_edit();
	$('.is_editable').each(function(){
		$(this).unbind('click.edit_mode');
		// If an original copy is attached, restore it
		if($(this).data('copy_of_original')){
			var copy_of_original = $(this).data('copy_of_original');
			$(this).removeData('copy_of_original');
			$(this).replaceWith(copy_of_original);
		};
	});
}

function edit_element(edititable_element) {	
	// If there is a current elemet being edited, cancel it
	if(edited_element)
		cancel_edit();
	// Create text box input
	var edit_div = $("<div id='placeholder_edit_div'></div>");
	var text_box = $("<input type='text' id='placeholder_edit' />");
	var save_link = $("<a href='#' class='save_edit'>Save</a>").click(function(){ save_contents(); return false; });
	var cancel_link = $("<a href='#'>Cancel</a>").click(function(){ cancel_edit(); return false; });
	var ajax_loader = $('<img id="placeholder_loader" src="/images/ajax-loader.gif" style="display: none" />')
	edit_div.append(text_box).append(save_link).append(cancel_link).append(ajax_loader);
	text_box.val(get_display_value($(edititable_element)));
	// Bind enter key to ajax submit
	edit_div.keypress(function(e){
		if(e.keyCode == 13){
			save_contents();
			return false;
		};
	});
	edited_element = $(edititable_element).clone();
	var copy_of_original = $(edititable_element).data('copy_of_original');
	// if the element has a copy of it's original element attached, copy it to the edited_element variable
	if(copy_of_original){
		$(edited_element).data('copy_of_original', copy_of_original);
	}
	$(edititable_element).replaceWith(edit_div);
}

function cancel_edit () {
	// Replace the edit div w/ the original element -- rebind edit_element to click
	$('#placeholder_edit_div').replaceWith(edited_element.one('click.edit_mode', function(){ edit_element(this); return false;}));
	// clear the edited_element
	edited_element = null;
}

function save_contents () {
	// var class_with_id = edited_element.attr('class').match(/place_holder_(\d+)/);
	var class_with_id = edited_element.attr('class').match(/place_holder_(\d+)/);
	if(class_with_id && class_with_id.length == 2){
		$.ajax({
			type: "POST",
			url: '/contents/save',
			data: 'place_holder_id='+ class_with_id[1] +"&content="+encodeURI($('#placeholder_edit').val()),
			dataType: 'json',
			beforeSend: function(){ $('#placeholder_loader').show(); },
			complete: function(){ $('#placeholder_loader').hide(); },
			success: save_successful
		});
	};
}

function save_successful (return_obj, textStatus) {
	if(return_obj.valid){
		update_original_element($('#placeholder_edit').val());
		cancel_edit();
	};
}

function get_display_value(element){
	if(element.val() == ""){
		// return innerHTML
		return element.html();
	}else{
		return element.val();
	};
}

function update_original_element(new_value){
	var place_holder_class = edited_element.attr('class').match(/place_holder_\d+/)[0];
	var value_method;
	if(edited_element.val() == ""){
		// Set the innerHTML
		value_method = "html";
	}else{
		value_method = "val";
	};
	// update the edited_element dispaly value
	eval("edited_element."+ value_method +"(new_value);");
	// update all copies of the element (originals w/ events)
	if(edited_element.data('copy_of_original')){
		eval("edited_element.data('copy_of_original')."+ value_method +"(new_value);");
	};
	// Also iterate over all elements w/ the exact same place_holder_id# class (elements that share the placeholder - ie: repeated action links)
	$("."+place_holder_class).each(function(){
		eval("$(this)."+ value_method +"(new_value);");
		if($(this).data('copy_of_original')){
			eval("$(this).data('copy_of_original')."+ value_method +"(new_value);");
		};
	});
}


/* END Admin Edit Placeholders JS
---------------------------------------------*/