/**

* This plugin contains functions that work with the MovieDollars Promotool.
*/
jQuery.fn.promoTool = function() {
}


/**
* The root location of MovieDollars.
*
* @return string A URL of the root location of MovieDollars.
*/
jQuery.fn.promoTool.getRoot = function() {

	//
	// Check our md_ssl_link parameter set our method for accessing
	// MovieDollars accordingly.
	//
	var method = "http://";
	var host = "www";
	var md_ssl_link = jQuery.fn.promoTool.params["md_ssl_link"];
	//md_ssl_link = ""; // Debugging

	if (md_ssl_link && md_ssl_link != "0") {
		//method = "https://";
		method = "https://";
		host = "secure";
	}

	//var retval = method + "www.moviedollars.com/";
	var retval = method + host + ".moviedollars.com/";

	//
	// Development servers get a local copy of MovieDollars.
	//
	var url = new String(document.location);
	//url = "http://xdev01a:8083/test"; // Debugging
	//url = "http://xdev01a:8077/test"; // Debugging
	//url = "http://www.moviedollars.com/test"; // Debugging

	if (url.search("xdev01a") != -1) {
		retval = "http://xdev01a:8066";

	}

	//$("h2").append(" " + retval + ", "); // Debugging
	//retval = "https://www.moviedollars.com/"; // Debugging

	return(retval);

} // End of getRoot()


/**
* A wrapper for all getJSON calls.  This will make it easier for me to 
* set debugging, and/or switch to $.ajax() some day.
*/
jQuery.fn.promoTool.getJSON = function(url, data, callback) {

	//
	// Put our callback in a wrapper so that the gotAJAX variable
	// is set first.  This will keep the timeout code from running.
	//
	var callback2 = function(data) {
		//
		// Our timeout code already fired.  Stop here.
		//
		//jQuery.fn.promoTool.gotAJAXTimeout = true; // Debugging
		if (jQuery.fn.promoTool.gotAJAXTimeout) {
			return(false);
		}

		jQuery.fn.promoTool.gotAJAX = true;
		callback(data);
	}

	$.getJSON(url, data, callback2);
	//$.getJSONDebug(url, data, callback); // Debugging

}; // End of getJSON()


//
// This variable is set to true if we the AJAX handler has fired.
//
jQuery.fn.promoTool.gotAJAX = false;

//
// This is set to true if we had a timeout
//
jQuery.fn.promoTool.gotAJAXTimeout = false;


/**
* This function sets our loading HTML and sets up a timeout function in
* case the AJAX request does not start in a timely manner.
*/
jQuery.fn.promoTool.setLoading = function(e) {

	var link = jQuery.fn.promoTool.getRoot() + "/promo";

	var html = "<h4>"
		+ "Loading... make sure you are <a href=\"" + link + "\">logged into MovieDollars</a>..."
		+ "<img src=\"/images/please_wait.gif\" />";
		+ "</h4>"
		;
	e.html(html);

	//
	// Our callback to be fired.  If we didn't yet get AJAX, that means
	// a timeout has happened, and we'll want to display a message to 
	// the user.
	//
	var callback = function() {
		if (!jQuery.fn.promoTool.gotAJAX) {
			jQuery.fn.promoTool.gotAJAXTimeout = true;
			var html = "Sorry, but the request timed out.  Please try again later.";
			e.html(html);
		}
	}

	//var timeout = 10000;
	var timeout = 30000;
	//timeout = 0; // Debugging
	setTimeout(callback, timeout);

} // End of setLoading()


