function xajax_extend()
{
    if(typeof(xajax) == 'undefined')
    {
        return false;
    }
    
    xajax.newSessionID = function()
    {
        var sessionID;
        sessionID = new String(new Date().getTime());
			
        var random = new String(Math.random()).substr(2);
        sessionID = sessionID + random;
			
        return sessionID;
    }
    
    xajax.setStatusMessages = function(msg)
    {
        window.status = msg;
    }
    
    var loadingTimeout;

	 xajax.newelement = function(newid, newname, where, what, html) 
	 {
	    if(document.createElement) 
		 {
	        var el = document.createElement(what);
	        el.id = newid;
	        el.name = newname;
				
	        with(el.style)
	            background = 'white';

	        el.innerHTML = html;
				
	        var wherenew = document.getElementById(where);
	        wherenew.appendChild(el);
	    }
	 }
	 
 	 xajax.prepare_upload = function (formID) 
	 {
	    xajax.newelement('stat','',formID,'fieldset','');
	    xajax.newelement('statleg','','stat','legend','Status wgrywania pliku');
	    xajax.newelement('uploadstatus','','stat','div','<p>Wybierz plik do wgrania</p>');

	    xajax.newelement('statusbar','statusbar','uploadstatus','div','');	 
	    xajax.newelement('bar','bar','statusbar','div','');	 
	    xajax.newelement('status','status','statusbar','div','0%');	 
	 }
	 
    xajax.upload = function(rpcFunc,formID,url)
    {
        var form = xajax.$(formID);
        if(!form)
            return false;
			
        var newSessionID = xajax.newSessionID();
			
        // init status
        if (document.body && xajax.config.waitCursor)
            document.body.style.cursor = 'wait';

        clearTimeout(loadingTimeout);
//        var loadingTimeout = setTimeout("xajax.loadingFunction();",400);
			
        if(!url)
            url = xajax.config.requestURI;
        
        var separator = '?';
        if(url.indexOf('?') != -1)separator = '&';
        url += separator + 'xajax='+encodeURIComponent(rpcFunc);
        url += "&xajaxr=" + new Date().getTime();
			
        // get the upload file local path
        var formItem;
        var nodeName;
        for(var i=0; i<form.getElementsByTagName('input').length; i++)
        {
            formItem = form.elements[i];
            nodeName = new String(formItem.nodeName).toLowerCase();
            if(formItem.name == '' || nodeName == 'button')
                continue;
					 
            if(formItem.type == 'file')
                url += '&'+formItem.name+'='+encodeURIComponent(formItem.value);
        }
        form.action = url;
        
        var iframeName = form.id + newSessionID;
        var iframe;
			
        if((iframe = xajax.$(iframeName)))
            document.body.removeChild(iframe);

        iframe = xajax.createIframe(iframeName,iframeName);
        form.target = iframeName;
			
        var xmlDoc;
        var responseXML;
        var responseOBJ;
        
        if(typeof iframe.onreadystatechange == 'object') // for IE
        {
            iframe.onreadystatechange = function()
            {
                if(iframe.readyState == 'complete' && !iframe.loaded)
                {
                    // IE load twice (bug or feature?)
                    iframe.loaded = true;
                    xmlDoc = document.frames(iframe.id);
                    if(xmlDoc.window.document.location != iframe.src)
                    {
                    	   responseOBJ = xajax.tools.getRequestObject();
                        responseXML = xmlDoc.window.document.XMLDocument;
                        xajax.uploadResponse(responseXML,iframe, xmlDoc,responseOBJ);
                    }
                }
            }
        }
        else // for FF
        {
            iframe.onload = function()
            {
                xmlDoc = iframe.contentWindow;
					 
                if(xmlDoc.window.document.location != iframe.src)
                {
                    responseOBJ = xajax.tools.getRequestObject();
                    responseXML = xmlDoc.document;
                    xajax.uploadResponse(responseXML,iframe, xmlDoc,responseOBJ);
                }
            }
        }
    }
    
    xajax.uploadResponse = function(responseXML,iframeObj, xmlDoc,responseOBJ)
    {
        // doit on the old way ...
		
		xml = responseXML.documentElement;
		if (xml == null)
			return;        
		
		for (var i=0; i<xml.childNodes.length; i++)
		{
			if (xml.childNodes[i].nodeName == "cmd")
			{
				var callargs = new Object();
				
				for (var j=0; j<xml.childNodes[i].attributes.length; j++)
				{
					if (xml.childNodes[i].attributes[j].name == "n")
					{
						callargs.cmd = xml.childNodes[i].attributes[j].value;
					}
					else if (xml.childNodes[i].attributes[j].name == "t")
					{
						callargs.id = xml.childNodes[i].attributes[j].value;
					}
					else if (xml.childNodes[i].attributes[j].name == "p")
					{
						callargs.property = xml.childNodes[i].attributes[j].value;
					}
					else if (xml.childNodes[i].attributes[j].name == "c")
					{
						callargs.type = xml.childNodes[i].attributes[j].value;
					}
				} 
				
				if (xml.childNodes[i].childNodes.length > 1 && xml.childNodes[i].firstChild.nodeName == "#cdata-section")
				{
					callargs.data = "";
					for (var j=0; j<xml.childNodes[i].childNodes.length; j++)
						callargs.data += xml.childNodes[i].childNodes[j].data;
				}
				else if (xml.childNodes[i].firstChild && xml.childNodes[i].firstChild.nodeName == 'xjxobj') 
				{
					callargs.data = xajax._nodeToObject(xml.childNodes[i].firstChild);
					callargs.objElement = "XJX_SKIP";
				}
				else if (xml.childNodes[i].childNodes.length > 1)
				{
					for (var j=0; j<xml.childNodes[i].childNodes.length; j++)
					{
						if (xml.childNodes[i].childNodes[j].childNodes.length > 1 && xml.childNodes[i].childNodes[j].firstChild.nodeName == "#cdata-section")
						{
							var internalData = "";
							for (var k=0; k<xml.childNodes[i].childNodes[j].childNodes.length;k++)
								internalData+=xml.childNodes[i].childNodes[j].childNodes[k].nodeValue;
						} 
						else
							var internalData = xml.childNodes[i].childNodes[j].firstChild.nodeValue;
					
						if (xml.childNodes[i].childNodes[j].nodeName == "s")
							callargs.search = internalData;

						if (xml.childNodes[i].childNodes[j].nodeName == "r")
							callargs.data = internalData;
					}
				}
				else if (xml.childNodes[i].firstChild)
					callargs.data = xml.childNodes[i].firstChild.nodeValue;
				else
					callargs.data = "";				

				if (callargs.objElement != "XJX_SKIP") 
					callargs.objElement = xajax.$(callargs.id);
				
				xajax.commands[callargs.cmd](callargs);
			}
		}
        
      document.body.style.cursor = 'default';
      setTimeout("xajax.deleteIframe('"+iframeObj.name+"');",400);
      iframeObj = null;
    }

    xajax.deleteIframe = function(iframeName)
    {
        if((iframe = xajax.$(iframeName)))
            document.body.removeChild(iframe);
    }    
    
    xajax.createIframe = function(name,id)
    {
        var iframe;
        if(!id)
            id = '';

        if(document.all && navigator.appName == "Microsoft Internet Explorer") // for IE
        {
            iframe = document.createElement('<iframe id="'+id+'" name="'+name+'">');
        }
        else // for FF
        {
            iframe = document.createElement('iframe');
            iframe.id = id;
            iframe.name = name;
        }
        
        iframe.width = '0';
        iframe.height = '0';
        iframe.style.display = 'none';
        iframe.scrolling = 'no';
        iframe.src = 'about:blank';
        
        document.body.appendChild(iframe);
        return iframe;
    }
}
xajax_extend();