(function ($) {
	var LocationList = function(params) {
		var change = params.change;
		var dealer = params.dealer;
		var zipCode = params.zipCode;
		var state = params.state;
		var brand = params.franchise;
		var franchises = params.franchises;
		var i;

		/**
		 * Takes an array and romoves duplicate data, and empty strings
		 * @params an array
		 * @returns an array of unique values, with no empty strings
		 *
		 * */
		var arrayScrub = function(array) {
			var i;
			var test;
			var testArray = [];
			for (i = 0; i < array.length; i++) {
				test = 0
				for (var x = 0; x < testArray.length; x++) {
					if (array[i] == testArray[x]) {
						test = 1
					}
				}
				if (test === 1) {
					test = 0;
				} else {
					if (array[i].length > 0) {
						testArray.push(array[i])
					}
				}
			}
			return testArray;
		}
		/**
		 * Takes an array of us state of canadian poviential abbvs, and
		 * Builds out a selectboxes
		 * name = region
		 * value = abbreviation
		 * key = full name of state/proveince
		 * @params an array
		 * @returns outputs select boxes to dom element with name = 'region'
		 * */
		var buildRegionList = function(array) {
			var i,
				options =$('select[name=region]')[0].options,
				regions = {AL:'Alabama', AK:'Alaska', AZ:'Arizona', AR:'Arkansas', CA:'California', CO:'Colorado', CT:'Connecticut', DE:'Delaware', DC:'District of Columbia', FL:'Florida', GA:'Georgia', HI:'Hawaii', ID:'Idaho', IL:'Illinois', IN:'Indiana', IA:'Iowa', KS:'Kansas', KY:'Kentucky', LA:'Louisiana', ME:'Maine', MD:'Maryland', MA:'Massachusetts', MI:'Michigan', MN:'Minnesota', MS:'Mississippi', MO:'Missouri', MT:'Montana', NE:'Nebraska', NV:'Nevada', NH:'New Hampshire', NJ:'New Jersey', NM:'New Mexico', NY:'New York', NC:'North Carolina', ND:'North Dakota', OH:'Ohio', OK:'Oklahoma', OR:'Oregon', PA:'Pennsylvania', RI:'Rhode Island', SC:'South Carolina', SD:'South Dakota', TN:'Tennessee', TX:'Texas', UT:'Utah', VT:'Vermont', VA:'Virginia', WA:'Washington', WV:'West Virginia', WI:'Wisconsin', WY:'Wyoming', AB:'Alberta', BC:'British Columbia', MB:'Manitoba', NB:'New Brunswick', NL:'Newfoundland and Labrador', NT:'Northwest Territories', NS:'Nova Scotia', NU:'Nunavut', ON:'Ontario', PE:'Prince Edward Island', QC:'Quebec', SK:'Saskatchewan', YT:'Yukon'};
			for (i = 0; i < array.length; i++) {
				if (regions[array[i]]) {
					options[options.length] = new Option(regions[array[i]], array[i]);
				}
			}
		}
		/**
		 * Id of the Form
		 * */
		var formId = 'lLForm';
		/**
		 * Builds selectboxes in the dom from a data obj
		 * e.g.
		 * obj.name = name of select
		 * obj.id = id of form
		 * obj.array = array of values to add as options, currently coded to use the array value as both
		 *           value and key in the selectbox
		 *
		 * @params data object
		 * @returns dom
		 * */
		var toSelectBox = function(obj) {
			var i;
			var id = obj.id;
			var name = obj.name
			var array = obj.array;
			/*
				  console.log('id:'+obj.id)
				  console.log('name:'+obj.name)
				  console.log('array:'+obj.array)
   */
			var selectBox = document.forms[id].elements[name]
			var data = arrayScrub(array).sort()
			if (name === 'region') {
				buildRegionList(data)
			} else {
				for (i = 0; i < data.length; i++) {
					if (data[i].length > 0) {
						selectBox.options[selectBox.options.length] = new Option(data[i], data[i]);
					}
				}
			}
		}


		var behavior = function() {
			$('#lLForm select').change(function () {
				var chName = $(this).attr('name');
				var id = formId;
				for (var i = 0; i < document.forms[id].elements.length; i++) {
					if (!!document.forms[id].elements[i].value && (document.forms[id].elements[i] != document.forms[id].elements[chName])) {
						document.forms[id].elements[i].value = document.forms[id].elements[i].options[0].value;
					}
				}
				$('#lLForm select').not(this).val(':eq0');

				var selected = $(this).val();
				
				if (this.getAttribute("name") == "franchise") {
					$("#locationList tbody").find("tr").each(function() {
						if (selected != "all") {
							if (this.getAttribute("franchises") && this.getAttribute("franchises").indexOf(selected) != -1)
								$(this).removeClass("hidden");
							else
								$(this).addClass("hidden");
						} else if (selected === 'all') {
							$(this).removeClass("hidden");
						}
					});
				} else if (selected === 'all') {
					$('#locationList tbody tr').removeClass('hidden')
				} else {
					$('#locationList tbody tr').addClass('hidden');
					$('#locationList td').each(function() {
						if ($(this).text() == selected) {
							$(this).parent().removeClass('hidden');
						}
					});
				}
				if (typeof change === 'function') {
					change.apply(this);
				}
			});
			$('#locationList thead th span').hover(function() {
				$(this).addClass('lLSpanhover')
			}, function() {
				$(this).removeClass('lLSpanhover')
			});
		}
		$('#locationList tbody tr').click(function(e){
			var that = this;
			var url = $(this).find('a').attr("href")
			if(!$(e.target).parent().is('a')){
				if($(that).find('a').attr('rel')){
					//alert('opening new widow')
					window.open(url);
				} else {
					window.location = url;
				}
			}

		})
		$('.vAll').click(function() {
			$('#locationList tbody tr').removeClass('hidden');
			if (typeof change === 'function') {
				change.apply(this);
			}
			return false;
		});


		var init = function() {
			/*Here we check for pramas passed in from location form*/
			if (dealer !== 'All' && dealer !== '') {
				//alert('dealer:' + dealer)
				$('#locationList tbody tr').addClass('hidden')
				$('#' + dealer + '').removeClass('hidden');
			}
			if (brand !== 'All' && brand !== '') {
				//alert('brand:' + brand)
				$("#locationList tbody").find("tr").each(function() {
					if (this.getAttribute("franchises") && this.getAttribute("franchises").indexOf(brand) != -1)
						$(this).removeClass("hidden");
					else
						$(this).addClass("hidden");
				});
			}
			if (state !== 'All' && state !== '') {
				//alert('state:' + state)
				$('#locationList tbody tr').addClass('hidden')
				$('.region').each(function() {
					if ($(this).text() === state) {
						$(this).parent().removeClass('hidden')
					}
				})
			}
			if (zipCode !== 'All' && zipCode != '') {
				//alert('zipCode: '+zipCode)
				$('#locationList tbody tr').addClass('hidden')
				$('.postal-code').each(function() {
					if ($(this).text() === zipCode) {
						$(this).parent().removeClass('hidden')
					}
				})
			}

			/*Gather info and build out selectBoxes*/
			$('#lLForm select').each(function() {
				var array = []
				var thisName = $(this).attr('name')
				if (thisName === 'franchise') {
					array = [];
					for (i = 0; i < franchises.length; i++) {
						$("#locationList tbody tr").each(function() {
							if (this.getAttribute("franchises") && this.getAttribute("franchises").indexOf(franchises[i]) != -1) {
								array.push(franchises[i]);
							}
						});
					}
					toSelectBox({id:formId, array:array, name: thisName})
				} else {
					array = []
					$('.' + thisName + '').each(function() {
						array.push($(this).text())
					})
					toSelectBox({id:formId, array:array, name:thisName})
				}
			})
			behavior()
		}
		init()
	}

	window.DDC.LocationList = LocationList;
})(jQuery);

