function importJS (file) {
        var script  = document.createElement('script');
        script.src  = file;
        script.type = 'text/javascript';
        document.getElementsByTagName('head')[0].appendChild(script);
} // importJS

function goto (url) {
        document.location = url;
} // goto

function loginPanel () {
        if ($('loginpanel').visible()) {
            new Effect.SlideUp('loginpanel', { duration:0.3, afterFinish:function(){
                $('container').setOpacity(1);
            } });
        } else {
            new Effect.SlideDown('loginpanel', { duration:0.3 });
            $('container').setOpacity(0.4);
            setTimeout(function(){
                $('UserEmail').select();
                $('UserEmail').focus();
            }, 500);
        }
} // loginPanel


function messageBox (type, add, msg, ins) {
        var msg = '<h4>'+msg+'</h4>';
        var ins = typeof(ins) == 'undefined' ? '' : '<p class="bold" style="margin:5px 0 -2px 0;">'+ins+'</p>';
        var box = '<div id="messageBox" class="box'+type+'" style="display:none;">'+msg+ins+'</div>';

        if (add == 0 && $('messageBox')) {
            $('messageBox').remove();
        }

        $('innerContent').insert({ top:box });
        new Effect.Grow('messageBox', { duration:0.5 });
} // messageBox

function postForm (e, opt) {
        $(e.id).request({
           onLoading: function() {
               e.disable();
               $$('#'+e.id+' input[type="submit"]').first().up('td').insert(
                   '<div id="saving-'+e.id+'" class="saving">'+mesg.onSaving+'</div>'
               );
               $$('div.error-message').each(function(e){ e.remove(); });
               $$('input.err').each(function(e){ e.removeClassName('err'); });
               $$('textarea.err').each(function(e){ e.removeClassName('err'); });
               $$('td.labelErr').each(function(e){ e.removeClassName('labelErr'); });
               if ($('messageBox')) { $('messageBox').remove(); }
           },
           onFailure: function() {
               e.enable();
               new Effect.DropOut('saving-'+e.id, { afterFinish:function(){ $('saving-'+e.id).remove(); } });
               messageBox('Error', 0, mesg.onFail);
           },
           onSuccess: function(transport, json) {
               e.enable();
               new Effect.DropOut('saving-'+e.id, { afterFinish:function(){ $('saving-'+e.id).remove(); } });
               var json2 = transport.responseText.evalJSON();

               if (json && json.status == -1) {
                   if (typeof(json2.message) != 'undefined') {
                       messageBox('Error', 0, json2.message);
                   } else {
                       messageBox('Att', 0, mesg.invalid);
                   }

                   if (json2.error.length > 0) {
                      json2.error.each(function(e) { displayInvalid(e); });
                      $(json2.error.first().id).activate();
                      //$$('input.err').first().activate();
                      window.effect = new Effect.Pulsate(json2.error.first().id, {
                          delay: 0.5,
                          afterUpdate: function(o) {
                              if (o.currentFrame > 120) { window.effect.cancel(); }
                          }
                      });
                   }
               } else if (json && json.status == 1) {
                   var message = typeof(json2.message) == 'undefined' ? mesg.onSuccess : json2.message;
                   messageBox('Success', 0, message);

                   if (typeof(opt) == 'undefined' || typeof(opt.reset) != 'boolean' || opt.reset == true) { // reset form by default
                       e.reset();
                   }
                   if (opt && typeof(opt.onComplete) == 'function') { // use callback function
                       return (opt && typeof(opt.params) == 'undefined') ? opt.onComplete() : opt.onComplete(opt.params);
                   }
               }
           }
        });

        return false;
} // postForm

function displayInvalid (e) {
        eval('var err = error.'+e.field+'.'+e.code);
        if (err == 'undefined') {
           err = 'unknown error';
        }
        $(e.id).up('td').insert('<div class="error-message">'+err+'</div>');
        $(e.id).up('td').previous('td.label').addClassName('labelErr');
        $(e.id).addClassName('err');

        $(e.id).observe('change', function(){ removeInvalid(e.id) });
} // displayInvalid

function removeInvalid (id) {
        if (typeof($(id).up('td').down('div.error-message')) == 'undefined') {
           return;
        }

        //$(id).next('div.error-message').remove();
        $(id).up('td').down('div.error-message').remove();
        $(id).up('td').previous('td.label').removeClassName('labelErr');
        $(id).removeClassName('err');

        if (typeof(id+'Recheck') == 'function') { // use re-check callback function
           eval(id+'Recheck();');
        } else {
           $(id).up('td').previous('td.label').addClassName('labelValid');
           $(id).addClassName('valid');
           $(id).up('td').insert('<span id="i-'+id+'" class="tick"></span>');
           new Effect.Fade('i-'+id, {
               delay: 3,
               afterFinish: function() {
                   $(id).up('td').previous('td.label').removeClassName('labelValid');
                   $(id).removeClassName('valid');
                   $('i-'+id).remove();
               }
           });
        }
} // removeInvalid


if (typeof Prototype != 'undefined' && typeof jQuery != 'undefined') { // avoid get a clash between Prototype and jQuery
    var $j = jQuery.noConflict();
}