/**
* Main function to get clips by video_id
*
* @param hashtable params A hash table of parameters to search on.
*/
jQuery.fn.promoTool.getClips = function(params) {
	
	//
	// Store our parameters for later use
	//
	jQuery.fn.promoTool.params = params;

	//
	// Set our loading screen and timeout
	// 
	jQuery.fn.promoTool.setLoading($(".promo_video_clips"));

	//
	// If an integer was passed in, create a hash table and put it in.
	//
	if (typeof(params) != "object") {
		var video_id = params;
		params = {};
		if (video_id) {
			params["video_id"] = video_id;
		}
	}

	var url = jQuery.fn.promoTool.getRoot() + "/promo/videos/search.php?jsonCallback=?";

	var data = {};
	data["action"] = "json";

	if (params["video_id"]) {
		data["search[RefVODVideoId]"] = params["video_id"];
	}
	if (params["category_id"]) {
		data["search[CategoryIds]"] = params["category_id"];
	}
	if (params["user_id"]) {
		data["search[user_id]"] = params["user_id"];
	}

	var callback = function(data) {
		jQuery.fn.promoTool.getClipsCallback(data, params);
	}

	jQuery.fn.promoTool.getJSON(url, data, callback);

} // End of getClips()


/**
* This function searches for all video clips made by a user.
*
* @param array params Hash table of all parameters.
*/
jQuery.fn.promoTool.getAllClips = function(params) {

	//
	// Store our parameters for later use
	//
	jQuery.fn.promoTool.params = params;

	//
	// Set our loading screen and timeout
	// 
	jQuery.fn.promoTool.setLoading($(".promo_video_clips_user"));

	var url = jQuery.fn.promoTool.getRoot() + "/promo/videos/ajax_user.php?jsonCallback=?";
	var data = {};
	data["action"] = "get_user_videos";
	var callback = function(data) {
		jQuery.fn.promoTool.getAllClipsCallback(data);
	}

	jQuery.fn.promoTool.getJSON(url, data, callback);

} // End of getAllClips()


/**
* All callback for all user clips.
*/
jQuery.fn.promoTool.getAllClipsCallback = function(data) {

	//
	// Loop through our result set and craete a data structure of videos.
	//
	videos = [];
	for (key in data["videos"]) {
		var row = data["videos"][key];
		var video = {};
		video["id"] = row["id"];
		video["video_id"] = row["RefVODVideoId"];
		video["created"] = row["created"];
		video["title"] = row["title"];
		videos.push(video);
	}

	//
	// Loop through our data structure and turn it into a table.
	//
	var html = "";
	html += "<tr>"
		+ "<th>Parent Video</th>"
		+ "<th>Date created</th>"
		+ "</tr>\n";

	for (key in videos) {
		var video = videos[key];
		var link = "<a href=\"/video/" + escape(video["video_id"])
			+ "/?view=webmaster_tools&view_l2=your_clips#tbs\">"
			+ video["title"] + "</a>"
			;
		html += "<tr>"
			+ "<td>" + link + "</td>"
			+ "<td>" + video["created"] + "</td>"
			+ "</tr>\n";
	}

	html = "<table>" + html + "</table>\n";

	$(".promo_video_clips_user").html(html);

} // End of getAllClipsCallback()


/**
* This function searches for free clips for a specific video to be 
*	used in a modal on the video page.
*
* @param integer video_id The HotMovies video ID
*
* @param function callback The code to run after fetching video clip information.
*	Note that if no clip info is found, this callback will never be run.
*
* @return array Associative array of video data.  Note that there will also be
*	an item in this array called "meta", which holds stats on the actual AJAX 
*	call.
*/
jQuery.fn.promoTool.getFreeClipByVideo = function(video_id, callback, params) {

	//
	// Store our parameters for later use
	//
	jQuery.fn.promoTool.params = params;

	//
	// Call the public version of the search API since we're probably not 
	// logged into MovieDollars.
	//
	var url = jQuery.fn.promoTool.getRoot() + "/promo/videos/search_public.php?jsonCallback=?";

	var data = {};
	data["action"] = "json";
	data["search[RefVODVideoId]"] = video_id;
	data["search[FreeModal]"] = 1;

	jQuery.fn.promoTool.getJSON(url, data, callback);

} // End of getFreeClipByVideo()


