var xmlhttp
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
  try {
  xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
 } catch (e) {
  try {
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  } catch (E) {
   xmlhttp=false;
  }
 }
@else
 xmlhttp=false
 @end @*/
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
	try {
		xmlhttp = new XMLHttpRequest();
	} catch (e) {
		xmlhttp=false;
	}
}
if (!xmlhttp && window.createRequest) {
	try {
		xmlhttp = window.createRequest();
	} catch (e) {
		xmlhttp=false;
	}
}

// 0 - nothing selected
// 1 - single page selected
// 2 - multiple pages selected
var selection_status = 0;
var selected_page_number;
var selected_page_number_end;

// brower detection
var ua = navigator.userAgent.toLowerCase(),
    isOpera = (ua.indexOf('opera') > -1),
    isSafari = (ua.indexOf('safari') > -1),
    isGecko = (!isOpera && !isSafari && ua.indexOf('gecko') > -1),
    isIE = (!isOpera && ua.indexOf('msie') > -1);

function getViewportHeight() {
    var height = self.innerHeight; // Safari, Opera
    var mode = document.compatMode;

    if ( (mode || isIE) && !isOpera ) { // IE, Gecko
        height = (mode == 'CSS1Compat') ?
                document.documentElement.clientHeight : // Standards
                document.body.clientHeight; // Quirks
    }

    return height;
}

/* window.onload = resize_pages_cont; */
window.onload = page_load;
window.onresize = resize_pages_cont;

function page_load() {
	 toggle_tooltips(); /* hide/reset */
	 toggle_tooltips(); /* show */
	 resize_pages_cont();
}


window.onbeforeunload = function() {
    return "You will lose your work.";
};

function resize_pages_cont() {
    var id_pages_list = document.getElementById('id_pages_list');
    id_pages_list.style.height = (getViewportHeight() - 196) + 'px';

    var tooltip_2 = document.getElementById('tooltip_2');
    tooltip_2.style.top = (getViewportHeight() - 155) + 'px';
    //var tooltip_3 = document.getElementById('tooltip_3');
    //tooltip_3.style.top = (getViewportHeight() - 190) + 'px';
    var tooltip_4 = document.getElementById('tooltip_4');
    tooltip_4.style.top = (getViewportHeight() - 116) + 'px';

    var id_page_preview = document.getElementById('id_page_preview');
    id_page_preview.style.height = (getViewportHeight() - 2) + 'px';
    var id_page_preview_back = document.getElementById('id_page_preview_back');
    id_page_preview_back.style.height = (getViewportHeight() - 2) + 'px';
    var id_help_back = document.getElementById('id_help_back');
    id_help_back.style.height = (getViewportHeight() - 2) + 'px';
    var id_help_iframe = document.getElementById('id_help_iframe');
    id_help_iframe.height = (getViewportHeight() - 110) + 'px';
    var id_advanced_form_back = document.getElementById('id_advanced_form_back');
    id_advanced_form_back.style.height = (getViewportHeight() - 2) + 'px';
    var id_project_exporting_back = document.getElementById('id_project_exporting_back');
    id_project_exporting_back.style.height = (getViewportHeight() - 2) + 'px';
}

function upload() {
    if (document.forms[0].elements[0].value == '') {
        alert('First select your PDF file with the "Browse" button');
        return false;
    }

    var id_file_list = document.getElementById('id_file_list');
    if (id_file_list.childNodes.length == 4) {
        alert('Sorry, but PDF Hammer is limited to 4 uploaded files per project.');
        return false;
    }

    var id_upload_form = document.getElementById('id_upload_form');
    var id_upload_uploading = document.getElementById('id_upload_uploading');
    var id_upload_processing = document.getElementById('id_upload_processing');
    var id_export_pages_submit = document.getElementById('id_export_pages_submit');
    id_upload_form.style.display = 'none';
    id_upload_uploading.style.display = 'inline';
    id_upload_processing.style.display = 'none';
    id_export_pages_submit.setAttribute('disabled', true);

    return true;
}

function rpad(num, places) {
    return (num.length >= places) ? num : (num + Math.pow(10, places)).toString().substring(1);
}

