var viewer = null;
var owner = null;
var promoted_overlay_id = null;
var all_overlays = [];
var current_overlay = null;

function add_overlay(response) {
	flash("");
	log("Add overlay called");
	
	match_data = $('overlay_url').value.match(/overlay.tv\/overlay\/([0-9]+)/)

	if(match_data == null) {
		flash("That URL is invalid");
		return;
	}
		
	overlay_id =  match_data[1];

	log("Overlay ID: " + overlay_id);
	if(overlay_id == null) {
		flash("Invalid Overaly URL");
		return;
	}
	
	if(all_overlays.indexOf(overlay_id) > -1) {
		flash("You have already added this overlay");
		return;
	}
	
	params = {};
	params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.TEXT;
	gadgets.io.makeRequest("http://" + overlay_host + "/opensocial/exists/" + overlay_id + "?" + Math.random(), overlay_exists, params)

}

function overlay_exists(response) {
	
	log(response.text);
	
	match_data = response.text.match(/([0-9]+):(true|false)/)
	
	if(match_data == null) {
		flash("Couldn't verify overlay exists, try again.");
		return;
		
	} else if(match_data[2] == "true") {
		
		get_overlay(null, match_data[1])
		get_overlay_thumbnail(null, match_data[1]);

		all_overlays[all_overlays.length] =  match_data[1];

		if(promoted_overlay_id == null) {
			promoted_overlay_id = match_data[1];
		}

		save_overlays();		
		
	} else {
		flash("That overlay doesn't exists.");
	}
	
}


function toggle_owner_content() {
	
	if(viewer.isOwner() && !/profile/i.exec(opensocial.getEnvironment().getSurface().getName())) {
		log("Toggle owner content: showing")
		$('container').select("div.owner").each(function(elem) {
			log("is this fucking working?");
			elem.show();
		});
	} else {
		$('container').select("div.owner").each(function(elem) {
			elem.hide();
		});
	}
}

function save_overlays() {
	log("save overlays Called");
	ids = ""
	
	log("Generating comma delimitted overlay string ...");
	for(var i = 0; i < all_overlays.length; i++) {
		if(all_overlays[i] != "") {
			ids += all_overlays[i];
			if(i < all_overlays.length - 1) ids += ",";
		}
	}
	log("Overlays: " + ids);
	
	var saveRequest = opensocial.newDataRequest();
	saveRequest.add(saveRequest.newUpdatePersonAppDataRequest("VIEWER", "all", ids));
	if(promoted_overlay_id != null) {
		log("Saving promoted: " + promoted_overlay_id);
		saveRequest.add(saveRequest.newUpdatePersonAppDataRequest("VIEWER", "promoted", promoted_overlay_id));
	}
	saveRequest.send();
	
}

function get_overlay(response, overlay_id) {
	if(response == null) {
		if(overlay_id != current_overlay) {
			params = {};
			params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.TEXT;
			gadgets.io.makeRequest("http://" + overlay_host + "/opensocial/show/" + overlay_id + "?" + Math.random() + "&brand="+BRANDED_PLAYER, get_overlay, params)
			current_overlay = overlay_id;
		}
	} else {
		if(response.errorMessage) {
			log("Get Overlay Error: " + response.errorMessage);
			flash('Sorry, an Error Occured:\n'+response.errorMessage)
		} else {
			eval(response.text);
			
			HEIGHT ? gadgets.window.adjustHeight(HEIGHT) : gadgets.window.adjustHeight();
		}
	}
}

function get_overlay_thumbnail(response, overlay_id) {
	
	if(response == null) {
		params = {};
		params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.TEXT;
		gadgets.io.makeRequest("http://" + overlay_host + "/opensocial/thumbnail/" + overlay_id + "?" + Math.random(), get_overlay_thumbnail, params)
	} else {
		
		var clearfix = $("clearfix");
		$("overlays").removeChild(clearfix);
		$("overlays").innerHTML += response.text;
		$("overlays").appendChild(clearfix);

		if(promoted_overlay_id != null && viewer.isOwner() && !opensocial.getEnvironment().getSurface().getName().match("profile")) {
			highlight_overlay(promoted_overlay_id);
		}
	
		if(!opensocial.getEnvironment().getSurface().getName().match("profile")) {
			toggle_owner_content();
		}
	
		HEIGHT ? gadgets.window.adjustHeight(HEIGHT) : gadgets.window.adjustHeight();
			
	}
	
}

function set_overlays(overlays) {
	if(overlays != undefined && overlays != "") {
		all_overlays = overlays.split(",");
	}
}

