/**
 * lh.js
 * @author Lewis Howles (lh)
 *
 * Default niceties and other Voodoo.
 */

var lh = {
	init : function() {
		(searchQuery.config.form.length || searchQuery.config.resultsFrame.length) && searchQuery.init();
		lh.externalLinks();
		lh.highlighter();
		lh.styleSwitcher();
		if($("#images").length)
		lh.imageFader();

		$('#slideshow').length && lh.slideshowFader();
	},

	/*
	 * Set target blank on external links
	 */
	externalLinks : function() {
		$('a[rel~="external"]')
			.attr('target', '_blank')
	},

	highlighter : function() {
		$('form.fancy')
			.delegate('input, select, textarea', 'mouseover focusin mouseout focusout', function(e) {
				var isIn = (e.type === 'mouseover' || e.type === 'focusin');

				lh.toggleFocus($(this), isIn);
			});
	},

	toggleFocus : function(hovered, modifier) {
		hovered.parent('li').not('.li-submit').toggleClass('focus', modifier);
	},

	styleSwitcher : function() {
		styleSwitcher = $('#style-switcher').find('a');

		styleSwitcher
			.data('sheet','global')
			.bind('click', function(){
				var params = (styleSwitcher.data('sheet') == 'global') ? ['textonly','Visual Mode'] : ['global','Text Only Version'];
				$('link[rel=stylesheet]')
					.eq(0) // 0-indexed position of stylesheet. Change this is you had to move global.
					.attr('href', 'css/'+params[0]+'.css');
				styleSwitcher.data('sheet',params[0]);
				styleSwitcher.text(params[1]);
			});
	},

	imageFader: function() {
		$('#images').innerfade({
			speed: 1000,
			timeout: 6000,
			containerheight: '204px'
		});
	},

	slideshowFader: function() {
		$('#slideshow').innerfade({
			speed: 1000,
			timeout: 6000,
			containerheight: '152px'
		});
	}
}

var searchQuery = {
	config : {
		sale : {
			"50000" : "£50,000",
			"75000" : "£75,000",
			"100000" : "£100,000",
			"125000" : "£125,000",
			"150000" : "£150,000",
			"175000" : "£175,000",
			"200000" : "£200,000",
			"250000" : "£250,000",
			"300000" : "£300,000",
			"400000" : "£400,000",
			"500000" : "£500,000",
			"750000" : "£750,000",
			"1000000" : "£1,000,000",
			"1500000" : "£1,500,000"
		},

		rent : {
			"250" : "£250",
			"500" : "£500",
			"750" : "£750",
			"1000" : "£1000",
			"1250" : "£1250",
			"1500" : "£1500",
			"2000" : "£2000"
		},

		form : $('#PropertySearch'),

		contactTypeSelect : $('#Contract'),

		contractTypeRadio : $('input[name=Contract]'),

		minimumPrice : $('#ddlPayMin'),

		maximumPrice : $('#ddlPayMax'),

		resultsFrame : $('#results-frame')
	},

	init : function(config) {
		if (config && typeof(config) == 'object')
			$.extend(lh.config, config);

		var form = searchQuery.config.form,
			minimumPrice = searchQuery.config.minimumPrice,
			maximumPrice = searchQuery.config.maximumPrice,
			contractTypeSelect = searchQuery.config.contactTypeSelect,
			contractTypeRadio = searchQuery.config.contractTypeRadio;

		if(form.length) {
			var contracts = [contractTypeSelect, contractTypeRadio];
			$.each(contracts, function(k,v) {
				if (v.length) {
					var type = (k == 0) ? 'select' : 'radios';

					searchQuery.updateCombo(v, minimumPrice, maximumPrice, type);

					v.change(function() {
						searchQuery.updateCombo(v, minimumPrice, maximumPrice, type)
					});
				}
			});
		}

		if (searchQuery.config.resultsFrame.length)
			searchQuery.getValues();
	},

	updateCombo : function(contract, minimumPrice, maximumPrice, type) {
		var	options = '',
			minParent = minimumPrice.parent(),
			maxParent = maximumPrice.parent(),
			sale = searchQuery.config.sale,
			rent = searchQuery.config.rent,
			values = (type == 'select') ? (values = (contract.val() == 'buying') ? sale : rent) : (values = (contract.filter('input:checked').val() == 'buying') ? sale : rent);

		$.each(values, function(val, text) {
			options += '<option value="'+val+'">'+text+'</option>';
		});

		var prices = [minimumPrice, maximumPrice];
		$.each(prices, function(k,v){
			v.empty().detach();

			(k == 0) ? v.append('<option value="0">Min Price</option>') : v.append('<option value="0">Max Price</option>');

			v.append(options).val('0');
		});

		minParent.append(minimumPrice);
		maxParent.append(maximumPrice);
	},

	getValues : function() {
		var allVars = $.getUrlVars(),
			chainID = allVars["chainID"],
			txtQuickSearch = allVars["txtQuickSearch"],
			contract = allVars["Contract"],
			ddlBedrooms = allVars["ddlBedrooms"],
			ddlPayMin = allVars["ddlPayMin"],
			ddlPayMax = allVars["ddlPayMax"],
			ddlResultsOrder = allVars["ddlResultsOrder"],
			countries = allVars["countries"],
			resultsFrame = searchQuery.config.resultsFrame;

		resultsFrame.attr('src', function(index, attr) {
			if (attr=="")
			return 'http://search.anthonyjturner.co.uk/resultslite.aspx?chainID='+chainID+'&Contract='+contract+'&ddlBedrooms='+ddlBedrooms+'&ddlPayMin='+ddlPayMin+'&ddlPayMax='+ddlPayMax+'&txtQuicksearch='+txtQuickSearch+'&ddlResultsOrder='+ddlResultsOrder+'&countries='+countries;
		});
	}
}

// Get URL Parameters
$.extend({
  getUrlVars: function(){
	var vars = [], hash;
	var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
	for(var i = 0; i < hashes.length; i++)
	{
	  hash = hashes[i].split('=');
	  vars.push(hash[0]);
	  vars[hash[0]] = hash[1];
	}
	return vars;
  },
  getUrlVar: function(name){
	return $.getUrlVars()[name];
  }
});

$(lh.init());