function get_page_number(page) {
    return parseInt(page.childNodes[3].nodeValue, 10);
}

function set_page_number(page, n) {
    page.childNodes[3].nodeValue = n;
}

function update_page_class(page) {
    if(!page._classHover && !page._classSelected && !page._classInrange) {
        page.className = '';
    }
    else if(page._classHover && !page._classSelected && !page._classInrange) {
        page.className = 'hover';
    }
    else if(!page._classHover && page._classSelected && !page._classInrange) {
        page.className = 'selected';
    }
    else if(page._classHover && page._classSelected && !page._classInrange) {
        page.className = 'hover selected';
    }
    else if(!page._classHover && !page._classSelected && page._classInrange) {
        page.className = 'inrange';
    }
    else if(page._classHover && !page._classSelected && page._classInrange) {
        page.className = 'hover inrange';
    }
}

function over (page) { return function () {
    page._classHover = true;
    if(selection_status == 1)
    {
        var pn = get_page_number(page);
        if(pn > selected_page_number)
        {
            for(var i=selected_page_number; i<pn; i++)
            {
                page.parentNode.childNodes.item(i)._classInrange = true;
                update_page_class(page.parentNode.childNodes.item(i));
            }
        }
        else if(pn < selected_page_number)
        {
            for(var i=pn-1; i<selected_page_number-1; i++)
            {
                page.parentNode.childNodes.item(i)._classInrange = true;
                update_page_class(page.parentNode.childNodes.item(i));
            }
        }
        else
        {
            update_page_class(page);
        }
    }
    else
    {
        update_page_class(page);
    }

//    var id_page_zoom_explanation = document.getElementById('id_page_zoom_explanation');
//    var id_page_zoom_img = document.getElementById('id_page_zoom_img');
//    id_page_zoom_explanation.style.display = 'none';
//    id_page_zoom_img.style.display = 'inline';
//    id_page_zoom_img.setAttribute('width', '' + page._imgWidth);
//    id_page_zoom_img.setAttribute('height', '' + page._imgHeight);
//    id_page_zoom_img.style.marginTop = '' + (150 - (page._imgHeight / 2)) + 'px';
//    id_page_zoom_img.setAttribute('src', page._imgSrc);
}; }

function out (page) { return function () {
    page._classHover = false;
    if(selection_status == 1)
    {
        var pn = get_page_number(page);
        if(pn > selected_page_number)
        {
            for(var i=selected_page_number; i<pn; i++)
            {
                page.parentNode.childNodes.item(i)._classInrange = false;
                update_page_class(page.parentNode.childNodes.item(i));
            }
        }
        else if(pn < selected_page_number)
        {
            for(var i=pn-1; i<selected_page_number-1; i++)
            {
                page.parentNode.childNodes.item(i)._classInrange = false;
                update_page_class(page.parentNode.childNodes.item(i));
            }
        }
        else
        {
            update_page_class(page);
        }
    }
    else
    {
        update_page_class(page);
    }

//    var id_page_zoom_explanation = document.getElementById('id_page_zoom_explanation');
//    var id_page_zoom_img = document.getElementById('id_page_zoom_img');
//    id_page_zoom_explanation.style.display = 'block';
//    id_page_zoom_img.style.display = 'none';
//    id_page_zoom_img.setAttribute('width', '');
//    id_page_zoom_img.setAttribute('height', '');
    //id_page_zoom_img.setAttribute('src', '');
}; }

