function fireEvent(element,event){
    if (document.createEventObject){
        var evt = document.createEventObject();
        return element.fireEvent('on'+event,evt)
    }
    else{
        var evt = document.createEvent("HTMLEvents");
        evt.initEvent(event, true, true ); 
        return !element.dispatchEvent(evt);
    }
}


function setSelectValue(select, value) {
	var options = select.getElementsByTagName('option'); 
	var changed = false;
	for (var i = 0; i < options.length; i++) {
		changed = changed || options[i].selected!=(options[i].value == value);
		options[i].selected=(options[i].value == value);
	} 
	
	if (changed) {
		fireEvent(select, 'change');
	}
}

function setInputValue(input, value) {
	switch (input.type) {
		case 'checkbox':
			input.checked=value;
			if (value) {
				fireEvent(input, 'click');
			}
			break;
		case 'text':
			changed = (input.value != value);
			input.value = value;
			if (changed) {
				fireEvent(input, 'change');
			}
			break;
	}
}

// TODO: Make a class instead
function prefillForm(formName, selectionName) {
		var selectionCookie = getCookie('selection');
		if (selectionCookie) {
			var selection = '';
			try {
				selection = selectionCookie.evalJSON(true);
			} catch (err) {
				selection = '';
			}
			
			if (selection[selectionName]) {
				previousSelection = selection[selectionName];
				var form = $(formName);
				if (form) {
					$A(form.getElementsByTagName('select')).each(function(node) {setSelectValue(node, previousSelection[node.name])});
					$A(form.getElementsByTagName('input')).each(function(node) {setInputValue(node, previousSelection[node.name])});
				}
			}
		}
}

