function changeAmmoType(type) {
	$('typeSelection').value = type;
	$(type+'CaliberSelect').value = "";
	new filterReset();
	new updateAmmoType(type);
	new getFilterData(type, 1);
	new getProductHTML(type);
}

function changeCaliber(type) {
	new filterReset();
	var caliber = $(type+'CaliberSelect').value;
	new updateCaliber(caliber);
	new getFilterData(caliber, 1);
	new getProductHTML(caliber);
}

function updateAmmoType(ammoType, noUpdate) {
	if(ammoType == "handgun") {
		$('handgunSelect').className = "handgunOn";
		$('rifleSelect').className = "rifleOff";
		$('handgunCaliber').show();
		$('rifleCaliber').hide();
		$('caliberHelp').hide();
		$('typeSelection').value = "handgun";
		$('caliberSelection').value = "handgun";
		if(!noUpdate) {
			window.location.href = "#/type/handgun";
		}
	}
	
	if(ammoType == "rifle") {
		$('rifleSelect').className = "rifleOn";
		$('handgunSelect').className = "handgunOff";
		$('rifleCaliber').show();
		$('handgunCaliber').hide();
		$('caliberHelp').hide();
		$('typeSelection').value = "rifle";
		$('caliberSelection').value = "rifle";
		if(!noUpdate) {
			window.location.href = "#/type/rifle";
		}
	}
}

function updateCaliber(calId, noUpdate) {
	var type = $('typeSelection').value;
	$('caliberSelection').value = calId;
	var select_menu = $(type + 'CaliberSelect');
	var calName = select_menu.childElements()[select_menu.selectedIndex].innerHTML; 
	if(!noUpdate) {
		var uri = window.location.pathname;
		var uriParts = uri.split("/");
		
		if (uriParts[1] == "ammo_deals") {
			window.location.href = "/#/type/" + type + "/caliber/" + calId;
		}	
		window.location.href = "#/type/" + type + "/caliber/" + calId;	
	}
}

function filterInit() {	
	var urlOptions = new parseUrl();
	
	if (urlOptions.type) {
		var curType = urlOptions.type;
	} else if ($('typeSelection').value) {
		var curType = $('typeSelection').value;
	}
	
	if (urlOptions.caliber) {
		var curCaliber = urlOptions.caliber;
	} else if ($('caliberSelection').value) {
		var curCaliber = $('caliberSelection').value;
	}
	
	if (curType) {
		new updateAmmoType(curType, 1);
		var caliber = curType;
		$('typeSelection').value = curType;
		
		if (curCaliber) {
			new updateCaliber(curCaliber, 1);
			var caliber = curCaliber;
			$(curType + 'CaliberSelect').value = curCaliber;
			$('caliberSelection').value = curCaliber;
		}
	} else {
		$('typeSelection').value = "top_deals";
		var caliber = "top_deals";
	}

	if (caliber) {
		new getFilterData(caliber, 1);
		new getProductHTML(caliber);
	}
}

function filterReset() {
	$$(".filterOption").each(function(elmt) { $(elmt).show(); });
	$$(".filterOn").each(function(elmt) { $(elmt).className = "filterOff"; });
	$$(".filterCheckOn").each(function(elmt) { $(elmt).checked = false; });
}

function parseUrl() {
	var uri = window.location.pathname;
	var uriParts = uri.split("/");

	if (uriParts[1] == "ammo_deals" && window.location.hash) {
		window.location = "/" + window.location.hash;
	}
		
	var query = window.location.hash;
	if (query) {
  		var urlOptions = {};
		var vars = query.split("/");
		for (var i=0;i<vars.length;i++) {
		
			if (vars[i].split("/") == "type") {
				var type = vars[i+1].split("/");
				urlOptions.type = type;
			}
			
			if (vars[i].split("/") == "caliber") {
				var caliber = vars[i+1].split("/");
				urlOptions.caliber = caliber;
			}
		
		}
	}
	return urlOptions;
} 

function getFilterData(caliber, reset, quantities, vendors, bullets) {
	var url = '/ajax/search_results.html?json=1&cid=' + caliber;
	if (vendors != undefined) url += '&vendors=' + vendors;
	if (bullets != undefined) url += '&bullets=' + bullets;
	if (quantities != undefined) url += '&quantities=' + quantities;
	if ($('backorderCheck').checked) url += '&backorder=1';
	
	new Ajax.Request(url+'&json=1', {
		method: 'get',
		onComplete: function(transport) {
			new updateFilters(transport.responseText, reset)
		}
	});
}

function getProductHTML(caliber, quantities, vendors, bullets) {
	$('searchResults').show();

	var url = '/ajax/search_results.html?cid=' + caliber;
	if (vendors != undefined) url += '&vendors=' + vendors;
	if (bullets != undefined) url += '&bullets=' + bullets;
	if (quantities != undefined) url += '&quantities=' + quantities;	
	if ($('backorderCheck').checked) url += '&backorder=1';
	
	new Ajax.Updater('searchResults', url, {
		method: 'get',
		onCreate: function() {
			$('loadingBox').toggle();
		},
		onComplete: function() {
			$('loadingBox').toggle();
		}
	});
}

