
//-- Set up some variables

var sub = false;
var response = false;
var chapters = 0;
var customCount = 0;
var autosave = false;
var first = true;
var bookid = "";

var saveButton = false; // $('.save')

var last = false; // last chapter previewed

//-- Onready event!

function jsond(json)
{
  tocLoaded(json)
  removeSleep();
}

$(document).ready(function(){
    
    if($('#uuid').val() != "") {
       bookid = $('#uuid').val();
    }
    
    saveButton = $('.save');
    
    $.ajaxSetup({
      error: ajaxError
    });

    $.getScript(jsonLoad);
    
    $('#customTitle').keypress(enable);
    $('#editor').keyup(enable); 

    
    $('#addChapter, #add-content, #add-content a').css('cursor', 'pointer').click(function()
    {
        if(! saveButton.attr('disabled') && ! $('.fckeditor').is(':hidden'))
           if(! confirm('You didn\'t save!  Are you sure you want to do this?  You\'ll lose your unsaved changes!'))
                return false;

        //-- Show the editor, hide everything else
        
        $('.fckeditor').show();
        $('.content-preview-overflow').hide();
        $('.content-preview-info').hide();
        
        //-- Clear the content of the editor

        $('#editor').val("");
        $('#editor').focus();
        
        //-- Increase the count
        
        customCount++;

        //-- Set the title
        
        var title = "Your Custom Chapter";
        
        $('#customTitle').val(title);
        $('#customTitle').attr("data-altText", title);
        $('#customId').val("");

        //-- Create a new chapter
        
        if(autosave)
            clearTimeout(autosave);

        $('#content-preview .loadingEditor').show();
        
        $.post(proxy + '/create' ,
        {
            'book_uuid' : response.uuid,
            'content' : "",
            'title' : title,
            'format': 'json',
            'parse_format' : 'xhtml'
        }, customChapter, "json");

        saveButton.attr('disabled', true).val('Saving...');

        //-- Deselect all selected thingys
        
        $('.selected').removeClass("selected");
        $('#addChapter b').text('Add Another Custom Chapter');
        //$('#add-content').addClass("selected");

        return false;
    });

    $('.info_close').click(function(){$($(this).attr('href')).fadeOut();return false;});

    $('.more').click(function(){$($(this).attr('href')).fadeIn();$(this).hide();return false;});

    //-- Save custom content
    $('.save, .saveClose').click( saveChapter );

    $('#customTitle').focus(function()
    {
        if($(this).val().match(/Your Custom Chapter/))
            $(this).val("");
    }).blur(function()
    {
        if($(this).val() == "" && $(this).attr('data-altText'))
        {
            $(this).val($(this).attr('data-altText'));
            $('#title_' + $('#customId').val()).text($(this).attr('data-altText'));
        }
    }).keydown(function(e)
    {
        if(e.keyCode == 13)
        {
            $('#editor').focus();
            //FCKeditorAPI.GetInstance('FCKeditor1').Focus();
            return false;
        }
    }).keyup(function()
    {
        var size = 27;
        var title = $(this).val();
        if(title.length && title.length > size + 3) title = title.substr(0, size) + '&hellip;';
        
        $('#title_' + $('#customId').val()).html(title);
    });

    $('#content-preview-info a[href=#prev]').click( function(){
        var element = $('.selected').prev('li');
        if(element.length == 0)
            element = $('.selected').parent().parent().prev('li');

        if(element.length > 0)
            preview(element);

        return false;
    } );
    $('#content-preview-info a[href=#next]').click( function(){
        var element = $('.selected').next('li');
        if(element.length == 0)
            element = $('.selected').parent().parent().next('li');
        if(element.length == 0)
            element = $('.selected').parent().parent().parent().next('li');
        if(element.length == 0)
            element = $('.selected').parent().parent().parent().parent().next('li');

        if(element.length > 0)
            preview(element);
        return false;
    } );

    //-- Allow submit, but only after ToC is loaded

    $('.customization-controls button').hide().click(allowSubmit).attr('disabled', true);

});


