var freezeAttr = [];
var frozenAttr = [];
var showNextStepAfter = [];
var allSizes = null;
var startValues = [];
var catSelected = false;
var canGo = true;
var savedStartValues = false;

$(document).ready(function() {
				
	$('form.finder select').change(function() {		
		
		if($(this).attr('id') == 'category') {
						
			if(catSelected == false) {
				catSelected = true;
				performGetRequest(buildQueryString(true));
			} else {
				if($('#category').val() != '0' && $('#category').val() != 0) {
					performGetRequest(buildQueryString(false));					
				} else {
					setStartValues();
				}
			}
			
		} else {
			var queryString = buildQueryString(true);
			if(queryString) {
				performGetRequest(queryString);
			} else {
				setStartValues();
			}
		}
				
	});
	
	$('form.finder').submit(function() {
		$('form.finder select:disabled').attr('disabled', '').removeClass('disabled');
		
		return canGo;
	});
		
	$(document).ajaxComplete(function(request, settings) {
		enableSelects();
		hideLoader();
		canGo = true;
	});
	
});

jQuery.inArray = function(key, array) {
	
	for(var i in array) {
		if(array[i] === key) {
			return true;
		}	
	}
	
	return false;
};

function saveStartValues() {
	if(savedStartValues == false) {
		$('form.finder select').each(function() {
			startValues[$(this).attr('id')] = $(this).html();		
		});
		
		savedStartValues = true;
	}
}

function setStartValues() {
	for(var i in startValues) {
		if(i != 'category') {
			$('#' + i).html(startValues[i]);

			if(window.navigator.userAgent.indexOf('MSIE') == -1) {
				$('#' + i + ' option').attr('selected', '');
				$('#' + i + ' option:first').attr('selected', 'selected');				
			} else {
				var select = document.getElementById(i);
				select.options[0].setAttribute('selected', true);					
			}

		}
	}
}

function getOptionIdx(select, value) {
	if(!select.options) {
		 return -1;
	}
	
	for(var oNum = 0; oNum != select.options.length; oNum++) {
		if(select.options[oNum].value == value) {
			 return oNum;
		}
	}
	
	return -1;
}

function Options(values, selected) {
	this.values = values;
	this.selected = selected;
}

function buildQueryString(setQueryString) {
	var queryString = '';
	var i = 0;
	var lastValue;
	
	if(setQueryString == true) {
		$('form.finder select').each(function() {
			if(i > 0 && ($(this).val() != '0' && $(this).val() != 0) && (lastValue != '0' || lastValue > 0 || lastValue.length > 0)) {
				queryString += '&';
			}
			
			if($(this).val() != '0' && $(this).val() != 0) {
				queryString += $(this).attr('id') + '=' + encodeURIComponent($(this).val());
			}
			
			i++;
			lastValue = $(this).val();
		});
	} else {
		queryString += 'category' + '=' + encodeURIComponent($('#category').val());
	}
	
	if(setQueryString == true && queryString.length == 0) {
		return false;
	}
		
	return AJAXSearchURL + queryString;
}

function performGetRequest(url) {
	if(url) {
		saveStartValues();
		$('form.finder select:enabled').html('<option value="0">Lade Daten ...</option>');
		disableSelects();
		showLoader();
		canGo = false;
		
		$.getJSON(url, function(data) {				
			//console.info(data);
			insertRequestData(data);		
		});
	}
}

function insertRequestData(data) {
	
	//console.log('insertRequestData')
		
	var attrName = '';
	
	$.each(data, function(i) {
		
		if(!$.inArray(i, frozenAttr)) {
			$('#' + i).html('<option value="0">Lade Daten ...</option>');
			
			var options = createOptions(this);
			
			var optionsSet = $('#' + i).html(options.values);
													
			if(optionsSet && (options.selected.length > 0 || options.selected > 0)) {				
				if(window.navigator.userAgent.indexOf('MSIE') == -1) {
					$('#' + i + ' option[value="' + options.selected + '"]').attr("selected","selected");					
				} else {
					var select = document.getElementById(i);
					var index = getOptionIdx(select, options.selected);
					select.options[index].setAttribute('selected', true);					
				}
			} else {
				$('#' + i + ' option:first').attr('selected', 'selected');
			}
							
		}
	});
	
	
}

function enableSelects() {
	$('form.finder select').each(function() {
		if(!$.inArray($(this).attr('id'), frozenAttr)) {
			$(this).attr('disabled', '').removeClass('disabled');			
		}
	});
}

function disableSelects() {
	$('form.finder select').attr('disabled', 'disabled').addClass('disabled');
}

function freeze(id) {	
	if($.inArray(id, freezeAttr) && !$.inArray(id, frozenAttr)) {
		$('#' +  id).attr('disabled', 'disabled').addClass('disabled');
		frozenAttr.push(id);
	}
}

function createOptions(item) {
	var values = '';
	var selectedValue = '';
	
	$.each(item, function() {
									
		if(this.attrName) {
			attrName = this.attrName;
		} else {
			attrName = this.attrValue;
		}
		
		if(this.selected == 'selected') {
			selectedValue = this.attrValue;
		}
		
		values += '<option value="' + this.attrValue + '">' + attrName + '</option>';
	});
		
	if(values.length > 0) {
		values = '<option value="0">alle</option>' + values;
	} else {
		values = '<option value="0">Keine weitere Auswahl m&ouml;glich.</option>';
	}
			
	return new Options(values, selectedValue);
}

function showLoader() {	
//	$('form.finder .loader').show();
//	$('form.finder input[type="image"]').attr('src', imageDir + '/suchen_off.gif');
}

function hideLoader() {
//	$('form.finder .loader').hide();
//	$('form.finder input[type="image"]').attr('src', imageDir + '/suchen.gif');
}

