/* Copyright (c) 2006-2007, Apple Inc. All rights reserved. */
function prepare(inAlwaysRun) {
	if (window.unitTestHandler && (!inAlwaysRun)) return true;
	drawTooltips();
	localizeDocument('comments');
	var isNewPage = /notify=new_page_confirm/.test(d.cookie);
	server();
	serverui();
	gPoofManager = new PoofManager();
	gNotifier = new Notifier();
	gToolbar = new Toolbar();
	gPopupManager = new PopupManager();
	gNewPageDialogManager = new NewBlogDialogManager();
	gImageThumbnailManager = new ImageThumbnailManager();
	gCommentManager = new CommentManager('comments');
	if ($('wysiwyg_container')) {
		gLinkSearchDialogManager = new LinkSearchDialogManager();
		gLinkPopupManager = new LinkPopupManager();
		gEditor = new WLTEditor('wysiwyg_container', {mSelectOnEdit:isNewPage, mHasSaveComment:false});
	}
	if (/\/_/.test(CollabUID.sharedInstance().mValue)) {
		gToolbar.mChildren.edit.setEnabled(false);
		gToolbar.mChildren.add.setCallback(gNewPageDialogManager.handleAddButtonClick.bind(gNewPageDialogManager));
		gToolbar.mChildren.add.setEnabled(true);
		gToolbar.mChildren.remove.setEnabled(false);
	}
	else if (CollabUID.sharedInstance().mValue != 'none/none') {
		gToolbar.mChildren.edit.setCallback(gEditor.handleEditButtonClick);
		gToolbar.mChildren.add.setCallback(gNewPageDialogManager.handleAddButtonClick.bind(gNewPageDialogManager));
		gToolbar.mChildren.remove.setCallback(gToolbar.mChildren.remove.clickedButtonCallback.bind(gToolbar.mChildren.remove));
		gToolbar.mChildren.remove.mIsVersioned = false;
		gToolbar.mChildren.remove.setEnabled(true);
		//gTOCGenerator = new TOCGenerator(); // temp removal per ##5394209
	}
	else {
		gToolbar.mChildren.edit.setEnabled(false);
		gToolbar.mChildren.add.setEnabled(false);
		gToolbar.mChildren.remove.setEnabled(false);
	}
	gAttachmentExpander = new AttachmentExpander();
	gQTMediaExpander = new QTMediaExpander();
	gLinkPreviewGenerator = new LinkPreviewGenerator();
	if ($('apple_collab_tags') && (!$('login_link')) && CollabUID.sharedInstance().mItemName != '_weblogEntries') gTagger = new Tagger('apple_collab_tags');
	if (isNewPage) gEditor.handleEditButtonClick();
	gSearchPopup = new SearchPopup();
	if ($('blogNavCalendar')) gWeblogDisplayNavigator = new WeblogDisplayNavigator();
	if ($('entries_list')) gPaginator = new Paginator($('entries_list').parentNode);
	else if ($('paginator')) gWeblogEntryPaginator = new WeblogEntryPaginator();
	// ##5407269
	if ($$('.personalWeblogEntries #content_extras_column').length > 0) publisher().subscribe(function() {
		var reloadCallback = function(inResult) {
			if (inResult && $('blogNavCalendar')) gWeblogDisplayNavigator = new WeblogDisplayNavigator();
		}
		Element.reload('content_extras_column', reloadCallback);
	}, 'AUTHENTICATED');
	window.onbeforeunload = function(){return eval("documentShouldUnload()")};
}

// ugly loc workarounds here - strings are in JS strings instead of server strings
var WeblogEntryPaginator = Class.create();
WeblogEntryPaginator.prototype = {
	initialize: function(/*[options]*/) {
		if (arguments.length > 0) Object.extend(this, arguments[0]);
		if ($('paginator_up')) $('paginator_up').title = Loc.tooltips.up_blog;
	}
}

var WeblogDisplayNavigator = Class.create();
WeblogDisplayNavigator.prototype = {
	initialize: function() {
		var currentFromDate = createDateObjFromISO8601($F('blogNavFromDate'));
		$('blogNavCalendar').onclick = invalidate;
		$('blogNavType_byDate').checked = currentFromDate;
		this.mDatePicker = new DatePicker('blogNavCalendar', {mSelectedDate:currentFromDate ? currentFromDate : new Date()});
		this.mDatePicker.subscribe(this.handleDateChanged.bind(this));
		if (!currentFromDate) {
			replaceElementContents('blogNavCalendar', Loc.choose_date_button);
		}
		$('blogNavType_byDate').onchange = function() {
			if ($F('blogNavType_byDate') == 'byDate') {
				this.mDatePicker.show();
			}
			else {
				$('blogNavFromDate').value = '';
				$('blogNavToDate').value = '';
				$('blogNavFromDate').form.submit();
			}
			return false;
		}.bind(this);
	},
	handleDateChanged: function() {
		var dt = this.mDatePicker.mSelectedDate;
		var dtStr = [padNumberStr(dt.getFullYear(), 4), padNumberStr(dt.getMonth()+1, 2), padNumberStr(dt.getDate(), 2)].join('-');
		$('blogNavType_byDate').checked = true;
		$('blogNavFromDate').value = dtStr;
		$('blogNavToDate').value = dtStr;
		$('blogNavFromDate').form.submit();
	}
}

var NewBlogDialogManager = Class.create();
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();
		}
	}
});

function documentShouldUnload() {
	if (($('wysiwyg_container') && window.gEditor && window.gEditor.mEditMode) || server().isSavingSomething()) {
		return Loc.unloadConfirm;
	}
}

// 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');