function ImagePreloader(images, callback, errCallback)
{
   this.urls = images;
   this.callback = callback;
   this.errCallback = errCallback;
   this.nLoaded = 0;
   this.nProcessed = 0;
   this.aImages = new Array;
   this.nImages = images.length;
   for ( var i = 0; i < images.length; i++ )
      this.preload(images[i]);
}
ImagePreloader.prototype.preload = function(image)
{
   var oImage = new Image;
   this.aImages.push(oImage);
   oImage.onload = ImagePreloader.prototype.onload;
   oImage.onerror = ImagePreloader.prototype.onerror;
   oImage.onabort = ImagePreloader.prototype.onabort;
   oImage.oImagePreloader = this;
   oImage.bLoaded = false;
   oImage.src = image;
}
ImagePreloader.prototype.onComplete = function()
{
   this.nProcessed++;
   if ( this.nProcessed == this.nImages )
   {
      if(this.bError)
        this.errCallback(this.urls);
      else
        this.callback(this.aImages, this.nLoaded);
   }
}
ImagePreloader.prototype.onload = function()
{
   this.bLoaded = true;
   this.oImagePreloader.nLoaded++;
   this.oImagePreloader.onComplete();
}
ImagePreloader.prototype.onerror = function()
{
   this.bError = true;
   this.oImagePreloader.onComplete();
}
ImagePreloader.prototype.onabort = function()
{
   this.bAbort = true;
   this.oImagePreloader.onComplete();
}

function goTo(url, target) {
    if(target == 'same') {
        location.href = url;
    } else if(target == 'window') {
        window.open(url, '_New');
    } else if(target == 'popup') {
        var aImg = [url];
        var ip = new ImagePreloader(aImg, zoomImg, simplePopup);
    }
}

function zoomImg(aImages, nImages) {
    var img = aImages[0];
    window.open(img.src, 'Popup', 'width='+img.width+',height='+img.height+',top=300,left=300,resizable=0');
}

function simplePopup(urls) {
    window.open(urls[0], 'Popup', 'width=300,height=300,top=300,left=300,resizable=0');
}

function complexGoTo(url_target) {
    var url    = url_target.substring(0,url_target.indexOf('_'));
    var target = url_target.substring(url_target.indexOf('_') + 1);
    goTo(url, target);
}

function applyRico() {
    if(_check('iscriviti'))
        Rico.Corner.round('iscriviti', {corners:"tl br", border: "#666666"});
    if(_check('iscriviti2'))
        Rico.Corner.round('iscriviti2', {corners:"tl br", border: "#666666"});
    if(_check('categories'))
        Rico.Corner.round('categories', {corners:"tl tr", border: "#666666"});
    if(_check('loginbox'))
        Rico.Corner.round('loginbox', {corners:"tl tr", border: "#666666"});
    if(_check('attivita'))
        Rico.Corner.round('attivita', {corners:"tl tr", border: "#666666"});
}

function _check(elem) {
    return (null != document.getElementById(elem));
}

function initDojo() {
    dojo.require("dojo.lang.*");
    dojo.require("dojo.widget.EditorTree");
    dojo.require("dojo.widget.EditorTreeController");
    dojo.require("dojo.widget.EditorTreeSelector");
    dojo.require("dojo.widget.EditorTreeNode");
    dojo.require("dojo.widget.EditorTreeContextMenu");
    dojo.require("dojo.widget.DebugConsole");
    dojo.require("dojo.widget.ResizeHandle");
    dojo.require("dojo.widget.Button2");
    dojo.require("dojo.widget.Editor");
}


function restoreIconSrc() {
    this.icon.src = this.oldIconSrc;
}

function createTopCategory(name, controller) {
    var now = new Date();
    var utc = -1 * Date.UTC(now.getYear(), now.getMonth(), now.getDate(), now.getHours(), now.getMinutes(), now.getSeconds());
    var tree = dojo.widget.manager.getWidgetById('categories');
    var node = dojo.widget.createWidget("EditorTreeNode", {title: name, isFolder: true, widgetId: utc});
    tree.addChild(node,0);
    controller.createNodeRemote(node, 0, { suggestedTitle: name, isFolder: true, widgetId: utc, root: true });
    node.removeChild(node);
    tree.addChild(dojo.widget.createWidget("EditorTreeNode", {title: name, isFolder: true, widgetId: utc}),0);
}

function onCreate(menuitem) {
    var treeNode = menuitem.getTreeNode();
    createClicked(treeNode, 'treeController', treeNode.expandIcon);
}

function onRemove(menuitem) {
    var treeNode = menuitem.getTreeNode();
    deleteClicked(treeNode, 'treeController', treeNode.expandIcon);
}

function onUp(menuitem) {
    var treeNode = menuitem.getTreeNode();
    moveClicked(treeNode, 'treeController', treeNode.expandIcon, 'up');
}

function onDown(menuitem) {
    var treeNode = menuitem.getTreeNode();
    moveClicked(treeNode, 'treeController', treeNode.expandIcon, 'down');
}

function onTop(menuitem) {
    alert('todo');
}

function onBottom(menuitem) {
    alert('todo');
}

function moveClicked(selectedNode, controllerId, icon, direction) {
    this.icon = icon;
    this.oldIconSrc = icon.src;

    this.controller = dojo.widget.manager.getWidgetById(controllerId);

    if (!selectedNode) {
        alert('No node selected');
        return false;
    }

    this.icon.src = 'img/dojo/loading.jpg';

    var mover = null;
    switch(direction) {
        case 'up':
            mover = controller.moveUp;
            break;
        case 'down':
            mover = controller.moveDown;
            break;
    }

    var res = mover.apply(controller, [selectedNode, dojo.lang.hitch(this, restoreIconSrc)]);

    // local checks failed
    if (res == false) {
        restoreIconSrc.apply(this);
    }

    return res;
}

function getCurrentEditor() {
    return _currentEditor;
}