function updateFilters(json, reset) {
	var filters = eval('(' + json + ')');
	
	var vendors = new Array();
	for (var id in filters.vendors) {
		vendors[id] = filters.vendors[id];
	}

	var bullets = new Array();
	for (var id in filters.bullets) {
		bullets[id] = filters.bullets[id];
	}
	
	var quantities = new Array();
	for (var id in filters.quantities) {
		quantities[id] = filters.quantities[id];
	}
	
	for (x=0; x<$('quantityCount').value; x++) {
		var elementId = $('quantityCheck_'+x).value;
		if(quantities[elementId]>0) { 
			$('quantityCount_'+elementId).update(filters.quantities[elementId]);
			$('quantity_'+elementId).className = "filterOn";
			$('quantityCheck_'+x).disabled = false;
			$('quantityCheck_'+x).className = "filterCheckOn";
			if (reset) $('quantityCheck_'+x).checked = false;
		} else {
			if ($('quantity_'+elementId).className == "filterOn" && $('lastFilter').value != "quantity") {
				$('quantity_'+elementId).className = "filterOff zero";
				$('quantityCheck_'+x).disabled = true;
				$('quantityCheck_'+x).className = "filterCheckOff";
				$('quantityCount_'+elementId).update('0');
			} else if (reset) {
				$('quantityOption_'+x).hide();
			}
		}
	}	

	for (x=0; x<$('vendorCount').value; x++) {
		var elementId = $('vendorCheck_'+x).value;
		if(vendors[elementId]>0) { 
			$('vendorCount_'+elementId).update(filters.vendors[elementId]);
			$('vendor_'+elementId).className = "filterOn";
			$('vendorCheck_'+x).disabled = false;
			$('vendorCheck_'+x).className = "filterCheckOn";
			if (reset) $('vendorCheck_'+x).checked = true;
		} else {
			if ($('vendor_'+elementId).className == "filterOn" && $('lastFilter').value != "vendor") {
				$('vendor_'+elementId).className = "filterOff zero";
				$('vendorCheck_'+x).disabled = true;
				$('vendorCheck_'+x).className = "filterCheckOff";
				$('vendorCount_'+elementId).update('0');
			} else if (reset) {
				$('vendorOption_'+x).hide();
			}
		}
	}
		
	for (x=0; x<$('bulletCount').value; x++) {
		var elementId = $('bulletCheck_'+x).value;
		if(bullets[elementId]>0) {
			$('bulletCount_'+elementId).update(filters.bullets[elementId]);
			$('bullet_'+elementId).className = "filterOn";
			$('bulletCheck_'+x).disabled = false;
			$('bulletCheck_'+x).className = "filterCheckOn";
			if (reset) $('bulletCheck_'+x).checked = false;
		} else {
			if ($('bullet_'+elementId).className == "filterOn" && $('lastFilter').value != "bullet") {
				$('bullet_'+elementId).className = "filterOff zero";		
				$('bulletCheck_'+x).disabled = true;
				$('bulletCheck_'+x).className = "filterCheckOff";
				$('bulletCount_'+elementId).update('0');
			} else if (reset) {
				$('bulletOption_'+x).hide();
			}		
		}
		
	}	
}

function filterChange(name) {
	var caliber = $('caliberSelection').value;
	$('lastFilter').value = name;
	
	var quantities = "";
	for(x=0; x<$('quantityCount').value; x++) {
		if ($('quantityCheck_'+x).checked == true) {
			quantities += $('quantityCheck_'+x).value + ",";
		}
	}

	var vendorsBlock = "";
	for(x=0; x<$('vendorCount').value; x++) {
		if ($('vendorCheck_'+x).checked == false) {
			vendorsBlock += $('vendorCheck_'+x).value + ",";
		}
	}

	var bulletSelects = "";
	for(x=0; x<$('bulletCount').value; x++) {
		if ($('bulletCheck_'+x).checked == true) {
			bulletSelects += $('bulletCheck_'+x).value + ",";
		}
	}
	
	var vendors = vendorsBlock.slice(0, -1);
	var bullets = bulletSelects.slice(0, -1);
	var quantities = quantities.slice(0, -1);
	
	if (caliber == "") var caliber = $('typeSelection').value;

	new getProductHTML(caliber, quantities, vendors, bullets);
	new getFilterData(caliber, 0, quantities, vendors, bullets);	
}

function showFlag(id) {
	$$(".flagDeal").each(function(elmt) { $(elmt).hide(); });
	$('flag_' + id).show();
}

function closeFlags() {
	$$(".flagDeal").each(function(elmt) { $(elmt).hide(); });
}

function submitFlag(id) {
	var reason = $('flagReason_'+id).value;
	
	if (!reason) {
		alert("You must select a flagging reason.")
		exit;
	}
	
	var url = "/ajax/submit_flag.php?id=" + id + "&reason=" + reason;
	new Ajax.Request(url, {
		method: 'get',
		onComplete: function(transport) {
			$('flagButton_'+id).hide();
			if (transport.responseText == 1) {
				$('flagSuccess_'+id).show();
			} else {
				$('flagFailure_'+id).show();				
			}
		}
	});	
}

function urlFormat(url) {
	url = url.toLowerCase();
	url = url.replace(" ","_");
	url = url.replace(" ","_");
	url = url.replace("/","-");
	return url;
}