
/**
 * Search-class
 * @class Search
 */
function Search(){

    /**
     * Earlier search strings
     * @type string
     */
    this.currenttool = "";
    
    /**
     * Searchstring locked or not
     * @type string
     */
    this.searchstringlocked = "true";
    
    /**
     * Earlier search strings
     * @private
     * @type array
     */
    var earliersearches = new Array();
    
    /**
     * Earlier search strings (cookie contents)
     * @private
     * @type array
     */
    var earliersearchesraw = new Array();
    
    var that = this;
    
    /**
     * Runs a search using given parameters
     * @function submitSearch
     * @param {string} searchtype
     * @param {string} searchstring
     */
    this.submitSearch = function(searchtype, searchstring){
    
        if (this.checkSearchstring(searchstring).length > 0) {
        
            var searchstringa = searchstring.replace(/\"/g, '\"');
            var searchstringb = searchstring.replace(/\"/g, '#');
            
            earliersearch = "<div style=\"margin-bottom: 10px;\">" +
            "<a class=\"\" style=\"display: inline; padding: 0px;\" href=\"javascript: search.replaceSearchfields('" +
            searchstringb +
            "')\">" +
            searchstringa +
            "</a></div>";
            earliersearchesraw.unshift(searchstring);
            earliersearches.unshift(earliersearch);
            earliersearches = earliersearches.slice(0, 10);
            earliersearchesraw = earliersearchesraw.slice(0, 10);
            
            $.cookie('datacalmerssearches', earliersearchesraw.join(';'));
            $('#latestsearchesarea').html(earliersearches.join('') + "<form style=\"margin-top: 30px;\">" +
            "<button type=\"button\" onclick=\"search.clearSearches();\" value=\"Clear\">Clear</button></form>");
            
        }
        
        if (searchtype == "pubmed") 
            pubmed.searchPubmed(searchstring, "pubmed", 0, $("input[name='pubmed_freefulltextonlysel']").attr('checked'), $("input[name='pubmed_medlinesubset']:checked").val(), $("input[name='pubmed_filterseenitems']").attr('checked'), $('#pubmed_earliestyear').text(), $('#pubmed_latestyear').text(), false);
        else 
            if (searchtype == "nutritions") 
                nutrition.searchFoods(searchstring);
            else 
                if (searchtype == "querycomposer") 
                    nutrition.query(searchstring);
        
    };
    
    /**
     * Adds a new search criterion to the searchfield
     * @function addAfter
     * @param {string} nodeid
     * @param {string} stringtoadd
     * @param {stringt} type
     * @param {string} targetfield
     */
    this.addAfter = function(nodeid, stringtoadd, type, targetfield){
    
        /*
         if (nodeid.substr(nodeid.length-2,1) == "_" ) {
         $('#meshnoticeofthemoment').html('Sub level terms only').show().fadeOut("slow");
         return false;
         }
         */
        var currentstring = $('#pubmedslicer_searchstring').val();
        
        if (currentstring.length == 0)
            $('#' + targetfield + '_searchstring').val(stringtoadd + ' [' + type + ']');
        
        else if (currentstring.charAt((currentstring.length) - 1) == " ")
	         $('#' + targetfield + '_searchstring').val(currentstring + 'AND ' + stringtoadd + ' [' + type + ']');
            
        else
             $('#' + targetfield + '_searchstring').val(currentstring + ' AND ' + stringtoadd + ' [' + type + ']');
        
//        this.fillSearchfields('#' + targetfield + '_searchstring');
        
    };
    
    /**
     * Wipes off earlier searches, including the used cookie
     * @function clearSearches
     */
    this.clearSearches = function(){
    
        $.cookie('datacalmerssearches', '', {
            expires: -1
        });
        $('#latestsearchesarea').html('<em>empty</em>');
        earliersearches = new Array();
        earliersearchesraw = new Array();
        
    };
    
    /**
     * Loads earlier searches from the cookie
     * @function loadEarlierSearches
     */
    this.loadEarlierSearches = function(){
    
        var cookie = $.cookie('datacalmerssearches');
        if (cookie) {
        
            var tempsearches = cookie.split(';');
            
            for (var i = 0; i < tempsearches.length; i++) {
            
                var searchstring = this.checkSearchstring(tempsearches[i]).replace(/\"/g, '\"');
                var searchstringb = this.checkSearchstring(tempsearches[i]).replace(/\"/g, '#');
                earliersearchesraw.push(searchstring);
                earliersearches.push("<div style=\"margin-bottom: 10px;\">" +
                "<a class=\"\" style=\"display: inline; padding: 0px;\" href=\"javascript: search.replaceSearchfields('" +
                searchstringb +
                "')\">" +
                searchstring +
                "</a></div>");
                
            }
            
            $('#latestsearchesarea').html(earliersearches.join('') + "<form style=\"margin-top: 30px;\">" +
            "<button type=\"button\" onclick=\"search.clearSearches();\" value=\"Clear\">Clear</button></form>");
            
        }
        
    };
    
    /**
     * Checks validity of a searchstring
     * @function checkSearchString
     * @param {string} searchstring
     */
    this.checkSearchstring = function(searchstring){
    
        if (/^[\"#a-zåäö0-9\-\/\.\,\(\)\[\] :]{1,5000}$/i.test(searchstring)) {
        
            var splitsearch = searchstring.split(" ");
            newsearchword = new Array();
            
            count = splitsearch.length;
            for (var i = 0; i < count; i++) {
            
                if (splitsearch[i].length > 0) {
                
                    newsearchword.push(splitsearch[i]);
                    
                }
                
            }
            
            searchstring = newsearchword.join(" ");
            
            return searchstring;
            
        }
        
        else {
            return "";
        }
        
    };
    
    /**
     * Fills searchfields with a string
     * @function fillSearchfiel
     * @param {string} type
     */
    this.replaceSearchfields = function(){
    
        //        var searchstring = searchstring.replace(/#/g, '\"');
        var currentsearchstring = $("#" + that.currenttool + "_searchstring").val();
		
        $('input[id$=searchstring]').val(currentsearchstring);
        
    };

    /**
     * Fills all the searchfields with a string
     * @function replaceSearchfiels
     * @param {string} type
     */
    this.replaceSearchfields = function(){
    
        //        var searchstring = searchstring.replace(/#/g, '\"');
        var currentsearchstring = $("#" + that.currenttool + "_searchstring").val();
		
        $('input[id$=searchstring]').val(currentsearchstring);
        
    };
    
    /*
     this.jumpTo = function(searchstring, findmeshterms) {
     $('#jumptolink').html("<form action='#'><input type='text' maxlength='200' style='height: 8px; width: 100px;'"+
     "id='pubmedjumpto' name='pubmedjumpto' value='10' onchange='var retstart = $(\"#pubmedjumpto\").val();"+
     "searchPubmed(\""+searchstring+"\",\"pubmed\",\""+retstart+"\","+findmeshterms+")' /></form>");
     }
     */
    this.tabChange = function(type){
    
        switch (type) {
            case "pubmedslicer":{
                $('#pubmed_group').show();
                $('#nutrition_group').hide();
                $('#querycomposer_group').hide();
                $('#pubmedslicer_searchstring').attr('name', 'searchstring');
                $('#nutritiontactician_searchstring').attr('name', '');
                $('#querycomposer_searchstring').attr('name', '');
                break;
            }
            case "nutritiontactician":{
                $('#pubmed_group').hide();
                $('#nutrition_group').show();
                $('#querycomposer_group').hide();
                $('#pubmedslicer_searchstring').attr('name', '');
                $('#nutritiontactician_searchstring').attr('name', 'searchstring');
                $('#querycomposer_searchstring').attr('name', '');
                break;
            }
            case "querycomposer":{
                $('#pubmed_group').hide();
                $('#nutrition_group').hide();
                $('#querycomposer_group').show();
                $('#pubmedslicer_searchstring').attr('name', '');
                $('#nutritiontactician_searchstring').attr('name', '');
                $('#querycomposer_searchstring').attr('name', 'searchstring');
                break;
            }
        }
        
        if (that.searchstringlocked) 
            this.replaceSearchfields();
        this.currenttool = type;
        
    };
    
    /**
     * Set searchlock bindings
     * @function setSearchlockBindings
     */
    this.setSearchlockBindings = function(){
    
        $("#pubmedslicer_searchtextfieldwrapper").bind('dblclick', function(e){
            e.preventDefault();
        });
        $("#pubmedslicer_searchtextfieldwrapper").bind('click', function(e){
            var position = $(this).position();
            if (e.pageX - position['left'] > 306 && e.pageX - position['left'] < 325) {
				if (that.searchstringlocked) {
					$("div[id$=searchtextfieldwrapper]").css('background-image', 'url(images/lock_open.png)');
					that.searchstringlocked = false;
				}
				else {
					$("div[id$=searchtextfieldwrapper]").css('background-image', 'url(images/lock.png)');
					that.searchstringlocked = true;
				}
			}
        });
        $("#pubmedslicer_searchtextfieldwrapper").bind("mouseenter", function(e){
            var position = $(this).position();
            if (e.pageX - position['left'] > 306 && e.pageX - position['left'] < 325) 
                $(this).css('cursor', 'pointer');
        });
        $("#pubmedslicer_searchtextfieldwrapper").bind("mouseleave", function(e){
            $(this).css('cursor', 'default');
        });
        
        $("#nutritiontactician_searchtextfieldwrapper").bind('dblclick', function(e){
            e.preventDefault();
        });
        $("#nutritiontactician_searchtextfieldwrapper").bind('click', function(e){
            var position = $(this).position();
            if (e.pageX - position['left'] > 306 && e.pageX - position['left'] < 325) {
				if (that.searchstringlocked) {
					$("div[id$=searchtextfieldwrapper]").css('background-image', 'url(images/lock_open.png)');
					that.searchstringlocked = false;
				}
				else {
					$("div[id$=searchtextfieldwrapper]").css('background-image', 'url(images/lock.png)');
					that.searchstringlocked = true;
				}
			}
        });
        $("#nutritiontactician_searchtextfieldwrapper").bind("mouseenter", function(e){
            var position = $(this).position();
            if (e.pageX - position['left'] > 306 && e.pageX - position['left'] < 325) 
                $(this).css('cursor', 'pointer');
        });
        $("#nutritiontactician_searchtextfieldwrapper").bind("mouseleave", function(e){
            $(this).css('cursor', 'default');
        });
        
        $("#querycomposer_searchtextfieldwrapper").bind('dblclick', function(e){
            e.preventDefault();
        });
        $("#querycomposer_searchtextfieldwrapper").bind('click', function(e){
            var position = $(this).position();
            if (e.pageX - position['left'] > 306 && e.pageX - position['left'] < 325) {
				if (that.searchstringlocked) {
					$("div[id$=searchtextfieldwrapper]").css('background-image', 'url(images/lock_open.png)');
					that.searchstringlocked = false;
				}
				else {
					$("div[id$=searchtextfieldwrapper]").css('background-image', 'url(images/lock.png)');
					that.searchstringlocked = true;
				}
			}
        });
        $("#querycomposer_searchtextfieldwrapper").bind("mouseenter", function(e){
            var position = $(this).position();
            if (e.pageX - position['left'] > 306 && e.pageX - position['left'] < 325) 
                $(this).css('cursor', 'pointer');
        });
        $("#querycomposer_searchtextfieldwrapper").bind("mouseleave", function(e){
            $(this).css('cursor', 'default');
        });
        
    }
    
}
