/* $Id: search.js,v 1.3 2007-09-18 12:05:44 sondberg Exp $
 * ----------------------------------------------------------------
 * Javascript container - tools for updating records and hit counts etc.
 */

/* Update hit count for target given by id */
function update_hit_count (id, hits, cclquery, type) {
    var form = get_session();
    var base_uri = form.base_uri.value;
    var href = base_uri + form.rs_document.value;
    var hits_id = id + '_hits';
    var title_id = id + '_title';

    if (hits_node = document.getElementById(hits_id)) {
        hits_node.innerHTML = hits;
    }

    update_status_icon( id, 'checkmark.gif' );
    
    if (hits > 0) {
        if (title_node = document.getElementById(title_id)) {
            title = title_node.innerHTML;
            title = '<a href="' + href + '?focus=' + id + '&cclquery=' +
                    escape(cclquery) + '&offset=1">'+ title +'</a>';
                    
            title_node.innerHTML = title;
        }
    }

    update_pager(id, hits, type);
}


function update_status_icon (id, icon, msg) {
    var status_id = id + '_status';
    var form = get_session();
    var base_uri = form.base_uri.value;
    var alt = '';
    var title = '';

    if (status_cell = document.getElementById(status_id)) {
        var src = base_uri + 'gfx/' + icon;
        
        if ( msg ) {
            alt = title = msg;
        }

        var content = '<img src="' + src + '" alt="' + alt + '" ' +
                      'title="' + title + '"/>';

        status_cell.innerHTML = content;
    }
}


function get_session () {
    return document.result_session;
}


function show_number_selector (id) {
    var cell_id = 'number_select_' + id;
    
    if ( cell = document.getElementById( cell_id ) ) {
        cell.style.display = 'block';
    } else {
        alert( 'Unable to find number selector: ' + cell_id );
    }
}



function update_pager (id, hits, type) {
    var cell_id = 'pager_box_' + id;
    var interval_id = 'record_interval_' + id;
    var form = get_session();
    var single_offset = Number( form.single_offset.value );
    var session = form.session.value + '&amp;' + 'focus=' + id;
    var offset;
    var number;
    
    if ( type == 'full' ) {
        offset = single_offset;
        number = 1;
    } else {
        show_number_selector(id);
        offset = Number( form.offset.value );
        number = Number( form.number.value );
    }

    var base_uri = form.base_uri.value;
    var previous_text = form.previous.value;
    var next_text = form.next.value;
    var interval_long_prefix = form.interval_long_prefix.value; 
    var interval_long_infix = form.interval_long_infix.value; 
    var next_html = '';
    var previous_html = '';
    var next_offset = offset + number;
    var prev_offset = offset - number;
    var upper_offset = offset + number - 1;
    var text;
    var offset_parm;
 
    if ( upper_offset > hits ) {
        upper_offset = hits;
    }
   
    if ( type == 'full' ) {
        offset_parm = 'single_offset';
        href = base_uri + form.rs_document.value;
        text = interval_long_prefix + '&#xa0;' + single_offset;
    } else {
        offset_parm = 'offset';
        href = base_uri + form.rs_document.value;
        text = interval_long_prefix + '&#xa0;' + offset + '&#xa0;' +
               interval_long_infix + '&#xa0;' + upper_offset;
    }

    text += '&#xa0;af&#xa0;' + hits;

    if ( pager_cell = document.getElementById(cell_id) ) {
        if ( prev_offset > 0 ) {
            previous_html = '<a class="federatedPager" href="' + href +
                            session + '&amp;' +
                            offset_parm + '=' + prev_offset + '">' +
                            previous_text + '</a>';
        } else { 
            previous_html = '<span class="federatedPager">' + previous_text +
                            '</span>';
        }

        if ( next_offset <= hits ) {
            next_html = '<a class="federatedPager" href="' + href + session +
                '&amp;' + offset_parm + '=' + next_offset + '">' + next_text +
                '</a>';
        } else {
            next_html = '<span class="federatedPager">' + next_text + '</span>';
        }

        pager_cell.innerHTML = previous_html + '&#xa0;|&#xa0;' + next_html;
    } else {
        alert( 'Could not find pager box: ' + cell_id );
    }

    if ( interval_cell = document.getElementById( interval_id ) ) {
        interval_cell.innerHTML = text;
    } else {
        alert( 'Count not find record interval box: ' + interval_id );
    }
}


