var lookupInProgress = false;
var limitTo = 10;
var fieldHeight = 20;

function lookup(value, type, index) {
	if(lookupInProgress) {
		return;
	}
	lookupInProgress = true;
	var url = 'app/Admin/Ajax/Lookup';
	var argHash = new Hash() ;
	argHash.addItem( 'in', value );
	argHash.addItem( 'type', type );
	argHash.addItem( 'index', index );
	sendAjaxRequest('GET', url, argHash, true, 'setLookup');
}

function setLookup(response) {
	var index = response.getElementsByTagName('_index')[0].firstChild.nodeValue;
	var type = response.getElementsByTagName('_type')[0].firstChild.nodeValue;
	var ac = document.getElementById(type + 'AutoComplete[' + index + ']');
	var elementToSet = document.getElementById(type + '[' + index + ']');
	var lookup = response.getElementsByTagName('lookup')[0];
	var span = document.getElementById(type + 'Span[' + index + ']');
	if(lookup.firstChild != null) {
		var firstOption = lookup.firstChild.nodeValue;
		if(firstOption != elementToSet.value) {
			ac.value=(firstOption);
			span.style.display = 'inline';
		}
	} else {
		span.style.display = 'none';
	}
	lookupInProgress = false;
}

function useLookup(value, type, index) {
	var elementToSet = document.getElementById(type + '[' + index + ']');
	//var span = document.getElementById(type + 'Span' + '[' + index + ']');
	elementToSet.value = value;
	elementToSet.focus();
	//span.style.display = 'none';
}

function hideLookup(type, index) {
	var span = document.getElementById(type + 'Span' + '[' + index + ']');
	span.style.display = 'none';
}

function addField(type, size, maxlength) {
	var cell = document.getElementById(type + 'Cell');
	var fields = document.getElementsByName(type+'[]');
	var fieldValues = new Array();
	var visibleFields = 0;
	for (var i = 0; i < fields.length; i++) {
		fieldValues[i] = fields[i].value;
		var span = document.getElementById(type + 'MasterSpan[' + i + ']');
		if(span.style.display != 'none') {
			visibleFields++;
		}
	}
	if(limitTo > 0 && visibleFields >= limitTo) {
		alert(limitTo + " fields is enough!");
	} else {
	var newField = '<span id="' + type + 'MasterSpan[' + fields.length + ']">\n ' + 
	'<input name="' + type + '[]" type="text" id="' + type + '[' + fields.length + ']"\n ';
	if(maxlength > 0) {
	  newField = newField + 'maxlength = "' + maxlength + '" '; 
	}
	if(size > 0) {
	  newField = newField + 'size = "' + size + '" '; 
	}
	newField = newField + 'autocomplete="off" onkeyup="lookup(this.value, \'' + type + '\', ' + fields.length + ');"  ' +
	'onfocus="lookup(this.value, \'' + type + '\', ' + fields.length + ');formtooltip(\'' + type + '_help\',1);\" ' + 
	'onblur="hideLookup(\'' + type + '\', ' + fields.length + ');formtooltip(\'' + type + '_help\',0);" />\n ' +
	'<span id="' + type + 'Span[' + fields.length + ']" style="display:none">\n '+
	'<br /><input class="autocomplete" id="' + type + 'AutoComplete[' + fields.length + ']" type="text"\n ';
	if(size > 0) {
	  newField = newField + 'size = "' + size + '" '; 
	}
	newField = newField + 'onfocus="useLookup(this.value, \'' + type + '\', ' + fields.length + ');"/>\n '+
	'<br /><em>press tab to autocomplete</em>\n </span>\n' + 
	'<img class="addbutton" src="app/includes/images/minus.gif" onclick="removeField(\'' + type + '\', ' + fields.length + ', this);" />' +
	'<br /></span>';
	cell.innerHTML = cell.innerHTML + newField;
	//cell.style.height = '100px';
	/*
	//DOM-style code of the innerHTML stuff above, hopelessly broken in IE.
	//Still, it's more readable than the former so I'll keep it around.
	var newField = document.createElement('input');
	newField.setAttribute('type', 'text');
	newField.setAttribute('name', type + '[]');
	newField.setAttribute('id', type + '[' + fields.length + ']');
	newField.setAttribute('autocomplete', 'off');
	newField.setAttribute('onkeyup', 'lookup(this.value, \'' + type + '\', ' + fields.length + ');');
	newField.setAttribute('onblur', 'hideLookup(\'' + type + '\', ' + fields.length + ')');
	var span = document.createElement('span');
	span.setAttribute('id', type + 'Span[' + fields.length + ']');
	span.setAttribute('style', 'display:none');
	var autocomplete = document.createElement('input');
	autocomplete.setAttribute('type', 'text');
	autocomplete.setAttribute('class', 'autocomplete');
	autocomplete.setAttribute('id', type + 'AutoComplete[' + fields.length + ']');
	autocomplete.setAttribute('onfocus', 'useLookup(this.value, \'' + type + '\', ' + fields.length + ');');
	var presstab = document.createElement('em');
	presstab.innerHTML = 'press tab to autocomplete';
	span.appendChild(autocomplete);
	span.appendChild(document.createElement('br'));
	span.appendChild(presstab);
	span.appendChild(document.createElement('br'));

	cell.appendChild(newField);
	cell.appendChild(document.createElement('br'));
	cell.appendChild(span);
	*/
	for (var i = 0; i < fieldValues.length; i++) {
		fields[i].value = fieldValues[i];
	}
	//A kludge to fix a firefox resizing bug
	cell.style.height = fieldHeight * (visibleFields + 1) + 'px';
	}
}

function removeField(type, index, button) {
	var field = document.getElementById(type+'['+index+']');
	var fields = document.getElementsByName(type+'[]');
	var span = document.getElementById(type+'MasterSpan['+index+']');
	var visibleFields = 0;
	for (var i = 0; i < fields.length; i++) {
		var a_span = document.getElementById(type + 'MasterSpan[' + i + ']');
		if(a_span.style.display != 'none') {
			visibleFields++;
		}
	}
	field.value = '';
	//field.name = '';
	if(visibleFields > 1) {
		span.style.display = 'none';
		visibleFields--;
	}
	var cell = document.getElementById(type + 'Cell');
	cell.style.height = (fieldHeight * visibleFields) + 'px';
}