function click (page) { return function () {
    if(selection_status == 0)
    {
        page._classSelected = true;
        update_page_class(page);

        selection_status = 1;
        selected_page_number = get_page_number(page);

        var id_page_selected_count = document.getElementById('id_page_selected_count');
        id_page_selected_count.innerHTML = '1';
    }
    else if(selection_status == 1)
    {
        var pn = get_page_number(page);
        if(pn > selected_page_number)
        {
            for(var i=selected_page_number; i<pn; i++)
            {
                page.parentNode.childNodes.item(i)._classInrange = false;
                page.parentNode.childNodes.item(i)._classSelected = true;
                update_page_class(page.parentNode.childNodes.item(i));
            }
            selected_page_number_end = pn;
            selection_status = 2;

            var id_page_selected_count = document.getElementById('id_page_selected_count');
            id_page_selected_count.innerHTML = '' + (selected_page_number_end - selected_page_number + 1);
        }
        else if(pn < selected_page_number)
        {
            for(var i=pn-1; i<selected_page_number-1; i++)
            {
                page.parentNode.childNodes.item(i)._classInrange = false;
                page.parentNode.childNodes.item(i)._classSelected = true;
                update_page_class(page.parentNode.childNodes.item(i));
            }
            selected_page_number_end = selected_page_number;
            selected_page_number = pn;
            selection_status = 2;

            var id_page_selected_count = document.getElementById('id_page_selected_count');
            id_page_selected_count.innerHTML = '' + (selected_page_number_end - selected_page_number + 1);
        }
        else
        {
            page._classSelected = false;
            update_page_class(page);
            selection_status = 0;

            var id_page_selected_count = document.getElementById('id_page_selected_count');
            id_page_selected_count.innerHTML = '0';
        }
    }
    else if(selection_status == 2)
    {
        var pn = get_page_number(page);
        for(var i=selected_page_number-1; i<selected_page_number_end; i++)
        {
            page.parentNode.childNodes.item(i)._classSelected = false;
            update_page_class(page.parentNode.childNodes.item(i));
        }
        page._classSelected = true;
        update_page_class(page);

        selection_status = 1;
        selected_page_number = pn;

        var id_page_selected_count = document.getElementById('id_page_selected_count');
        id_page_selected_count.innerHTML = '1';
    }
}; }

function get_project_id()
{
    var url = '' + document.location;
	var filename = 'project.php';
    var start = url.search(filename) + filename.length + 4; // 4 = strlen ("?ip=")
    var project_id = url.slice(start, start + 40);
    return project_id;
}

var preview_page_timeout;

function preview_page (page) { return function () {
    var file_num = parseInt(page.childNodes[0].className.substring(9), 10);
    var page_num = parseInt(page.childNodes[0].childNodes[0].nodeValue, 10);

//    alert('Page is from document number: ' + file_num + '\nIt is page number: ' + page_num);

    var id_page_preview = document.getElementById('id_page_preview');
    id_page_preview.style.display = 'block';

    var project_id = get_project_id();

    var id_page_preview_img = document.getElementById('id_page_preview_img');
    id_page_preview_img.src = 'projects/' + project_id + '/' + file_num + '/b' + rpad(page_num, 4) + '.png';

    preview_page_timeout = false;
    setTimeout(function() { preview_page_timeout = true; }, 500);
}; }

function close_preview_page()
{
    if(preview_page_timeout)
    {
        var id_page_preview = document.getElementById('id_page_preview');
        id_page_preview.style.display = 'none';
    }
}

function show_advanced()
{
    var id_advanced_form_cont = document.getElementById('id_advanced_form_cont');
    id_advanced_form_cont.style.display = 'block';
}

var advanced_is_ok = true;

function advanced_ok()
{
    if(!advanced_is_ok)
    {
        alert('Error! Passwords do not match.');
        return;
    }

    var id_advanced_form_cont = document.getElementById('id_advanced_form_cont');
    id_advanced_form_cont.style.display = 'none';
}

function export_close() {

    var id_advanced_form_cont = document.getElementById('id_project_exporting');
    id_advanced_form_cont.style.display = 'none';

}


function advanced_password_check()
{
    var id_advanced_password_check = document.getElementById('id_advanced_password_check');
    var id_advanced_password_1 = document.getElementById('id_advanced_password_1');
    var id_advanced_password_2 = document.getElementById('id_advanced_password_2');
    var id_advanced_password_error_msg = document.getElementById('id_advanced_password_error_msg');
    //var id_advanced_ok = document.getElementById('id_advanced_ok');
    if(id_advanced_password_check.checked)
    {
        id_advanced_password_1.removeAttribute('disabled');
        id_advanced_password_2.removeAttribute('disabled');
        id_advanced_password_error_msg.style.display = 'inline';
        //id_advanced_ok.disabled = true;
        advanced_is_ok = false;
    }
    else
    {
        id_advanced_password_1.value = '';
        id_advanced_password_2.value = '';
        id_advanced_password_1.disabled = true;
        id_advanced_password_2.disabled = true;
        id_advanced_password_error_msg.style.display = 'none';
        //id_advanced_ok.removeAttribute('disabled');
        advanced_is_ok = true;
    }
}

