dojo.declare("Miolo.Page", null, {
    version: '0.1',
    scripts: new Miolo.Hash,
    controls: new Miolo.Hash,
    tokenId: '',
    ajaxEvent: 'no',
    fileUpload: 'no',
    themeLayout: 'default', // 'default' (link or handler), 'dynamic' (postback or ajax), 'window'
    SPI: 'no',
    constructor: function() {
        this.obj = this; 
    },
    getContent: function() {
        return {
            __FORMSUBMIT: miolo.webForm ? miolo.webForm.id : '',
            __ISAJAXCALL: 'yes',
            __THEMELAYOUT: miolo.page.themeLayout,
            __MIOLOTOKENID: miolo.page.tokenId,
            __ISFILEUPLOAD: miolo.page.fileUpload,
            __ISAJAXEVENT: miolo.page.ajaxEvent
        }
    },
    handler: function(gotourl) {
        console.log(">>>>>> miolo.page.SPI " + miolo.page.SPI);
        if (miolo.page.SPI == 'yes')
        {
            this.themeLayout = 'default';
            this.fileUpload = 'no';
            var ajaxHandler = new Miolo.Ajax({
                url: gotourl,
                response_type: 'JSON',
                parameters: miolo.page.getContent(),
                callback_function: function(result,ioArgs) {
                    miolo.page.evalresult(result);
                }
            });
            ajaxHandler.call();
        }
        else
        {
            miolo.disconnect();
            window.location = gotourl;
        }
    },
    page: function(gotourl) {
        miolo.disconnect();
        window.location = gotourl;
	},
    ajax: function() {
        this.setValidators(false);
        if (miolo.webForm.onSubmit())
        {
            this.setValidators(true);
            this.ajaxEvent = 'yes';
            this.themeLayout = 'dynamic';
            this.fileUpload = 'no';
            var ajaxSubmit = new Miolo.Ajax({
                form: 'frm_'+miolo.webForm.id,
                content: miolo.page.getContent(),
                response_type: 'JSON',
                callback_function: function(result,ioArgs) {
                    miolo.page.evalresult(result);
                }
            });
            ajaxSubmit.call();
        }
    },
    postback: function() {
        this.themeLayout = 'dynamic';
        var fileUpload = miolo.getElementById('__ISFILEUPLOADPOST');
        this.fileUpload = (fileUpload != null) ? fileUpload.value : this.fileUpload;
        var ajaxPostBack = new Miolo.Ajax({
            form: 'frm_'+miolo.webForm.id,
            content: miolo.page.getContent(),
            response_type: 'JSON',
            callback_function: function(result,ioArgs) {
                miolo.page.evalresult(result);
            }
        });
        ajaxPostBack.call();
    },
    getWindow: function(winid, domid, winurl) {
        this.themeLayout = 'window';
        this.fileUpload = 'no';
        var ajaxWindow = new Miolo.Ajax({
            url: winurl,
            response_type: 'JSON',
            parameters: miolo.page.getContent(),
            callback_function: function(result,ioArgs) {
                var winid = miolo.webForm.id;
                miolo.page.evalresult(result, winid);
            }
        });
        ajaxWindow.call();
    },
    setValidators: function(status) {
        if (miolo.webForm.validators) {
            miolo.webForm.validators.on = status;
        }
    },
    clearelement: function(element) {
        if (element)
        {
            if ( element.hasChildNodes() )
            {
                while ( element.childNodes.length >= 1 )
                {
                    element.removeChild( element.firstChild );       
                } 
            }   
        }
    },
    includejs: function(tag) {
        var md5 = new Miolo.md5();
        var regexp = /src=\"(.*)\"/mg;
        while (f = regexp.exec(tag))
        {
            var name = md5.MD5(f[1]);
            if (!this.scripts.get(name)) // not loaded yet
            {
                dojo.xhrGet({
                    url: f[1],
                    handleAs: "javascript",
                    sync: true
                });
                this.scripts.set(name,f[1]);
            }
        }
    },
    evalresult: function(result, winid) {
        console.log('stop show loading');
        miolo.stopShowLoading();
        console.log(result);
        if (result)
        {
            var response = result.data;
            miolo.page.evalresponse(response, winid);
        }
        else
        {
            miolo.page.tokenId = '';
        }
    },
    evalelement: function(response) {
        if (response.html)
        {
            for(i = 0; i < response.html.length; i++)
            {
                console.log(response.element[i]);
                response.html[i] = response.html[i].replace(/<--ta-->/g,'</textarea>');
                var element = dijit.byId(response.element[i]);
                if (element)
                {
                    console.log('is dijit');
                    try
                    {
                        dojo.forEach(element.getDescendants(), function(widget){ widget.destroyRecursive(); });
                        element.setContent(response.html[i]);	
                    }
                    catch (err)
                    {
                        console.log(err);
                    }
                }
                else if (element = miolo.getElementById(response.element[i]))
                {
                    console.log('is NOT dijit');
                    this.clearelement(element);
                    element.innerHTML = response.html[i];
                }
            }
        }
    },
    evalresponse: function(response, winid) {
        //var errorMsg = response.scripts[4];
        var errorMsg = '';
        if (errorMsg != '')
        {
//            miolo.page.stdout(errorMsg);
		    alert(errorMsg);
            miolo.page.tokenId = '';
        }
        else 
        {
            //if (response.scripts[0] != '')
            //{
            //    miolo.page.includejs(response.scripts[0]);
            //}
    //console.log("scripts 1\n" + response.scripts[2]);
            //this.evaljs(response.scripts[1]);
            this.evalelement(response);
            if (winid) 
            {
                dijit.byId(winid).show();
            }
            //if (response.form)
            //{
            //   miolo.page.onload(response);
            //}
        }
    },
    onload: function(response) {
        var form = response.form;

        miolo.setForm(form);
    console.log("form = " + form + "\n");
        miolo.webForm.init();
    console.log("scripts 2\n" + response.scripts[2]);
        miolo.webForm.onLoad = new Function( response.scripts[2]);
    console.log("scripts 3\n" +response.scripts[3]);
        miolo.webForm.onSubmit = new Function(response.scripts[3]);
        miolo.webForm.onLoad();

    },
    evaljs: function(script) {
        if (script != '')
        {
//            dojo.eval(script);
            if (!! (window.attachEvent && !window.opera))
            {
                execScript(script); // ie
            }
            else
            {
                window.eval(script); // not ie
            }
        }
    },
    stdout: function(msg) {
        var s = miolo.getElementById('stdout');
        s.innerHTML += '<br>' + msg;
    }
});

miolo.page = new Miolo.Page;

