var MyOverText;
MyOverText = new Class({
	Implements: (typeof OverText != "undefined" ? OverText : null),
	
	attach: function(){
		var val = this.options.textOverride || this.element.get('alt') || this.element.get('title');
		if (!val) return;
		var next = this.element.getNext();
		if (next == null) next = this.element;
		this.text = new Element(this.options.element, {
			'class': 'overTxtLabel',
			styles: {
				lineHeight: 'normal',
				position: 'absolute',
				cursor: 'text'
			},
			html: val,
			events: {
				click: this.hide.pass(this.options.element == 'label', this)
			}
		}).inject(next, 'after');
		
		if (this.options.element == 'label') {
			if (!this.element.get('id')) this.element.set('id', 'input_' + new Date().getTime());
			this.text.set('for', this.element.get('id'));
		}
	
		if (this.options.wrap) {
			this.textHolder = new Element('div', {
				styles: {
					lineHeight: 'normal',
					position: 'relative'
				},
				'class':'overTxtWrapper'
			}).adopt(this.text).inject(this.element, 'before');
		}
	
		this.element.addEvents({
			focus: this.focus,
			blur: this.assert,
			change: this.assert
		}).store('OverTextDiv', this.text);
		window.addEvent('resize', this.reposition.bind(this));
		this.assert(true);
		this.reposition();
		this.element.overMask = this;
	}
});