/**
* Count the number of elements in an object.
*
* @return integer The number of elements.
*/
jQuery.fn.promoTool.count = function(data) {

	var retval = 0;

	for (key in data) {
		retval++;
	}

	return(retval);

} // End of count()


/**
* Get the number of pages in the current list of clips.
*
* @return integer The number of pages.
*/
jQuery.fn.promoTool.getNumPages = function() {
	
	var retval = 0;

	var num_clips = jQuery.fn.promoTool.count(jQuery.fn.promoTool.clips_data);
	var num_pages = num_clips / jQuery.fn.promoTool.limit;

	retval = Math.round(num_pages + .49);

	// Debugging
	var message = ("num_clips, limit, num_pages: " + num_clips 
		+ ", " + jQuery.fn.promoTool.limit + ", " + num_pages 
		+ " (rounded to " + retval + ")<br/>");
	//$("h2").append(message); 

	return(retval);

} // End of getNumPages()


/**
* This function is a callback when clips are loaded.
*
* @param data Associative array of clip data.
*/
jQuery.fn.promoTool.getClipsCallback = function(data, params) {

	//
	// Maximum number of clips to display per page.
	//
	jQuery.fn.promoTool.limit = 4;

	//
	// At some point, I should put the results in a separate array.
	//
	if (data["meta"]) {
		var meta = data["meta"];
		delete data["meta"];
	}

	data_new = [];
	for (key in data) {

		if (params["all"]) {
			//
			// We want all videos.
			//
			data_new.push(data[key]);

		} else if (params["user_created"]) {
			//
			// We only want videos created by users.
			//
			if (data[key]["UserCreated"] == "1") {
				data_new.push(data[key]);
			}

		} else {
			//
			// Default.  We want videos NOT created by users.
			//
			if (data[key]["UserCreated"] != "1") {
				data_new.push(data[key]);
			}

		}

	}


	jQuery.fn.promoTool.clips_data = data_new;

	//
	// Store our parameters for later use
	//
	jQuery.fn.promoTool.params = params;


	var num_clips = jQuery.fn.promoTool.count(jQuery.fn.promoTool.clips_data);
	var clips_per_page = jQuery.fn.promoTool.limit;
	var num_pages = jQuery.fn.promoTool.getNumPages();
	//alert(num_pages); // Debugging

	if (num_clips > 0) {
		jQuery.fn.promoTool.pageClick(1);
	}

	//
	// Load our initial clips.
	//
	jQuery.fn.promoTool.displayClips(0, clips_per_page);

	//
	// Handler to catch video per page updated
	//
	$("#promo_video_clips_num_value").change(function() {
		var val = $(this).val();
		jQuery.fn.promoTool.limit = parseInt(val);
		jQuery.fn.promoTool.pageClick(1);
	});

	//
	// Handler to catch video per page updated
	//
	$("#promo_update_ct").click(function() {
		jQuery.fn.promoTool.pageClick(1);
	});


	//
	// Create our slider.
	//
	if (num_clips > 0) {
		$(".promo_video_clips_num").show();

/*
		$(".promo_video_clips_slider").slider({
			min: 1,
			max: 10,
			change: function(e, ui) {
				//alert(ui.value); // Debugging
				jQuery.fn.promoTool.limit = ui.value;
				jQuery.fn.promoTool.pageClick(1);
				var html = ui.value + " promos per page";
				$(".promo_video_clips_slider_detail").html(html);
			},
			value: clips_per_page
		});
*/

	}

} // End of getClipsCallback()


/**
* This function is called when a page is clicked on.
*
* @param integer page_num The page number that was cliked on.
*/
jQuery.fn.promoTool.pageClick = function(page_num) {

	var page_index = page_num - 1;
	var start = page_index * jQuery.fn.promoTool.limit;
	var end = start + jQuery.fn.promoTool.limit;
	var num_pages = jQuery.fn.promoTool.getNumPages();

	// Debugging
	//$("h2").append("Start, end, num pages: " + start + ", " + end + ", "  + num_pages);

	jQuery.fn.promoTool.displayClips(start, end);

	//
	// Reset our pager callback.
	//
	$("#pager").pager({
		pagenumber: page_num, 
		pagecount: num_pages,
		buttonClickCallback: jQuery.fn.promoTool.pageClick
	});

} // End of pageClick()

