// http://www.captain.at/howto-ajax-form-post-request.php

var Params	 = "";
var http_request = false;
var charset	 = "utf-8";

function alertContents() {
    if (http_request.readyState == 4) {
        if (http_request.responseText) {

	    Params = eval("(" + http_request.responseText + ")");

	    if(Params['redirect']) {
		window.location.href = Params['redirect'];
		return false;
	    }

	    if(Params['messenger']) {
		scroll(0,0);
	    }

	    if(Params['captcha']) {
    		// HttpServletResponse response = ServletActionContext.getResponse();
	        // response.setHeader("Pragma", "no-cache");
		// response.setDateHeader("Expires", 0);	
		scroll(0,1000);
	    }

	    var KeyList = Params['key_list'];	    
	    for (i=0; i<KeyList.length; i++) {
		document.getElementById(KeyList[i]).innerHTML = Params[KeyList[i]];
	    }

	} else {
            alert("[!] There was a problem with the request " + http_request.status +" : "+ http_request.statusText);	
	}	    
    } else {
	// Dopsat - Vyskakovaci okno s hlaskou o prenosu dat, pricemz cely web zmeni svou barvu (stmavne)
    }
}

function Ajax(type, url) {

    http_request = false;

    if(typeof window.ActiveXObject != 'undefined') {
	http_request = new ActiveXObject("Microsoft.XMLHTTP");
    } else {
	http_request = new XMLHttpRequest();
	if (http_request.overrideMimeType) {
	    // set type accordingly to anticipated content type ('text/html' ? 'text/xml')
	    http_request.overrideMimeType('text/html');
	}
    }

    if (!http_request) {
	alert('Cannot create XMLHTTP instance');
	return false;
    }    

    if(type == 'POST') {
	http_request.onreadystatechange = alertContents;
	http_request.open(type, url, true);
	Params += "ajaxrequest" + "=" + "1" + "&";
	// http_request.setRequestHeader("Content-type", "multipart/form-data; boundary=\"\"");
	// http_request.setRequestHeader("Content-type", "multipart/form-data; boundary=\"\"");
	http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=" + charset);
	http_request.setRequestHeader("Content-length", Params.length);
	http_request.setRequestHeader("Connection", "close");
	http_request.send(Params);
    } else {
	var reg=/\?/; 
        if(reg.test(url)){
	    url += "&ajaxrequest" + "=" + "1" + "&";
	} else {
	    url += "?ajaxrequest" + "=" + "1" + "&";	
	}
	http_request.onreadystatechange = alertContents;
	http_request.open(type, url, true);
	http_request.send("");    
    }
}

// Funkce ziska obsah formulare a spusti funkci Ajax
function Form(name, url) {
    Params  = "";
    var obj = document.getElementById(name);
    getFormData(obj);
    Ajax("POST",url);
}

function AutoForm() {
    Form(this.id, this.action);
    return false;
}

// Funkce priradi k udalosti submit metodu Form, ale jen v pripade ze id formulare zacina "A-"
function addEvent() {
    var forms = document.getElementsByTagName("form");
    for (var i=0; i < forms.length; i++) {
    	if(forms[i].id.match("^A-")) {
	    forms[i].onsubmit = AutoForm;
	}
    }
}

// Funkce spracuje obsah formulare
function getFormData(obj) {
        
    for (var i=0; i <= (obj.childNodes.length-1); i++) {

	if (obj.childNodes[i].tagName == "INPUT") {
	    
	    var value = Utf8.decode(escape(Utf8.encode(obj.childNodes[i].value)));

    	    if (obj.childNodes[i].type == "text") {
        	Params += obj.childNodes[i].name + "=" + value + "&";
            }
    	    if (obj.childNodes[i].type == "password") {
        	Params += obj.childNodes[i].name + "=" + value + "&";
            }
    	    if (obj.childNodes[i].type == "file") {
        	Params += obj.childNodes[i].name + "=" + value + "&";
            }
    	    if (obj.childNodes[i].type == "submit") {
        	Params += obj.childNodes[i].name + "=" + value + "&";
            }
    	    if (obj.childNodes[i].type == "hidden") {
        	Params += obj.childNodes[i].name + "=" + value + "&";
            }
            if (obj.childNodes[i].type == "checkbox") {
        	if (obj.childNodes[i].checked) {
        	    Params += obj.childNodes[i].name + "=" + value + "&";
        	} else {
		    Params += obj.childNodes[i].name + "=&";
    		}
    	    }
            if (obj.childNodes[i].type == "radio") {
        	if (obj.childNodes[i].checked) {
        	    Params += obj.childNodes[i].name + "=" + value + "&";
		}
    	    }

	} else if(obj.childNodes[i].tagName == "SELECT") {
	    var sel = obj.childNodes[i];
	    Params += sel.name + "=" + Utf8.decode(escape(Utf8.encode(sel.options[sel.selectedIndex].value))) + "&";
	} else if(obj.childNodes[i].tagName == "TEXTAREA") {
    	    Params += obj.childNodes[i].name + "=" + Utf8.decode(escape(Utf8.encode(obj.childNodes[i].value))) + "&";
	} else {
	    // prohledame vnorene formularve hodnoty
	    getFormData(obj.childNodes[i]); 
	}     
    }
}

