/*
	handles all javascript/ajax/jquery to process sandbox related requests
*/

//default call for Sandbox nav item
function goToSandbox(){
	$('#menu a').each(function(){
		$(this).removeClass('selected');
	});
	$('#SandboxNav').addClass('selected');
	getSandboxPage("", "prev");
	printTags('sbox');
	decorateTag();
}

//load a sandbox post page of set number of posts. Either specify sandbox ID value, or don't to get recent posts.
function getSandboxPage(pId, dir){
	$('#PostContent').html("<p>Loading...</p>");
	$.ajax({
			type: "GET",
			url: "loadSandboxPageJson.php",
			dataType:"json",
			data:"id=" + pId + "&direction=" + dir,
			success:function(data){
				$('#PostContent').html("");
				for(i=0; i < data.sandboxes.length; i++){
					printSandbox(data.sandboxes[i]);
				}
				printTags('sbox');
				printFooter(data.first_id, data.last_id, data.first_page, data.last_page);
				$('#PostContent .post img').onImagesLoad({itemCallback: applyImageFormatting});
			},
			error:function (xhr, ajaxOptions, thrownError){
				$('#PostContent').val("ERROR: " + xhr.status + "\n\nDetails:\n" + thrownError);
			}    
		});
}

function getSandboxById(pId){
	$('#PostContent').html("<p>Loading sandbox entry #" + pId + "...</p>");
	$.ajax({
			type: "GET",
			url: "loadSandboxJson.php",
			dataType:"json",
			data:"id=" + pId,
			success:function(data){
				$('#PostContent').html("");
				printSandbox(data);
				printTags('sbox');
				$('#PostContent .post img').onImagesLoad({itemCallback: applyImageFormatting});
			},
			error:function (xhr, ajaxOptions, thrownError){
				alert('fail');
				$('#PostContent').val("ERROR: " + xhr.status + "\n\nDetails:\n" + thrownError);
			}    
		});
}

//load a single page of all posts tagged by specified tag ID value.
function getSandboxesByTag(tId){
	$('#PostContent').html("<p>Loading...</p>");
	$.ajax({
			type: "GET",
			url: "loadSandboxByTagJson.php",
			dataType:"json",
			data:"id=" + tId,
			success:function(data){
				$('#PostContent').html("");
				for(i=0; i < data.sandboxes.length; i++){
					printSandbox(data.sandboxes[i]);
				}
				printTags('sbox');
				decorateTag(tId);
				printTagFooter(data.first_id, data.last_id, data.first_page, data.last_page);
				$('#PostContent .post img').onImagesLoad({itemCallback: applyImageFormatting});
			},
			error:function (xhr, ajaxOptions, thrownError){
				$('#PostContent').val("ERROR: " + xhr.status + "\n\nDetails:\n" + thrownError);
			}    
		});		
}

//print single sandbox post entry.
function printSandbox(sandbox){
	var tags = "<div class='tags'>Filed under:<br />";
	//populate sandbox list selections
	if(sandbox.tags.length == 1){
		tags += "<a href='javascript: getSandboxByTag(" + sandbox.tags[0].tag_id + ");'>" + sandbox.tags[0].tag_name + "</a>";
	}else{
		for(j = 0; j < sandbox.tags.length; j ++){
			tags += (j < sandbox.tags.length -1 ? ("<a href='javascript: getSandboxByTag(" + sandbox.tags[j].tag_id + ");'>" + sandbox.tags[j].tag_name + "</a>, ") : ("and <a href='javascript:getSandboxByTag(" + sandbox.tags[j].tag_id + ");'>" + sandbox.tags[j].tag_name + "</a>"));
		}
	}
	tags += "</div>";
	$('#PostContent').append("<div class='post'><h1><a href='./index.php?s="+sandbox.sandbox_id+"'>"+sandbox.name+"</a></h1>\n"+sandbox.details.replace(/-amp-/g, "&")+"\n"+tags+"</div>");
}