function set_promoted_overlay(promoted_overlay) {
	if(promoted_overlay != undefined && promoted_overlay != "" && promoted_overlay != "null") {
		promoted_overlay_id = promoted_overlay;
	}
}

function delete_overlay(overlay_id) {
	
	// if(confirm("Are you sure you want to delete this overlay?")) {
		$("overlays").removeChild($("overlay_thumb_" + overlay_id));
		
		all_overlays = $A(all_overlays).without(overlay_id);
	
		if(all_overlays.length == 0) {
			promoted_overlay_id = "";
			$('flashcontent').innerHTML = "No Overlays Selected";
		} else if(promoted_overlay_id == overlay_id) {
			promote_overlay(all_overlays[0]);
		} else if(current_overlay == overlay_id ) {
			get_overlay(promoted_overlay_id);
		}
	
		save_overlays();
	// }
	
}

function promote_overlay(overlay_id) {
	if(promoted_overlay_id != overlay_id) {
		if(promoted_overlay_id != null) unhighlight_overlay(promoted_overlay_id);
		promoted_overlay_id = overlay_id;
		highlight_overlay(promoted_overlay_id);
		if(current_overlay != promoted_overlay_id) {
			get_overlay(null, promoted_overlay_id);
		}
		save_overlays();
	}
}

function highlight_overlay(id) {
	try {
		$("overlay_" + id + "_default").hide();
		//$("overlay_thumb_" + id).style.border = "medium solid red";
	} catch(e) {} 
}

function unhighlight_overlay(id) {
	try {
		$("overlay_" + id + "_default").show();
		//$("overlay_thumb_" + id).style.border = "medium solid white";
	} catch(e) {} 
}

function clear_datastore(response) {
	if(response == null) {
		var saveRequest = opensocial.newDataRequest();
		saveRequest.add(saveRequest.newUpdatePersonAppDataRequest("VIEWER", "all", ""));
		saveRequest.add(saveRequest.newUpdatePersonAppDataRequest("VIEWER", "promoted", ""));
		saveRequest.send(clear_datastore);

		log("Data store cleared");
	} else {
		gadgets.views.requestNavigateTo(gadgets.views.getSupportedViews()["canvas"]);
	}
}

function initialize(response) {
	
	if(response == null) {
		var fields = ["promoted", "all"];
		var overlayRequest = opensocial.newDataRequest();
		overlayRequest.add(overlayRequest.newFetchPersonRequest(opensocial.DataRequest.PersonId.VIEWER), "viewer");									
		overlayRequest.add(overlayRequest.newFetchPersonRequest(opensocial.DataRequest.PersonId.OWNER), "owner");
		overlayRequest.add(overlayRequest.newFetchPersonAppDataRequest("OWNER", fields), "overlays");						
		overlayRequest.send(initialize);
	} else {
		viewer = response.get("viewer").getData();
		owner = response.get("owner").getData();
		overlay_data = response.get("overlays").getData();
		
		if(viewer == null) {
			viewer = new Object();
			viewer.isOwner = function() { return false; };
			viewer.getId = function() { return -1; };
		}
		
		log("Viewer ID: " + viewer.getId());
		log("Owner ID: " + owner.getId());
		log("Viewer.isOwner? " + viewer.isOwner());
				
	 	set_promoted_overlay(overlay_data[owner.getId()]["promoted"]);
		set_overlays(overlay_data[owner.getId()]["all"]);
		
		log("Promoted Overlay ID: " + promoted_overlay_id);
		log("All Overlays: " + all_overlays);
		
		if(promoted_overlay_id == null ) $('flashcontent').innerHTML = "No Overlays Selected";

		
		var length;
		if(/profile/i.exec(opensocial.getEnvironment().getSurface().getName()) && all_overlays.length > 3) {
			length = 3;
		} else {
			length = all_overlays.length;
		}
		
		for(i = 0; i < length; i++) {
			log("Getting Overlay: " + all_overlays[i]);
			get_overlay_thumbnail(null, all_overlays[i]);
		}
		
		if(promoted_overlay_id != null) get_overlay(null, promoted_overlay_id);
		
		toggle_owner_content();
		
		HEIGHT ? gadgets.window.adjustHeight(HEIGHT) : gadgets.window.adjustHeight();
		
	}
	
}

// Helper Methods

function flash(message) {
	$('flash').innerHTML = message;
}

function log(message) {
	$('log').appendChild(document.createElement("br"));
	$('log').appendChild(document.createTextNode("LOG **** : " + message));
}