function enable(self, e)
{
    saveButton.attr('disabled', false).val('Save');
    
    //$('#table-of-contents-load').html( $('#table-of-contents-load').html() + "<br />" + e.keyCode + " - " + e.which + " - " + e.charCode)
    //if((e.keyCode == 86) && e.ctrlKey == true) { setTimeout(function(){ WPro['editor'].cleanup(); }, 50); }

    clearTimeout(autosave);
    autosave = setTimeout(saveChapter, 2000);

    return true;
};

/*
function FCKeditor_OnComplete( editorInstance )
{
    editorInstance.Events.AttachEvent("OnPaste",paste);
    editorInstance.Events.AttachEvent("OnFocus",
        function() {
            $(FCKeditorAPI.GetInstance('FCKeditor1').EditorDocument).keypress(enable);
    });

}
*/

function saveChapter()
{
    if(autosave)
        clearTimeout(autosave);

    $.post(proxy + '/' + (($('#customId').val()) ? 'update' : 'create' ),
    {
        'book_uuid' : bookid,
        'content' : $('#editor').val().replace(/\n/g, '<br/>') ,
        'title' : $('#customTitle').val(),
        'format': 'json',
        'clean':'content',
        'parse_format' : 'xhtml',
        'uuid' : $('#customId').val()
    }, customChapter, "json");

    saveButton.attr('disabled', true).val('Saving...');
        
    if($(this).hasClass('saveClose'))
        preview((last) ? last : $('#table-of-contents-load .previewTitle:first'));

}   

//-- Don't let users leave without saying goodbye :)

window.onbeforeunload = confirmUnload;
function confirmUnload()
{
    if(!saveButton.attr('disabled') && !$('.fckeditor').is(':hidden'))
        return "Your book and custom chapters won't be saved!";
}

function allowSubmit()
{
    sub = true;
}

//-- Toggle open

function toggleOpen(img, val)
{
    var ul = $(img).parent().parent().children('ul:first');

    if($(img).attr('src').indexOf('right') > -1)
    {
        ul.show();
        $(img).attr('src', baseurl+'/i/ui/down.gif');
    }
    else if($(img).attr('src').indexOf('down') > -1)
    {
        ul.hide();
        $(img).attr('src', baseurl+'/i/ui/right.gif');
    }
}

//-- Count words

function countWords(y)
{
    var r = 0;
    a=y.replace(/\s/g,' ');
    a=a.split(' ');

    for (z=0; z<a.length; z++)
        if (a[z].length > 0) r++;

    return r;
}

//-- Check parent
function checkParent(e, count) {

    pE = e.parentNode;

    for(var i = 0;i < pE.childNodes.length; i++)
    {
        if(pE.childNodes[i].nodeName == "INPUT")
            pE.childNodes[i].checked = true;
    }

    if(count < 15 && e.className != "primary")
        checkParent(e.parentNode, count + 1);
}

//-- Toggle checked

function toggleChecked()
{
    var checked = ($(this).attr('checked')) ? true : false;
    var selector = "#" + $('#' + $(this).attr('id')).parent().parent().attr('id');
    var uuid = new Array();
    
    if(checked) $(selector).parents('li').children('.lContainer').children(':checkbox').each(function(){ $(this).attr('checked', checked); uuid += "," + $(this).attr('id').replace('uid_', ''); });
    $(selector + " input").each(function(){ $(this).attr('checked', checked);  uuid += "," + $(this).attr('id').replace('uid_', ''); });

    var type = '';
    
    if(checked) type = 'activate';
    else type = 'deactivate';
    
    $.post(site_url('action/uuidProxy'), {'uuids' : uuid, 'type':type, 'book_uuid':bookid}, "json");
    
    setTimeout(manageChecked, 10); // Kinda sorta threads stuff
    
    
}

