var headerUtils;
Header = newClass(null, {
    constructor: function(){
    	var searchForm = $("#searchPlace");
    	if (searchForm.length == 0){
    		return;
    	}
    	this.tipPostfix = "Tip"; 
    	this.initInput("search_word");
    	this.initInput("geo_area");
    	this.searchPage = searchForm.find("#searchPage").attr("title");
    	this.useAreaSearch = searchForm.find("#useAreaSearch").attr("title") == "true";
    	this.alphabetSearch = searchForm.find("#sort_order_id").attr("title") == "company_name";
    	searchForm.bind('submit', {env:this}, this.gotoSearchPage);
        $("#search_word").bind('keyup', {env: this}, this.editSearchField);
    },

    initInput: function(inputId) {
    	var input = $("#" + inputId);
    	var inputTip = $("#" + inputId + this.tipPostfix);
    	input.bind('focus', {env:this, id:inputId, view:false}, this.toggleSearchTip);
    	input.bind('blur', {env:this, id:inputId, view:true}, this.toggleSearchTip);
    	input.bind('keypress', {env:this, id:inputId, view:false}, this.toggleSearchTip);
    	$(inputTip).bind('click', {env:this, id:inputId, view:false}, this.toggleSearchTip);
        this.toggleSearchTip({data:{env:this, id:inputId, view:true}});
    },
    
    toggleSearchTip: function(e) {
    	var env = e.data.env;
    	var sendFocusToId = "#" + e.data.id;
    	var inputElement = $(sendFocusToId);
    	var divElement = $(sendFocusToId + env.tipPostfix);   	
	    if (!e.data.view) {
	    	divElement.css("display","none");
	    	// don't change to inputElement, than you take infinity recurse
	        document.getElementById(e.data.id).focus();
	        inputElement.parents(".field-wrap").addClass("selected-field");
	    } else {
	        //if browser supports document.activeElement
	        if (inputElement.val() == '') {
	        	divElement.css("display","block");
	        }
	        inputElement.parents(".field-wrap").removeClass("selected-field");
	    }
	},
		
	gotoSearchPage: function(e){
	    	var env = e.data.env;
	    // prepare search word and geo_area to be included in the URL
	    var searchWord = env._toUrl($('#search_word').val().replace(/[\?]/g,''));
	    var geoArea = env._toUrl($('#geo_area').val().replace(/[\?]/g,''));
	    if ( searchWord.length == 0) {
	        if (env.useAreaSearch && geoArea.length != 0){        	
	        	document.location.href = "/" + geoArea;
	        	return false;
	        } else {
	            searchWord = env._toUrl(defaultUrlCategory);
	        }
	    }
       	var urlString = env.searchPage+ "/" + searchWord;
	    if (geoArea.length != 0) {
	        urlString += "/" + geoArea;
	    } else if (env.alphabetSearch) {
            urlString += "/" +  $("#actual-geo-area-id").attr("title");
	    }
	    document.location.href = urlString;
        return false;
	},

    /**
	 * Strip all forbidden for URL characters from string
	 * @param toEncode
	 */
	_toUrl: function (toEncode) {
	    //trimming
	    toEncode = toEncode.replace(/^\s+|\s+$/g, '');
	    //remove '/' and '+' and '%'
	    var regexp = /[%+\/]/g;
	    toEncode = toEncode.replace(regexp, '');
	    toEncode = encodeURIComponent(toEncode);
	    toEncode = toEncode.replace(/(%20)+/g, '+');
	    return toEncode;
	},

    editSearchField: function() {
		var searchWord = $('#search_word').val().replace(/[\?]/g,'');
		var urlString; 			  
		if ( searchWord.length == 0) {
			if (headerUtils.useAreaSearch){        	
		      	urlString = "/";
		    } else {
		    	urlString = headerUtils.searchPage+ "/" + headerUtils._toUrl(defaultUrlCategory) + "/";
		    }
		} else {
			urlString = headerUtils.searchPage+ "/" + headerUtils._toUrl(searchWord) + "/";
		}        			          			    
		  
		$(".hint-area").each(function () {        				
			$(this).attr("href", urlString + $(this).text());
		});
		$(".hint-area.main-area").each(function () {        				
			$(this).attr("href", urlString + $(this).attr("title"));
		});

		return false;
    }


});
$(document).ready(function() {
	headerUtils = new Header();
});
