﻿var httpArray = new Array();
var isIe/*@cc_on = true@*/;

function createRequestObject() {
    var ua;
	if(window.XMLHttpRequest) {
		try {
			ua = new XMLHttpRequest();
		}
		catch(e) {
			ua = false;
		}
	}
	else if(window.ActiveXObject) {
		try {
			ua = new ActiveXObject('Microsoft.XMLHTTP');
		}
		catch(e) {
			ua = false;
		}
	}
	return ua;
}
 
function createSelectLists() {
	var tags = document.getElementsByTagName('div');
	var selectListCount = 0;
	var i = 0;
	while(i < tags.length) {
		if(tags[i].getAttribute((isIe ? 'className' : 'class')) == 'selector') {
			var url = tags[i].innerHTML;
			tags[i].innerHTML = '';
			
			var selector_list_container = document.createElement('div');
			selector_list_container.setAttribute((isIe ? 'className' : 'class'), 'selector_list_container');
			var selector_list_descr = document.createElement('div');
			selector_list_descr.setAttribute('id', 'selector_list_descr_' + selectListCount);
			selector_list_descr.setAttribute((isIe ? 'className' : 'class'), 'selector_descr');
			selector_list_container.appendChild(selector_list_descr);
			var selector_list = document.createElement('div');
			selector_list.setAttribute((isIe ? 'className' : 'class'), 'selector_list');
			var selector_list_ul = document.createElement('ul');
			selector_list_ul.setAttribute('id', 'selector_list_ul_' + selectListCount);
			selector_list.appendChild(selector_list_ul);
			selector_list_container.appendChild(selector_list);
			tags[i].appendChild(selector_list_container);
			
			var selector_bucket_container = document.createElement('div');
			selector_bucket_container.setAttribute((isIe ? 'className' : 'class'), 'selector_bucket_container');
			var selector_bucket_descr = document.createElement('div');
			selector_bucket_descr.setAttribute('id', 'selector_bucket_descr_' + selectListCount);
			selector_bucket_descr.setAttribute((isIe ? 'className' : 'class'), 'selector_descr');
			selector_bucket_container.appendChild(selector_bucket_descr);
			var selector_bucket = document.createElement('div');
			selector_bucket.setAttribute((isIe ? 'className' : 'class'), 'selector_bucket');
			var selector_bucket_ul = document.createElement('ul');
			selector_bucket_ul.setAttribute('id', 'selector_bucket_ul_' + selectListCount);
			selector_bucket.appendChild(selector_bucket_ul);
			selector_bucket_container.appendChild(selector_bucket);
			tags[i].appendChild(selector_bucket_container);
			
			var selector_hidden = document.createElement('div');
			selector_hidden.setAttribute('id', 'selector_hidden_' + selectListCount);
			tags[i].appendChild(selector_hidden);
			
			var http = createRequestObject();
			http.open('GET', url, true);
			http.onreadystatechange = createSelector;
			http.send(null);
			
			httpArray.push(new Array(http, selectListCount, false, 0, new Array(), new Array(), '', ''));
			
			selectListCount++;
		}
		i++;
	}
}

function createSelector() {
	for(i = 0; i < httpArray.length; i++) {
		if(httpArray[i][0].readyState == 4 && httpArray[i][2] == false){
			httpArray[i][2] = true;
			
			var xmldoc = httpArray[i][0].responseXML;
			var root_node = xmldoc.getElementsByTagName('root').item(0);
			var items = root_node.getElementsByTagName('item');
			
			for (var j = 0 ; j < items.length ; j++) {
				if(items[j].firstChild) {
					if(items[j].getAttribute('selected') != 'true') {
						httpArray[i][4].push(items[j].firstChild.nodeValue);
					}
					else {
						httpArray[i][5].push(items[j].firstChild.nodeValue);
					}
				}
			}
			
			var max = root_node.getElementsByTagName('max').item(0);
			httpArray[i][3] = max.firstChild.nodeValue;
			
			var list_descr = root_node.getElementsByTagName('list_descr').item(0);
			httpArray[i][6] = list_descr.firstChild.nodeValue;
			
			var bucket_descr = root_node.getElementsByTagName('bucket_descr').item(0);
			httpArray[i][7] = bucket_descr.firstChild.nodeValue;
			
			setSelectDescr(i);
			
			setSelectList(false, i);
		}
	}
}

function setSelectDescr(ptr) {
	document.getElementById('selector_list_descr_' + ptr).innerHTML = httpArray[ptr][6] + ':';
	document.getElementById('selector_bucket_descr_' + ptr).innerHTML = httpArray[ptr][7] + ':<br />(max. ' + httpArray[i][3] + ')';
}

function isIn(arr, elem) {
	for(i = 0; i < arr.length; i++) {
		if(arr[i] == elem) return true;
	}
	return false;
}

function popElem(arr, elem) {
	var newarr = new Array();
	for(i = 0; i < arr.length; i++) {
		if(arr[i] != elem) newarr.push(arr[i]);
	}
	return newarr;
}

function createListElem(text, ptr) {
	var li = document.createElement('li');
	li.onclick = function() { setSelectList(this, ptr); };
	if(isIe) {
		li.onmouseover = function() { this.className = 'iehover'; }
		li.onmouseout = function() { this.className = ''; }
	}
	li.innerHTML = text;
	
	return li;
}

function exchangeListElem(obj, http) {
	if(isIn(http[4], obj.innerHTML)) {
		if((http[5].length + 1) > http[3]) {
			alert('Du darfst nicht mehr als ' + http[3] + ' Einträge auswählen!');
			return false;
		}
		
		http[5].push(obj.innerHTML);
		http[4] = popElem(http[4], obj.innerHTML);
	}
	else {
		http[4].push(obj.innerHTML);
		http[5] = popElem(http[5], obj.innerHTML);
	}
}

function setSelectList(obj, ptr) {
	var http = httpArray[ptr];
	
	if(obj != false) {
		exchangeListElem(obj, http);
	}
	
	http[4].sort();	
	var ul_list = document.getElementById('selector_list_ul_' + http[1]);
	ul_list.innerHTML = '';
	for(i = 0; i < http[4].length; i++) {
		ul_list.appendChild(createListElem(http[4][i], ptr));
	}
	
	http[5].sort();
	var hidden = document.getElementById('selector_hidden_' + http[1]);
	hidden.innerHTML = '';
	var ul_bucket = document.getElementById('selector_bucket_ul_' + http[1]);
	ul_bucket.innerHTML = '';
	for(i = 0; i < http[5].length; i++) {
		var input = document.createElement('input');
		input.setAttribute('type', 'hidden');
		input.setAttribute('name', 'selector_field_' + http[1] + '[]');
		input.setAttribute('value', http[5][i]);
		hidden.appendChild(input);
		
		ul_bucket.appendChild(createListElem(http[5][i], ptr));
	}
}