function toggleSleepy()
{
    var checked = false;
    var uuid = new Array();
    
    $('.sleepy').each(function(){ $(this).attr('checked', checked);  uuid += "," + $(this).attr('id').replace('uid_', ''); });

    var type = '';
    
    if(checked) type = 'activate';
    else type = 'deactivate';
    
    $.post(site_url('action/uuidProxy'), {'uuids' : uuid, 'type':type, 'book_uuid':bookid}, "json");
    
    setTimeout(manageChecked, 10); // Kinda sorta threads stuff
    
    
}
//-- Fade Ope

function manageChecked()
{
    var previewSelected = 0;
    var previewTotal = 0;

    $('.content-preview-load>div').each(function()
    {
        var id = '#' + $(this).attr('id');
        var check = $(id.replace(/p/, 'uid'));

        if(check.attr('checked'))
        {
            $(id).removeClass('shaded');
            previewSelected += check.val() * 1;
        }
        else
            $(id).addClass('shaded');

        previewTotal += check.val() * 1;
    });

    previewCount(previewTotal, previewSelected);

    countPages();
}

//-- Count pages

function countPages() {
    var count = 0;

    $('#table-of-contents-load :checked, #customChaptersUl :checked :first').each(
        function() {
            count += Math.round($(this).attr('data-pages'));
            //alert($(this).attr('data-pages'))
            
    });

    var pages = Math.round(count / 310);
    
    $('#pageCount').text(pages + " pages");
}

//-- Preview

function previewAuto()
{
    preview(this);
    return false;
}

function preview(element)
{

    if(! saveButton.attr('disabled') && ! $('.fckeditor').is(':hidden'))
        if(! confirm('You didn\'t save!  Are you sure you want to do this?  You\'ll lose your unsaved changes!'))
            return false;

    $('#content-preview .loadingEditor').hide();
    
    $('.selected').removeClass("selected");
    $('.fckeditor').hide();
    $('.content-preview-overflow').show();
    $('.content-preview-info').show();

    var html = "";
    var selector = '#' + $(element).attr('id').replace(/(title|clickable)/, 'li');
    var previewSelected = 0;
    var previewTotal = 0;
    
    last = element;

    $(selector + ', ' + selector + ' .preview').each(function()
    {
        var id= $(this).attr('id').replace(/li_/, '');

        var eClass = "";
        if(! $('#uid_'+id).attr('checked'))
            eClass=" class=\"shaded\"";
        else
            previewSelected += $('#uid_'+id).val() * 1;

        previewTotal += $('#uid_'+id).val() * 1;

        html += "<div id=\"p_" + id + "\"" + eClass + ">" + $('#preview_'+id).html() + "</div>";
    });

    $(".content-preview-load").html(html);
    $(selector).addClass("selected");

    previewCount(previewTotal, previewSelected);

    document.getElementById('content-preview-overflow').scrollTop = 0;

    return false;
}

//-- Edit

function editAuto()
{
    edit(this);
    return false;
}

function edit(element, preserve)
{
    if(! saveButton.attr('disabled') && ! $('.fckeditor').is(':hidden'))
        if(! confirm('You didn\'t save!  Are you sure you want to do this?  You\'ll lose your unsaved changes!'))
           return false;

    $('.save[value=Saving...]').val('Saved!');

    $('.selected').removeClass("selected");
    $('.fckeditor').show();
    $('.content-preview-overflow').hide();
    $('.content-preview-info').hide();

    var selector = '#' + $(element).attr('id').replace(/title/, 'li').replace(/clickable/, 'li');

    var id= $(selector).attr('id').replace(/li_/, '');

    if(! preserve || preserve == undefined)
    {
        $('#editor').val( $('#preview_'+id).html().replace(/<br\s*\/?>/gi, '\n' ));
        $('#editor').focus();
        
        $('#customTitle').val($('#title_' + id).attr('title'));
        $('#customTitle').attr("data-altText", $('#title_' + id).attr('data-altText'));
        $('#customId').val(id);
        saveButton.attr('disabled', true);
    }

    $(selector).addClass("selected");

    return false;
}

