Zooomr Simple Organizer

By ping Last update Jul 18, 2008 — Installed 430 times.

Add Syntax Highlighting (this will take a few seconds, probably freezing your browser while it works)

// ==UserScript==
// @name           Zooomr Simple Organizer
// @namespace      http://www.zooomr.com/photos/ping/
// @description    A simple bulk organizer for Zooomr. Edit tags, privacy, license settings, titles and descriptions, rotates and deletes too!
// @include        http://*.zooomr.com
// @include        http://*.zooomr.com/*
// ==/UserScript==

(function() {

var $ = unsafeWindow.$;
var $$ = unsafeWindow.$$;
var $A = unsafeWindow.$A;
var ZAPI = unsafeWindow.ZAPI;
var json_parse = unsafeWindow.json_parse;
var gettext = unsafeWindow.gettext;
var global_nsid = unsafeWindow.global_nsid;
var _site_root = unsafeWindow._site_root;
var _photo_root = unsafeWindow._photo_root;
var _images_root = unsafeWindow._images_root;
var _css_root = unsafeWindow._css_root;
var _per_page = 30;
var _search_term = '';
var _photoset_id = 0;

var MODE_GETALL = 'getall';
var MODE_SEARCH = 'search';
var MODE_PHOTOSET = 'photoset';

if (global_nsid == '00@Z01') {
	return;	// not logged in
}

var navtab_organizer = document.createElement('li');
navtab_organizer.id = 'navtab_organizer';
navtab_organizer.innerHTML = '<span><img width="16" height="16" src="' + _images_root + 'silk/tag_blue_edit.png" style="margin-right: 2px;"><a href="/organizer/">Organize</a></span>';

$('navtab_you').insert({ before: navtab_organizer });

var windowlocation = new String(unsafeWindow.location);
if (windowlocation.indexOf('zooomr.com/organizer') == -1) {
	return;	// not on organizer page
}


/* 
	CSS Stuff
*/
function addGlobalStyle(css) {
    var head, style;
    head = document.getElementsByTagName('head')[0];
    if (!head) { return; }
    style = document.createElement('style');
    style.type = 'text/css';
    style.innerHTML = css;
    head.appendChild(style);
}

addGlobalStyle('#photoDisplay { width: 500px; height: 545px; float: left; margin-bottom: 3px; }');
addGlobalStyle('#organizerEditor { font-size: 12px; width: 280px; float: left; margin-bottom: 5px;}');
addGlobalStyle('#organizerEditor legend { font-size: 14px; }');
addGlobalStyle('#organizerSearch { font-size: 12px; width: 280px; float: left; margin-bottom: 2px;}');
addGlobalStyle('#organizerSearch legend { font-size: 14px; }');
addGlobalStyle('.pagelink { margin-right: 3px; }');
addGlobalStyle('div.toggle { width: 100%; text-align: right; font-size: 12px; margin-bottom: 3px }');
addGlobalStyle('.itghdr { border: 1px solid silver; padding: 3px; vertical-align:top; margin-top: 8px; }');
addGlobalStyle('.itgcontent { border: 1px solid silver; border-top: 0px; padding: 5px; vertical-align: top; margin-left: 2px; margin-right: 2px; }');
addGlobalStyle('#ed_hdr_find { background:url(' + _images_root + 'silk/magnifier.png) 2px 2px no-repeat; padding-left: 18px; }');
addGlobalStyle('#ed_hdr_labels { background:url(' +  _images_root + 'silk/tag_green.png) 2px 2px no-repeat; padding-left: 18px; }');
addGlobalStyle('#ed_hdr_privacy { background:url(' + _images_root + 'silk/lock.png) 2px 2px no-repeat; padding-left: 18px; }');
addGlobalStyle('#ed_hdr_license { background:url(' + _images_root + 'silk/copyright.png) 2px 2px no-repeat; padding-left: 18px; }');
addGlobalStyle('#ed_hdr_rotate { background:url(' + _images_root + 'silk/arrow_rotate_clockwise.png) 2px 2px no-repeat; padding-left: 18px; }');
addGlobalStyle('#ed_hdr_meta { background:url(' + _images_root + 'silk/vcard.png) 2px 2px no-repeat; padding-left: 20px; }');


/* 
	Saves tags for selected photos
*/
function saveLabels() {
	var photoCheckboxes = $$('input.PhotoSelector');
	var photoCount = 0;
	$('labels_save').hide();
	$('labels_progress').show();
	
	var successLabels = function(t) {
		if (photoCount == 0) {
			$('labels_save').show();
			$('labels_progress').hide();
		}
	}
	
	for (var i = 0; i < photoCheckboxes.length; i++) {
		var photo = photoCheckboxes[i];
		var newTags = $('labels_input').value;
		
		if (photo.checked) {
			photoCount++;
			ZAPI.callMethodJSON( 'zooomr.photos.addtags'
				, {photo_id: photo.value, tags: newTags}
				, {'onSuccess': function(t) { photoCount--; successLabels(t); } }
			);
		}
	}
} // end: function saveLabels()


/* 
	Saves privacy settings for selected photos
*/
function savePrivacy() {
	var photoCheckboxes = $$('input.PhotoSelector');
	var photoCount = 0;
	$('privacy_save').hide();
	$('privacy_progress').show();
	
	var successPrivacy = function(t) {
		if (photoCount == 0) {
			$('privacy_save').show();
			$('privacy_progress').hide();
		}
	};
	
	for (var i = 0; i < photoCheckboxes.length; i++) {
		var photo = photoCheckboxes[i];
		data = {photo_id:photo.value, is_public:($('is_private').checked ? 0 : 1), is_friend:($('is_friend').checked ? 1 : 0), is_family:($('is_family').checked ? 1 : 0) };

		if (photo.checked) {
			photoCount++;
			ZAPI.callMethodJSON( 'zooomr.photos.setPerms'
				, data
				, {'onSuccess': function(t) { photoCount--; successPrivacy(t); } }
			);
		}
	}
} // end: function savePrivacy()

unsafeWindow.change_privacy_form = function (setting) {
	$('is_friend').disabled = setting;
	$('is_family').disabled = setting;
	if (setting == 1) {
		$('is_friend').checked = false;
		$('is_family').checked = false;
	}	
	$('is_private').checked = !(setting ==1);
	$('is_public').checked = (setting ==1);
};


/* 
	Saves license for selected photos
*/
function saveLicense() {
	var photoCheckboxes = $$('input.PhotoSelector');
	var photoCount = 0;
	$('license_save').hide();
	$('license_progress').show();
	
	var successLabels = function(t) {
		if (photoCount == 0) {
			$('license_save').show();
			$('license_progress').hide();
		}
	}
	
	for (var i = 0; i < photoCheckboxes.length; i++) {
		var photo = photoCheckboxes[i];
		var newLicense = $('license_edit').value;
		
		if (photo.checked) {
			photoCount++;
			ZAPI.callMethodJSON( 'zooomr.photos.licenses.setLicense'
				, {photo_id: photo.value, license_id: newLicense}
				, {'onSuccess': function(t) { photoCount--; successLabels(t); } }
			);
		}
	}
} // end: function saveLicense()

/*
	Rotates selected photos
*/
function rotatePhotos(direction) {

	var photoCheckboxes = $$('input.PhotoSelector');
	var photoCount = 0;
	var angle = '';
	var arrayPhotos = new Array();
	
	switch (direction) {
		case 'cw':
			angle = '90';
			break;
		case 'ccw':
			angle = '270'
			break;
	}
	
	if (angle == '') { return; }
	
	var successRotatePhoto = function() {

		if (photoCount == 0) {
			$('rotate_' + direction + '_save').show();
			$('rotate_' + direction + '_progress').hide();
			for (var i = 0; i < arrayPhotos.length; i++) {
				$('container_' + arrayPhotos[i]).update($('container_' + arrayPhotos[i]).innerHTML);
			}
		}
	};
	
	$('rotate_' + direction + '_save').hide();
	$('rotate_' + direction + '_progress').show();
	
	for (var i = 0; i < photoCheckboxes.length; i++) {
		var photo = photoCheckboxes[i];			
		if (photo.checked) {
			var pid = photo.value;
			arrayPhotos[photoCount] = pid;
			photoCount++;
			ZAPI.callMethodJSON( 'zooomr.photos.transform.rotate'
				, {photo_id: pid, degrees: angle}
				, {'onSuccess': function(t) { photoCount--; successRotatePhoto(); } }
			);
		}
	}


} //end: function rotatePhotos()

/*
	Mass deletes selected photos
*/
function deletePhotos() {

	if (confirm( gettext("Are you sure you want to delete these photos? This action cannot be undone!") ) ) {
	
		var photoCheckboxes = $$('input.PhotoSelector');
		var photoCount = 0;
		var arrayPhotos = new Array();

		$('delete_save').hide();
		$('delete_progress').show();
		
		var successDeletePhotos = function() {
			
			if (photoCount == 0) {
				$('delete_save').show();
				$('delete_progress').hide();
				for (var i = 0; i < arrayPhotos.length; i++) {
					$('container_' + arrayPhotos[i]).remove();
				}
			}
		};
		
		for (var i = 0; i < photoCheckboxes.length; i++) {
			var photo = photoCheckboxes[i];			
			if (photo.checked) {
				var pid = photo.value;
				arrayPhotos[photoCount] = pid;
				photoCount++;
				ZAPI.callMethodJSON( 'zooomr.photos.delete'
					, {photo_id: pid}
					, {'onSuccess': function(t) { photoCount--; successDeletePhotos(); } }
				);
			}
		}
	} 

} // end: function deletePhotos()

/*
	Get Photos
*/
function getPhotos(isFirstLoad) {
	if (!isFirstLoad) {
		// hide stuff
		$('getall_button').hide();
		$('getall_progress').show();
	}
	ZAPI.callMethodJSON( 'zooomr.people.getPhotos', {user_id:global_nsid, per_page: _per_page, page: '1'} ,  {onSuccess: successGetPhotos});
}
/* 
	Search Photos 
*/
function searchPhotos() {
	_search_term = $('search_input').value;
	if (_search_term == '') {
		return;
	}
	$('search_button').hide();
	$('search_progress').show();
	ZAPI.callMethodJSON( 'zooomr.photos.search', {query: _search_term, user_id:global_nsid, per_page: _per_page, page: '1'} ,  {onSuccess: successSearchPhotos});
}

/* 
	Get PhotoSet/SmartSet Photos 
*/
function getPhotoSetPhotos() {
	_photoset_id = $('photoset_list').value;
	if (_photoset_id == '0') {
		return;
	}
	$('photoset_get').hide();
	$('photoset_progress').show();
	ZAPI.callMethodJSON( 'zooomr.photosets.getPhotos', {photoset_id: _photoset_id, per_page: _per_page, page: '1'} ,  {onSuccess: successGetPhotosetPhotos});
}


var getSmartSetsList = function(pageIndex) {
	
	var successGetSetsList = function(t) {
		var data = json_parse(t.responseText);
		for (i = 0; i < data.photosets._content.photoset.length; i++) {

			var photoSetOption = document.createElement('option');
			photoSetOption.value = data.photosets._content.photoset[i].id;
			photoSetOption.innerHTML =  data.photosets._content.photoset[i].title._content;
			$('photoset_list').appendChild(photoSetOption);
		}
		if (data.photosets.page != data.photosets.pages) {	// there are more sets
			var newPageIndex = parseInt(data.photosets.page) + 1;
			getSmartSetsList(newPageIndex);
		} else {
			$('photoset_progress').hide();
			$('photoset_get').show();
		}
	}; // end: successGetSetsList
	
	ZAPI.callMethodJSON( 'zooomr.photosets.getList', {user_id: global_nsid, per_page: '500', page: pageIndex}, {'onSuccess': successGetSetsList});
} // end: getSmartSetsList

/*
	Page Link listener
*/
function pageTo(e) {
	var pageNum = e.target.getAttribute('pagenum');
	var mode = e.target.getAttribute('mode');
	
	$('break').remove();
	$('pager').remove();
	$('photoListing').innerHTML = '<img src="' + _images_root + 'tidbits/bar_throbber.gif">';

	switch (mode) {
		case MODE_GETALL:
			ZAPI.callMethodJSON( 'zooomr.people.getPhotos', {user_id:global_nsid, per_page: _per_page, page: pageNum} ,  {onSuccess: successGetPhotos});
			break;
		case MODE_SEARCH:
			ZAPI.callMethodJSON( 'zooomr.photos.search', {query: _search_term, user_id:global_nsid, per_page: _per_page, page: pageNum} ,  {onSuccess: successSearchPhotos});
			break;
		case MODE_PHOTOSET:
			ZAPI.callMethodJSON( 'zooomr.photosets.getPhotos', {photoset_id: _photoset_id, per_page: _per_page - 1, page: pageNum} ,  {onSuccess: successGetPhotosetPhotos});
			break;
	}
}

/*
	Delete Link listener - not used
*/
function deletePhoto(e) {

	var photo_id = e.target.getAttribute('pid');
	var successDeletePhoto = function(t) {
		$('container_' + photo_id).remove();
	};
	
	if ( confirm( gettext("Are you sure you want to delete this photo? This action cannot be undone!") ) ) {
		$('photoDelete_' + photo_id).hide();
		$('photoProgress_' + photo_id).show();
		ZAPI.callMethodJSON( 'zooomr.photos.delete', {photo_id : photo_id } ,  {onSuccess: successDeletePhoto});
	} 
}

/*
	Edit Photo
*/
function editPhoto(e) {
	var photo_id = e.target.getAttribute('pid');
	
	var successGetPhoto = function(t) {
		var data = json_parse(t.responseText);
		$('photoID').value = photo_id;
		$('photoTitle').value = data.photo.title._content;
		$('photoDescription').value = data.photo.description._content;
		$('metaEditor').show();
		$('bulkEditor').hide();
		
		$('photoEdit_' + photo_id).show();
		$('photoProgress_' + photo_id).hide();
	};

	$('photoEdit_' + photo_id).hide();
	$('photoProgress_' + photo_id).show();
	
	ZAPI.callMethodJSON('zooomr.photos.getInfo', {photo_id : photo_id } ,  {onSuccess: successGetPhoto});
}

function cancelEditPhoto() {
	$('metaEditor').hide();
	$('bulkEditor').show();    
}

function saveEditPhoto() {
	var successSaveEditPhoto = function(t) {
		alert('Saved!');
		cancelEditPhoto();
		$('meta_save').show();
		$('meta_progress').hide();

	}

	$('meta_save').hide();
	$('meta_progress').show();

	ZAPI.callMethodJSON('zooomr.photos.setMeta', {photo_id : $('photoID').value, title: $('photoTitle').value, description: $('photoDescription').value } ,  {onSuccess: successSaveEditPhoto});	

}

/*
	Shows/Hides the Editor Section
*/
unsafeWindow.toggleSection = function (section) {
	$('ed_content_' + section).toggle();
	if ($('ed_content_' + section).visible()) {
		$('ed_toggle_' + section).src =  _images_root + 'silk/bullet_toggle_minus.png';
	} else {
		$('ed_toggle_' + section).src =  _images_root + 'silk/bullet_toggle_plus.png';
	}
};

/*
	Displays photos retrieved
*/
function renderPhotoListing(data, mode) {

	if ($('photoListing') != undefined) { $('photoListing').remove(); }
	if ($('break') != undefined) { $('break').remove(); }
	if ($('pager') != undefined) { $('pager').remove(); }

	var photoListing = document.createElement('div');
	photoListing.id = 'photoListing';
	photoListing.innerHTML = '<div class="toggle">Select All <input id="selectall" onClick="toggleAll();" type="checkbox"></div>';
	photoDisplay.appendChild(photoListing);
	
	var startIndex = 0;
	if (mode == MODE_PHOTOSET) {
		startIndex = 1;
	}
	for (i = startIndex; i < data.photos.photo.length; i++) {
		var photoSrc = _photo_root + data.photos.photo[i].id + '_' + data.photos.photo[i].secret + '_s.jpg';
		
		var imgDiv = document.createElement('div');
		imgDiv.id = 'container_' + data.photos.photo[i].id;
		imgDiv.setAttribute('class', 'SqStreamBit float ImageContainer');
		//imgDiv.setAttribute('onmouseout',"$('extraspace_" + data.photos.photo[i].id + "').style.display='none';");
		//imgDiv.setAttribute('onmouseover',"$('extraspace_" + data.photos.photo[i].id + "').style.display='block';");
		
		var imgLink = document.createElement('a');
		imgLink.setAttribute('class','image_link');
		imgLink.setAttribute('title', data.photos.photo[i].title);
		imgLink.href = unsafeWindow.photos_url + data.photos.photo[i].id + '/';
		
		var img = document.createElement('img');
		img.setAttribute('src', photoSrc);
		img.setAttribute('title', data.photos.photo[i].title);
		img.setAttribute('alt', data.photos.photo[i].title);
		img.setAttribute('width', '75');
		img.setAttribute('height', '75');
		
		var imgPitBox = document.createElement('div');
		imgPitBox.id = 'extraspace_' + data.photos.photo[i].id;
		imgPitBox.setAttribute('class','ImagePitBox');
		imgPitBox.setAttribute('style','display: block;');
		imgPitBox.innerHTML = '<input class="PhotoSelector" type="checkbox" value="' + data.photos.photo[i].id + '" id="select_' + data.photos.photo[i].id + '" name="select_' + data.photos.photo[i].id + '"/>'
//			+ '<a id="photoDelete_' + data.photos.photo[i].id + '" class="iconlink deletelink" title="Delete" alt="Delete" pid="' + data.photos.photo[i].id + '" href="javascript:void(0);"><img pid="' + data.photos.photo[i].id + '" title="Delete" alt="Delete" src="' + _images_root + 'silk/cross.png"></a>'
			+ '<img style="display: none;" id="photoProgress_' + data.photos.photo[i].id + '" style="display: none; margin-left: 3px;" src="' + _images_root + 'tidbits/progress.gif' + '">'
			+ '<a id="photoEdit_' + data.photos.photo[i].id + '" class="iconlink editlink" title="Edit" alt="Edit" pid="' + data.photos.photo[i].id + '" href="javascript:void(0);"><img pid="' + data.photos.photo[i].id + '" title="Edit" alt="Edit" src="' + _images_root + 'silk/pencil.png"></a>'
			;
		
		imgLink.appendChild(img);
		imgDiv.appendChild(imgLink);
		imgDiv.appendChild(imgPitBox);
		
		photoListing.appendChild(imgDiv);
	}	
	
	/* ---------------- Paging ------------------- */
	photoDisplay.innerHTML += '<br id="break" clear="all">';
	var totalPages = parseInt(data.photos.pages); 
	var currentPage = parseInt(data.photos.page); 
	var nextPage = ((currentPage == totalPages) ? currentPage : currentPage + 1); 
	var prevPage = ((currentPage == 1) ? currentPage : currentPage - 1); 
	var lowerBound = (((currentPage - 4 ) > 1) ? (currentPage - 3)  : 1);
	var upperBound = (((currentPage + 4) < totalPages) ? (currentPage + 3)  : totalPages);
	
	var pages = document.createElement('div');
	pages.id = "pager";
	pages.setAttribute('class','Pages');
	
	// Previous Link
	pages.innerHTML += ((currentPage > 1) ? '<a class="Prev pagelink" href="javascript: void(0);" mode="' + mode + '" pagenum="' + prevPage + '">< Previous</a>' : '<span class="StartBit">< Previous</span>');
	if (lowerBound >  1) {
		pages.innerHTML += ((currentPage == 1) ? '<span class="this-page">' + 1 + '</span>' : '<a class="pagelink" href="javascript: void(0);" mode="' + mode + '" pagenum="' + 1 + '">' + 1 + '</a>');
		pages.innerHTML += '<span class="break">...</span>';
	}
	for (i = lowerBound; i <= upperBound; i++) {
		pages.innerHTML += ((currentPage == i) ? '<span class="this-page">' + i + '</span>' : '<a class="pagelink" href="javascript: void(0);" mode="' + mode + '" pagenum="' + i + '">' + i + '</a>');
	}
	if (upperBound < totalPages) {
		pages.innerHTML += '<span class="break">...</span>';
		pages.innerHTML += ((currentPage == totalPages) ? '<span class="this-page">' + totalPages + '</span>' : '<a class="pagelink" href="javascript: void(0);" mode="' + mode + '" pagenum="' + totalPages + '">' + totalPages + '</a>');
	}
	// Next Link
	pages.innerHTML += ((currentPage < totalPages) ? '<a class="Next pagelink" href="javascript: void(0);" mode="' + mode + '" pagenum="' + nextPage + '">Next ></a>' : '<span class="EndBit">Next ></span>');		
	pages.innerHTML = '<div class="Paginator">' + pages.innerHTML +'</div>' + '<div class="Results">(' + data.photos.total + ' Photos)</div>';
	photoDisplay.appendChild(pages);
	/* ---------------- Paging ------------------- */
	
	// Hook up page links click
	var pageLinks = $$('a.pagelink');
	for (var i = 0; i < pageLinks.length; i++) {
		pageLinks[i].addEventListener('click', pageTo, false);
	}
	
	// Hook up delete clicks
	var deleteLinks = $$('a.deletelink');
	for (var i = 0; i < deleteLinks.length; i++) {
		deleteLinks[i].addEventListener('click', deletePhoto, false);
	}

	// Hook up edit clicks
	var editLinks = $$('a.editlink');
	for (var i = 0; i < editLinks.length; i++) {
		editLinks[i].addEventListener('click', editPhoto, false);
	}


} //end: function renderPhotoListing(data)

/* 
	Setup page
 */
document.title = 'Zooomr Simple Organizer';
$('content').innerHTML = '';


/* Photos Display Area */
var photoDisplay = document.createElement('div');
photoDisplay.id = 'photoDisplay';
photoDisplay.innerHTML = '<h3>Your Photos</h3>';
photoDisplay.setAttribute('class','theme_zipline_bubble');
$('content').appendChild(photoDisplay);

/* Search/Filter Area */
var organizerSearch = document.createElement('div');
organizerSearch.id = 'organizerSearch';
organizerSearch.setAttribute('class','theme_zipline_bubble');
organizerSearch.innerHTML = ''
	+ '<div>'
// FIND
	+ '<div id="ed_hdr_find" class="itghdr">'
	+ '<span style="float: right;"><a onclick="this.blur(); toggleSection(\'find\');" class="iconlink" href="javascript: void(0);"><img id="ed_toggle_find" src="' + _images_root + 'silk/bullet_toggle_minus.png' + '"></span>'
	+ '<h4><a onclick="this.blur(); toggleSection(\'find\');" class="smalllink_ltgrey" href="javascript: void(0);">Find</a></h4>'
	+ '</div>' 
	+ '<div id="ed_content_find" class="itgcontent" >'
	+ '<div>'
	+ 'Labels: <input id="search_input" type="text" size="25" value="" style="font-size: 12px;"/>'
	+ '<input id="search_button" class="sm_button" type="button" value="SEARCH" style="margin-left: 3px;"/>'
	+ '<img style="display: none; margin-left: 3px;" id="search_progress" src="' + _images_root + 'tidbits/progress.gif' + '">'
	+ '</div>'
	+ '<div style="margin-top: 5px;">'
	+ 'SmartSets: <br/><select id="photoset_list" style="font-size: x-small;" name="photoset_list">'
	+ '<option selected="" value="0">-- select --</option>'
	+ '</select>'
	+ '<br/>'
	+ '<input id="photoset_get" class="sm_button" type="button" value="LIST PHOTOS" style="margin-top: 3px;"/>'
	+ '<img style="display: none; margin-top: 3px;" id="photoset_progress" src="' + _images_root + 'tidbits/progress.gif' + '">'
	+ '<br style="margin-top="5px;" />'
	+ '<input id="getall_button" class="sm_button" type="button" value="Search is for wimps, I want EVERYTHING!" style="margin-top: 15px;"/>'
	+ '<img style="display: none; margin-top: 15px;" id="getall_progress" src="' + _images_root + 'tidbits/progress.gif' + '">'
	+ '</div>'
	+ '</div>';
$('content').appendChild(organizerSearch);

/* Editor Area */
var organizerEditor = document.createElement('div');
organizerEditor.id = 'organizerEditor';
organizerEditor.setAttribute('class','theme_zipline_bubble');
organizerEditor.innerHTML = ''
	+ '<div id="bulkEditor">'
// LABELS
	+ '<div id="ed_hdr_labels" class="itghdr">'
	+ '<span style="float: right;"><a onclick="this.blur(); toggleSection(\'labels\');" class="iconlink" href="javascript: void(0);"><img id="ed_toggle_labels" src="' + _images_root + 'silk/bullet_toggle_minus.png' + '"></span>'
	+ '<h4><a onclick="this.blur(); toggleSection(\'labels\');" class="smalllink_ltgrey" href="javascript: void(0);">Labels / Tags</a></h4>'
	+ '</div>' 
	+ '<div id="ed_content_labels" class="itgcontent" >'
	+ '<input id="labels_input" type="text" size="30" value="" style="font-size: 12px;"/>'
	+ '<input id="labels_save" class="sm_button" type="button" value="ADD" style="margin-left: 3px;"/>'
	+ '<img style="display: none; margin-left: 3px;" id="labels_progress" src="' + _images_root + 'tidbits/progress.gif' + '">'
	+ '</div>'
// PRIVACY
	+ '<div id="ed_hdr_privacy" class="itghdr">'
	+ '<span style="float: right;"><a onclick="this.blur(); toggleSection(\'privacy\');" class="iconlink" href="javascript: void(0);"><img id="ed_toggle_privacy" src="' + _images_root + 'silk/bullet_toggle_plus.png' + '"></span>'
	+ '<h4><a onclick="this.blur(); toggleSection(\'privacy\');" class="smalllink_ltgrey" href="javascript: void(0);">Privacy</a></h4>'
	+ '</div>' 
	+ '<div id="ed_content_privacy" class="itgcontent" style="display: none;" >'
	+ '<input id="is_private" type="radio" value="0" name="is_private" onClick="change_privacy_form(0);" onChange="change_privacy_form(0);">'
	+ '<label for="is_private">'
	+ '<img border="0" margin-left="2px" margin-right="2px" width="16" height="16" style="vertical-align: middle;" alt="Mark as Private" src="' + _images_root + 'silk/lock.png">Mark as Private'
	+ '</label>'
	+ '<br/>'
	+ '<div style="padding-left: 20px;">'
	+ '<input id="is_friend" type="checkbox" value="1" name="is_friend"/>'
	+ '<label for="is_friend">'
	+ '<img border="0" width="16" height="16" style="vertical-align: middle;" alt="Visible to Friends" src="' + _images_root + 'silk/key_add.png">Visible to Friends'
	+ '</label>'
	+ '<br/>'
	+ '<input id="is_family" type="checkbox" value="1" name="is_family"/>'
	+ '<label for="is_family">'
	+ '<img border="0" margin-left="2px" margin-right="2px" width="16" height="16" style="vertical-align: middle;" alt="Visible to Family" src="' + _images_root + 'silk/key_add.png">Visible to Family'
	+ '</label></div>'
	+ '<input id="is_public" type="radio" value="0" name="is_public" onClick="change_privacy_form(1);" onChange="change_privacy_form(1);">'
	+ '<label for="is_public">'
	+ '<img border="0" margin-left="2px" margin-right="2px" width="16" height="16" style="vertical-align: middle;" alt="Mark as Public" src="' + _images_root + 'silk/lock_open.png"/>Mark as Public'
	+ '</label>'
	+ '<br/>'
	+ '<input id="privacy_save" class="sm_button" type="button" value="SAVE" style="margin-top: 3px;"/>'
	+ '<img margin-left="2px" margin-right="2px" width="10" height="10" style="display: none; margin-top: 3px;" id="privacy_progress" src="' + _images_root + 'tidbits/progress.gif' + '">'
	+ '</div>'
// LICENSE
	+ '<div id="ed_hdr_license" class="itghdr">'
	+ '<span style="float: right;"><a onclick="this.blur(); toggleSection(\'license\');" class="iconlink" href="javascript: void(0);"><img id="ed_toggle_license" src="' + _images_root + 'silk/bullet_toggle_plus.png' + '"></span>'
	+ '<h4><a onclick="this.blur(); toggleSection(\'license\');" class="smalllink_ltgrey" href="javascript: void(0);">License</a></h4>'
	+ '</div>' 
	+ '<div id="ed_content_license" class="itgcontent" style="display: none;" >'
	+ '<select id="license_edit" style="font-size: x-small;" name="license_edit">'
	+ '<option selected="" value="0">None (All rights reserved)</option>'
	+ '<option value="1">Attribution License</option>'
	+ '<option value="2">Attribution-NoDerivs License</option>'
	+ '<option value="3">Attribution-NonCommercial-NoDerivs License</option>'
	+ '<option value="4">Attribution-NonCommercial License</option>'
	+ '<option value="5">Attribution-NonCommercial-ShareAlike License</option>'
	+ '<option value="6">Attribution-ShareAlike License</option>'
	+ '</select>'
	+ '<br/>'
	+ '<input id="license_save" class="sm_button" type="button" value="SAVE" style="margin-top: 3px;"/>'
	+ '<img style="display: none; margin-top: 3px;" id="license_progress" src="' + _images_root + 'tidbits/progress.gif' + '">'
	+ '</div>'
// ROTATE
	+ '<div id="ed_hdr_rotate" class="itghdr">'
	+ '<span style="float: right;"><a onclick="this.blur(); toggleSection(\'rotate\');" class="iconlink" href="javascript: void(0);"><img id="ed_toggle_rotate" src="' + _images_root + 'silk/bullet_toggle_plus.png' + '"></span>'
	+ '<h4><a onclick="this.blur(); toggleSection(\'rotate\');" class="smalllink_ltgrey" href="javascript: void(0);">Rotate / Delete</a></h4>'
	+ '</div>' 
	+ '<div id="ed_content_rotate" class="itgcontent" style="display: none;" >'
	+ '<a id="delete_save" class="iconlink" title="Delete Photos" alt="Delete Photos" href="javascript:void(0);"><img title="Delete Photos" alt="Delete Photos" src="' + _images_root + 'silk/cross.png"> Delete Photos</a>'
	+ '<img class="iconlink" width="10" height="10" style="display: none;" id="delete_progress" src="' + _images_root + 'tidbits/progress.gif' + '">'
	+ '<br/><a id="rotate_ccw_save" class="iconlink" title="Rotate Photos 90°CCW" alt="Rotate Photos 90°CCW" href="javascript:void(0);"><img title="Rotate Photos 90°CCW" alt="Rotate Photos 90°CCW" src="' + _images_root + 'silk/arrow_rotate_anticlockwise.png"> Rotate Photos 90°CCW</a>'
	+ '<img class="iconlink" width="10" height="10" style="display: none;" id="rotate_ccw_progress" src="' + _images_root + 'tidbits/progress.gif' + '">'
	+ '<br/><a id="rotate_cw_save" class="iconlink" title="Rotate Photos 90°CW" alt="Rotate Photos 90°CW" href="javascript:void(0);"><img title="Rotate Photos 90°CW" alt="Rotate Photos 90°CW" src="' + _images_root + 'silk/arrow_rotate_clockwise.png"> Rotate Photos 90°CW</a>'
	+ '<img class="iconlink" width="10" height="10" style="display: none;" id="rotate_cw_progress" src="' + _images_root + 'tidbits/progress.gif' + '">'
	+ '</div>'
	+ '</div>'
// META
	+ '<div id="metaEditor" style="display: none">'
	+ '<div id="ed_hdr_meta" class="itghdr">'
	+ '<h4>Title / Description</h4>'
	+ '</div>'
	+ '<div id="ed_content_meta" class="itgcontent" >'
	+ '<label for="photoTitle" style="margin-right: 3px;">Title</label>'
	+ '<input type="text" id="photoTitle" size="30">'
	+ '<input type="hidden" id="photoID">'
	+ '<div id="photoPlaceholder"></div>'
	+ '<label for="photoDescription" style="display: block;">Description</label>'
	+ '<textarea id="photoDescription" rows="8" style="width: 95%;" ></textarea>'
	+ '<br/><input id="meta_save" class="sm_button" type="button" value="SAVE" style="margin-top: 3px;"/>'
	+ '<img style="display: none; margin-left: 3px;" id="meta_progress" src="' + _images_root + 'tidbits/progress.gif' + '">'
	+ '<input id="meta_cancel" class="sm_button" type="button" value="CANCEL" style="margin-left: 3px;"/>'
	+ '</div>'
	+ '</div>';

$('content').appendChild(organizerEditor);

/* Hook up the buttons */
$('labels_save').addEventListener('click', saveLabels, false);
$('privacy_save').addEventListener('click', savePrivacy, false);
$('license_save').addEventListener('click', saveLicense, false);

$('delete_save').addEventListener('click', deletePhotos, false);
$('rotate_ccw_save').addEventListener('click', function() {rotatePhotos('ccw'); }, false);
$('rotate_cw_save').addEventListener('click', function() {rotatePhotos('cw'); }, false);


$('search_button').addEventListener('click', searchPhotos, false);
$('photoset_get').addEventListener('click', getPhotoSetPhotos, false);
$('getall_button').addEventListener('click', function() { getPhotos(false); }, false);

$('meta_save').addEventListener('click', saveEditPhoto, false);
$('meta_cancel').addEventListener('click', cancelEditPhoto, false);


/*
	Toggles the Select All
*/
unsafeWindow.toggleAll = function() {
	var photoCheckboxes = $$('input.PhotoSelector');
	for (var i = 0; i < photoCheckboxes.length; i++) {
		photoCheckboxes[i].checked = $('selectall').checked;
	}
}

/*
	Get all photos
*/
var successGetPhotos = function(t) {
	var data = json_parse(t.responseText);
	$('getall_button').show();
	$('getall_progress').hide();
	renderPhotoListing(data, MODE_GETALL);
}

/* 
	Search photos
*/
var successSearchPhotos = function(t) {
	$('search_button').show();
	$('search_progress').hide()
	var data = json_parse(t.responseText);
	renderPhotoListing(data, MODE_SEARCH);
}

/*
	Get Photoset photos
*/
var successGetPhotosetPhotos = function(t) {
	$('photoset_get').show();
	$('photoset_progress').hide()
	var data = json_parse(t.responseText);
	data.photos = data.photoset;
	renderPhotoListing(data, MODE_PHOTOSET);
}


// Load photos
unsafeWindow.setTimeout(
	function() { getPhotos(true); }
	, 1);

// Load sets
unsafeWindow.setTimeout(
	function() { 
		$('photoset_progress').show();
		$('photoset_get').hide();
		getSmartSetsList(1); 
	}
	, 1);

})();