dojo.declare("Miolo", null, {
    Version: 'Miolo2.5',
	webForm: null,
    fields: null,
    timer: null,
    grid: null,
    constructor: function() {
	},
    isIE: document.all ? true : false,
    i18n: null,
    iFrame: {
		object: null,
		dialogs: new Array(),
		sufix: 0,
		dragElement: null,
		base: window,
		parent: null,
		getById: function(id) {
            return this.parent.miolo.iFrame.dialogs[id];
		}
	},
    windows: {
		handle: new Array(),
		sufix: 0,
		base: window
	},
    getWindow: function(windowId) {
//        console.log("getWindow: " + windowId);
        return miolo.windows.handle[(windowId != '' ? windowId : 'current')];
	},
	addWindow: function(windowId) {
        miolo.windows.handle[windowId] = new Miolo.Window(windowId);
        return miolo.windows.handle[windowId];
	},
	setWindow: function(oWindow) {
        miolo.windows.handle['current'] = oWindow;
	},
	pushWindow: function(oWindow) {
        var win = miolo.windows.handle['current'];
        oWindow.parent = win;
        miolo.windows.handle['current'] = oWindow;
	},
	popWindow: function() {
        var win = miolo.windows.handle['current'];
        miolo.windows.handle['current'] = win.parent;
	},
    forms: {
		handle: new Array()
	},
    getForm: function(formId) {
//        console.log("getForm: " + formId);
        return miolo.forms.handle[formId];
	},
	addForm: function(formId) {
//        console.log("addForm: " + formId);
        miolo.forms.handle[formId] = new Miolo.Form(formId);
        return miolo.forms.handle[formId];
	},
	setForm: function(formId) {
//        console.log("setForm: " + formId);
        var form;
        miolo.webForm = ( form = miolo.getForm(formId)) ? form : miolo.addForm(formId);
	},
	getCurrentURL: function () {
		return this.webForm.getAction();
	},
    getElementById: function (e) {
        if(typeof(e)!='string') return e;
        if(document.getElementById) {e = dojo.byId(e);}
        else if(document.all) {e=document.all[e];}
        else {e=null;}
        return e;
    },
    getElementsByTagName: function (tagName, p) {
        var list = null;
        tagName = tagName || '*';
        p = p || document;
        if (p.getElementsByTagName) list = p.getElementsByTagName(tagName);
        return list || new Array();
    },
	setElementValueById: function (e, value) {
        ele = this.getElementById(e);
        if (ele != null)
	    {
		    ele.value = value;
	    } 
    },
    gotoURL: function (url) {
        var prefix = 'javascript:';
        url = url.replace(/&amp;/g,"&");
        if ( url.indexOf(prefix) == 0 )
        {
            eval(url.substring(11) + ';');
        }
        else
        {
            window.location = url;
        }
    },
	window: function (url, target)
    {
        var mioloWindow = new xWindow(
            target,                // target name
            0, 0,                   // size: width, height
            0, 0,                   // position: left, top
            0,                      // location field
            1,                      // menubar
            1,                      // resizable
            1,                      // scrollbars
            0,                      // statusbar
            1);                     // toolbar
        return mioloWindow.load(url);
    },
    setTitle: function setTitle(title)
    {
        try
        {
    	    window.top.document.title = title;    	
        }
        catch (e)
        {
        }
    },
    parse: function (id)
    {
        try
        {
            var byId = dojo.byId(id);
            if (byId)
            {
        	    dojo.parser.parse(byId); 
            }
        }
        catch (e)
        {
        }
    },
	associateObjWithEvent: function (obj, methodName){
    /* The returned inner function is intended to act as an event
       handler for a DOM element:-
    */
        return (function(e){return obj[methodName](e, this);});
    },
    isHandler: function(url) {
        return (url.indexOf('index.php') > -1);
    },
    submit: function() {
        return this.doPostBack('','',this.webForm.id);
    },
    afterSubmit: function() {
        /*
        console.log('validators nulling');

        this.webForm.validators = null;      
        */
        this.disconnect();
    },
    registerEvent: function (id, event, handler, preventDefault) {
        try
        {
            var eventHandler = new Function("event", handler + (preventDefault ? " event.preventDefault();" : "" ));
            this.webForm.connect(id, event, eventHandler);
        }
        catch (e)
        {
            this.page.stdout('registerEvent ' + id + ':' + event + '. Error: ' + e);
        }
    },
    disconnect: function () {
        if (this.webForm)
        {
            this.webForm.disconnect();
        }
    },
    _doSubmit: function (eventTarget, eventArgument, formSubmit) {
        this.setElementValueById(formSubmit+'__ISPOSTBACK', 'yes');
        this.setElementValueById(formSubmit+'__EVENTTARGETVALUE', eventTarget);
        this.setElementValueById(formSubmit+'__EVENTARGUMENT', eventArgument); 
        this.setForm(formSubmit);
    },
    doPostBack: function (eventTarget, eventArgument, formSubmit) {
        console.log('dopostback: ' + formSubmit);
        this._doSubmit(eventTarget, eventArgument, formSubmit);
        console.log(this.webForm);
        var result = miolo.webForm.onSubmit();
        console.log(result);
        if (result)
        {
            this.afterSubmit();
            this.page.postback();
        }
        return result;
    },
    doLinkButton: function (url, eventTarget, eventArgument, formSubmit) {
        console.log('dolinkbutton ' + url);
        this._doSubmit(eventTarget, eventArgument, formSubmit);
        if (this.webForm.onSubmit())
        {
            this.afterSubmit();
            url = url.replace(/&amp;/g,"&");
            this.webForm.setAction(url);
            this.page.postback();
        }
    },
    doAjax: function (eventTarget, eventArgument, formSubmit) {
        this._doSubmit(eventTarget, eventArgument, formSubmit);
        this.page.ajax();
    },
    doLink: function (url, formSubmit) {
        console.log('dolink ' + url);
        this.doHandler(url, formSubmit);
        this.webForm.setAction(url);
        return false;
    },
    doHandler: function (url, formSubmit, historyRegistered) {
        this.afterSubmit();
        this.setForm(formSubmit);
        url = url.replace(/&amp;/g,"&");
        this.page.handler(url);
        if ( ! historyRegistered )
        {
            this.registerHistory(url, formSubmit);
        }
    },
	doPage: function (url) {
        this.page.page(url);
	},
    doRedirect: function (url, formSubmit) {
        if (this.isHandler(url)) {
            this.doHandler(url, formSubmit);
        }
        else {
	        this.doPage(url);
        }        
    },
	doDisableButton: function (buttonId) {
        this.getElementById(buttonId).disabled = true;
    },
    doPrintForm: function (url) {
        var w = screen.width * 0.75;
        var h = screen.height * 0.60;
        var print = window.open(url,'print',
        'toolbar=no,width='+w+',height='+h+',scrollbars=yes,' +
        'top=0,left=0,statusbar=yes,resizeable=yes');
    },
	doPrintFile: function (eventTarget, eventArgument, formSubmit) {
        var ok = confirm(miolo.i18n.PRINT_FILE);
        if (ok)
        {
            this.doPostBack(eventTarget, eventArgument, formSubmit); 
        }
    },
	doGetFile: function (eventTarget, eventArgument, formSubmit) {
        this._doSubmit(eventTarget, eventArgument, formSubmit);
        this.setElementValueById('__ISDOWNLOAD', 'yes');
        this.setElementValueById('__FORMSUBMIT', miolo.webForm ? miolo.webForm.id : '');
        this.webForm.submit();
    },
    doShowPDF: function (eventTarget, eventArgument, formSubmit) {
        var ok = confirm("Aguarde a geração do arquivo PDF.\nO resultado será exibido em uma nova janela.");
        if (ok)
        {
            this.doPostBack(eventTarget, eventArgument, formSubmit); 
        }
    },
    doWindow: function (url, target) {
            if ((target == null) || (target == ''))
            {
                target = 'mioloWindow';
            }
            var tg = window.name;
            //var form = document.forms[0];
            var w = screen.width * 0.95;
            var h = screen.height * 0.80;
            var wnd = window.open(url,target, 
            'toolbar=no,width='+w+',height='+h+',scrollbars=yes,' +
            'top=0,left=0,statusbar=yes,resizeable=yes');
            //form.target='print'; 
            //miolo.doPostBack(eventTarget, eventArgument, formSubmit);
            wnd.focus();
            //form.target=tg;
    },
    doPrintURL: function (url) {
        var ok = confirm('Clique Ok para imprimir.');
        if (ok)
        {
            var tg = window.name;
            var form = document.forms[0];
            var w = screen.width * 0.95;
            var h = screen.height * 0.80;
            var print = window.open(url,'print', 
            'toolbar=no,width='+w+',height='+h+',scrollbars=yes,' +
            'top=0,left=0,statusbar=yes,resizeable=yes');
            print.focus();
            window.print();
            form.target=tg;
        }
    },
	showLoading: function() {
        try
        {
            dojo.query('#mLoadingMessageBg').style('display','block');
            dojo.query('#mLoadingMessage').style('display','block');
        }
        catch(err)
        {}
		return true;
    },
    stopShowLoading: function()
    {
        try
        {
            dojo.query('#mLoadingMessageBg').style('display','none');
            dojo.query('#mLoadingMessage').style('display','none');
        }
        catch(err)
        {
            console.log('not stop show loading');
        }
		return true;
    },
	getMousePosition: function( e ) {
        is_ie = ( /msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent) );
        var posX;
        var posY;
        if ( is_ie )
        {
            posY = window.event.clientY + document.body.scrollTop;
            posX = window.event.clientX + document.body.scrollLeft;
        } else {
            posY = e.clientY + window.scrollY;
            posX = e.clientX + window.scrollX;
        }
        return new Array( posX, posY);
    },
    currency: function(field) {
    	var c = new Miolo.Currency;
        console.log('blur on '  +  field);
        var f = miolo.getElementById(field);
	    c.format(f);
    },
    registerHistory: function(url, formSubmit) {
        dojo.back.addToHistory({handle: function() { miolo.doHandler(url, formSubmit, true) }, changeUrl: true} );
    },
    initHistory: function () {
        dojo.back.setInitialState({handle: function() {} } );
    }
});

var miolo = new Miolo;

if (window.parent && window.parent.miolo)
{
    miolo.windows.base = window.parent.miolo.windows.base;
}