//-- PreviewCount

function previewCount(previewTotal, previewSelected)
{
    var previewTotalS = '';
    var previewSelectedS = '';
    var previewTotalT = Math.round(previewTotal / 310);
    if(previewTotalT > 1 || previewTotal == 0) previewTotalS = 's';
    if(previewSelected == 0) previewSelectedT = 0;
    if(previewTotalT < 1) previewTotalT = "less than 1";
    else previewTotalT = "about " + previewTotalT;
    var previewSelectedT = Math.round(previewSelected / 310);
    if(previewSelectedT < 1) previewSelectedT = "less than 1";
    if(previewSelected == 0) previewSelectedT = 0;

    $('#previewTotal').text(previewTotalT + " page" + previewTotalS);
    if(previewSelected != previewTotal)
        $('#previewSelected').text(", with " + previewSelectedT + " selected");
    else
        $('#previewSelected').text("");
}

//-- Custom chapter

function customChapter(json)
{
    
    $('#customChaptersUl').show();

    $('.save[value=Saving...]').val('Saved!');

    $('#content-preview .loadingEditor').hide();

    var title = (json.title) ? json.title : '[No section title]';
    var size = 27;
    var titleShort = (title.length && title.length > size + 3) ? title.substr(0, size) + '&hellip;' : title;
    var content = (json.content) ? json.content : "";
    var count = 0;
    
    if($('#li_' + json.uuid).length == 0)
    {
        $('#customId').val(json.uuid);
        
        var li = document.createElement('li');
        var input = document.createElement('input');
        var span = document.createElement('span');
        var pages = document.createElement('span');
        var a = document.createElement('a');
        var div = document.createElement('div');
        var img = document.createElement('img');
        var lContainer = document.createElement('div');
        var rContainer = document.createElement('div');
        var clear = document.createElement('div');
        
        $(li).attr('id', 'li_' + json.uuid);
        $(li).addClass('preview');

        $(div).attr('id', 'preview_' + json.uuid);
        $(div).attr('style', 'overflow:hidden;display:none;');
        $(div).html(content);

        $(img).attr('src', baseurl+"/i/ui/white.gif");
        $(img).css({cursor:'pointer'});
        $(img).attr('data-alt', json.uuid);
        $(img).attr('alt', " ");
        $(img).addClass('treeToggle');

        count = content.split(" ").length;
        if(count < 1) count = 1;
        
        $(input).attr('value', count);
        $(input).attr("data-pages", count);
        $(input).attr('type', 'checkbox');
        $(input).attr('name', 'uid_' + json.uuid);
        $(input).attr('id', 'uid_' + json.uuid);
        $(input).attr('checked', json.active);
        $(input).click(toggleChecked);
        if(json.active) $(input).addClass('checked');
        
        $(a).addClass('previewTitle');
        $(a).attr('title', title);
        $(a).attr('href', '#preview_' + json.uuid);
        $(a).attr('id', 'title_' + json.uuid);
        $(a).attr('data-altText', title);
        $(a).html(titleShort);
        $(a).click( editAuto );

        var s = '';
        var p = Math.round(content.split(" ").length / 310);
        if(p > 1) s = 's';
        if(p < 1) p = '< 1';

        $(pages).text(' | ' + p + ' page' + s);
        $(pages).attr('id', 'pages_' + json.uuid);

        $(lContainer).css('float', 'left');
        $(lContainer).addClass('lContainer');
        $(rContainer).addClass('rContainer');
        $(rContainer).attr('id', 'clickable_' + json.uuid);
        $(rContainer).css('cursor', 'pointer');
        $(clear).css('clear', 'both');

        $(lContainer).append(img);
        $(lContainer).append(input);
        $(span).append(a);
        $(rContainer).append(span);
        $(rContainer).append(pages);
        $(rContainer).click( editAuto );

        $(li).append(lContainer);
        $(li).append(rContainer);
        $(li).append(clear);
        $(li).append(div);
        $('#customChaptersUl').append(li);
        $('#uid_' + json.uuid).attr('checked', true);
        
        edit($('#title_' + json.uuid), true);
    }
    else
    {

        count = content.split(" ").length;
        
        $('#title_' + json.uuid).html(titleShort);
        $('#title_' + json.uuid).attr('title', title);
        $('#preview_' + json.uuid).html(content);
        $('#uuid_' + json.uuid).val(count);
        $('#uuid_' + json.uuid).attr("data-pages", count);

        var s = '';
        var p = Math.round(count / 310);
        if(p > 1) s = 's';
        if(p < 1) p = '< 1';

        $('#pages_' + json.uuid).text(' | ' + p + ' page' + s);
    }
}

