/*
	Behaviors for the My Account pages. -czacharias
*/
function showMessage(text, cls, target) {
	target = (target ? _gel(target) : _gel("messages"));
	if (target) {
		_removeclass(target, 'hidden');
		target.innerHTML += "<span class=\"" + cls + "\">" + text + " (<a href=\"#\" onClick=\"clearMessages('" + target.id + "'); return false;\">X</a>)</span>";
	}
}
function showErrorMessage(text, target) {
	showMessage(text, "yte-error", target); 
}
function showInfoMessage(text, target) { 
	showMessage(text, "yte-info", target); 
}
function showSuccessMessage(text, target) { 
	showMessage(text, "yte-success", target);
}
function clearMessages(target) {
	target = (target ? _gel(target) : _gel("messages"));
	if (target) {
		_addclass(target, 'hidden');
		target.innerHTML = "";
	}
}
function getSelectedItems(target) {
	var items = new Array();
	target = (target ? _gel(target) : _gel("items"));
	if (target) {
		var checkboxes = target.getElementsByTagName('INPUT');
		goog.array.forEach(target.getElementsByTagName('INPUT'), function (input) {
			if (input.type == 'checkbox' && input.checked) {
				items.push(input.value);
			}
		});
	}
	return items;
}
function createViewState(initState, callback) {
	var result = new Object();
	result.pageIndex = 0;
	result.pageSize = 20;
	result.sortField = '';
	result.sortAscending = false;
	result.searchQuery = '';
	result.displayMode = 0;
	var _applyState = function (src, state) {
		if (state) {
			for (var key in state) {
				if (src[key] !== undefined) src[key] = state[key];
			}
		}
	};
	_applyState(result, initState);
	result.applyState = function (state) {
		_applyState(this, state);
		if (callback) callback(this);
	};
	return result;
}
function selectItem(item) {
	item.checked = true;
}
function deselectItem(item) {
	item.checked = false;
}
function selectAllItems(target) {
	target = (target ? _gel(target) : _gel("items"));
	if (target) {
		var checkboxes = target.getElementsByTagName('INPUT');
		goog.array.forEach(target.getElementsByTagName('INPUT'), function (input) {
			if (input.type == 'checkbox') {
				selectItem(input);
			}
		});
	}
}
function deselectAllItems(target) {
	target = (target ? _gel(target) : _gel("items"));
	if (target) {
		var checkboxes = target.getElementsByTagName('INPUT');
		goog.array.forEach(target.getElementsByTagName('INPUT'), function (input) {
			if (input.type == 'checkbox') {
				deselectItem(input);
			}
		});
	}
}
function disableItem(item) {
	item.disabled = true;
}
function enableItem(item) {
	item.disabled = false;
}
function disableAllItems(target) {
	target = (target ? _gel(target) : _gel("items"));
	if (target) {
		var checkboxes = target.getElementsByTagName('INPUT');
		goog.array.forEach(target.getElementsByTagName('INPUT'), function (input) {
			if (input.type == 'checkbox') {
				disableItem(input);
			}
		});
	}
}
function enableAllItems(target) {
	target = (target ? _gel(target) : _gel("items"));
	if (target) {
		var checkboxes = target.getElementsByTagName('INPUT');
		goog.array.forEach(target.getElementsByTagName('INPUT'), function (input) {
			if (input.type == 'checkbox') {
				enableItem(input);
			}
		});
	}
}
function replaceClass(target, currentClass, newClass) {
	var target = _gel(target);
	if (_hasclass(target, currentClass)) {
		_removeclass(target, currentClass);
		_addclass(target, newClass);
	}
}
function swapClass(target, classA, classB) {
	var target = _gel(target);
	if (_hasclass(target, classA)) {
		replaceClass(target, classA, classB);
	} else if (_hasclass(target, classB)) {
		replaceClass(target, classB, classA);
	}
}
function disableButton(target) {
	target = _gel(target);
	if (target) {
		if (_hasclass(target, 'yt-button')) replaceClass(target, 'yt-button', 'yt-button-disabled');
		if (_hasclass(target, 'yt-button-alt')) replaceClass(target, 'yt-button-alt', 'yt-button-alt-disabled');
		if (_hasclass(target, 'yt-button-compact')) replaceClass(target, 'yt-button-compact', 'yt-button-compact-disabled');
	}
}
function enableButton(target) {
	target = _gel(target);
	if (target) {
		if (_hasclass(target, 'yt-button-disabled')) replaceClass(target, 'yt-button-disabled', 'yt-button');
		if (_hasclass(target, 'yt-button-alt-disabled')) replaceClass(target, 'yt-button-alt-disabled', 'yt-button-alt');
		if (_hasclass(target, 'yt-button-compact-disabled')) replaceClass(target, 'yt-button-compact-disabled', 'yt-button-compact');
	}
}
function isButtonEnabled(target) {
	target = _gel(target);
	return _hasclass(target, 'yt-button') || _hasclass(target, 'yt-button-alt') || _hasclass(target, 'yt-button-compact');
}
function buildPostData(data) {
	var pairs = new Array();
	for (var prop in data) {
		pairs.push(prop + "=" + encodeURIComponent(data[prop].toString()));
	}
	return pairs.join("&");
}
function onTransportError(code, message) {
	yt.EventManager.fireEvent("TransportError");
}
function deleteVideos(ids, secureTokenCallback) {
	var url = "/video_ajax"; // Secure token must match this url
	var onSuccess = function (data) {
		var errors = data.errors;
		if (errors.length > 0) {
			yt.EventManager.fireEvent("VideosDeletedError", errors.pop());
		} else {
			// The ids should really come from the data response.  That way
			// if a given id is a duplicate or is not deleted from the list 
			// for some reason, it won't be returned in the event.
			yt.EventManager.fireEvent("VideosDeleted", ids);
		}
	}
	var postData = {};
	postData['action_delete_videos'] = 1;
	postData['v'] = ids.join(',');
	postData['session_token'] = secureTokenCallback('video_ajax');
	postAjaxResponseJson(url, postData, onSuccess, onTransportError);
}
function addVideosToQuicklist(ids, secureTokenCallback) {
	var url = "/video_ajax"; // Secure token must match this url
	var onSuccess = function (data) {
		var errors = data.errors;
		if (errors.length > 0) {
			yt.EventManager.fireEvent("VideosAddedToQuicklistError", errors.pop());
		} else {
			// The ids should really come from the data response.  That way
			// if a given id is a duplicate or is not added to the list 
			// for some reason, it won't be returned in the event.
			yt.EventManager.fireEvent("VideosAddedToQuicklist", ids);
		}
	}
	var postData = {};
	postData['action_add_videos_to_quicklist'] = 1;
	postData['v'] = ids.join(',');
	postData['session_token'] = secureTokenCallback('video_ajax');
	postAjaxResponseJson(url, postData, onSuccess, onTransportError);
}
function addVideosToFavorites(ids, secureTokenCallback) {
	var url = "/video_ajax";
	var onSuccess = function (data) {
		var errors = data.errors;
		if (errors.length > 0) {
			yt.EventManager.fireEvent("VideosAddedToFavoritesError", errors.pop());
		} else {
			yt.EventManager.fireEvent("VideosAddedToFavorites", ids);
		}
	}
	var postData = {};
	postData['action_add_videos_to_favorites'] = 1;
	postData['v'] = ids.join(',');
	postData['session_token'] = secureTokenCallback('video_ajax');
	postAjaxResponseJson(url, postData, onSuccess, onTransportError);
}
function addVideosToPlaylists(video_ids, playlist_ids, secureTokenCallback) {
	var url = "/playlist_ajax";
	var onSuccess = function (data) {
		var errors = data.errors;
		if (errors.length > 0) {
			yt.EventManager.fireEvent("VideosAddedToPlaylistsError", errors.pop());
		} else {
			yt.EventManager.fireEvent("VideosAddedToPlaylists", null /* Needs a value */);
		}
	}
	var postData = {};
	postData['action_add_videos_to_playlists'] = 1;
	postData['v'] = video_ids.join(',');
	postData['p'] = playlist_ids.join(',');
	postData['session_token'] = secureTokenCallback('playlist_ajax');
	postAjaxResponseJson(url, postData, onSuccess, onTransportError);
}
function createNewPlaylist(name, secureTokenCallback) {
	var url = "/playlist_ajax";
	var onSuccess = function (data) {
		var errors = data.errors;
		if (errors.length > 0) {
			yt.EventManager.fireEvent("PlaylistCreatedError", errors.pop());
		} else {
			var response = data.response;
			var playlist = { "id": response.playlistId, "name": response.playlistName };
			yt.EventManager.fireEvent("PlaylistCreated", playlist);
		}
	}
	var postData = {};
	postData['action_create_playlist'] = 1;
	postData['n'] = name;
	postData['session_token'] = secureTokenCallback('playlist_ajax');
	postAjaxResponseJson(url, postData, onSuccess, onTransportError);
}
function deleteFavorites(ids, secureTokenCallback) {
	var url = "/video_ajax";
	var onSuccess = function (data) {
		var errors = data.errors;
		if (errors.length > 0) {
			yt.EventManager.fireEvent("FavoritesDeletedError", errors.pop());
		} else {
			yt.EventManager.fireEvent("FavoritesDeleted", ids);
		}
	}
	var postData = {};
	postData['action_remove_videos_from_favorites'] = 1;
	postData['v'] = ids.join(',');
	postData['session_token'] = secureTokenCallback('video_ajax');
	postAjaxResponseJson(url, postData, onSuccess, onTransportError);
}

