/**

* @base upon RainChen @ Fri Jul 28 17:06:37 CST 2006 version 0.1 for xajax 0.2.4

* @author Oliver Trebes @ Sat Feb 24 11:49:53 CET 2007

* @uses xajax file upload extend

* @access public

* @param null

* @return null

* @version 0.2

*/

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.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);

        //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];
//            alert(formItem);
//			if(formItem.type == 'image') {
//				continue;
//			}	
            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;

        xxajax_loading_hide ();

    }



    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();