/* Jump to page */
function jumpto(url,text,val) {
    var page = prompt(text,val);

    if (page != null && page != '') {
	document.location.href = url + page;
    }
}

/* Windows open */
function new_window(url,w,h) {
    window.open(url,"popupWindow","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,copyhistory=no,width=" + w + ",height=" + h + ",screenX=150,screenY=150,top=150,left=70");
    return true;
}

/* AUTOLOAD */
function onloads() {
    // Prozatim odlozeno
    // document.getElementsByName('search')[0].focus();
    addEvent();
}

/**
*
*  UTF-8 data encode / decode
*  http://www.webtoolkit.info/
*
*  Take by se misto funkce Utf8 mohlo pouzivat todle
*  var encFunc = encodeURIComponent ? encodeURIComponent : escape;

**/

var Utf8 = {

	// public method for url encoding
	encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";

		for (var n = 0; n < string.length; n++) {

			var c = string.charCodeAt(n);

			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}

		}

		return utftext;
	},

	// public method for url decoding
	decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;

		while ( i < utftext.length ) {

			c = utftext.charCodeAt(i);

			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}

		}

		return string;
	}
}

function CreateBookmark() { 
    title = this.document.title;
    url = this.document.location.href;
    if (window.sidebar) { 
	// Mozilla Firefox
	// window.sidebar.addPanel(title, url,"");
	alert("Pro přidání k oblíbeným stiskni CTRL + D","Přidat k oblíbeným");
    } else if( window.external ) {
	// IE
	window.external.AddFavorite(url, title);
    } else if(window.opera && window.print) {
	// Opera
	alert("Pro přidání k oblíbeným stiskni CTRL + D","Přidat k oblíbeným");
    } else {
	// Other
	alert("Pro přidání k oblíbeným stiskni CTRL + D","Přidat k oblíbeným");
    }
}

function AjaxConfirm(text,type,url,redirect) {
    var answer = confirm(text);
    if (answer) {
	Ajax(type,url);
    } else {
	if(redirect) {
	    window.location.href = this.document.location.href;
	    return false;
	} else {
	    return;
	}
    }
}

/* Ajax Jump to page */
function AjaxJumpto(url,text,val) {
    var page = prompt(text,val);
    if (page != null && page != '') {
	Ajax("GET",url + page);
    }
}

/* Naseptavac */
function suggest(search,suggest,url) {

    var input = document.getElementById(search);
    var long = input.value.length;

    if (long == 0) {
	disableSuggest(suggest);
    } else {
	// NEW SUGGEST
	clearTimeout(self.suggestRun);
	var f = function(){ Ajax('GET',url + Utf8.encode(input.value) + "&searchidname=" + search + "&suggestidname=" + suggest); }
	self.suggestRun = setTimeout(f, 500);
    }
} 

/* Vypnuti naseptavace */
function disableChildElement(name,time) {
    var t = time || 200;
    var f = function(){ removeChildElement(name); }
    self.timer = setTimeout(f,t);
}

/* Smazeme element vcetne jeho sameho */
function removeElement(name) {
    var Node = document.getElementById(name);
    Node.parentNode.removeChild(Node);	
}					    

/* Smazeme obsah elementu */
function removeChildElement(name) {
    var Node = document.getElementById(name);
    for (var i=0; i <= (Node.childNodes.length-1); i++) {
	Node.childNodes[i].parentNode.removeChild(Node.childNodes[i]);
    }
}					    

/* Schovat element, tim ze kazdemu pridame classu 'hide'
    hideElement('<ID1>','<ID2>','<IDN>');
*/
function hideElement() {
    for(var i=0;i<arguments.length;i++){
        addClassName(document.getElementById(arguments[i]),'hide');
    }
}

/* Odkryjeme element, tim ze kazdemu pridame classu 'unhide'
    unhideElement('<ID1>','<ID2>','<IDN>');
*/
function unhideElement() {
    for(var i=0;i<arguments.length;i++){
        delClassName(document.getElementById(arguments[i]),'hide');
    }
}

/* Pridame className z elementu 
    addClassName(document.getElementById('<ID>'),'<CLASSNAME>');
*/
function addClassName(element, value) {

    
    if(!element.className) {
	element.className = value;
    } else {

	var newClassName="";
	var newArray = new Array();

	var oldClassName=element.className;
	var oldArray = new Array();
	oldArray=oldClassName.split(" ");

	for(var i=0;i<oldArray.length;i++){
	    if(!oldArray[i].match(value)) {
		newArray.push(oldArray[i]);
	    }
	}

	newArray.push(value);

	element.className = newArray.join(" ");
    }
}

/* Odeberem className z elementu 
    delClassName(document.getElementById('<ID>'),'<CLASSNAME>');
*/
function delClassName(element, value) {

    if(!element.className) {
	element.className = "";
    } else {

	var newClassName="";
	var newArray = new Array();

	var oldClassName=element.className;
	var oldArray = new Array();
	oldArray=oldClassName.split(" ");

	for(var i=0;i<oldArray.length;i++){
	    if(!oldArray[i].match(value)) {
		newArray.push(oldArray[i]);
	    }
	}

	element.className = newArray.join(" ");
    }
}

/*
function keyPressHandler() {
    var e = window.event || null;
    if(e != null){
	alert("CharCode value: " + e.charCode);
    }
    return true;
}
*/

window.onload = onloads;
