

/************ START fielddefaults ********************/

var FieldDefaults = new Class({
	//implements
	Implements: [Options],

	//options
	options: {
		collection: 'input.blanktext',
		normalCls: '',
		blankCls:'blanktext',
		els: []
	},
	
	//initialization
	initialize: function(options) {
		//set options
		this.setOptions(options);
		this.defaults();
	},
	
	//a method that does whatever you want
	defaults: function() {
	    var els = $$(this.options.collection)
		els.each(function(el) {
		    
		    if (el.get('value') == ''){
		        el.set('value', el.get('alt'));
		        el.addClass(this.options.blankCls);
		    }
			
			el.addEvent('focus', function() { 
			    if(el.get('value') == el.get('alt')) { 
			        el.set('value',''); 
			        el.removeClass(this.options.blankCls);
			        //this.swapCssClass(el, this.options.blankCls, this.options.normalCls)
			    } 
			}.bind(this));
			
			el.addEvent('blur', function() { 
			    if(el.get('value') == '') { 
			        el.set('value',el.get('alt')); 
			        el.addClass(this.options.blankCls);
			    } 
			}.bind(this));
		}.bind(this));
	},
	
	swapCssClass: function(el, remove, add){
	    if (el) {
	        if (remove && remove.length > 0) {
	            el.removeClass(remove);
	        }
	        if (add && add.length > 0) {
	            el.addClass(add);
	        }
	    }
	}
	
});

/************ START search ********************/

var SpaciaSearch = function() { 
    var baseUrl = '/';
    var blnIsMapPage = false;
    var form, fieldDefaults, acTown, acStation, acRefNo, tabs, panels;
    
    function setTab(i){
        if (i == null){
            i = 0;
        }
        
        tabs.each(function(tab, idx, allTabs){
            $(tab.parentNode).addClass('off');
            $(tab.parentNode).removeClass('on');
            $(tab.parentNode).removeClass('on-right');
        });
        
        $(tabs[i].parentNode).addClass('on');
        $(tabs[i].parentNode).removeClass('off');
        
        if (tabs[i].id == 'tab_searchrefno'){
            $(tabs[1].parentNode).addClass('on-right');
        }
        
        setPanel(tabs[i].rel);
    };
    
    function setPanel(id){
   
        panels.each(function(pnl){
            pnl.setStyle('display', 'none');
        });
        
        $(id).setStyle('display', 'block');
    };
    
    return {
        init: function(url, isMapPage, defaultTabIdx, isLondonBoroughs){
            baseUrl = url;
            blnIsMapPage = isMapPage;
            
            form = $('property-search-form');
            tabs = $$('#property-search ul li a');
            panels = $$('#property-search div.panel');
            
            $('search-panel-submit').addEvent('mouseenter', function(){
                $('search-panel-submit').setStyle('background-color','#FFA157');
            });

            $('search-panel-submit').addEvent('mouseleave', function(){
                $('search-panel-submit').setStyle('background-color','#666');
            });

            
            tabs.each(function(tab, idx, allTabs){
                if (idx == 0){
                    tab.addClass('on');
                    tab.removeClass('off');
                } else {
                    tab.removeClass('on');
                }
                
                if (!(isLondonBoroughs && idx == 0)){
                    tab.addEvent('click', function(e){
                        var rel = tab.rel;
                        if (rel && rel.length > 1){
                            if (rel != 'panel_london'){
                                e.preventDefault();   
                                setTab(idx);
                            }
                        }
                    });
                }
            });
            
            setTab(defaultTabIdx);
            
            fieldDefaults = new FieldDefaults({collection: 'input.default'});
            
            new Request.JSON({
                    url: baseUrl + 'handlers/custom/townlist.ashx',
                    onComplete: function(result) {
                        if (result && result.towns){
                            acTown = new Autocompleter.Local('town', result.towns, {
                                'minLength': 1, // We wait for at least one character
                                'overflow': false, // Overflow for more entries
                                'blankCls':'blanktext',
                                'blankText': 'Enter a town or city...'
                            });    
                        }
                    }
            }).send();
            
            new Request.JSON({
                    url: baseUrl + 'handlers/custom/refnolist.ashx',
                    onComplete: function(result) {
                        if (result && result.refnos){
                            acRefNo = new Autocompleter.Local('reference', result.refnos, {
                                'minLength': 1, // We wait for at least one character
                                'overflow': false, // Overflow for more entries
                                'blankText': 'Enter a reference no...',
                                'cls':'field'//,
                                //'forceSelect': true
                            });    
                        }
                    }
            }).send();
            
            new Request.JSON({
                    url: baseUrl + 'handlers/custom/stationlist.ashx',
                    onComplete: function(result) {
                        if (result && result.stationlist){
                            acStation = new Autocompleter.Local('station', result.stationlist, {
                                'minLength': 1, // We wait for at least one character
                                'overflow': false, // Overflow for more entries
                                'blankText': 'Enter a station name...',
                                'blankCls':'blanktext',
                                'forceSelect': false
                            });    
                        }
                    }
            }).send();
            
            //if this is a map page do an ajax request for results, otherwise, aloow normal postback
            if (blnIsMapPage && SpaciaMap){
                form.addEvent('submit', function(e){
                    if ($('resulttype_list') && $('resulttype_list').checked){
                        return true;
                    }
                    e.stop();
                    SpaciaMap.drawMarkers(true, true);
                });                
            }
        }
    }    
}();