function advanced_password_change()
{
    var id_advanced_password_1 = document.getElementById('id_advanced_password_1');
    var id_advanced_password_2 = document.getElementById('id_advanced_password_2');
    var id_advanced_password_error_msg = document.getElementById('id_advanced_password_error_msg');
    //var id_advanced_ok = document.getElementById('id_advanced_ok');

    if(id_advanced_password_1.value == '' || id_advanced_password_1.value != id_advanced_password_2.value)
    {
        id_advanced_password_error_msg.style.display = 'inline';
        //id_advanced_ok.disabled = true;
        advanced_is_ok = false;
    }
    else
    {
        id_advanced_password_error_msg.style.display = 'none';
        //id_advanced_ok.removeAttribute('disabled');
        advanced_is_ok = true;
    }
}

function action_beginning() {
    if(selection_status == 0)
    {
        alert('First select the page or pages you want to move');
    }
    else if(selection_status == 1)
    {
        var id_pages_list = document.getElementById('id_pages_list');
        if(selected_page_number > 1)
        {
            var page = id_pages_list.removeChild(id_pages_list.childNodes.item(selected_page_number - 1));
            id_pages_list.insertBefore(page, id_pages_list.firstChild);

            for(var i=0; i<selected_page_number; i++)
            {
                set_page_number(id_pages_list.childNodes.item(i), '' + (i + 1));
            }

            selected_page_number = 1;
        }
    }
    else if(selection_status == 2)
    {
        var id_pages_list = document.getElementById('id_pages_list');
        if(selected_page_number > 1)
        {
            for(var i=0; i<selected_page_number_end - selected_page_number + 1; i++)
            {
                var page = id_pages_list.removeChild(id_pages_list.childNodes.item(selected_page_number_end - 1));
                id_pages_list.insertBefore(page, id_pages_list.firstChild);
            }

            for(var i=0; i<selected_page_number_end; i++)
            {
                set_page_number(id_pages_list.childNodes.item(i), '' + (i + 1));
            }

            selected_page_number_end = selected_page_number_end - selected_page_number + 1;
            selected_page_number = 1;
        }
    }
}

function action_end() {
    if(selection_status == 0)
    {
        alert('First select the page or pages you want to move');
    }
    else if(selection_status == 1)
    {
        var id_pages_list = document.getElementById('id_pages_list');
        var page = id_pages_list.removeChild(id_pages_list.childNodes.item(selected_page_number - 1));
        id_pages_list.appendChild(page);

        for(var i=selected_page_number-1; i<id_pages_list.childNodes.length; i++)
        {
            set_page_number(id_pages_list.childNodes.item(i), '' + (i + 1));
        }

        selected_page_number = id_pages_list.childNodes.length;
    }
    else if(selection_status == 2)
    {
        var id_pages_list = document.getElementById('id_pages_list');
        for(var i=0; i<selected_page_number_end - selected_page_number + 1; i++)
        {
            var page = id_pages_list.removeChild(id_pages_list.childNodes.item(selected_page_number - 1));
            id_pages_list.appendChild(page);
        }

        for(var i=selected_page_number-1; i<id_pages_list.childNodes.length; i++)
        {
            set_page_number(id_pages_list.childNodes.item(i), '' + (i + 1));
        }

        selected_page_number = id_pages_list.childNodes.length - (selected_page_number_end - selected_page_number);
        selected_page_number_end = id_pages_list.childNodes.length;
    }
}