jQuery.fn.promoTool.isNumeric = function(string){
	return ( (string-0)==string && string.length>0 );
	}

jQuery.fn.promoTool.updateUserVars = function(string,user_params){
	var pattern = /id=([^&"]+)/;

	var param_list = String(pattern.exec(string)[1]).split(',');
	for(var ndx in user_params){
		param_list[ndx] = user_params[ndx];
	}
	var new_params = 'id=' + param_list.join(',');

	return string.replace(pattern,new_params);
}

/**
* A core function to display a range of clips.
* 
* @param integer start The index to start displaying clips at
*
* @param integer end The index to stop displaying clips at
*
* For example, calling this function with (0, 4) would display the 
*	first 4 clips (indexes 0 to 3).
*/
jQuery.fn.promoTool.displayClips = function(start, end) {

	//
	// Grab embed code for each clip
	//
	var html = "";
	var clips = [];
	var count = 0;

	var user_params = {};

	// 0 - ??
	// 1 - md_user_id
	// 2 - ??
	// 3 - ??
	// 4 - ct_id
	// 5 - ??
	// 6 - ??
	// 7 - ??
	// 8 - ??

	if ( jQuery.fn.promoTool.isNumeric($('#promo_ct').val()) && $('#promo_ct').val()>0 ){
		user_params[4] = Math.floor($('#promo_ct').val());
	}


	for (key in jQuery.fn.promoTool.clips_data) {

		if (count >= end) {
			break;
		}

		if (count >= start) {
			var row = {};
			var clip = jQuery.fn.promoTool.clips_data[key];

			//
			// Never ever stream video over HTTPS.  Always convert those
			// URLs to HTTP.
			//
			var embed_code = clip["embed_code"];

			var regexp  = /embed src="https:\/\//;
			embed_code = embed_code.replace(regexp, "embed src=\"http://");
			embed_code = jQuery.fn.promoTool.updateUserVars(embed_code,user_params);

			row["embed_code"] = embed_code;
			row["created"] = clip["created"];

			if (jQuery.fn.promoTool.params["video_link"]) {
				row["video_id"] = clip["video_id"];
			}

			//
			// If the clilp has a FreeModal attribute, make a note of it.
			//
			if (clip["FreeModal"]) {
				row["free_modal"] = true;
			}
			
			//
			// Store the ID from the MovieDollars promo_tools table.
			//
			row["id"] = clip["id"];

			clips.push(row);
		}

		count++;

	}

	grid = jQuery.fn.promoTool.rowsToGrid(clips);
	html = jQuery.fn.promoTool.gridToTable(grid);

	$(".promo_video_clips").html(html);

	//
	// Remove each link and instaed replace it with a text box that
	// contains our embedding code.
	//
	$(".promo_video_clips").find(".promo").each(function() {

		var inner = $(this).find("object").html();
		var wmodeRegExp = /wmode=/
		if( !wmodeRegExp.test(inner) ){
			inner = inner.substring(0,inner.length-1) + " wmode=\"transparent\"" +" />";
		}
		//
		// Grab our embed code.
		//
		var html = "<object wmode=\"transparent\">" + inner + "</object>";
		html = jQuery.fn.promoTool.updateUserVars(html,user_params);

		//
		// Escape quotes in our embed code.
		//
		var link_quoted = html;
		link_quoted = link_quoted.replace(/"/g, "&quot;");
		link_quoted = link_quoted.replace(/'/g, "&quot;");

		var element = $(this).find("a").parent();
		html = "<span class=\"promo_video_clip\" ><input type=\"text\" size=\"40\" value=\"" + link_quoted + "\"/> <a class=\"select_all\">&laquo;Select All</a></span>";

		//
		// If we have a video ID, link to the video.
		//
		var video_id = $(this).find(".video_id").text();
		if (video_id) {
			var url = "/video/" + video_id + "/";
			html += "<br/>"
				+ "<span class=\"promo_video_clip promo_video_clip_link\" >"
				+ "<a href=\"" + url + "\">Watch this video</a></span>"
				;
		}

		element.empty();
		element.html(html);

	});

	//
	// Set a handler so clicking on the field selects it
	//
	// EDIT: updated so you click on a link nexty to the input field, instead of the field itself
	// 
	$(".promo_video_clips").find(".select_all").click(function() {
		$(this).parent().find("input").select();
	});

	//
	// Our handler for when the free modal status of a clip is changed.
	//
	$(".promo_video_clip_free_checkbox input").change(function() {

		var id = $(this).val();
		var checked = $(this).attr("checked");

		var status = $(this).parent().parent().find(".promo_clip_status");
		status.text("Saving...");

		//
		// Call the script to update a movie via AJAX.
		//
		var url = jQuery.fn.promoTool.getRoot() 
			+ "/promo/videos/ajax_update.php?jsonCallback=?";

		var data = {};
		data["video_id"] = id;
		data["free_modal"] = "";
		if (checked) {
			data["free_modal"] = 1;
		}

		var callback = function(data) {
			status.text("Saved!  Refresh page to view changes.");
		}

		jQuery.fn.promoTool.getJSON(url, data, callback);

	});

	//
	// Handler for when someone clicks on the button to disable the video.
	//
	$(".promo_video_clip_disable input").click(function() {

		var id = $(this).parent().parent().find(".promo_item_id").text();

		$(this).parent().find(
			".promo_clip_status").text(
				"Video disabled!  Reload page to see changes.");
		var status = $(this).parent().find(".promo_clip_status");
		status.text("Saving...");

		var url = jQuery.fn.promoTool.getRoot() 
			+ "/promo/videos/ajax_update.php?jsonCallback=?";
		var data = {};
		data["video_id"] = id;
		data["disable"] = 1;

		var callback = function(data) {
			status.text("Video disabled!  Refresh page to view changes.");
		}

		jQuery.fn.promoTool.getJSON(url, data, callback);

	});


} // End of displayClips()


/**
* Convert an array of clips into a two-dimensional array with a 
*	certain number of columns.
*
* @param array clips A regular array of clip data.
*
* @param integer num_cols (optional) Number of columns to have in the table.
*
* @return array A two-dimensional array of clips.
*/
jQuery.fn.promoTool.rowsToGrid = function(clips, num_cols) {

	if (num_cols == undefined) {
		num_cols = 2;
	}

	var retval = [];

	var current_col = 0;
	var row = [];
	for (key in clips) {

		var tmp = {};
		current_col++;

		//
		// Pass along the free modal attribute, if present.
		//
		if (clips[key]["free_modal"]) {
			tmp["free_modal"] = true;
		}

		tmp["id"] = clips[key]["id"];

		tmp["embed_code"] = clips[key]["embed_code"];
		if (clips[key]["created"]) {
			tmp["created"] = clips[key]["created"];
		}
		if (clips[key]["video_id"]) {
			tmp["video_id"] = clips[key]["video_id"];
		}
		row.push(tmp);

		if (current_col >= num_cols) {
			retval.push(row);
			row = [];
			current_col = 0;
		}

	}

	//
	// If we have a half-compelted row, add those clips in.
	//
	if (row.length) {
		retval.push(row);
	}

	return(retval);

} // End of rowsToGrid()


/**
* Convert a tow-dimensional grid into a table.
*
* @param array grid Our two dimensional array.
*
* @return string HTML code for a table.

** EDIT: Stripped out the table in favor of floating divs. 
** This allows me to fill the viewing area rather than having a big empty spot on the right for large moniters.

*/
jQuery.fn.promoTool.gridToTable = function(grid) {

	retval = "";

	//
	// Now turn that array into a table.
	// Edit: turn into a classed div
	//
	for (key in grid) {

		//retval += "<tr>";
		for (key2 in grid[key]) {
			var row = grid[key][key2];

			retval += "<div class=\"promo\">" 
				+ row["embed_code"] 
				;

			if (row["created"]) {
				retval += "Created: "+ row["created"];
			}

			//
			// If we have a video id, include it along in a hidden span tag.
			//
			if (row["video_id"]) {
				retval += "<span class=\"video_id\"style=\"display: none; \">"
					+ row["video_id"] 
					+ "</span>";
			}

			//
			// If we are a MovieDollars admin, create the button to enable/disable
			// a clip appearing in the free modal.
			//
			if (jQuery.fn.promoTool.params["md_admin"]) {

				retval += "<div class=\"promo_video_clip_free_checkbox\"><label>";

				if (row["free_modal"]) {
					retval += "<input type=\"checkbox\" value=\"" + row["id"] + "\" checked />";
				} else {
					retval += "<input type=\"checkbox\" value=\"" + row["id"] + "\" />";
				}

				retval += " Make this video available in free popup</label>"
					+ " <span class=\"promo_clip_status\"></span>"
					+ "</div>";

				//
				// Add button to disable this video
				//
				retval += "<div class=\"promo_video_clip_disable\">"
					+ "<span class=\"promo_item_id\" style=\"display: none; \">"
						+ row["id"] + "</span>"
					+ "<input type=\"button\" value=\"Disable this video clip\" />"
 					+ " <span class=\"promo_clip_status\"></span>"
					+ "</div>";

			}

			retval += "</div>";

		}

	}

	if (retval) {
		retval = "<div class=\"cat_webmaster_tools\">\n" + retval + "</div>\n";
	} else {
		retval = "No matches found.";
	}

	return(retval);

} // End of gridToTable()


/**
* Main function to get banners by video_id
*
* @param integer video_id The video ID
*
* @param array params Hash table of parameters
*/
jQuery.fn.promoTool.getBanners = function(video_id, params) {

	//
	// Store our parameters for later use
	//
	jQuery.fn.promoTool.params = params;

	//
	// Set our loading screen and timeout
	// 
	jQuery.fn.promoTool.setLoading($(".promo_video_banners"));

	var url = jQuery.fn.promoTool.getRoot() + "/promo/banners/search.php?jsonCallback=?";

	var data = {};
	data["action"] = "json";
	data["search[RefVODVideoId]"] = video_id;

	var callback = jQuery.fn.promoTool.getBannersCallback;
	jQuery.fn.promoTool.getJSON(url, data, callback);

} // End of getBanners()


/**
* This function is a callback when banners are loaded.
*
* @param data Associative array of clip data.
*/
jQuery.fn.promoTool.getBannersCallback = function(data) {

	//
	// Grab embed code for each clip
	//
	var html = "";
	var rows = [];
	for (key in data) {
		var row = {};
		row["embed_code"] = data[key]["AffiliateLink"];
		rows.push(row);
	}

	grid = jQuery.fn.promoTool.rowsToGrid(rows, 1);
	html = jQuery.fn.promoTool.gridToTable(grid);

	$(".promo_video_banners").html(html);

	//
	// Add a text field with the link onto the end of each banner.
	//
	$(".promo_video_banners").find(".promo").each(function() {

		var link = $(this).html();

		var link_quoted = link;
		link_quoted = link_quoted.replace(/"/g, "&quot;");
		link_quoted = link_quoted.replace(/'/g, "&quot;");

		html = "<span class=\"promo_video_banner\" >"
			+ link
			+ "<br/>"
			+ "<input type=\"text\" size=\"40\" value=\"" 
				+ link_quoted + "\"/> <a class=\"select_all\">&laquo; Select All</a>"
			+ "</span>"
			+ "<br/><br/>"
			;

		$(this).empty();
		$(this).append(html);

	});

	//
	// Set a handler so clicking on the field selects it
	//
	// EDIT: works by clicking a link next to the field
	// As a webmaster it really really sucks to not be able to move the cursor around in the field
	$(".promo_video_banners").find(".select_all").click(function() {
		$(this).parent().find("input").select();
	});


} // End of getBannersCallback()


/**
* Main function to get banners by video_id
*
* @param integer video_id The video ID
*
* @param integer skip How many clips to skip?
*/
jQuery.fn.promoTool.beenhere = false;
jQuery.fn.promoTool.getGalleries = function(video_id, skip) {

	var url = "/video.webmaster_tools_galleries_ajax.php";

	if (skip == undefined) {
		skip = 10;
	}

	//
	// Update a status area telling how many screengrabs we're showing.
	//
	if (skip > 0) {
		var html = "Showing 1 in every " + skip + " screen grabs.";
	} else {
		var html = "Showing every screen grab.";
	}

	$(".promo_video_gallery_slider_current").html(html);

	//
	// Only run the code to create our slider once.
	//
	if (!jQuery.fn.promoTool.beenhere) {
		//
		// Create our slider.
		//
		$(".promo_video_gallery_slider").slider({
			min: 0,
			max: 25,
			change: function(e, ui) {
				//alert(ui.value); // Debugging
				jQuery.fn.promoTool.getGalleries(video_id, ui.value);
			}
		});

		//
		// Set our default value
		//
		$(".promo_video_gallery_slider").slider("option", "value", skip);

		jQuery.fn.promoTool.beenhere = true;
	}

	var data = {};
	data["video_id"] = video_id;
	data["skip"] = skip;

	//
	// Display something to let the user log into MovieDollars if need be.
	//
	var link = jQuery.fn.promoTool.getRoot() + "/promo";
	var html = "<h4>"
		+ "Loading... make sure you are <a href=\"" + link + "\">logged into MovieDollars</a>..."
		+ "<img src=\"/images/please_wait.gif\" />";
		+ "</h4>"
		;
	$(".promo_video_galleries").html(html);

	var callback = jQuery.fn.promoTool.getGalleriesCallback;
	jQuery.fn.promoTool.getJSON(url, data, callback);

} // End of getGalleries()


/**
* This function is a callback when banners are loaded.
*
* @param data Associative array of clip data.
*/
jQuery.fn.promoTool.getGalleriesCallback = function(data) {

	//
	// Grab embed code for each clip
	//
	var html = "";
	var rows = [];
	for (key in data["img"]) {
		var row = {};
		row["embed_code"] = data["img"][key];
		rows.push(row);
	}

	var url = data["url"];

	grid = jQuery.fn.promoTool.rowsToGrid(rows, 4);
	html = jQuery.fn.promoTool.gridToTable(grid);

	$(".promo_video_galleries").html(html);

	//
	// Add a text field with the link onto the end of each banner.
	//
	$(".promo_video_galleries").find("div").each(function() {

		var link = $(this).html();

		//
		// Create our link for both the screenshot and what goes in the 
		// text box.
		//
		link_img = "<img src=\"" + link + "\" border=\"0\" "
			+ "width=\"220\" height=\"166\"/>";
		link_img = "<a href=\"" + url + "\">" + link_img + "</a>";

		//
		// Quote the link for displaying in text box.
		//
		var link_quoted = link;
		link_quoted = link_img.replace(/"/g, "&quot;");
		link_quoted = link_quoted.replace(/'/g, "&quot;");

		html = "<span class=\"promo_video_gallery\" >"
			+ link_img
			+ "<br/>"
			+ "<input type=\"text\" size=\"40\" value=\"" 
				+ link_quoted + "\"/>"
			+ "</span>"
			+ "<br/>"
			;

		$(this).empty();
		$(this).append(html);

	});

	//
	// Set a handler so clicking on the field selects it
	//
	$(".promo_video_galleries").find("input").click(function() {
		$(this).select();
	});

}; // End of getBannersCallback()


