jQuery.noConflict();

var ROOT_URL = '/selector/cart.http.php';
var SHIPPING_FLAG = 0;

jQuery(document).ready(function() {
	SELECTOR.init();
});

var TE = {
	load: function(url, data, target) {
		jQuery("#wiper-selector-output").html('').css('display', 'none');
		jQuery.postJSON(url, data, function(list) { TE.drawDropdown(target, list); });
	},
	
	drawDropdown: function(target, list) {
		TE.resetDropdown(target);
		jQuery.each(list, function(i, m) {
			jQuery('<option>').attr('value', list[i].value).text(list[i].display).appendTo(target);
		});
		TE.enable(target);
	},
	
	resetDropdown: function(id) {
		jQuery(id).html('');
	},
	
	car: function() {
		var car_data = jQuery('#wiper-selector :input');
		var car = {
			make: car_data[0],
			model: car_data[1],
			year: car_data[2]
		};
		return car;
	},

	v: function(id) {
		return jQuery('#'+id).val();
	},
	
	vc: function(c) {
		return jQuery('.'+c).val();
	},
	
	enable: function() {
		var len = arguments.length;
		var i=0;
		for (i=0; i<len; i++) {
			jQuery(arguments[i]).attr('disabled', false);
		}
	},
	
	disable: function() {
		var len = arguments.length;
		var i=0;
		for (i=0; i<len; i++) {
			jQuery(arguments[i]).attr('disabled', true);
			TE.resetDropdown(arguments[i]);
		}
	},
	
	
	hideOrderButtons: function() {
		jQuery('#wiper-selector-output-full').css('display', 'none');
		jQuery('#wiper-selector-output-front').css('display', 'none');
	}
}

var SELECTOR = {
	init: function() {
		var car = TE.car();
		
		// Disable everything at first
		TE.disable(car.make, car.model, car.year);

		// Load up the makes, this will enable the make list
		TE.load(ROOT_URL, {action: 'load-list', field: 'make', group: 1}, car.make);
		
		// When the Make changes, load up the Models
		jQuery(car.make).change(function() {
			TE.hideOrderButtons();
			TE.disable(car.model, car.year);
			if ( car.make.value != 0 ) {
				TE.load(ROOT_URL, {action: 'load-list', field: 'model', group: 1, make: car.make.value}, car.model);
			}
		});
		
		// When the Model changes, load up the Years
		jQuery(car.model).change(function() {
			TE.hideOrderButtons();
			TE.disable(car.year);
			if ( car.model.value != 0 ) {
				TE.load(ROOT_URL, {action: 'load-list', field: 'year', group: 1, make: car.make.value, model: car.model.value}, car.year);
			}
		});

		jQuery(car.year).change(function() {
			var data = { action: 'load-wiper-types', make: car.make.value, model: car.model.value, year: car.year.value};
			TE.hideOrderButtons();
			if ( car.year.value != 0 ) {
				jQuery.postJSON(ROOT_URL, data, function(data) { SELECTOR.showOrderButtons(data); });
			}
		});
	},
	
	showOrderButtons: function(car_data) {
		var dr = car_data.dr;
		var psg = car_data.psg;
		var rear = car_data.rear;

		var car = car_data.year + ' ' + car_data.make + ' ' + car_data.model;
		var front = rear = 0;
		
		var i = 0;
		
		jQuery("#wiper-selector-output").html('').css('display', 'none');
		
		var append_html = '';

		if ( dr > 0 ) {
			append_html = "Driver's Side Length: " + dr + " inches<br>";
			
			jQuery("#wiper-selector-output").append(append_html);
			front = 1;
			i++;
		}
		
		if ( psg > 0 ) {
			append_html = "Passenger's Side Length: " + psg + " inches<br>";
			
			jQuery("#wiper-selector-output").append(append_html);
			front = 1;
			i++;
		}
		
		if ( rear > 0 ) {
			append_html = "Reader Length: " + rear + " inches<br>";
			
			jQuery("#wiper-selector-output").append(append_html);
			rear = 1;
		}

		switch ( car_data.style ) {
			case 'A': {
				jQuery('#wiper-selector-output').append('<br>Style A - Available in a traditional style frame or in a beam style frame.<br>');
				break;
			}
			
			case 'B': {
				jQuery('#wiper-selector-output').append('<br>Style B - Only available for certain newer wiper arm styles.<br>');
				break;
			}
		
			case 'N/A': {
				jQuery('#wiper-selector-output').append('<br>Style N/A - No styling information is available.<br>');
				break;
			}
		}

		jQuery('#wiper-selector-output').fadeIn();
	}
}

jQuery.postJSON = function(url, data, callback) {
	data.hash = TE.v('hash');
	jQuery.post(url, data, callback, 'json');
}