function action_forward() {
    if(selection_status == 0)
    {
        alert('First select the page or pages you want to move');
    }
    else if(selection_status == 1)
    {
        var id_pages_list = document.getElementById('id_pages_list');
        if(selected_page_number < id_pages_list.childNodes.length)
        {
            var page = id_pages_list.removeChild(id_pages_list.childNodes.item(selected_page_number));
            id_pages_list.insertBefore(page, id_pages_list.childNodes.item(selected_page_number - 1));

            for(var i=selected_page_number-1; i<selected_page_number+1; i++)
            {
                set_page_number(id_pages_list.childNodes.item(i), '' + (i + 1));
            }

            selected_page_number = selected_page_number + 1;
        }
    }
    else if(selection_status == 2)
    {
        var id_pages_list = document.getElementById('id_pages_list');
        if(selected_page_number_end < id_pages_list.childNodes.length)
        {
            var page = id_pages_list.removeChild(id_pages_list.childNodes.item(selected_page_number_end));
            id_pages_list.insertBefore(page, id_pages_list.childNodes.item(selected_page_number - 1));

            for(var i=selected_page_number-1; i<selected_page_number_end+1; i++)
            {
                set_page_number(id_pages_list.childNodes.item(i), '' + (i + 1));
            }

            selected_page_number = selected_page_number + 1;
            selected_page_number_end = selected_page_number_end + 1;
        }
    }
}

function action_backward() {
    if(selection_status == 0)
    {
        alert('First select the page or pages you want to move');
    }
    else if(selection_status == 1)
    {
        var id_pages_list = document.getElementById('id_pages_list');
        if(selected_page_number > 1)
        {
            var page = id_pages_list.removeChild(id_pages_list.childNodes.item(selected_page_number - 2));
            if(selected_page_number < id_pages_list.childNodes.length + 1) {
                id_pages_list.insertBefore(page, id_pages_list.childNodes.item(selected_page_number - 1));
            }
            else {
                id_pages_list.appendChild(page);
            }

            for(var i=selected_page_number-2; i<selected_page_number; i++) {
                set_page_number(id_pages_list.childNodes.item(i), '' + (i + 1));
            }

            selected_page_number = selected_page_number - 1;
        }
    }
    else if(selection_status == 2)
    {
        var id_pages_list = document.getElementById('id_pages_list');
        if(selected_page_number > 1)
        {
            var page = id_pages_list.removeChild(id_pages_list.childNodes.item(selected_page_number - 2));
            if(selected_page_number_end < id_pages_list.childNodes.length + 1) {
                id_pages_list.insertBefore(page, id_pages_list.childNodes.item(selected_page_number_end - 1));
            }
            else {
                id_pages_list.appendChild(page);
            }

            for(var i=selected_page_number-2; i<selected_page_number_end; i++)
            {
                set_page_number(id_pages_list.childNodes.item(i), '' + (i + 1));
            }

            selected_page_number = selected_page_number - 1;
            selected_page_number_end = selected_page_number_end - 1;
        }
    }
}

function action_delete() {
    if(selection_status == 0)
    {
        alert('First select the page or pages you want to delete');
        return;
    }
    var confirm_delete = confirm('Are you sure you want to delete the selected pages?');
    if(!confirm_delete) {
        return;
    }
    if(selection_status == 1)
    {
        var id_pages_list = document.getElementById('id_pages_list');
        id_pages_list.removeChild(id_pages_list.childNodes.item(selected_page_number - 1));

        for(var i=selected_page_number-1; i<id_pages_list.childNodes.length; i++)
        {
            set_page_number(id_pages_list.childNodes.item(i), '' + (i + 1));
        }

        selection_status = 0;

        var id_page_total_count = document.getElementById('id_page_total_count');
        id_page_total_count.innerHTML = '' + (id_pages_list.childNodes.length);

        var id_page_selected_count = document.getElementById('id_page_selected_count');
        id_page_selected_count.innerHTML = '0';
    }
    else if(selection_status == 2)
    {
        var id_pages_list = document.getElementById('id_pages_list');
        for(var i=0; i<selected_page_number_end - selected_page_number + 1; i++)
        {
            id_pages_list.removeChild(id_pages_list.childNodes.item(selected_page_number - 1));
        }

        for(var i=selected_page_number-1; i<id_pages_list.childNodes.length; i++)
        {
            set_page_number(id_pages_list.childNodes.item(i), '' + (i + 1));
        }

        selection_status = 0;

        var id_page_total_count = document.getElementById('id_page_total_count');
        id_page_total_count.innerHTML = '' + (id_pages_list.childNodes.length);

        var id_page_selected_count = document.getElementById('id_page_selected_count');
        id_page_selected_count.innerHTML = '0';
    }
}

