sync_pv_initialize();

function sync_pv_initialize() {
    if (sync_in_array('read', sync_pv_types)) {
        sync_pv_timer_id = 0;
        sync_pv_timer_done = false;
        sync_pv_timer_enabled = (new Date()).getTime();

        window.onblur = sync_pv_pause_timer;
        window.onfocus = sync_pv_enable_timer;
        sync_pv_enable_timer();
    }
    
    if (sync_in_array('request', sync_pv_types)) {
        sync_pv_mark_post_as_requested();
    }
    
    if (sync_in_array('print', sync_pv_types)) {
        sync_pv_init_print_registration();
    }
}

function sync_pv_enable_timer() {
    if (!sync_pv_timer_done) {
        sync_pv_timer_enabled = (new Date()).getTime();
        sync_pv_timer_id = setTimeout('sync_pv_mark_post_as_read()', sync_pv_timer_timeout);
    }
}

function sync_pv_pause_timer() {
    if (!sync_pv_timer_done) {
        clearTimeout(sync_pv_timer_id);
        var passed = (new Date()).getTime() - sync_pv_timer_enabled;
        if (passed > sync_pv_timer_timeout) {
            sync_pv_timer_timeout = 0 
        } else {
            sync_pv_timer_timeout -= passed;
        }
    }
}

function sync_pv_init_print_registration() {
    var links = document.getElementsByTagName('a');
    // This is disgustingly ugly, but there is no way of doing this
    // properly because WP-Print provides no hooks, or even an id for its
    // links.
    for (var i = 0; i < links.length; ++i) {
        link = links[i];
        if (string_ends_with(link.href, '/print/') || string_ends_with(link.href, '/print')) {
            link.setAttribute('onclick', "sync_pv_mark_post_as_printed(); return false;");
        }
    }
}

function string_ends_with(string, pattern) { 
    if (string.length < pattern.length) {
        return false;
    } else {
        return string.slice(string.length - pattern.length) === pattern;
    }
}

function sync_in_array(needle, haystack) {
    for (var i = 0; i < haystack.length; i += 1) {
        if (haystack[i] == needle) {
            return true;
        }
    }
    return false;
}

function sync_pv_mark_post_as_requested() {
    sync_pv_mark_post_via_ajax('requested');
}

function sync_pv_mark_post_as_read() {
    if (!sync_pv_timer_done) {
        clearTimeout(sync_pv_timer_id);
        sync_pv_timer_done = true;
        sync_pv_mark_post_via_ajax('read');
    }
}

function sync_pv_goto_print_page() {
    document.location = sync_pv_permalink + 'print/';
}

function sync_pv_mark_post_as_printed() {
    sync_pv_mark_post_via_ajax('printed', sync_pv_goto_print_page);
}

function sync_pv_mark_post_via_ajax(type, oncompletion) {
    var variables = new Array();
    variables['type'] = type
    variables['post_id'] = sync_pv_post_id;
    sync_pv_run_ajax(sync_pv_ajax_url, variables, oncompletion);
}

function sync_pv_run_ajax(url, variables, oncompletion) {   
    var ajax = new sack(url);

    for (key in variables) {
        ajax.setVar(key, variables[key]);
    }
    
    if (oncompletion) {
        ajax.onCompletion = oncompletion;
    }
    
    ajax.runAJAX();
}

