/*
 * Copyright 2006 OST-SYSTEMS. All rights reserved.
 */

var ICON_WIDTH = 80;
var selectedWidgetId = null;
var MobileWindow = new Object();

function setupWindow() {
  
}

function showCommand() {
    var select = document.getElementById("WidgetSelector");
    var value =  select.value;
    addNewWidget(value);
}    

function addError(error) {
  widgetContext.addError(error);
}

function clearErrors() {
  widgetContext.clearError();
}

function clearStorage() {
  keyStorage.setStorage(new Array());
  selectedWidgetId = null;
}

function addWidget(id, plist, widgetPath) {  
  var desktop = document.getElementById("Desktop");
  var template = document.getElementById("DesktopTemplate").innerHTML;
  var icon = document.createElement("div");
  icon.id = "DesktopWidget" + id;
  icon.iconId = id;
  icon.className = "desktopWidget";
  icon.plist = plist;
  icon.widgetPath = widgetPath;
  icon.innerHTML = template.replace(/_ID_/g, id);
  desktop.appendChild(icon);
  var img = document.getElementById("DesktopIcon" + id);
  img.src = widgetsPath + widgetPath + "/Icon.png";
  img.onerror = function() {
    var imagePath = getHectorPath() + "images/";
    img.onerror = null;
    img.src = imagePath + "defaultIcon.png";
  }
  var title = document.getElementById("DesktopTitle" + id);
  titleText = widgetsHelper.getWidgetValue(id, "title");
  if (!titleText) {
    titleText = getPListName(plist);
  }
  title.innerHTML = titleText;
  icon.title = "Show Widget";
  icon.setAttribute("onclick", "Desktop.showWidget(this)");
  icon.onclick = function() {
    Desktop.showWidget(this);
  }
  //icon.setAttribute("onmouseover", "showTooltip(this)");
  //icon.setAttribute("onmouseout", "hideTooltip()");
  if (myBrowser.styleInlineBlock != null) {
    icon.style.display = myBrowser.styleInlineBlock;
  }
  
  var list = document.getElementById("DesktopList");
  var template = document.getElementById("DesktopListTemplate").innerHTML;
  var item = document.createElement("div");
  item.id = "DesktopListWidget" + id;
  item.iconId = id;
  item.className = "desktopListWidget";
  item.plist = plist;
  item.widgetPath = widgetPath;
  item.innerHTML = template.replace(/_ID_/g, id);
  list.appendChild(item);
  var listImg = document.getElementById("DesktopListIcon" + id);
  listImg.src = widgetsPath + widgetPath + "/Icon.png";
  listImg.onerror = function() {
    var imagePath = getHectorPath() + "images/";
    listImg.onerror = null;
    listImg.src = imagePath + "defaultIcon.png";
  }
  var title = document.getElementById("DesktopListTitle" + id);
  title.innerHTML = titleText;
  var listRemove = document.getElementById("DesktopListRemove" + id);
  listRemove.widgetId = id;
  listRemove.onclick = function() {
    Desktop.removeWidget(this.widgetId);
  }

  item.title = "Show Widget";  
  item.setAttribute("onclick", "Desktop.showWidget(this)");
  item.onclick = function() {
    Desktop.showWidget(this);
  }
  if (MobileWindow.afterAddCallback) {
    MobileWindow.afterAddCallback(id);
  }
}

function showWidget(id, plist, widgetPath) {  
  var path = widgetsPath + widgetPath + "/";
  var widgets = document.getElementById("Widgets");
  var widget = document.createElement("div");
  var widgetId = widgetIdPrefix + id;
  widget.setAttribute("class", "widget");
  widget.setAttribute("id", widgetId);
  widget.setAttribute("onmouseover", "widgetMouseOver(this);");
  widget.setAttribute("onmouseout", "widgetMouseOut(this);");
  widgets.appendChild(widget);
  
  var widgetBorder = document.createElement("div");
  widgetBorder.setAttribute("class", "widgetBorder");
  widgetBorder.setAttribute("id", "Border" + widgetId);
  if (myBrowser.isIFrameHidden) {
    widgetBorder.style.visibility = "visible";
  }
  widget.appendChild(widgetBorder);

  var widgetIcon = document.getElementById("WidgetIcon");
  widgetIcon.setAttribute("src", path + "Icon.png");
  widgetIcon.onerror = function() {
    var imagePath = getHectorPath() + "images/";
    widgetIcon.onerror = null;
    widgetIcon.src = imagePath + "defaultIcon.png";
  }

  var defaultImage = document.createElement("img");
  defaultImage.setAttribute("class", "widgetDefaultImage");
  defaultImage.setAttribute("id", "DefaultImage" + widgetId);
  if (true || myBrowser.isIE) {
    defaultImage.onload = function() {
    //not called by IE
      addFrame(widget, plist, path, defaultImage, widgetBorder);
      selectWidget(id);
    };
  }  
  defaultImage.setAttribute("src", path + "Default.png");
  widgetBorder.appendChild(defaultImage);  
    
  var loadingImage = document.createElement("img");
  loadingImage.setAttribute("class", "widgetLoading");
  loadingImage.setAttribute("id", "LoadingImage" + widgetId);
  loadingImage.setAttribute("src", "images/loading.gif");
  widgetBorder.appendChild(loadingImage);  
    
  widgetToFront(widget);
  addWidgetTitle(id, getPListName(plist));
  if (plist.AllowNetworkAccess || plist.AllowFullAccess) {
    widgetsHelper.storeWidgetKey(id, "HasNetworkAccess", true);
  }
  if (false && myBrowser.isIE) {
    addFrame(widget, plist, path, defaultImage, widgetBorder);
    selectWidget(id);
  }
}