function export_btn()
{
    var id_export_pages_submit = document.getElementById('id_export_pages_submit');
    if (id_export_pages_submit.disabled)
    {
        return;
    }

    if(exportpdf())
    {
        document.exportform.submit();
    }
}

function action_help() {
    var id_help_cont = document.getElementById('id_help_cont');
    id_help_cont.style.display = 'block';
}

function close_help_cont() {
    var id_help_cont = document.getElementById('id_help_cont');
    id_help_cont.style.display = 'none';
}

var tooltips = 1;

function toggle_tooltips() {
    var btn_tooltips = document.getElementById('btn_tooltips');
    var tooltip_1 = document.getElementById('tooltip_1');
    var tooltip_2 = document.getElementById('tooltip_2');
    //var tooltip_3 = document.getElementById('tooltip_3');
    var tooltip_4 = document.getElementById('tooltip_4');

    if(tooltips == 1)
    {
        btn_tooltips.src = '/static/btn_tooltips_on.png';
        tooltip_1.style.display = 'none';
        tooltip_2.style.display = 'none';
        //tooltip_3.style.display = 'none';
        tooltip_4.style.display = 'none';
        tooltips = 0;
    }
    else
    {
        btn_tooltips.src = '/static/btn_tooltips_off.png';
        tooltip_1.style.display = 'block';
        tooltip_2.style.display = 'block';
        //tooltip_3.style.display = 'block';
        tooltip_4.style.display = 'block';
        tooltips = 1;
    }
}

function exportpdf() {
    var id_pages_list = document.getElementById('id_pages_list');

    if(id_pages_list.childNodes.length == 0) {
        alert('You cannot export an empty PDF.\n\nPlease upload a PDF file to edit using the form above.');
        return false;
    }

    var id_export_pages_input = document.getElementById('id_export_pages_input');
    var id_export_title_input = document.getElementById('id_export_title_input');
    var id_export_author_input = document.getElementById('id_export_author_input');
    var id_export_subject_input = document.getElementById('id_export_subject_input');
    var id_export_keywords_input = document.getElementById('id_export_keywords_input');
    var id_export_password_input = document.getElementById('id_export_password_input');

    var id_advanced_title = document.getElementById('id_advanced_title');
    var id_advanced_author = document.getElementById('id_advanced_author');
    var id_advanced_subject = document.getElementById('id_advanced_subject');
    var id_advanced_keywords = document.getElementById('id_advanced_keywords');
    var id_advanced_password_1 = document.getElementById('id_advanced_password_1');

    var result = '' + id_pages_list.childNodes.length + '\n';

    for(var i=0; i < id_pages_list.childNodes.length; i++) {
        var e = id_pages_list.childNodes.item(i).childNodes[0];
        result = result + e.className.substring(9);
        result = result + ' ';
        result = result + e.childNodes[0].nodeValue;
        result = result + '\n';
    }

    id_export_pages_input.value = result;

    id_export_title_input.value = id_advanced_title.value;
    id_export_author_input.value = id_advanced_author.value;
    id_export_subject_input.value = id_advanced_subject.value;
    id_export_keywords_input.value = id_advanced_keywords.value.replace(/\n/g, ' ');
    id_export_password_input.value = id_advanced_password_1.value;

    var id_project_workspace = document.getElementById('id_project_workspace');
    var id_project_exporting = document.getElementById('id_project_exporting');
    //id_project_workspace.style.display = 'none';
    id_project_exporting.style.display = 'block';

    window.onbeforeunload = function() { };

    return true;
}

