/**
 * @author abhaga
 */
var wait_message = 'My Message';
var help_message = 'Little help';
var bcodeMsg = '<p>Book Code is a unique id assigned to files generated for you. During beta phase, these files will be maintained for one month. </p><p>Please note down the book code for ordering the printed copies of your book later. If you are providing feedback as a beta tester, then please quote the book code in your feedback form. It will help us analyze the issues reported better.</p>'
+'<p><a href="/faq#how-get-print-copy">How do I order printed copies of my book?</a></p> ';
var auth_status = false;
var wp_regex = new RegExp("\.(wordpress|blogsome)\.com(/|$)");
var blogger_regex = new RegExp("\.blogspot\.com(/|$)");
var unsupported_regex = new RegExp("\.(livejournal|typepad)\.com(/|$)");
var host_unsupported = false;
var br = null;
//---------------------
var img_url = null;
var oauth = false;
var message = null;
//---------------------

var Pdf_Error_Messages = {
						  'SERVER_ERROR':'PDF conversion failed. Sorry for inconvenience.\nPlease try again later.',
                          'NO_POSTS_SELECTED' : 'One or more posts should be selected for generating PDF.'
						 };

$(document).ready(function(){
	// set up the tabs
	$('#app').tabs();
	$('#app').data('disabled.tabs',[1,2,3]);

	//create_captcha();
	setupCoverDialog();
	$('#chooseCover').click(function(){
		$('.theme-dialog').dialog('open').show();
		return false;
	});
		
	$('#save-book').click(function(){
		
		save_data = "blog_url="+$('#blog-url').val()+'&blogbook_name='+$('#blogbook_name').val()+'&bookhash='+$('#blogbook_hash').val() +'&pages='+$('#blogbook_pages').val();
		
		auth_ajax({
			type: 'post',
			dataType: 'json',
			url: '/save_book',
			data: save_data,
			success: function(data, textStatus){
				alert('Book saved... !!');
				window.location.href = '/dashboard';
			},
			error: function(XMLHttpRequest, textError, exception){
				$('#error-msg').html('BookSmith is erring. Please try again.').show();
			},
			complete:	function(){
				$('.wait-dialog').dialog('close');
			}
		});
		return false;
	});
			
	//Set up clearing input
	$('#blog-url').clearingInput({text:'Enter the blog address'});
	
	//Set up the date picker
	$("#from-date").datepicker({changeYear: true, yearRange: '-50:+50'});	
	$("#to-date").datepicker({changeYear: true, yearRange: '-50:+50'});

	// Disable the default form submit to stop form submitting when pressing
	// enter in webkit based browsers
	$('#options-form').submit(function(){
		$('#blog-url').val($('#blog-url').val().replace(/^\s*http:\/\//,""));  // rohith: remove end '/' if its der
		$('#fetch-posts').trigger('click');
		return false;
	});
	// show the options on selection of corrosponding radio button
	$('#fetch-options input:radio').click(function(){
		$('#fetch-options input:radio[checked!=checked]').siblings('.options').hide("fast");
		$(this).siblings('.options').show("fast");
	}).filter(':checked').trigger('click');

	// remove the error classes and any messages when blog-url changes
	$('#blog-url').change(function(){
		$('#options-form :input').removeClass('error');
		$('#error-msg').hide('fast');
		$('#auth-msg').removeClass().hide();
		$('#app').data('disabled.tabs',[1,2,3]);
		auth_status = false;
		host_unsupported = false;
		oauth = false;
		// Reset everything on the customize tab
		reset_customize_tab();
		// Do this to account for cases where address is selected by clicking
		// on one of the previously filled values shown by browser
		$('#blog-host').val(guess_host_from_address($(this).val()));
	}).keyup(function(){
		$(this).removeClass('error');
		$('#blog-host').val(guess_host_from_address($(this).val()));
	}).blur(function(){
		// strip out http:// from the address
		$(this).val($(this).val().replace(/^\s*http:\/\//,""));
		$('#blog-host').val(guess_host_from_address($(this).val()));
	});
	
	$('#blog-host,#blogUser,#blogPass').change(function(){
		$(this).removeClass('error');
	});
	
	// Fetch the posts
	$("#fetch-posts").click(function () {
	
		
		if ($('#blog-url').hasClass('blur')) {
			$('#blog-url').val('');
		}
		
		// validate the form
		if (!validate_feed_form()) {
			return false;
		}
		
		var url = get_options_form_url();
		if(!url){
			return false;
		}
		
		// Show the wait dialog with appropriate message
		wait_message = "Fetching posts..";
		$('.wait-dialog').dialog('open').show();

		// Call is clear. Remove any error messages.
		$('#error-msg').hide('medium');

		var formData = $("#options-form").serialize();
		
		$.ajax({
			type: 'post',
			dataType: 'json',
			url: url,
			data: formData,
			success: function(data, textStatus){
				process_fetch_posts_data(data);
			},
			error: function(XMLHttpRequest, textError, exception){
				$('#error-msg').html('BookSmith is erring. Please try again.').show();
			},
			complete:	function(){
				$('.wait-dialog').dialog('close');
			}
		});		
		return false;
	});

	// Set up the post selecting checkboxes
	$('.post-select').live('click',function(){
		if ($(this).attr('checked')) {
			$(this).parent().addClass('checked').siblings().addClass('checked');		
		}
		else {
			$(this).parent().removeClass('checked').siblings().removeClass('checked');
		}
		update_num_selected();
	});
	
	// Set up the optional pages dialogs
	setup_optional_page_dialog('dedication');
	setup_optional_page_dialog('preface');
	setup_preface_clearingInput();
	setup_dedication_clearingInput();
	setup_pdf_gen_submit();
	if (message != null) setup_redirect_after_oauth(message);
	
	
});

function reset_customize_tab(){
	$('#imageCheck').attr('checked','');	
	$('#dateCheck').attr('checked','');
	$('#viewerTitle').val('');
	$('#viewerSubTitle').val('');
	$('#viewerAuthor').val('');
	$('#prefaceBodyText,#prefaceHeadText,#prefaceSignText,#prefaceBody,#prefaceHead,#prefaceSign,#dedicationText,#dedication').val('');
	$('#prefaceButtonAdd,#dedicationButtonAdd').show();
	$('#prefaceButtonEdit,#dedicationButtonEdit').hide();
}

function get_options_form_url(){
	var url = '';
	
	if(!auth_status){		
		url = "/app/";
	}
	else if(auth_status == 'required'){
		url = '/rpc';
	}
	else if(auth_status == 'optional'){
		
		if(oauth || $('#auth-msg :checked').val() == 'cnt'){
			$('#app').data('disabled.tabs',[3])
			.tabs('select',1);
			return false;
		}else if($('#auth-msg :checked').val() == 'ba'){
			url = "/rpc";
		}			
	}	
	return url;
}

function validate_feed_form(){
	// client side validation for feed form
	var html = '';
	var address = $('#blog-url').removeClass('error');
	if(host_unsupported){
		address.addClass('error');
		return false;
	}
	if(address.val() === ''){
		address.addClass('error');
		html += '<li>Please enter a blog address</li>';
		$('#error-msg').html('<ul>'+html+'</ul>').show('fast');
		return false;
	}

	var host = $('#blog-host').removeClass('error');
	var guessed_host = guess_host_from_address(address.val());
	if($('#blog-host').val() === ''){
		html += '<li>Please select the blogging platform</li>';
		host.addClass('error');
	}
	else if(guessed_host !== '' && guessed_host !== $('#blog-host').val()){
		html += '<li>Blog address and selected platform do not match.</li>';
	}

	if(auth_status == 'required' || (auth_status == 'optional' && $('#auth-msg :checked').val() == 'ba')){
		// username and password should not be empty
		if($('#blogUser').val() === ''){
			html += '<li>Please enter blog\'s username</li>';
			$(this).addClass('error');
		}
		if($('#blogPass').val() === ''){
			html += '<li>Please enter blog\'s password</li>';
			$(this).addClass('error');
		}
	}
	if (html === '') {
		$('#error-msg').hide();
		return true;
	}
	else {
		html = '<ul>'+html+'</ul>';
		$('#error-msg').html(html).show('fast');
		return false;
	}
}

function process_fetch_posts_data(data){
	switch(data.status){
		case 'error':			
			$('#'+data.field).addClass('error');
			$('#error-msg').html(data.msg).show('fast');
			if( data.isnewcaptcha == 'True' ){
				//destroy_captcha();
				create_captcha();
			}
			return;
		case '401':
		case '403':
			auth_status = 'required';
			//destroy_captcha();
			$('#auth-msg').html(data.msg).addClass('error').show('fast');
			return;
		case '404':
			$('#error-msg').html(data.msg).addClass('error').show('fast');
			return;
		case '200P':
		case '302P':
		case '307P':
		case '307':	
			//destroy_captcha();			
			auth_status = "optional";
			$('#auth-msg').html(data.msg).addClass('notice').show('fast');
			setup_posts_manager(data);
			setup_customize_options(data);
			return;
		case '301':
		case '302':
		case '200':
			//destroy_captcha();
			setup_posts_manager(data);
			setup_customize_options(data);			
			break;
		default:
			alert('Unknown response from server');
			return;
	}
	//enable tabs
	$('#app').data('disabled.tabs',[3]);
	// Switch the tabs
	$('#app').tabs('select',1);
}

function setup_customize_options(data){
	$('#viewerTitle').val(data.title);
}

function setup_posts_manager(data){
	// Show the returned data
	$('#posts-manager-main').html(data.html).show();
	setup_check_all_checkbox();
	if ($('#posts-table tbody tr').length > 0) {
		$('#posts-table').sortable({
			axis: 'y',
			scroll: true,
			items: 'tr:gt(0)',
			handle: 'td.pm_title',
			opacity: 0.6
		}).tablesorter({
			sortList: [[3, 1]],
			headers: {
				0: {
					sorter: false
				},
				1: {
					sorter: false
				},
				2: {
					sorter: false
				},
				4: {
					sorter: false
				}
			}
		}).bind('sortEnd', function(){
			$(this).sortable('refreshPositions');
		});
	}
	$('#customize-book-top,#customize-book-bottom').click(function(){
		$('#app').tabs('select',2);
		return false;
	});
	// To start with let us select all the posts
	// This weired combination of steps is required because when normally clicking
	// a checkbox, we get the checked attribute = after state of the checkbox.
	// But triggering a click event in program, returns current status. 
	// Also this must be done here else IE6 cannot find the checkboxes in the DOM
	$("#post-select-all").attr('checked',true).trigger('click');
	$('#posts-table :check').attr('checked',true);
}

function setup_optional_page_dialog(name){
	$('#'+name+'Dialog').dialog({
		modal: true,
		autoOpen: false,
		overlay: { 'background-color': 'gray', 'opacity': 0.5 },
		width: 450,
		height: 350,
		buttons: {
			'Delete': function(){
				$('#'+name+'Dialog').find(':text, textarea').each(function(){
					$('#'+$(this).attr('id')+'Text').val('');
					if (!$(this).hasClass('blur')) {
						$(this).val('');
					}
				});
				$('#'+name+'Dialog').dialog('close');
				$('#'+name+'ButtonAdd').show();
				$('#'+name+'ButtonEdit').hide();
			},
			'Cancel': function(){
				$('#'+name+'Dialog').find(':text, textarea').each(function(){
					if ($(this).hasClass('blur')) {
						return;
					}
					$(this).val($('#'+$(this).attr('id')+'Text').val());
				});
				$('#'+name+'Dialog').dialog('close');
			},
			'Save': function(){
				$('#'+name+'Dialog').find(':text, textarea').each(function(){
					// Don't save values if the field is empty
					if($(this).hasClass('blur')){return;}
					$('#'+$(this).attr('id')+'Text').val($(this).val());
				});
				$('#'+name+'Dialog').dialog('close');
				$('#'+name+'ButtonAdd').hide();
				$('#'+name+'ButtonEdit').show();				
			}
		},
		open: function(event,ui){
			//[TODO] Is this safe? What if there is a event handler on blur?
			$(this).find(':input').blur();
		}
	});
	$('#'+name+'ButtonAdd').click(function(event){
		$('#'+name+'Dialog').dialog('open').show();
		return false;
	});
	$('#'+name+'ButtonEdit').click(function(event){
		$('#'+name+'Dialog').dialog('open').show();
		return false;
	}).hide();
	$('#ui-dialog-title-'+name+'Dialog').find('ui-dialog-titlebar-close').hide();
}

function setup_preface_clearingInput(){
	$('#prefaceHead').clearingInput({text: 'Enter address e.g. Dear Readers'});
	$('#prefaceBody').clearingInput({text: 'Enter preface text'});
	$('#prefaceSign').clearingInput({text: 'Enter signature\ne.g. Sincerely\n<name>'});
}

function setup_dedication_clearingInput(){
	$('#dedication').clearingInput({text: 'Enter dedication.\ne.g. Dedicated to <name>'});
}


function setup_pdf_gen_submit(){
	$("#pdf-gen").click(function () {
		// show wait dialog with suitable message
		wait_message = "Creating your book! This may take few minutes depending on the number of blog entries.";
		$('.wait-dialog').dialog('open').show();
		$("#pdf-gen").attr('disabled','disabled');
		$.ajax({
			type: 'post',
			dataType: 'json',
			url: '/viewer',
			data: $("#posts-manager").serialize()+"&"+$("#posts-table").sortable('serialize')+'&'+$("#custom-options").serialize(),
			success: function(data, textStatus){
				// Enable finish tab
				$('#app').data('disabled.tabs',[]);

				// Display the scribd preview
				$('#app').tabs('select',3);
				$('#blogbook_hash').val(data.url);
				$('#blogbook_price').val(data.price);
				$('#blogbook_pages').val(data.pages);

				setupBookReader( data.pages, data.baseimageurl, data.title);
			},
			error: function(XMLHttpRequest, textError, exception){				
				alert(Pdf_Error_Messages[XMLHttpRequest.responseText]);
			},
			complete:	function(){
				$("#pdf-gen").removeAttr('disabled');
				$('.wait-dialog').dialog('close');
			}
		});
		return false;
	});
}

 
function setup_check_all_checkbox(){
	$("#post-select-all").click(function () {
		// [TODO] Slow, need to improve
		var checked = $(this).attr('checked');
		$("#posts-table .post-select").attr('checked',checked);
		var tds = $("#posts-table tbody td");
		if(checked){
			tds.addClass('checked');
		}
		else{
			tds.removeClass('checked');
		}
		update_num_selected();
	});
}

function update_num_selected(){
	var num = $('#posts-table .post-select:checked').length;
	if(num === 0){
		$('#num-selected-wrap').hide();
	}
	else if(num == 1){
		$('#num-selected').text(num+' post').parent().show();
	}
	else{
		$('#num-selected').text(num+' posts').parent().show();		
	}	
}


function setupCoverDialog()
{
	
	window.themesPanelLoaded = false;
	
	var content = '<div id="theme-dialog-content">';
	content += 'Fetching covers';
	content += '<div id="spinner-div"><img src="/site_media/images/spinner.gif"></div>';
	content += '</div>';
	$(content).addClass('theme-dialog').dialog({
		modal: true,
		autoOpen: false,
		height: 540,
		width: 850,
		resizable: false,
		dialogClass: 'theme-dialog-container',
		title: 'Cover Selector',
		overlay: { 'background-color': 'gray', 'opacity': 0.5 },
		buttons: {
			'Select': function(){
				$('#covername').val(window.covername);
				if(window.covername=="08" && img_url!=null)$('#cover_thumbnail').html('<img src="'+img_url+'/preview.jpg" alt="thumbnail" style="width:100px;height:69px">');
				else $('#cover_thumbnail').html( '<img src="/site_media/core/cover_templates/'+window.covername+'/thumbnail.jpg">' );
				$('.theme-dialog').dialog('close');
			},
			'Cancel': function(){
				$('.theme-dialog').dialog('close');				   		
			}
			
			
		},
		open: function(Event,ui){			
			
			if ( window.themesPanelLoaded == false) {
				$('#theme-dialog-content').load(
					'/get_imagegallery',
					function(){
						window.themesPanelLoaded = true;
						$('#uploadImage').hide();
						/*add default covername*/
						
					});
			}
			window.covername = $('#covername').attr("value");
			
			
		},
		close: function(Event, ui)
		{
			
		}	
	}).siblings('.ui-dialog-titlebar').css('font-size','60%');
	
	
}


function guess_host_from_address(address){
	if(wp_regex.test(address)){
		$('#blog-host').removeClass('error');
		return 'wordpress';
	}
	else if(blogger_regex.test(address)){
		$('#blog-host').removeClass('error');
		return 'blogspot';
	}
	else{
		if(unsupported_regex.test(address)){
			$('#guess-host-msg').html('Unsupported platform!').show('fast');
			host_unsupported = true;
		}
		else{
			$('#guess-host-msg').hide('fast');
			host_unsupported = false;
		}
		return '';
	}
}

function setupImageParams(){
	var img_find = null;
	$('img').each(function(){
		if($(this).attr('title') == '08'){
			img_find = $(this);
		}	
	});
	return img_find;	
}

function start_image_upload()
{
	$('#imageUploadForm').submit();
}

function stop_image_upload(message,image_url)
{
	if (message != "SUCCESS")
	{
		if(message == "INCORRECT TYPE")alert("The format is not allowed.");
		else if(message == "SIZE EXCEEDED")alert('Maximum allowed size of image is 3Mb.');
		else if(message=="ERROR")alert('The was some problem.');
		return;
	}
	
	var img_find = setupImageParams();
	img_url = image_url;
	image_url += '/preview.jpg';
	img_find.attr('src',image_url);
	$.galleria.activate(image_url);
}

function setup_redirect_after_oauth(__data__)
{
	if (__data__ == "unauth")
	{
		$('#auth-msg').html("Seems that you didn't authenticate. Please authenticate to create book.").addClass('error').show('fast');
		return;
	}	
	process_fetch_posts_data(__data__);
}


