var $form_name = 'kernel_form';
var submitted = false;

String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };

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

function redirect($url) {
	window.location.href = $url;
}

function open_window($url, $window_name, $width, $height) {
	window.open($url, $window_name, 'width='+$width+',height='+$height+',resizable=yes');
	return false;
}

function addLoadEvent(func, wnd) {
	if (!wnd) wnd = window
	var oldonload = wnd.onload;
	if (typeof wnd.onload != 'function') {
		wnd.onload = func;
	} else {
		wnd.onload = function() {
			if (oldonload) {
				oldonload();
			}
			func();
		}
	}
}

// ItemCategories class
function ItemCategories($table_id, $field_id, $primary_category, $phrases) {
	this.CategoryTable = document.getElementById($table_id);
	this.CategorySelector = document.getElementById($field_id + '_select');
	this.MoreCategoriesField = document.getElementById($field_id);
	this.PrimaryCategory = $primary_category;
	this.Phrases = $phrases;

	// get additional categories from item
	if (this.MoreCategoriesField.value.length) {
		this.MoreCategories = this.MoreCategoriesField.value;
		this.MoreCategories = this.MoreCategories.substring(1, this.MoreCategories.length - 1).split('|');
	}
	else {
		this.MoreCategories = new Array ();
	}
}

ItemCategories.prototype.AddCategory = function($separator, $delete_button, $max_categories) {
	var $category_id = this.CategorySelector.options[this.CategorySelector.selectedIndex].value;
	var $category_name = this.CategorySelector.options[this.CategorySelector.selectedIndex].innerHTML.trim();

	if ((this.SearchCategory($category_id) !== false) || ($category_id == this.PrimaryCategory) || ($category_id == 0)) {
		// don't add same category twice & don't allow to add item's primary category
		alert(this.Phrases[1]);
		return ;
	}

	if ((this.MoreCategories.length + 2) > $max_categories)
	{
		// don't add more category - $max_categories limit
		alert(this.Phrases[0]);
		return ;
	}

	// strip trailing HTML spaces & separator
	var $separator_pos = $category_name.indexOf($separator);
	if ($separator_pos != -1) {
		$category_name = $category_name.substring($separator_pos + $separator.length);
	}


	var $row = this.CategoryTable.insertRow(-1);
	$row.id = 'category_' + $category_id;

	var $cell = $row.insertCell(-1);
	$cell.innerHTML = $category_name;

	$cell = $row.insertCell(-1);
	$cell.innerHTML = $delete_button.replace(/#CATEGORY_ID#/g, $category_id);

	this.MoreCategories.push($category_id);
	this.updateMoreCategoriesField();
}

ItemCategories.prototype.SearchCategory = function($category_id) {
	var $i = 0;
	while ($i < this.CategoryTable.rows.length) {
		if (this.CategoryTable.rows[$i].id == 'category_' + $category_id) {
			return $i;
		}
		$i++;
	}

	return false;
}

ItemCategories.prototype.DeleteCategory = function($category_id) {
	var $row_index = this.SearchCategory($category_id);

	if ($row_index !== false) {
		this.CategoryTable.deleteRow($row_index);
		var $i = 0;
		while ($i < this.MoreCategories.length) {
			if (this.MoreCategories[$i] == $category_id) {
				this.MoreCategories.splice($i, 1);
				break;
			}
			$i++;
		}
		this.updateMoreCategoriesField();
	}
}

ItemCategories.prototype.updateMoreCategoriesField = function() {
	this.MoreCategoriesField.value = this.MoreCategories.length ? '|' + this.MoreCategories.join('|') + '|' : '';
}

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 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 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 show_full_post(posting_id) {
	ofull = document.getElementById("full_"+posting_id);
	oshort = document.getElementById("short_"+posting_id);
	if (ofull.style.display == 'none') {
		ofull.style.display = 'block';
		oshort.style.display = 'none';
	} else {
		oshort.style.display = 'block';
		ofull.style.display = 'none';
	}
}

function check_keyword_search(e) {
	if (!e) return;
 	if (e.keyCode == 13) submit_event('local','OnKeywordSearch');
}

function select_step(step)
{
	for (i=1; i<3; i++)
	{
		document.getElementById("add_question_step" + i).style.display = (i == step) ? 'block' : 'none';
	}
}

function topic_event(event, error_text)
{
	if (!document.getElementById("topic_field").value) {
		alert(error_text);
		return;
	}
	submit_event('bb',event);
}

function check_user_keyword_search(e, empty_alert) {
	if (!e) return;
 	if (e.keyCode == 13) make_search(empty_alert);
}

function make_search(empty_alert)
{
	if (!document.search_form.keyword_search.value)
	{
		alert(empty_alert);
		return;
	}
	$form_name = 'search_form';
	submit_event('u','OnKeywordSearch');
}


function resort_grid($prefix_special, $field)
{
//	set_form($prefix_special, $ajax);
	set_hidden_field($prefix_special + '_CombinedSorting', $field + '|desc');
//	set_hidden_field($prefix_special + '_Sort1_Dir', 'desc');
	submit_event($prefix_special, 'OnSetSortingDirect');
}

function catchHotKeysM(e)
{
	if (
		(document.getElementById("Subject").value.trim() == '')
		&& (document.getElementById("Body").value.trim() == '')
	) {
		document.getElementById("SubmitButton").disabled = 1;
	} else {
		document.getElementById("SubmitButton").disabled = 0;
	}
}
