function update_checkbox(cb, cb_hidden)
{
	cb_hidden.value = cb.checked ? 1 : 0;
}

function submit_event($prefix_special, $event, $t)
{
	if (!$event) $event = '';

	set_hidden_field('events[' + $prefix_special + ']', $event);
	if ($t) set_hidden_field('t', $t);

	submit_kernel_form();
}

function submit_kernel_form()
{
	if (submitted) {
		return;
	}
	submitted = true;

	var $form = document.getElementById($form_name);

	if (typeof $form.onsubmit == "function") {
		$form.onsubmit();
	}

	$form.submit();

	$form.target = '';
	set_hidden_field('t', t);

	window.setTimeout(function() {submitted = false}, 500);
}

function set_hidden_field($field_id, $value)
{
	var $kf = document.getElementById($form_name);
	var $field = $kf.elements[$field_id];
	if ($field) {
		$field.value = $value;
		return true;
	}

	$field = document.createElement('INPUT');
	$field.type = 'hidden';
	$field.name = $field_id;
	$field.id = $field_id;
	$field.value = $value;

	$kf.appendChild($field);
	return false;
}

function get_hidden_field($field)
{
	var $kf = document.getElementById($form_name);
	return $kf.elements[$field] ? $kf.elements[$field].value : false;
}

	function query_states($object) {
		alert('changed');
	}

	function AjaxCountryStates($url, $input_mask) {
		this.URL = $url;
		this.InputMask = $input_mask;
	}


	function SetSSNField(field,event)
	{
		if (event.keyCode != 8 && event.keyCode != 35 && event.keyCode != 36 && event.keyCode != 37 && event.keyCode != 38 )
	 	{
			var value = field.value;
			var len = field.value.length;
			if (len < 4) {
				var reg =/^[0-9]{1,3}$/i;
			} else if (len > 4 && len < 6) {
				var reg =/.[0-9]{1,2}$/i;
			} else if (len < 12) {
				var reg =/.[0-9]{1,4}$/i;
			}
			if (len > 11)
			{
				field.value = value.substr(0,11);
			}
			if (len < 11) {
				if (!reg.test(value)) {
					field.value = value.substr(0,len - 1);
				} else if (len == 3) {
					field.value = field.value + "-";
				} else if (len == 6) {
					field.value = field.value + "-";
				}
			}
	 	}
	}

	AjaxCountryStates.prototype.GetStates = function ($country_field, $state_field) {
		var $countries = this.getControl($country_field);
		var $country_iso = $countries.options[$countries.selectedIndex].value;
		var $url = this.URL.replace('#COUNTRY_ISO#', $country_iso);
		Request.makeRequest($url, this.BusyRequest, '', this.successCallback, this.errorCallback, ['GetStates', $state_field], this);
	}

	AjaxCountryStates.prototype.getControl = function($field) {
		var $id = this.InputMask.replace('#FIELD#', $field);
		return document.getElementById($id);
	}

	AjaxCountryStates.prototype.successCallback = function($request, $params, $object) {
		var $responce = $request.responseText;
		var $match_redirect = new RegExp('^#redirect#(.*)').exec($responce);
		if ($match_redirect != null) {
			// redirect to external template requested
			window.location.href = $match_redirect[1];
			return false;
		}

		var $states = $object.getControl($params[1]);

		$object.ProcessXMLNode($request.responseXML, $states);

	}

	AjaxCountryStates.prototype.ProcessXMLNode = function($node, $dst_field)
	{
		for (var i = 0; i < $node.childNodes.length; i++) {
			var $child = $node.childNodes.item(i);
			switch ($child.tagName) {
				case 'state':
					var $option = document.createElement('OPTION');
					$dst_field.options.add($option, $dst_field.options.length - 1);
					$option.innerText = $child.firstChild.nodeValue;
					$option.innerHTML = $child.firstChild.nodeValue;
					$option.value = $child.getAttribute('iso');

					break;

				case 'states':
					// remove all existing states
					if ($dst_field.options.length > 0) {
						var $selected_state = $dst_field.options[$dst_field.selectedIndex].value;
						while ($dst_field.options.length > 0) {
							$dst_field.remove(0);
						}
					}
					// add new states
					this.ProcessXMLNode($child, $dst_field);

					// if no states, then add dummy item
					if ($dst_field.options.length == 0) {
						this.AddOption($dst_field, 'is', 'no states');
					}
					this.restoreSelection($dst_field, $selected_state);
					break;
			}
		}
	}

	AjaxCountryStates.prototype.restoreSelection = function($states, $selected_value) {
		var $i = 0;
		while ($i < $states.options.length) {
			if ($states.options[$i].value == $selected_value) {
				$states.selectedIndex = $i;
				break;
			}
			$i++;
		}
	}

	AjaxCountryStates.prototype.AddOption = function($dropdown, $value, $title) {
		var $option = document.createElement('OPTION');
		$dropdown.options.add($option, $dropdown.options.length - 1);

		$option.innerText = $title;
		$option.innerHTML = $title;
		$option.value = $value;
	}

	AjaxCountryStates.prototype.errorCallback = function($request, $params, $object) {
		alert('AJAX Error; class: AjaxCountryStates; ' + Request.getErrorHtml($request));
	}
