/**
 * @author tzajicek, jprachar
 */
function action(act) {
	if (typeof act==='function' && typeof jQuery==='function') {//first argument is callback 
		jQuery.post(window.location.href, {async: 1, act: arguments[1], args:  jQuery.makeArray(arguments).slice(2)}, act, 'json');
		return;
	}
	
	var ajax = 
		window.XMLHttpRequest ? 
			new XMLHttpRequest() : 
			new ActiveXObject('Microsoft.XMLHTTP');
    ajax.open('POST', window.location.href, false);
	ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	var query = 'async=1&act=' + act;
	for (var i = 1; i < arguments.length; i++) 
	    query += '&args[]=' + encodeURIComponent(arguments[i]);                             
	ajax.send(query);
	//alert(ajax.readyState + ' ' + window.location.href + ' ' + query);
	var result = "";
	if (ajax.readyState == 4) {
		if (ajax.status == 200) {
			eval('result = ' + ajax.responseText);
		}
	}
	return result;                                         
}

//useful alias (for event handlers inside form)
var vivoAction = action;

function submit(form, act) {
	form.act.value = act;
	form.submit();
	return false;
}

/**
 * Do requestu přibalí hodnoty všech formulářových polí
 * @author jprachar
 * @param form Element form
 * @param act Akce, která se má zavolat
 * @return
 */
function submitAndAction(form, act) {
	var ajax = 
		window.XMLHttpRequest ? 
			new XMLHttpRequest() : 
			new ActiveXObject('Microsoft.XMLHTTP');
    ajax.open('POST', window.location.href, false);
	ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	var query = 'async=1&act=' + encodeURIComponent(act);
	for (var i = 2; i < arguments.length; i++) 
	    query += '&args[]=' + encodeURIComponent(arguments[i]);
	
    var elements = form.elements;
    var content = [];
    for (var i=0; i < elements.length; i++) {
        if (elements[i].attributes.name && elements[i].attributes.name.specified && !elements[i].disabled) {
            if (/^(select)$/i.test(elements[i].tagName)) {
                var options = elements[i].options;
                for (var j=0; j < options.length; j++) {
                    if (options[j].selected) {
                        var value = (options[j].attributes.value && options[j].attributes.value.specified ? options[j].value : options[j].text);
                        content.push(encodeURIComponent(elements[i].name) + '=' + encodeURIComponent(value));
                    }
                }
            } else if (!/^(submit|reset|button|file|image)$/i.test(elements[i].type) && (!/^(radio|checkbox)$/i.test(elements[i].type) || elements[i].checked)) {
            	if (elements[i].name != 'act') { //nechceme provádět formulářovou akci
            		content.push(encodeURIComponent(elements[i].name) + '=' + encodeURIComponent(elements[i].value));
            	}
            }
        }
    }
	query += '&' + content.join('&');
	ajax.send(query);
//	alert(window.location.href + '?' + query);
	eval('var result = ' + ajax.responseText);
	return result;                                         
}


function serialize(o, n) {
	if (!n)
		n = 0;
	switch (typeof o) {
		case "string":
			return "\"" + o + "\"";
		case "object":
			var p =  "";
			for (var i = 0; i < n; i++)
				p += "    ";
			var s = "{";
			var i = 0;
			for (var k in o)
				s += (i++ ? ",\n" : "\n") + p + "    " + k + ": " + serialize(o[k], n + 1);
			return s + "\n" + p + "}";
		default:
			return o;
	}
}