function countJson(json)
{
    var count=0;
    $.each(json, function(){ count++; });
    return count;
}

//-- Callback when ToC is loaded

function tocLoaded(json)
{
    response = json;
    
    if(json.traceback)
    {   
        ajaxError(false, json.error, false);
        return false;
    }

    var ul = document.createElement('ul');
    $(ul).addClass('primary');

    if($('#uuid').val() == "" && json.uuid) {
        $('#uuid').val(json.uuid);
        bookid = json.uuid;
    }

    chapters = countJson(json.sections);

    buildChapter(json, ul, 0);
    
    $('#table-of-contents-load').empty();
    $('#table-of-contents-load').append(ul);

    $('.treeToggle').click(function() { toggleOpen(this, $(this).attr('data-alt')); });
    $('#table-of-contents-load :checkbox, #my-content :checkbox').click(toggleChecked);//.attr('checked', true)
    $('#table-of-contents-load .previewTitle, #table-of-contents-load .rContainer').click(previewAuto); 
    $('#my-content .previewTitle, #my-content .rContainer').click(editAuto); 
    $('#my-content').show();
    $('.hide').hide();
    countPages();

    document.getElementById('table-of-contents-overflow').scrollTop = 0;
    if($('.fckeditor').is(':hidden'))
        preview($('#table-of-contents-load .previewTitle:first'));

        // Fix this once done w the bucket
    $('.customization-controls button').attr('disabled', false);
    $('.customization-controls button[type=submit]').show();
    $('.info').show();
    $('#city-title').show();
    $('#table-of-contents-load .checked, #my-content .checked').attr('checked', true).removeClass('checked');
    
    manageChecked();
    
    // callback?
    
    if(typeof tocLoadedCallback == 'function')
        tocLoadedCallback();
    
    return true;
    
}

function ajaxError(request, text, error)
{
        $('#table-of-contents-load .loading').fadeOut();
        $('.content-preview-load h3.loading').text("Whoops, something went wrong!").css('color', 'red');
        $('.content-preview-load p.loading').html("We had a problem on our end, so try refreshing.  If that doesnt work, feel free to send us an email at <a href=\"mailto:product@offbeatguides.com\">product@offbeatguides.com</a>.<br /><br />The following error will probably mean nothing to you, but if you could, we'd love it if you sent it along- it'll help us diagnose the problem quicker!<br /><br /><b>Error:</b><span style=\"color:#888;\">" + (text ? text : error) + "</span>");
}

function removeSleep()
{
	$('.sleepy').attr('checked', false);
	$('.sleepy').parent().parent().find('input:checkbox').attr('checked', false);
 	toggleSleepy();
	$('.sleepy').parent().parent().attr('style','display:none');
/*
	$(".sleepy").each(function(t) {
		toggleChecked.call(this);
		// $(li).attr('style', 'display: none');		
	});
*/
}

