Search = function(searchButton, searchForm, validationFunction) {
	this.init(searchButton, searchForm, validationFunction);
};

Search.prototype = {
		button: null,
		form: null,
		validate: null,
		
		init: function(searchButton, searchForm, validationFunction) {
			this.button = document.getElementById(searchButton);
			this.form = document.getElementById(searchForm);
			this.validate = validationFunction;
		},
		
		enter: function(e) {
			if (!e) e = window.event;
			
			// If the keypress is not a 'return' exit
			if ((e.type == 'keypress') && (e.keyCode != '13')) return;
			this.search.executeSearch();
		},
		
		getFocus: function(item) {
			item.search = this;
			item.onkeypress = this.enter;
		},
		
		loseFocus: function(item) {
			item.search = null;
			item.onkeypress = null;
		},
		
		executeSearch: function() {
			this.button.value = "executeSearch...";
			if (this.validate(this.form)) {
				this.button.disabled = true;
				this.button.value = "Searching...";
				this.form.submit()
			}
		}
};

function nextPage(pageNum, form) {
	try {
		//alert('nextPage ' + pageNum);
	    form.pageNumber.value = pageNum;
	    form.operation.value = "nextPage";
	    //alert('operation = ' + form.operation.value + '\npageNumber = ' + form.pageNumber.value);
	    form.submit();
	} catch (e) {alert(e.message);}
}  

function ltrim(value) {
    var re = /\s*((\S+\s*)*)/;
    return value.replace(re, "$1");
}

function rtrim(value) {
    var re = /((\s*\S+)*)\s*/;
    return value.replace(re, "$1");
}

function trim(value) {
    return ltrim(rtrim(value));
}

function isNull(value) {
    if (value == null) return true;
    return (trim(value).length < 1);
} 

function moreLikeThis(form, docid) {
	try {
		form.operation.value = "morelikethis";
		form.flag.value = "morelikethisflag";
		form.docid.value = docid;
		form.submit();
	} catch (e) {alert(e.message);}
}

function moreLikeThisText(form, title) {
    try {
            form.operation.value = "morelikethistext";
            form.flag.value = "morelikethisflag";
            form.docid.value = title;
            form.submit();
    } catch (e) {alert(e.message);}
}

function moreLikeThisReference(form, pdfurl) {
	try {
	    form.operation.value = "morelikethisreference";
	    form.flag.value = "morelikethisflag";
	    form.reference.value=pdfurl;
	    form.submit();
	} catch (e) {alert(e.message);}
}

function dbcbx(id, restricted, subscribed) {
    var cbxId = id;
    var cbxRestricted = restricted;
    var cbxSubscribed = subscribed;
    //var cbxSearched = searched;
    var element = document.getElementById(id);
    //alert('Look for ID ' + id + ', found ' + element);

    this.setChecked = setChecked ;
    this.setUnchecked = setUnchecked ;
    this.setIfSubscribed = setIfSubscribed;
    //this.setIfSearched = setIfSearched;

    function setChecked () {
//        alert(element);
        if (element != null) 
            element.checked = true;
    }

    function setUnchecked () {
        if (element != null) 
            element.checked = false;
    }

    function setIfSubscribed() {
        if (restricted) {
            if (subscribed)
                setChecked();
            else
                setUnchecked();
        }
        else
            setChecked();
    }
}

var dbCbx = new Array();    
function addCbx(id, restricted, subscribed) {
    dbCbx[dbCbx.length] = new dbcbx(id, restricted, subscribed);
}

var ALL = 1;
var NONE = 2;
var SUBSCRIBED = 3;

function updateCbxs(state) {
    if (state == ALL) {
        for (var i = 0; i < dbCbx.length; i++){
            dbCbx[i].setChecked();
        }
    }
    else if (state == NONE) {
        for (var i = 0; i < dbCbx.length; i++)
            dbCbx[i].setUnchecked();
    }
    else if (state == SUBSCRIBED ) {
        for (var i = 0; i < dbCbx.length; i++)
            dbCbx[i].setIfSubscribed();
    }
}
