var Builders = {

	domReady: function() {
		$('.builders-search-input').each(function(i,elmInput) {
			if ($(elmInput).attr('id') == '') {
				$(elmInput).attr('id','builder-search-'+Math.round(Math.random()*1000));
			}
			$(elmInput)
				.attr('autocomplete','off')
				.bind(Builders.eventHandlers.searchInput)
			;
		});
		$('.searchbutton').click(function() {
			var theElement = $(this).parent('.builders-search-wrapper').find('input.builders-search-input');
			var toSearchFor = theElement.val();
			if (theElement.data('emptyValue') === toSearchFor) {
				// nothing input
				return false;
			} 
			// search
			Builders.search(toSearchFor);
			return true;
		});
		
		// add enter-functionality to google-maps input fields
		$('#streetaddress, #city').keydown(function (event) {
			if (event.which == '13') {
				gmapsRedirect();
				return false;
			}
		});
		
	},
	
	profile: {
		
		domReady: function() {
			$('.route-input').each(function(i,elm){
				$(elm).bind(Builders.profile.eventHandlers.planRoute);
			});
		},
		
		eventHandlers: {
			
			planRoute: {
			
				focus: function() {
					if ($(this).hasClass('inactive')) {
						$(this).data('emptyValue',$(this).val()).val('').removeClass('inactive');
					}
				},
				
				blur: function() {
					if ($(this).val() == '') {
						$(this).val($(this).data('emptyValue')).addClass('inactive');
					}
				}
				
			}
		}
		
	},
	
	eventHandlers: {
		searchDropdown: {
			
			mouseenter: function() {
				$(this).parent('ul').find('li').removeClass('selected');
				$(this).addClass('selected');
				var iNewIndex = $(this).parent('ul').find('li').index(this);
				$(this).parent('ul').parent('.builders-search-dropdown').parent('.builders-search-wrapper').find('.builders-search-input')
					.data('selectedIndex',iNewIndex)
				;
			},
			
			click: function() {
				$(this).parent('ul').parent('.builders-search-dropdown').parent('.builders-search-wrapper').find('.builders-search-input').val($(this).find('span').text());
				Builders.search($(this).find('span').text());
			}
		
		},
		searchInput: {
		
			focus: function(evt) {
				if ($(this).hasClass('builders-search-input-inactive')) {
					$(this)
						.data('emptyValue',$(this).val())
						.val('')
						.removeClass('builders-search-input-inactive')
					;
				}
				if ($(this).val().length >= 3) {
					Builders.searchCityDropdown($(this));
				}
			},
			
			blur: function(evt) {
				if ($(this).val() == '') {
					$(this)
						.val($(this).data('emptyValue'))
						.addClass('builders-search-input-inactive')
					;
				}
				$(this).parent('.builders-search-wrapper').find('.builders-search-dropdown').fadeOut('fast');
				// $(this).parent('.builders-search-wrapper').css({'position' : 'relative'});
			},
			
			keydown: function(evt) {
				if (evt.keyCode == 13) {
					var elmSelected = $('.builders-search-dropdown ul li.selected', $(this).parent('.builders-search-wrapper'));
					if (elmSelected.length > 0) {
						$(this).val($(elmSelected).find('span').text());
					}
					Builders.search($(this).val());
					return false;
				}
				if (typeof $(this).data('selectedIndex') == 'undefined') {
					$(this).data('selectedIndex',-1);
				}
			},
			
			keyup: function(evt) {
				$('.builders-search-input').not($(this)).val($(this).val());
				
				var aElmLi = $(this).parent('.builders-search-wrapper').find('.builders-search-dropdown ul li');
				
				var iOldIndex = $(this).data('selectedIndex');
				
				if (evt.keyCode == 40 || evt.keyCode == 38) {
					var iNewIndex = iOldIndex + (evt.keyCode == 40 ? 1 : -1);
					if (iNewIndex >= 0 && iNewIndex < $(this).parent('.builders-search-wrapper').find('.builders-search-dropdown ul li').length) {
						$(aElmLi).removeClass('selected');
						$(this).data('selectedIndex',iNewIndex);
						$($(aElmLi).get(iNewIndex)).addClass('selected');
					}
				} else if ($(this).val().length >= 3) {
					Builders.searchCityDropdown($(this));
				} else {
					$(this).parent('.builders-search-wrapper').find('.builders-search-dropdown').fadeOut('fast');
					//$(this).parent('.builders-search-wrapper').css({'position' : 'relative'});
				}
				
			}
	
		}
	},
	
	searchFromButton: function(trg) {
		if ($(trg).hasClass('inactive')) return false;
		Builders.search($(trg).parent('.builders-search-wrapper').find('.builders-search-input').val());
	},
	
	search: function(sInput) {
		if (typeof websiteGlobal !== 'undefined' && websiteGlobal !== undefined) {
			document.location.href = websiteGlobal.baseUriZakelijk + oModulesInfo.builders.uri + '/' + (sInput.toLowerCase().replace(/[^a-zA-Z0-9 \-]/g,''));
		}
	},
	
	searchCityDropdown: function(elmInput) {
		$(elmInput).data('selectedIndex',-1);
		var sInput		= $(elmInput).val().toLowerCase();
		var sSearchCode	= sInput.replace(/[^a-z]/g,'');
		
		if (sSearchCode == '' || sSearchCode.length < 3) return;
		
		if (sInput.replace(/[^0-9]/g, '').length > 0) return;
		
		var aResult = [];
		
		for (sCode in oCities) {
			if (sCode.substring(0,sSearchCode.length) == sSearchCode) {
				aResult.push(oCities[sCode]);
			}
		}
		
		if (typeof $(elmInput).data('dropdownId') == 'undefined') {
			var sFieldId = $(elmInput).attr('id');
			var sDropdownId = sFieldId+'-dropdown';
			if ($('.builders-search-dropdown').length == 0) {
			
				var elmDropdown = $('<div/>');
				$(elmDropdown)
					.addClass('builders-search-dropdown')
					.attr('id',sDropdownId)
					.css({
						'position'  : 'absolute',
						//'top'		: $(elmInput).outerHeight(true)+1,
						//'left'      : 0,						
						
						'display' : 'block'
					})
					.hide()
				;
			} else {
				var elmDropdown = $('.builders-search-dropdown');
				elmDropdown
					.attr('id', sDropdownId)
					.hide();
			}
			$(elmInput)
				.data('dropdownId', sDropdownId)
				.parent('.builders-search-wrapper').append(elmDropdown)
			;
		} else {
			var elmDropdown = $('#'+$(elmInput).data('dropdownId'));
		}
		if (aResult.length > 0) {
			var elmUl = $('<ul/>');
			for (i in aResult) {
				var elmLi = $('<li><span>'+(aResult[i][0])+'</span><small>('+(aResult[i][1])+' bedrij'+((aResult[i][1] != 1) ? 'ven':'f')+')</small></li>');
				for (e in Builders.eventHandlers.searchDropdown) {
					$(elmLi).bind(e, Builders.eventHandlers.searchDropdown[e]);
				}
				$(elmUl).append(elmLi);
			}
			//$(elmDropdown).parent('.builders-search-wrapper').css({'position': 'absolute'});
			$(elmDropdown)
				.html('')
				.append(elmUl)
				.fadeIn('fast')
			;
			// fixes IE8 and IE7
			elmDropdown.css({'zIndex': '1'});


			var sOriginalHeight = elmUl.outerHeight();		
			if ($.browser.msie && $.browser.version == '6.0') {
				elmDropdown.css({ 'position' : 'absolute', 'display':'block', 'width': '210px', 'height': '50px'});
				sHeight = elmUl.outerHeight();
				elmDropdown.css({ 'height': sHeight + 'px'});
				elmUl.css({ 'height': sHeight + 'px'});
			}
			
		} else {
			$(elmDropdown).html('<span>Geen resultaten</span>');
		}
	},
	
	sendPageKeyUp : function (evt, elt) {
		if (evt.keyCode == 13) Builders.sendPage();
	},
	
	sendPage: function () {

		Builders.spamFilterCount = 0;
		$('.form-counter-input').each(function () {
			Builders.spamFilterCount += parseInt($(this).val(), 10);
		});
		$('#form_input_b1').val(Builders.spamFilterCount - 3);
		$('#address').hide();
		$('#sendpage_button').hide();
		
		$.ajax({
			url: websiteGlobal.fullUri + '/mail_profile',
			type: 'POST',
			data: $('#form_send_mail').serialize(),
			dataType: 'json',
			success: function(oResult){
				if (oResult.success) {
					$('#thanks_address').html(oResult.address);
					$('#sendpage_thanks').show();
					
				} else {
					$('#sendpage_error').show();
				}
			}
		});
	}
};

$(Builders.domReady);