function report_error (id, msg) {
    update_status_icon( id, 'x.gif', msg )
}


function show_globalerror(msg) {
    var n = document.getElementById('error');
    n.style.display = 'block';
    var msg = unescape(msg);
    var i = 1;;
    while (i >= 0) {
        msg = msg.replace('+', ' ');
	i = msg.indexOf('+');
    }
    n.innerHTML = msg;
}


function get_record_box (id) {
    if ( cell = document.getElementById( 'record_box_' + id ) ) {
        return cell;
    } else {
        alert( 'Could not find record_box ID=' + id );
    }
}


function show_record_box (id) {
    var cell = get_record_box( id );
    cell.style.display = 'block';
}


function record_decode (rec) {
    var regexp = new RegExp( '&apos;' );
    return rec.replace( regexp, "'" );
}



function insert_record (id, offset, type, rec) {
    var form = get_session(); 
    var base_uri = form.base_uri.value;
    var session = form.session.value + '&amp;' + 'focus=' + id;
    var cell = get_record_box( id );
    var uri = base_uri + form.rs_document.value + session + '&single_offset=' +
              offset;
    var decoded_rec = record_decode(rec);
    var rec_container;

    if ( type == 'full' ) {
        rec_container = document.createElement('div');
        rec_container.className = 'fullrecord';
        rec_container.innerHTML = decoded_rec;
    } else {
        rec_container = document.createElement('div');
        div_node = document.createElement('div');
        div_node.className = 'shortrecord';
        div_node.innerHTML = decoded_rec;
        rec_container.appendChild(div_node);
    }

    cell.appendChild(rec_container);
}


function change_record_number (cell) {
    form = get_session();
    form.number.value = cell.value;
    form.offset.value = 1;
    form.submit();
}


function update_language (cell) {
    form = get_session();
    form.lang.value = cell.value;
    form.submit();
}


function show_target_info (id) {
    cell_id = 'target_info_' + id;

    if ( cell = document.getElementById( cell_id ) ) {
        cell.style.visibility = 'visible';
    }
}


function info_box (id, left, top, width, height) {
    var cell = document.getElementById(id);
    var divtags = cell.getElementsByTagName('div');
    
    cell.style.width = (parseInt(width) + 5) + 'px';
    cell.style.height = (parseInt(height) + 5) + 'px';
    cell.style.left = left;
    cell.style.top = top;

    divtags[0].style.width = width + 'px';
    divtags[0].style.height = height + 'px';
    divtags[1].style.width = width + 'px';
    divtags[1].style.height = height + 'px';
    divtags[2].style.width = width + 'px';
    divtags[2].style.height = height + 'px';
    divtags[3].style.width = width + 'px';
    divtags[3].style.height = height + 'px';
   
    info_box_toggle(id);
}



function info_box_toggle (id) {
    var cell = document.getElementById(id);
    cell.style.display = (cell.style.display == 'block' ? 'none' : 'block');
}


function update_target_list (obj) {
    var form = document.advanced_search_form;
    var id = obj.value;
    var field = form['selected_targets[' + id + ']'];

    if ( obj.checked ) {
        field.value = 1;
    } else {
        field.value = 0;
    }
}


function search_submit (form) {
    form.submit();
}


function update_date_fields (obj) {
    var date_to = document.getElementById( 'date_to' );

    if ( (obj.value == 'before') || 
         (obj.value == 'after') ) {

        date_to.style.display = 'none';
    } else if ( obj.value == 'between' ) {
        date_to.style.display = 'inline';
    } else {
        alert( 'Unkown type of date interval: ' + obj.value );
    }
}


function pop_up_win (script, win_id) {
        pop_up_win_custom( script, win_id, 760, 760 );
}

function pop_up_win_custom (script, win_id, height, width) {
    window.open( script, win_id, 'width=' + width + ',height=' + height +
                 ',screenX=1,screenY=1,top=1,left=1,resizable=yes,' +
                 'scrollbars=1,scrolling=yes');
}


function resize_img (obj) {
    if (obj.width > 78)
        obj.width = 78;
}



function display_comment_box (title, cclquery, id, offset, type, url) {
    pop_up_win_custom('php/comment_form.php?title='+escape(title)+
                      '&cclquery=' + cclquery + '&id=' + id + '&offset=' +
                      offset + '&type=' + type + '&url=' + escape(url),
                      'comment_form', 400, 400);
}


