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

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

function jq($selector) {
	return $selector.replace ? $selector.replace(/(\[|\]|\.)/g, '\\$1') : $selector;
}

function in_array(needle, haystack)
{
	return array_search(needle, haystack) != -1;
}

function array_search(needle, haystack)
{
	for (var i=0; i<haystack.length; i++)
	{
		if (haystack[i] == needle) return i;
	}
	return -1;
}

function getCurrentAnchor() {
	var current_url = window.location.href;
	return current_url.match(/\#/) ? current_url.replace(/^.+\#/, '') : '';
}

function setAnchorParam(name, value, replaceUrl) {
	var anchor = getCurrentAnchor();
	var regexp = new RegExp('^'+name+'=[^&]*');
	var regexp2 = new RegExp('&'+name+'=[^&]*');
	anchor = anchor.replace(regexp, '').replace(regexp2, '');
	anchor += anchor.length > 0 ? '&' : '';
	anchor = anchor.replace('&&', '&');
	anchor += encodeURIComponent(name);
	if (typeof(value) != 'undefined') {
		anchor += '='+encodeURIComponent(value);
	}
	anchor = anchor.replace(/&$/, '').replace(/^&/, '');

	if (replaceUrl) {
		window.location.replace(window.location.href.replace(/\#.*$/, '')+'#'+anchor);
	}
	else {
		window.location.hash = anchor;
	}
}

function getAnchorParam(name)
{
	var ret = false;
	var anchor = getCurrentAnchor();
	var regexp = new RegExp('(^|&)' + name + '=([^&]*)'); // &name=value OR ?name=value (parameter)
	var regexp2 = new RegExp('(^|&)' + name + '([^=]|$)'); // &name OR ?name (mark)

	if (anchor.match(regexp)) {
		var matches = regexp.exec(anchor);
		ret = matches[2];
	}
	else if (anchor.match(regexp2)) {
		ret = true;
	}

	return ret;
}

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

$(document).ready(
	function () {
		$('body').ajaxComplete(function (ev, request) {
			if (request) {
				var responce = request.responseText;
				if (typeof(responce) == 'string' && responce.match(/^\s*#redirect#/)) {
					ev.preventDefault();
					window.location.href = responce.replace(/^\s*#redirect#/, '');
				}
			}
		});
	}
);

function getDocumentFromXML(xml)
{
	if (window.ActiveXObject) {
		var doc = new ActiveXObject("Microsoft.XMLDOM");
		doc.async=false;
		doc.loadXML(xml);
	}
	else {
		var parser = new DOMParser();
		var doc = parser.parseFromString(xml,"text/xml");
	}
	return doc;
}

function strip_tags(str) {
    var key = '';
    var matches = [];
    var html = '';

    var replacer = function (search, replace, str) {
        return str.split(search).join(replace);
    };

    str += '';

    // Match tags
    matches = str.match(/(<\/?[\S][^>]*>)/gi);

    // Go through all HTML tags
    for (key in matches) {
        if (isNaN(key)) {
            // IE7 Hack
            continue;
        }

        // Save HTML tag
        html = matches[key].toString();

		str = replacer(html, '', str); // Custom replace. No regexing
    }

    return str;
}

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

	set_hidden_field('events[' + $prefix_special + ']', $event);
	if (typeof($t) != 'undefined')  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 = '';
	if (typeof(t) != 'undefined') 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 isset(variable)
{
	if(variable==null) return false;
	return (typeof(variable)=='undefined')?false:true;
}