function number_format( number, decimals, dec_point, thousands_sep ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     bugfix by: Michael White (http://crestidg.com)
    // +     bugfix by: Benjamin Lupton
    // +     bugfix by: Allan Jensen (http://www.winternet.no)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)    
    // *     example 1: number_format(1234.5678, 2, '.', '');
    // *     returns 1: 1234.57     
 
    var n = number, c = isNaN(decimals = Math.abs(decimals)) ? 2 : decimals;
    var d = dec_point == undefined ? "," : dec_point;
    var t = thousands_sep == undefined ? "." : thousands_sep, s = n < 0 ? "-" : "";
    var i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;
    
    return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
}

function size_format (filesize) {
    if (filesize >= 1073741824) {
        filesize = number_format(filesize / 1073741824, 1, '.', '') + 'G';
    } else {
        if (filesize >= 1048576) {
            filesize = number_format(filesize / 1048576, 1, '.', '') + 'M';
        } else {
            if (filesize >= 1024) {
                filesize = number_format(filesize / 1024, 0) + 'k';
            } else {
                filesize = number_format(filesize, 0, '.', '') + 'B';
            };
        };
    };
    return filesize;
};

function escapeHTMLEncode(str) {
    var div = document.createElement('div');
    var text = document.createTextNode(str);
    div.appendChild(text);
    return div.innerHTML;
}

function add_file(project_id) {
    return function () {
        var id_upload_form = document.getElementById('id_upload_form');
        var id_upload_uploading = document.getElementById('id_upload_uploading');
        var id_upload_processing = document.getElementById('id_upload_processing');
        var id_export_pages_submit = document.getElementById('id_export_pages_submit');
        if (xmlhttp.readyState == 4) {
            if(tooltips == 1)
            {
                toggle_tooltips();
            }
            if(xmlhttp.status != 200) {
                id_upload_form.style.display = 'inline';
                id_upload_uploading.style.display = 'none';
                id_upload_processing.style.display = 'none';
                id_export_pages_submit.removeAttribute('disabled');
            
                alert('Error: We are currently experiencing technical difficulties');
                alert(xmlhttp.responseText);
                return;
            }
            if(xmlhttp.responseText == 'e0') {
                id_upload_form.style.display = 'inline';
                id_upload_uploading.style.display = 'none';
                id_upload_processing.style.display = 'none';
                id_export_pages_submit.removeAttribute('disabled');
            
                alert('Error: The file you uploaded is not a valid PDF, or is damaged.');
                return;
            }
            else if(xmlhttp.responseText == 'e1') {
                id_upload_form.style.display = 'inline';
                id_upload_uploading.style.display = 'none';
                id_upload_processing.style.display = 'none';
                id_export_pages_submit.removeAttribute('disabled');
            
                alert('Error: The file you uploaded is too large.\n\nPDF Hammer is currently limited to files up to 25 MB.');
                return;
            }
            else if(xmlhttp.responseText == 'e2') {
                id_upload_form.style.display = 'inline';
                id_upload_uploading.style.display = 'none';
                id_upload_processing.style.display = 'none';
                id_export_pages_submit.removeAttribute('disabled');
            
                alert('Error: The file you uploaded has too many pages.\n\nPDF Hammer is currently limited to files with up to 100 pages.');
                return;
            }
			else if(xmlhttp.responseText == 'e3') {
                id_upload_form.style.display = 'inline';
                id_upload_uploading.style.display = 'none';
                id_upload_processing.style.display = 'none';
                id_export_pages_submit.removeAttribute('disabled');
            
                alert('Error: The file you uploaded is encrypted.\n\nPDF Hammer does not support encrypted PDF files..');
                return;
            }
			else if(xmlhttp.responseText == 'e4') {
                id_upload_form.style.display = 'inline';
                id_upload_uploading.style.display = 'none';
                id_upload_processing.style.display = 'none';
                id_export_pages_submit.removeAttribute('disabled');
            
                alert('Error: file upload was not completed or timed out.\n\nPDF Hammer only accepts files smaller than 25 MB.');
                return;
            }
            var splt = xmlhttp.responseText.split('\n');
            var filename = splt[0];
            var file_num = splt[1];
            var pages_str = splt[2];
            var file_size = splt[3];
            var pages_num = parseInt(pages_str, 10);
            
            var id_file_list = document.getElementById('id_file_list');
            var new_item = document.createElement('li');
            new_item.className = 'file_num_' + (id_file_list.childNodes.length + 1);
            //var new_item_text = document.createTextNode(filename + ' (' + pages_str + ' pages)');
            var new_item_text = document.createTextNode(filename + ' ' + size_format(parseInt(file_size, 10)));
            //new_item.appendChild(new_item_text);
            new_item.innerHTML = '<table width="100%"><tr><td style="padding:4px"><div style="width:7px;height:7px;background-color:#5a5a5d;border:1px solid black;"></div></td><td width="100%">' + escapeHTMLEncode(filename) + '</td><td style="padding-right:17px">' + escapeHTMLEncode(size_format(parseInt(file_size, 10))) + '</td></tr></table>';
            id_file_list.appendChild(new_item);

            id_upload_form.style.display = 'inline';
            id_upload_uploading.style.display = 'none';
            id_upload_processing.style.display = 'none';
            id_export_pages_submit.removeAttribute('disabled');
            
            var id_file_listing_empty = document.getElementById('id_file_listing_empty');
            id_file_listing_empty.style.display = 'none';

            var id_pages_list = document.getElementById('id_pages_list');

            for(var i = 1; i <= pages_num; i++) {
                var new_page_item = document.createElement('li');

                var new_page_item_p = document.createElement('p');
                new_page_item_p.className = 'file_num_' + (id_file_list.childNodes.length);
                new_page_item_p.appendChild(document.createTextNode('' + i));

                var new_page_item_img = document.createElement('img');
                //var src = '/project/' + project_id + '/pages/' + file_num + '/p' + rpad(i, 4) + '.png';
                var src = 'projects/' + project_id + '/' + file_num + '/p' + rpad(i, 4) + '.png';
                new_page_item_img.setAttribute('src', src);
                new_page_item_img.setAttribute('alt', '');
                var width = parseInt(splt[i + 3].split(' ')[0], 10);
                var height = parseInt(splt[i + 3].split(' ')[1], 10);
                new_page_item_img.setAttribute('width', '' + width);
                new_page_item_img.setAttribute('height', '' + height);
                var margin_top = 75 - (height / 2);
                var margin_bottom = 75 - (height / 2);
                new_page_item_img.style.marginTop = '' + margin_top + 'px';
                new_page_item_img.style.marginBottom = '' + margin_bottom + 'px';

                var new_page_item_br = document.createElement('br');

                var new_page_item_text = document.createTextNode('' + (id_pages_list.childNodes.length + 1));

                new_page_item.appendChild(new_page_item_p);
                new_page_item.appendChild(new_page_item_img);
                new_page_item.appendChild(new_page_item_br);
                new_page_item.appendChild(new_page_item_text);

                id_pages_list.appendChild(new_page_item);

                new_page_item._imgSrc = src;
                new_page_item._imgWidth = width;
                new_page_item._imgHeight = height;

                new_page_item._classHover = false;
                new_page_item._classSelected = false;
                new_page_item._classInrange = false;

                new_page_item.onmouseover = over(new_page_item);
                new_page_item.onmouseout = out(new_page_item);
                new_page_item.onmousedown = click(new_page_item);
                new_page_item.ondblclick = preview_page(new_page_item);

            }
            var id_page_total_count = document.getElementById('id_page_total_count');
            id_page_total_count.innerHTML = '' + (id_pages_list.childNodes.length);
        }
    };
}

function upload_complete() {
    var id_upload_form = document.getElementById('id_upload_form');
    var id_upload_uploading = document.getElementById('id_upload_uploading');
    var id_upload_processing = document.getElementById('id_upload_processing');
    id_upload_form.style.display = 'none';
    id_upload_uploading.style.display = 'none';
    id_upload_processing.style.display = 'inline';

    document.forms[0].reset();

    var project_id = get_project_id();

    xmlhttp.open('GET', 'process.php?id=' + project_id + '&r=' + (new Date()).getTime(), true); // Append a timestamp string to prevent browser from retrieving from cache
    xmlhttp.onreadystatechange = add_file(project_id);
    xmlhttp.send(null);
}