function buildChapter(json, element, level)
{
    level++;
    var pCount = 0;

    $.each(json.sections,function(i,item) {
        var li = document.createElement('li');
        var input = document.createElement('input');
        var span = document.createElement('span');
        var pages = document.createElement('span');
        var a = document.createElement('a');
        var div = document.createElement('div');
        var img = document.createElement('img');
        var lContainer = document.createElement('div');
        var rContainer = document.createElement('div');
        var clear = document.createElement('div');
        
        var title = (item.title) ? item.title : '[No section title]';

        $(li).attr('id', 'li_' + item.uuid);
        $(li).addClass('preview');

        $(div).attr('id', 'preview_' + item.uuid);
        $(div).attr('style', 'overflow:hidden;display:none;');
   
        $(div).html(((level == 1 && item.custom != 1) ? "<h2>" + title + "</h2>" : "") + (item.error == 1 ? "<span style=\"color:red\">This chapter is not available for preview at this time</span>" : (item.content && item.content.length > 0 ? item.content : "")));
        
        $(img).attr('src', baseurl+"/i/ui/white.gif");
        $(img).css({cursor:'pointer'});
        $(img).attr('data-alt', item.uuid);
        $(img).attr('alt', " ");
        $(img).addClass('treeToggle');

        $(input).attr('value', (item.word_count == 0) ? 1 : item.word_count);
        $(input).attr("data-pages",  (item.word_count == 0) ? 1 : item.word_count);
        $(input).attr('type', 'checkbox');
        $(input).attr('name', 'uid_' + item.uuid);
        $(input).attr('id', 'uid_' + item.uuid);
        $(input).attr('checked', item.active);
        if(title == "Introduction") $(input).attr('disabled', true);
        if(item.uuid == "") $(input).attr('disabled', true);
        if(item.active) $(input).addClass('checked');
 
		if (title == "Sleep") {
			$(input).addClass('sleepy');
		}
		/*
		if(title == "Sleep"){
			toggleChecked.call(input);
		 	// $(li).attr('style', 'display: none');
		}
		*/
       
        var size = 27 - level;
        var titleShort = (title.length && title.length > size + 3) ? title.substr(0, size) + '&hellip;' : title;

        $(a).addClass('previewTitle');
        $(a).attr('title', title);
        $(a).attr('href', '#preview_' + item.uuid);
        $(a).attr('id', 'title_' + item.uuid);
        $(a).attr('data-altText', title);
        $(a).html(titleShort);

        $(lContainer).css('float', 'left');
        $(lContainer).addClass('lContainer');
        $(rContainer).addClass('rContainer');
        $(rContainer).attr('id', 'clickable_' + item.uuid);
        $(clear).css('clear', 'both');

        $(lContainer).append(img);
        $(lContainer).append(input);
        $(span).append(a);
        $(rContainer).append(span);
        $(rContainer).append(pages);

        $(li).append(lContainer);
        $(li).append(rContainer);
        $(li).append(clear);
        $(li).append(div);

        var pc = 0;
        
        if(item.custom == 1)
        {
            $('#customChaptersUl').show();
            $('#customChaptersUl').append(li);   
        }
        else if(item.sections && item.sections.length > 0)
        {
            $(element).append(li);
            $(img).attr('src', baseurl + "/i/ui/down.gif");
            ul = document.createElement('ul');

            $(ul).addClass('secondary');
            $(li).append(ul);

            if(((level >= 2 || chapters > 4)) && ! first )
            {
                $(ul).addClass('hide');
                $(img).attr('src', baseurl + "/i/ui/right.gif");
            }
            else
            {
                $(img).attr('src', baseurl + "/i/ui/down.gif");
                first = false;
            }  

            pc = buildChapter(item, ul, level);
        }
        else
            $(element).append(li);

        pCount += item.word_count + pc;

        var s = '';
        var p = Math.round((item.word_count + pc) / 310);
        if(p > 1) s = 's';
        if(p < 1) p = '< 1';

        $(pages).text(' | ' + p + ' page' + s);
        $(pages).attr('id', 'pages_' + item.uuid);
    });

    return pCount;

}