var Search;
var Search = {
	loaded: false,
	cont: null,
	
	init: function(){
		var headerAdvancedSearch = $('header-advanced-search');
		if (headerAdvancedSearch != null){
			$('advanced-search').addEvent('click', this.openAdvancedSearch.bind(this));
			$('advanced-search-close').addEvent('click', this.closeAdvancedSearch.bind(this));
			this.cont = $('advanced-search-cont');
			//headerAdvancedSearch.setStyle('display', 'block');
			
			$$('input.inp-search').each(function(element){
				new MyOverText(element);
			});
			
			//headerAdvancedSearch.setStyle('display', 'none');
			$('advanced-search-category').addEvent('change', function(event){
				var select = $(event.target);
				this.loadForm(select.get('value'), true);
			}.bind(this));
		}else{
			$$('input.inp-search').each(function(element){
				new MyOverText(element);
			});
		}
		
		this.mainSearchButton = $('main-btn-search');
		this.mainSearchField = $('main-field-search');
		
		if (this.mainSearchButton != null){
			this.mainSearchButton.addEvent('click', function(event){
				var searchWord = this.mainSearchField.get('value');
				if(window.location.pathname.indexOf('search', 0) >= 0)
				{
					var windowPathname = window.location.pathname;
				}
				else
				{
					var windowPathname = '/search';
				}
				
				//rep(/<vrimg\sparam=\"([^>]*)\s([^>]*)\s([^>]*)\">([^>]*)(<.*?img.*?>)([^>]*)<\/vrimg>/gi,"$4<im $1 $2>$3</im>$6");
				//s = s.replace(re, str);
				windowPathname = windowPathname.replace(/\/page\/[0-9]{1,}/gi, '');
				
				if(searchWord != '')
				{
					window.location = windowPathname + '?search=' + searchWord;
				}
				else
				{
					window.location = windowPathname;
				}
				return false; 
			}.bind(this));
		}
		
		this.category = $('category_select');
		if (this.category != null){
			this.category.addEvent('change', function(event){
				var form = this.category.form;
				var category = $(form.category).get('value');
				//form.action = form.action + '?category=' + category;
				//form.submit();
				var searchWord = this.mainSearchField.get('value');
				var getParameters = '';
				if(searchWord != '')
				{
					getParameters = '?search=' + searchWord;
				}
	
				if(category == 0)
				{
					//window.location = form.action + getParameters;
					window.location = form.action + '/category/all' + getParameters;
				}
				else
				{
					window.location = form.action + '/category/' + category + getParameters;
				}
				return false; 
			}.bind(this));
		}
	},
	
	mask: function(){
		this.cont.empty();
		var mask = new Element('div', {'class': 'advanced-mask'})
					.adopt(new Element('img', {src: '/images/search-loader.gif'}));
		this.cont.adopt(mask);
	},
	
	loadForm: function(category, first){
		this.mask();
		var FormRequest = new Request.HTML({
			url: '/search-getform',
			async: false,
			evalScripts: false,
			onSuccess: function(tree, elements, html, javascript){
				this.cont.empty();
				this.cont.adopt(tree);
				this.loaded = true;
				if (javascript){
					eval(javascript);
				}
				var advBtn = $('adv-btn-popup-search');
				if(advBtn)
				{
					advBtn.addEvent('click', function(){
						this.reloadAdvForm();
						return false;
					}.bind(this));
				}	
			}.bind(this)
		});
		FormRequest.send('category=' + category);
	},
	
	openAdvancedSearch: function(){
		$('header-search').setStyle('display', 'none');
		$('header-advanced-search').setStyle('display', 'block');
		if (this.loaded == false){
			this.loadForm($('advanced-search-category').get('value'), true);
		}
		return false;
	},
	
	closeAdvancedSearch: function(){
		$('header-advanced-search').setStyle('display', 'none');
		$('header-search').setStyle('display', 'block');
		return false;
	},
	
	setHashedData: function(h, form){
		if (h.category){
			Search.category.set('value', h.category);
			var category = $(form.category);
			category.set('value', h.category);
		}
		if (h.search) {
			var sfield = $(form.search);
			var mfield = $('main-field-search');
			mfield.set('value', h.search);
			mfield.overMask.hide();
			sfield.set('value', h.search);
		}
	},
	
	reloadAdvForm: function(savepage){
		
		this.form = $(document.forms['advanced-search-form']);
		this.category = $('advanced-search-category');
		this.searchUrl = '/search/';

		var windowPathname = '/search';
		
		var categoryName = '';
		if(this.category) categoryName = this.category.get('value');

		if (categoryName == 'drinks')//Init bar widget
		{
				var looking = 'drinks';
				if(this.form.looking) looking = this.form.looking.get('value');
				if(looking == 'drinks')
				{
					var serviseName = '';
					if(this.form.service) serviseName = this.form.service.get('value');
				}
				else if(looking == 'accessories')
				{
					var serviseName = '';
					if(this.form.service1) serviseName = this.form.service1.get('value');
				}
				else
				{
					var serviseName = '';
					if(this.form.service) serviseName = this.form.service.get('value');
				}
				if(serviseName == '') serviseName = 'all';
		} 
		else if (categoryName == 'honeymoon')//Init honeymoon
		{
				var serviseName = '';
				var looking = 'night';
				if(this.form.looking) looking = this.form.looking.get('value');
				if(looking == 'abord')
				{
					if(this.form.services) serviseName = this.form.services.get('value');
				}
		}
		else if (categoryName == 'photographers-videographers')//Init phpto/video
		{
				serviseName = '';
		}
		else if (categoryName == 'transport')//Init transport
		{
				var looking = 'bridg';
				if(this.form.looking) looking = this.form.looking.get('value');

				if(looking == 'bridg')
				{
					var serviseName = '';
					if(this.form.services) serviseName = this.form.services.get('value');
				}
				else 
				{
					var serviseName = '';
					if(this.form.services1) serviseName = this.form.services1.get('value');
				}		

				if(serviseName == '') serviseName = 'all';
		}
		else if (categoryName == 'wedding-venues')//Init Wedding Venues
		{
				var serviseName = '';
				if(this.form.services) serviseName = this.form.services.get('value');
		}
		else
		{
				var serviseName = '';
				if(this.form.services) serviseName = this.form.services.get('value');				
		}
		
		if(categoryName != '')			
		{
			windowPathname = this.searchUrl + 'categroy/' + categoryName;
			if(serviseName != '' && serviseName != 'all')			
			{
				windowPathname = windowPathname + '/service/' + serviseName;
			}
		}

		var fParams = this.form.toQueryString();
		fParams = fParams.replace(/category=[0-9,a-z,-]{0,}\&/gi, '');
		fParams = fParams.replace(/services=[0-9,a-z,-]{0,}\&/gi, '');
		
		var urlToGo = windowPathname + '?' + fParams;
		
		window.location = urlToGo;
	}
};
Search.Elements = {
		initForm: function(sufix, category_id){
			//Init located widget
			var located = $('located' + sufix);
			if (located != null){
				this.initLocatedEvents(located, sufix)
			}
			//Init bar widget
			if (category_id == 4){
				this.initBarService($('looking' + sufix), sufix);
			}
			//Init honeymoon
			if (category_id == 9){
				this.initHoneymoon($('looking' + sufix), sufix);
			}
			//Init phpto/video
			if (category_id == 10){
				this.initPhotoVideo($('profession' + sufix), sufix);
			}
			//Init transport
			if (category_id == 12){
				this.initTransport($('looking' + sufix), sufix);
			}
			//Init Wedding Venues
			if (category_id == 14){
				this.initVenues($('can_caterers' + sufix), sufix);
			}
		},
		
		initVenues: function(checkb, sufix){
			var sph = $('spend_per_head' + sufix);
			this.toogleCheckBoxInput(checkb, sph);
			checkb.addEvent('click', function(){
				this.toogleCheckBoxInput(checkb, sph);
			}.bind(this));
			
			var mealchek = $('itc-checkbox-group-meal_seats' + sufix);
			var mealinput = $('people-meal' + sufix);
			this.toogleCheckBoxInput(mealchek, mealinput);
			mealchek.addEvent('click', function(){
				this.toogleCheckBoxInput(mealchek, mealinput);
			}.bind(this));
		},
		
		toogleCheckBoxInput: function(checkbox, input){
			if (checkbox.getProperty('checked')){
				input.removeProperty('disabled');
				input.getParent().getParent().setStyle('display', 'block');
			}else{
				input.setProperty('disabled', true);
				input.getParent().getParent().setStyle('display', 'none');
			}
		},
		
		initPhotoVideo: function(select, sufix){
			var photo = $('type_photo' + sufix).getParent().getParent();
			var video = $('type_video' + sufix).getParent().getParent();
			this.tooglePhotoVideo(select.get('value'), photo, video)
			select.addEvent('change', function(event){
				this.tooglePhotoVideo($(event.target).get('value'), photo, video)
			}.bind(this));
		},
		
		tooglePhotoVideo: function(val, photo, video){
			if (val == 'photo'){
				photo.setStyle('display', 'block');
				video.setStyle('display', 'none');
			}else if(val == 'video'){
				photo.setStyle('display', 'none');
				video.setStyle('display', 'block');
			}else{
				photo.setStyle('display', 'block');
				video.setStyle('display', 'block');
			}
		},
		
		initHoneymoon: function(select, sufix){
			var abord = [
				$('destination' + sufix).getParent().getParent(),
				$('durations' + sufix).getParent().getParent(),
				$('stars' + sufix).getParent().getParent()
			];
			this.toogleHoneymoon(select.get('value'), abord)
			select.addEvent('change', function(event){
				this.toogleHoneymoon($(event.target).get('value'), abord)
			}.bind(this));
		},
		
		toogleHoneymoon: function(val, abord){
			if (val == 'night' || val == 'homeland'){
				this.showLocated(true);
				abord.each(function(div){
					div.setStyle('display', 'none');
				});
			}else if(val == 'abord'){
				this.showLocated(false);
				abord.each(function(div){
					div.setStyle('display', 'block');
				});
			}else{
				this.showLocated(false);
				abord.each(function(div){
					div.setStyle('display', 'none');
				});
			}
		},
		
		initTransport: function(select, sufix){
			var bridg = $('services' + sufix).getParent().getParent();
			var guest = $('services1' + sufix).getParent().getParent();
			var capacity = $('capacity' + sufix).getParent().getParent();
			this.toogleTransport(select.get('value'), bridg, guest, capacity)
			select.addEvent('change', function(event){
				this.toogleTransport($(event.target).get('value'), bridg, guest, capacity)
			}.bind(this));
		},
		
		toogleTransport: function(val, bridg, guest, capacity){
			if (val == 'bridg'){
				guest.setStyle('display', 'none');
				capacity.setStyle('display', 'none');
				bridg.setStyle('display', 'block');
			}else if(val == 'guest'){
				guest.setStyle('display', 'block');
				capacity.setStyle('display', 'block');
				bridg.setStyle('display', 'none');
			}else{
				guest.setStyle('display', 'none');
				capacity.setStyle('display', 'none');
				bridg.setStyle('display', 'none');
			}
		},
		
		initLocatedEvents: function(located, sufix){
			var city = $('city' + sufix);
			var zip = $('zip' + sufix);
			this.located = located;
			this.city = city;
			located.addEvent('change', function(event){
				this.toogleCity($(event.target), city, zip);
			}.bind(this));
			this.toogleCity(located, city, zip);
		},
		
		toogleCity: function(select, city, zip){
			var value = select.get('value');
			var parent = city.getParent().getParent();
			var zipparent = zip.getParent().getParent();
			city.setProperty('disabled', true);
			zip.setProperty('disabled', true);
			parent.setStyle('display', 'none');
			zipparent.setStyle('display', 'none');
			if (value == 4 || value == 'city'){
				city.removeProperty('disabled');
				parent.setStyle('display', 'block');
			}else if(value == 6 || value == 'zip'){
				zip.removeProperty('disabled');
				zipparent.setStyle('display', 'block');
			}
		},
		
		located: null,
		city: null,
		show_last: null,
		
		showLocated: function(show){
			if (show == false){
				if (this.city.getProperty('disabled')){
					this.show_last = false;
				}else{
					this.show_last = true;
				}
				this.located.getParent().getParent().setStyle('display', 'none');
				this.city.getParent().getParent().setStyle('display', 'none');
			}else{
				this.located.getParent().getParent().setStyle('display', 'block');
				if (this.show_last == true){
					this.city.getParent().getParent().setStyle('display', 'block');
				}
			}
		},
		
		initBarService: function(select, sufix){
			var drink = $('service' + sufix).getParent().getParent();
			var accer = $('service1' + sufix).getParent().getParent();
			this.toogleBar(select.get('value'), drink, accer)
			select.addEvent('change', function(event){
				this.toogleBar($(event.target).get('value'), drink, accer)
			}.bind(this));
		},
		
		toogleBar: function(val, drink, accer){
			if (val == 'drinks'){
				accer.setStyle('display', 'none');
				drink.setStyle('display', 'block');
			}else if(val == 'accessories'){
				accer.setStyle('display', 'block');
				drink.setStyle('display', 'none');
			}else{
				accer.setStyle('display', 'block');
				drink.setStyle('display', 'block');
			}
		}
	};

window.addEvent('domready', function() {
	Search.init();
});