function hideVideo(id, secureTokenCallback) {
	var url = "/video_developer_ajax";
	var onSuccess = function (data) {
		var errors = data.errors;
		if (errors.length > 0) {
			yt.EventManager.fireEvent("HideVideoError", errors.pop());
		} else {
			yt.EventManager.fireEvent("HideVideoSuccess", id);
		}
	}
	var postData = {};
	postData['action_hide_video'] = 1;
	postData['v'] = id;
	postData['session_token'] = secureTokenCallback('video_developer_ajax');
	postAjaxResponseJson(url, postData, onSuccess, onTransportError);
}

function showVideo(id, secureTokenCallback) {
	var url = "/video_developer_ajax";
	var onSuccess = function (data) {
		var errors = data.errors;
		if (errors.length > 0) {
			yt.EventManager.fireEvent("ShowVideoError", errors.pop());
		} else {
			yt.EventManager.fireEvent("ShowVideoSuccess", id);
		}
	}
	var postData = {};
	postData['action_show_video'] = 1;
	postData['v'] = id; 
	postData['session_token'] = secureTokenCallback('video_developer_ajax');
	postAjaxResponseJson(url, postData, onSuccess, onTransportError);
}

function changePlaylistThumbnail(playlistId, videoSetId, videoId, secureTokenCallback) { 
	var url = "/playlist_ajax";
	var onSuccess = function (data) {
		var errors = data.errors;
		if (errors.length > 0) {
			yt.EventManager.fireEvent("PlaylistThumbnailChangedError", errors.pop())
		} else {
			yt.EventManager.fireEvent("PlaylistThumbnailChanged", { "playlistId": playlistId, "videoId": videoId });
		}
	}
	var postData = {};
	postData['action_set_playlist_thumbnail'] = 1;
	postData['p'] = playlistId; 
	postData['v'] = videoSetId;
	postData['session_token'] = secureTokenCallback('playlist_ajax');
	postAjaxResponseJson(url, postData, onSuccess, onTransportError);
}
/* TODO - This should be converted to deletePlaylists and accepts multiple ids. */
function deletePlaylist(id, secureTokenCallback) {
	var url = "/playlist_ajax";
	var onSuccess = function (data) {
		var errors = data.errors;
		if (errors.length > 0) {
			yt.EventManager.fireEvent("PlaylistDeletedError", errors.pop());
		} else {
			yt.EventManager.fireEvent("PlaylistDeleted", id);
		}
	}
	var postData = {};
	postData['action_delete_playlist'] = 1;
	postData['p'] = id; 
	postData['session_token'] = secureTokenCallback("playlist_ajax");
	postAjaxResponseJson(url, postData, onSuccess, onTransportError);
}
function updatePlaylist(id, title, desc, tags, isPublic, allowEmbed, isVlog, isSeries, secureTokenCallback) {
	var url = "/playlist_ajax";
	var onSuccess = function (data) {
		var errors = data.errors;
		if (errors.length > 0) {
			yt.EventManager.fireEvent("PlaylistUpdatedError", errors);
		} else {
			yt.EventManager.fireEvent("PlaylistUpdated", id);
		}
	}
	var postData = {};
	postData['action_edit_playlist'] = 1;
	postData['p'] = id; 
	postData['t'] = title;
	postData['d'] = desc;
	postData['k'] = tags;
	postData['y'] = (isPublic ? 0 : 1); // These are flipped because public = 0, private = 1
	postData['e'] = (allowEmbed ? 1 : 0);
	postData['v'] = (isVlog ? 1 : 0);
	postData['s'] = (isSeries ? 1 : 0);
	postData['session_token'] = secureTokenCallback('playlist_ajax');
	postAjaxResponseJson(url, postData, onSuccess, onTransportError);
}
function removeVideosFromPlaylist(playlistId, ids, secureTokenCallback) {
	var url = "/playlist_ajax";
	var onSuccess = function (data) {
		var errors = data.errors;
		if (errors.length > 0) {
			yt.EventManager.fireEvent("VideosRemovedFromPlaylistError", errors.pop());
		} else {
			yt.EventManager.fireEvent("VideosRemovedFromPlaylist", { "playlistId": playlistId, "videoIds": ids });
		}
	}
	var postData = {};
	postData['action_remove_videos_from_playlist'] = 1;
	postData['p'] = playlistId; 
	postData['v'] = ids.join(',');
	postData['session_token'] = secureTokenCallback('playlist_ajax');
	postAjaxResponseJson(url, postData, onSuccess, onTransportError);
}
function removeSubscriptions(ids, secureTokenCallback) {
	var url = "/subscription_ajax"; // Secure token must match this url
	var onSuccess = function (data) {
		var errors = data.errors;
		if (errors.length > 0) {
			yt.EventManager.fireEvent("SubscriptionsRemovedError", errors.pop());
		} else {
			// The ids should really come from the data response.  That way
			// if a given id is a duplicate or is not added to the list 
			// for some reason, it won't be returned in the event.
			yt.EventManager.fireEvent("SubscriptionsRemoved", ids);
		}
	}
	var postData = {};
	postData['action_remove_subscriptions'] = 1;
	postData['s'] = ids.join(',');
	postData['session_token'] = secureTokenCallback('subscription_ajax');
	postAjaxResponseJson(url, postData, onSuccess, onTransportError);
}
function createSubscriptionToTags(tags, secureTokenCallback) {
	var url = "/subscription_ajax"; // Secure token must match this url
	var onSuccess = function (data) {
		var errors = data.errors;
		if (errors.length > 0) {
			yt.EventManager.fireEvent("SubscriptionCreatedError", errors.pop());
		} else {
			// The ids should really come from the data response.  That way
			// if a given id is a duplicate or is not added to the list 
			// for some reason, it won't be returned in the event.
			yt.EventManager.fireEvent("SubscriptionCreated", data.response);
		}
	}
	var postData = {};
	postData['action_create_subscription_to_tags'] = 1;
	postData['t'] = tags;
	postData['session_token'] = secureTokenCallback('subscription_ajax');
	postAjaxResponseJson(url, postData, onSuccess, onTransportError);
}
function createSubscriptionToUser(username, secureTokenCallback) {
	var url = "/subscription_ajax"; // Secure token must match this url
	var onSuccess = function (data) {
		var errors = data.errors;
		if (errors.length > 0) {
			yt.EventManager.fireEvent("SubscriptionCreatedError", errors.pop());
		} else {
			// The ids should really come from the data response.  That way
			// if a given id is a duplicate or is not added to the list 
			// for some reason, it won't be returned in the event.
			yt.EventManager.fireEvent("SubscriptionCreated", data.response);
		}
	}
	var postData = {};
	postData['action_create_subscription_to_user'] = 1;
	postData['u'] = username;
	postData['session_token'] = secureTokenCallback('subscription_ajax');
	postAjaxResponseJson(url, postData, onSuccess, onTransportError);
}
function disableRevenueShareOnVideos(ids, secureTokenCallback) {
	var url = "/video_ajax"; // Secure token must match this url
	var onSuccess = function (data) {
		var errors = data.errors;
		if (errors.length > 0) {
			yt.EventManager.fireEvent("RevenueShareOnVideosDisabledError", errors.pop());
		} else {
			yt.EventManager.fireEvent("RevenueShareOnVideosDisabled", ids);
		}
	}
	var postData = {};
	postData['action_disable_revenue_sharing_on_videos'] = 1;
	postData['v'] = ids.join(",");
	postData['session_token'] = secureTokenCallback('video_ajax');
	postAjaxResponseJson(url, postData, onSuccess, onTransportError);
}
function disableDownloadOptionOnVideos(ids, agreement_type, secureTokenCallback) {
	var url = "/video_ajax"; // Secure token must match this url
	var onSuccess = function (data) {
		var errors = data.errors;
		if (errors.length > 0) {
			yt.EventManager.fireEvent("DownloadOptionOnVideosDisabledError", errors.pop());
		} else {
			yt.EventManager.fireEvent("DownloadOptionOnVideosDisabled", ids);
		}
	}
	var postData = {};
	postData['action_disable_download_option_on_videos'] = 1;
	postData['v'] = ids.join(",");
	postData['agreement_type'] = agreement_type;
	postData['session_token'] = secureTokenCallback('video_ajax');
	postAjaxResponseJson(url, postData, onSuccess, onTransportError);
}
function onKeyDownHandler(e, src, callback) {
	var key;
	if (window.event) {
		// Get input key from IE
		key = e.keyCode;
	} else if (e.which) {
		// Get input key from Firefox/Netscape/Opera
		key = e.which;
	}
	callback(key, src);
}
// this comment is temporary, to fix VFL