//print footer, including page navigation if required.
function printFooter(lastId, firstId, isFirstPage, isLastPage){
	$("#PostNav").html("");
	if(isFirstPage != "true")
		$("#PostNav").append("<div class='nav'><a href=\"javascript: getSandboxPage(" + lastId + ", 'next');\">Newer</a></div>");
	else
		$("#PostNav").append("<div class='nav_disabled'>Newer</div>");
	if(isLastPage != "true")
		$("#PostNav").append("<div class='nav'><a href=\"javascript: getSandboxPage(" + firstId + ", 'prev');\">Older</a></div>");
	else
		$("#PostNav").append("<div class='nav_disabled'>Older</div>");
}

//print footer for tag page
function printTagFooter(lastId, firstId, isFirstPage, isLastPage){
	$("#PostNav").html("");
}

//images may need to be resized, and have click handler attached, if their size exceeds the post div width.
function applyImageFormatting(img)
{
	if(img.width > 600)
	{
		$(this).attr("width", "600");
		$(this).attr("onClick", "window.open('" + img.src + "','sandboxImg');");
		$(this).addClass("clickable");
	}
}

//if a tag has been selected then it may be decorated to indicate its selection.
function decorateTag(tId){
	$("a[id*='tag_']").each(function(){
		$(this).removeClass("selected");
		if($(this).attr('id') == 'tag_'+tId){
			$(this).addClass("selected");
		}
	});
}

//	----------------------------	Admin functions
function SaveSandbox(JSONObject){
	var tagCount = 0;
	var entryForm = document.forms[0]; 
	$('#SandboxTagList :selected').each(function(){
		JSONObject.tags[tagCount] = new Object;
		JSONObject.tags[tagCount].tagId = $(this).val();
		tagCount++;
	});
	JSONstring = JSON.stringify(JSONObject);
	$.ajax({
		type: "POST",
		url: "/saveSandboxJson.php",
		dataType:"json",
		data:"entryJson=" + JSONstring,
		success:function(data){
				if(data.error){
					Message("An error has occurred...");
					$('#EntryText').val("Error:\n[\n" + data.message + "\n]");
				}else{
					Message("Your post has been saved");
					$('#SaveEntry').removeAttr("disabled");
					if(entryForm['IsNew'].checked){
						location.reload();
					}
				}						
			},
		error: function(xhr, ajaxOptions, thrownError){
			Message("An error has occurred...");
			$('#EntryID').val("");
			$('#EntryDate').val("");
			$('#EntryText').val("ERROR: " + xhr.status + "\n\nDetails:\n" + thrownError);
			$('#SandboxTagList option').each(function(){
				$(this).removeAttr("selected");
			});
		}
	});
}


function LoadSandbox(pId){
	if(pId != ""){
		//if a post has been specified, load that post
		$.ajax({
			type: "GET",
			url: "/loadSandboxJson.php",
			dataType:"json",
			data:"id=" + pId,
			success:function(data){
				//populate sandbox fields
				$('#EntryID').val(data.sandbox_id);
				$('#EntryDate').val(data.create_dt);
				//replace '-amp-' with '&'
				$('#EntryText').val(data.details.replace(/-amp-/g, "&"));
				$('#SandboxName').val(data.name);
				$('#SaveEntry').removeAttr("disabled");

				//populate sandbox list selections
				$('#SandboxTagList option').each(function(){
					$(this).removeAttr("selected");
					for(i = 0; i < data.tags.length; i ++){
						if($(this).val() == data.tags[i].tag_id){
							$(this).attr("selected", "true");
							return;
						}
					}
				});
			},
			error: function(xhr, ajaxOptions, thrownError){
				$('#EntryID').val("");
				$('#EntryDate').val("");
				$('#EntryText').val("ERROR: " + xhr.status + "\n\nDetails:\n" + thrownError);
				$('#SandboxTagList option').each(function(){
					$(this).removeAttr("selected");
				});
			}
		});
	}
}
