var sbdata  = {};

var sb_submit = function (extraParams, viewtype) {
	extraParams ? (extraParams = extraParams) : (extraParams = '&start=0');
	viewtype ? (viewtype = viewtype) : (viewtype = invdata.style);
	var params = '';
	var sbRef = document.forms['sbForm'].elements;
	
	for (var i = 0; i < sbRef.length; i++)
		if (typeof(sbRef[i].name) !== 'undefined') {
			/* if sbRef[i].value is a URL, it is not meant to be used as an inventory reload param */
			if ((sbRef[i].name === 'SBlinkedAccountId') && (sbRef[i].value.indexOf('http://') !== -1))
				sbRef[i].value = 'clear';
			/* if 'make' field was reset, also reset 'model' */
			if ((sbRef[i].name === 'SBmodel') && ($('#SBmake', sbRef).val() === 'clear')) {
				sbRef[i].value = 'clear';
			}
			params += '&'+escape(sbRef[i].name)+'='+escape(sbRef[i].value);
		}
	
	if ($('#SBstockNumber').size() && $('#SBstockNumber').val()) {
		params += '&SBstockNumber=' + $('#SBstockNumber').val();
	}
	
	try {	/* skip adding a history state if the history plugin isn't present */
		dhtmlHistory.add(	// add the current URL parameters to the browser history for back/forward functionality
			'invHistory:reset=InventoryListing' + '&inventoryView=' + viewtype + params + extraParams,
			{'viewtype': viewtype, 'params': '&reset=InventoryListing' + '&inventoryView=' + viewtype + params + extraParams});
	} catch (e) {}
	
	if (viewtype) {
		jQuery.cookie('viewType', viewtype, {expires: 30, path: '/'})
	}

	sb_submit_caller = true;
	invStyle(viewtype, params + extraParams);
};

var sb_ajax = function (selRef) {
	var formRef = document.forms['sbForm'];
	var invtype;
	var url;

	if (typeof formRef.invtype.length === 'undefined') {
		invtype = formRef.invtype.value;
	} else {
		for (var i = 0; i < formRef.invtype.length; i++) {
			if (formRef.invtype[i].checked) {
				invtype = formRef.invtype[i].value;
				break;
			}
		}
	}
	
	formRef.action = invdata['url'];
	url = invdata['smartbrowseurl'] + '?' + (selRef ? (selRef.name + '=' + escape(selRef.value)) : '');
	
	for (var criteria in showsettings)
		url += '&'+criteria+'='+showsettings[criteria];
		
	url += '&detect=false';
	
	if (jQuery.browser.msie)
		url += '&xfr='+Math.random().toString().replace(/\./,''); // force IE to refresh, make sure scopedParams are set
	
	if (selRef)
		sb_submit();
	else
		doLoad(url);
};

var doLoad = function (url) {
	$.ajax({
		url: url,
		dataType: 'json',
		beforeSend: function () { $('#sb_loading').show(); },
		success: function (data) {
			sbdata = data;
			$('#sb_loading').hide();
			sb_load();
			// enable smartbrowse fields
			$('#invSmartbrowse select:not(#SBmodel):not(#SBtrim), #invSmartbrowse input').attr('disabled', '');
		}
	});
};

var sb_load = function () {
	var isie = /*@cc_on!@*/false;
	var spacer = isie ? '   ' : '\u2001';
	for (var dataset in sbdata) {
		if ((dataset !== 'SBdefaults') && (typeof document.forms['sbForm'].elements[dataset] !== 'undefined')) {
			var optRef = document.forms['sbForm'].elements[dataset];
			var i = 1;

			clearoptionlist(optRef);
			
			for (var key in sbdata[dataset])
				optRef.options[i++] = new Option(sbdata[dataset][key].replace(/GMC Pontiac Buick/,'GMC') + spacer,key);

			if (sbdata.SBdefaults[dataset] !== '') {
				if (i > 1) {
					if ((dataset === 'SBlinkedAccountId') && (typeof sbdata.SBaccountUrlKeys !== 'undefined')) {
						/* check for SBaccountUrlKeys field, key off from this in the case of locations drop down */
						optRef.value = sbdata.SBaccountUrlKeys[sbdata.SBdefaults[dataset]];
					} else {
						optRef.value = sbdata.SBdefaults[dataset];
						if (optRef.selectedIndex == 0)
							optRef.options[i++] = new Option(sbdata.SBdefaults[dataset] + spacer,sbdata.SBdefaults[dataset]);
					}
				} else {
					optRef.options[i++] = new Option(sbdata.SBdefaults[dataset] + spacer,sbdata.SBdefaults[dataset]);
				}
			}

			optRef.disabled = (i === 1);
			optRef.value = (sbdata.SBdefaults[dataset] === '' ? 'clear' : sbdata.SBdefaults[dataset]);
		}
	}
};

var clearoptionlist = function (formelm) {
	var numopt = formelm.options.length;
	for (var i = (numopt - 1); i >= 1; i--)
		formelm.options[i] = null;
};