/* Copyright (c) 2006-2009, Apple Inc. All rights reserved. */

Toolbar.autocreate = true; // because we turned it off in search.js

var WeblogListingPage = Class.createWithSharedInstance('weblogListingPage', true);
WeblogListingPage.prototype = {
	initialize: function() {
		if (!Element.hasClassName(d.body, 'weblogEntries')) return invalidate;
		wikitoolbar().mChildren.add.setCallback(newPageDialog().handleAddButtonClick.bind(newPageDialog()));
		this.mPaginator = new Paginator($('entries_list').parentNode);
	}
}

var WeblogEntryPage = Class.createWithSharedInstance('weblogEntryPage', true);
WeblogEntryPage.prototype = {
	initialize: function() {
		if (!Element.hasClassName(d.body, 'weblogEntry')) return invalidate;
		wikiEditor().mHasSaveComment = false;
		wikitoolbar().mChildren.remove.mIsVersioned = false;
	}
}

var WeblogDisplayNavigator = Class.createWithSharedInstance('weblogDisplayNavigator', true);
WeblogDisplayNavigator.prototype = {
	initialize: function() {
		if (!$('wikid').hasClassName('weblogEntries')) return invalidate;
		// ##5407269 -- rebuild the sidebar on the user home when the user authenticates
		publisher().subscribe(this.handleAuthenticated.bind(this), 'AUTHENTICATED');
	},
	handleAuthenticated: function() {
		if ($('content_extras_column')) {
			var cleanupLater = this;
			WeblogDisplayNavigator['_sharedInstance'] = null;
			Element.reload('content_extras_column', weblogDisplayNavigator); // send the shared instance function as the callback
		} else {
			notifier().printAtPage('loggedIn');
		}
	}
}

var NewBlogDialogManager = Class.createWithSharedInstance('newPageDialog'); // override NewPageDialogManager shared instance entirely
Object.extend(Object.extend(NewBlogDialogManager.prototype, NewPageDialogManager.prototype), {
	initialize: function() {
		bindEventListeners(this, ['handlePodcastCheckboxClick']);
		var dialogFields = [{label:'new_page_dialog_title', contents:'<input name="title" id="new_page_title" type="text" size="30" />'}];
		if (getMetaTagValue('apple_collab_podcast_enabled') == 'true') {
			dialogFields.push({label:'weblog_new_page_podcast', contents:'<label for="new_page_is_podcast"><input type="checkbox" id="new_page_is_podcast" /><span id="new_page_podcast_blurb">'+Loc.weblog_new_page_is_podcast+'</span></label><input type="file" name="Attachment" id="new_page_podcast_file" style="display:none" /><input type="hidden" name="upload_id" id="new_page_upload_id" />'});
		}
		this.mElement = dialogManager().drawDialog('new_page_dialog', dialogFields, 'new_page_dialog_ok', uid().mBaseLocation+'weblog-post');
		if ($('new_page_is_podcast')) $('new_page_is_podcast').onchange = this.handlePodcastCheckboxClick;
		// Safari doesn't respond to onsubmit for file upload forms; see ModalDialogManager class for more info
		if (SafariFixes.isWebKit) Event.observe(this.mElement.firstChild, 'submit', targetedDialogManager().handleOKClick);
	},
	handlePodcastCheckboxClick: function(inEvent) {
		var enable = $F('new_page_is_podcast');
		$('new_page_podcast_blurb').style.display = enable ? 'none' : '';
		$('new_page_podcast_file').style.display = enable ? '' : 'none';
		targetedDialogManager().mAllowSubmission = enable;
		// Safari doesn't respond to onsubmit for file upload forms; see ModalDialogManager class for more info
		if (SafariFixes.isWebKit) Event[enable?'stopObserving':'observe'](this.mElement.firstChild, 'submit', targetedDialogManager().handleOKClick);
	},
	super_showNewPageDialog: NewPageDialogManager.prototype.showNewPageDialog,
	showNewPageDialog: function(inOptCallback) {
		addUploadFrame();
		// increment the upload id
		if ($('new_page_upload_id')) $('new_page_upload_id').value = ''+server().getNextUploadID();
		this.super_showNewPageDialog(inOptCallback);
	},
	super_handleNewPageDialogOK: NewPageDialogManager.prototype.handleNewPageDialogOK,
	handleNewPageDialogOK: function() {
		if ($('new_page_podcast_file') && $('new_page_podcast_file').value) {
			this.mRetryCount = 0;
			var form = this.mElement.firstChild;
			var uploadCompleteCallback = function(inProgressObj, inUploadInfo) {
				removeUploadFrame();
				if (inUploadInfo.retry) {
					if (this.mRetryCount++ >= 3) {
						dialogManager().hide();
						alert(Loc.attach_upload_error);
					}
					else {
						debug_message('Upload failed. Retrying...');
						addUploadFrame();
						$('new_page_upload_id').value = ''+server().getNextUploadID();
						form.submit();
						this.mUploadProgress = new UploadProgressPlaceholder(dialogManager().mProgressBar, $F('new_page_upload_id'), uploadCompleteCallback.bind(this));
					}
				}
				else if (inUploadInfo.uploaded && inUploadInfo.uploaded > 0) {
					dialogManager().hide();
					// fake a new page response for the superclass
					this.gotNewPageResponse({}, {uid:inUploadInfo.uid});
				}
				else if (inUploadInfo.fileSizeError) {
					dialogManager().hide();
					alert(String.format(Loc.attach_upload_toobig_error, {maxFileSize:inUploadInfo.maxFileSize}));
				}
				else {
					dialogManager().hide();
					alert(Loc.attach_upload_nofile_error);
				}
			}
			var uploadCancelledCallback = function() {
				removeUploadFrame();
				dialogManager().hide();
				if (this.mUploadProgress) {
					this.mUploadProgress.destroy();
					delete this.mUploadProgress;
				}
			}
			dialogManager().showProgressMessage('weblog_podcast_progress_message', true, uploadCancelledCallback.bind(this));
			this.mUploadProgress = new UploadProgressPlaceholder(dialogManager().mProgressBar, $F('new_page_upload_id'), uploadCompleteCallback.bind(this));
		}
		else {
			this.super_handleNewPageDialogOK();
		}
	}
});

// use blog-specific strings
['delete_page_confirm_header', 'delete_page_progress', 'page_deleted_message', 
		'new_page_dialog_header', 'new_page_dialog_title', 'new_page_progress',
		'new_page_confirm'].each(function(s) {
	Loc[s] = Loc['weblog_'+s];
});
['edit_button', 'add_button', 'remove_button', 'prev_button', 'next_button'].each(function(s) {
	Loc.tooltips[s] = Loc.tooltips[s+'_weblog'];
});

if (window.loaded) loaded('weblog.js');