function addWidgetTitle(id, title) {
}

function selectWidget(id) {
  if (selectedWidgetId) {
    var old = document.getElementById(widgetIdPrefix + selectedWidgetId);
    if (myBrowser.needsDockHiddenMethod) {
      old.style.visibility = "hidden";
      var frame = document.getElementById('Frame' + old.frameId);
      frame.style.visibility='hidden';
      frame.oldHeight = frame.height;
      frame.height = 0;
    }
    else {
      old.style.display = "none";
    }  
    var widget = getWidget(old);
    if (widget && widget.onhide) {
      widget.onhide();
    }
  }
  if (id != null) {
    var oldid = selectedWidgetId;
    selectedWidgetId = id;
    var widget = document.getElementById(widgetIdPrefix + id);
    if (widget == null) {
      return false;
    }
    if (myBrowser.needsDockHiddenMethod) {
      widget.style.visibility = "visible";
      widget.style.height = "0px";
      var frame = document.getElementById('Frame' + widget.frameId);
      frame.height = frame.oldHeight;
      frame.style.visibility='visible';
    }
    else {
      widget.style.display = "inline";
    }  
    var widgetIcon = document.getElementById("WidgetIcon");
    var path = widgetsPath + widgetsHelper.getWidgetValue(id, "path");  
    widgetIcon.setAttribute("src", path + "/Icon.png");
    var w = getWidget(widget);
    if (w && w.onshow && id != oldid) {
      w.onshow();
    }
    var frame = document.getElementById("Frame" + widget.frameId);
    widgetResized(frame);
    return true; 
  }
  else {
    selectedWidgetId = null;
    var widgetIcon = document.getElementById("WidgetIcon");
    widgetIcon.setAttribute("src", path + "");
    return false;
  }  
}

function closeSelectedWidget() {
  if (selectedWidgetId) {
    var widget = document.getElementById(widgetIdPrefix + selectedWidgetId);
    if (widget) {
      var w = getWidget(widget);
      if (w && w.onhide) {
        w.onhide();
      }
      widget.parentNode.removeChild(widget);
    }  
    selectedWidgetId = null;
  }
}

function removeSelectedWidget() {
  if (selectedWidgetId) {
    removeWidget(selectedWidgetId);
    selectedWidgetId = null;
  }
}

function removeWidget(id) {
  if (id) {
    var widget = document.getElementById(widgetIdPrefix + id);
    if (widget) {
      var w = getWidget(widget);
      if (w && w.onremove) {
        w.onremove();
      }      
      widget.parentNode.removeChild(widget);
    }  
    widgetsHelper.removeWidget(id);
  }
}

function widgetMouseOver(widget) {
}

function widgetMouseOut(widget) {
}

function widgetBorderHide(widget) {
}

function widgetBorderShow(widget) {
}

function widgetClose(widgetId) {
  var widget = document.getElementById(widgetId);
  var w = getWidget(widget);
  if (w.onremove) {
    w.onremove();
  }
  widget.parentNode.removeChild(widget);
  if (iconifyToDock) {
    var dockIcon = document.getElementById("DockIcon" + widgetId);
    dockIcon.parentNode.removeChild(dockIcon);
  }  
  widgetsHelper.removeWidget(getWidgetId(widget));
}

function hideAllWidgets() {
  var widgets = document.getElementById("Widgets");
  for (var i = 0; i < widgets.childNodes.length; i++) {
  	var w = getWidget(widgets.childNodes[i]);
  	if (w && w.onhide ) {
  	  w.onhide();
  	}
  }
}

function getWidgetId(element) {
  var index = element.id.indexOf(widgetIdPrefix);
  return element.id.substring(index + widgetIdPrefix.length);
}

function widgetResized(frame) {
  var widgetId = frame.widgetId;
  var widget = document.getElementById(widgetId);
  var width = frame.getAttribute("width");
  var height = frame.getAttribute("height");
  document.getElementById("Widgets").style.width = width + "px";
  if (widget) {
    var left = Math.max((document.getElementById("Board").clientWidth - width) / 2, 0);
    document.getElementById("Widgets").style.left = left +"px";
  }  
}  