/*
 * Copyright 2006 OST-SYSTEMS. All rights reserved.
 */

function checkDeveloper() {
  setValue("LoginPassword", "");
  params = new Object();
  doRequest(params, "checkDeveloper", developerLoaded, "CheckStatusLoading");
  doRequest(new Object(), "categories", categoriesLoaded, "MyWidgetsLoading");
  sendServerTest();
}

function developerLoaded(request) {
  if (request.status == 200) {
    var status = eval(request.responseText);
    if (status == "success" && user != null) {
      updateDeveloperDetails(user);
    }
    else {
      setDisplay("DeveloperStatusNotFound", "block");
    }
  }
  else {
    setDisplay("DeveloperStatusFailed", "block");
    //alert("Loading Developer status failed.");
  }  
  setDisplay("CheckStatus", "none");      
}

function submitLogin() {
  params = new Object();
  params.name = getValue("LoginName");
  if (params.name == null || params.name.length < 1) {
    alert("Login is too short");
    return;
  }
  params.password = getValue("LoginPassword");
  setValue("LoginPassword", "");
  if (params.password == null || params.password.length < 1) {
    alert("Password is too short");
    return;
  }
  doRequest(params, "login", loginLoaded, "DeveloperLoginLoading");
}

function loginLoaded(request) {
  if (request.status == 200) {
    var status = eval(request.responseText);
    if (status) {
      setDisplay("DeveloperStatusNotFound", "none");      
      setDisplay("CheckStatus", "block");      
      params = new Object();
      doRequest(params, "checkDeveloper", developerLoaded, "CheckStatusLoading");
    }
    else {
      alert("Login failed.");
    }
  }
  else {
    setDisplay("DeveloperStatusFailed", "block");
    setDisplay("DeveloperStatusNotFound", "none");        
  }  
}

function updateDeveloperDetails(user) {
  setValue("DetailsName", user.name);
  setValue("DetailsCompany", user.company);
  setValue("DetailsEmail", user.email);
  setValue("DetailsUrl", user.url);
  //setValue("DetailsPhone", user.phone);
  if (user.isDeveloper) {
    loadMyWidgets();
  }
  else {
    setDisplay("DeveloperDetails", "block");
  }
}

function categoriesLoaded(request) {
  if (request.status == 200) {
    var categories = eval(request.responseText);
    var parent = document.getElementById("WidgetCategories");
    for (var i = 0; i < categories.length; i++) {
      var option = document.createElement("option");
      option.value = categories[i];
      myBrowser.setInnerText(option, categories[i].category);
      parent.appendChild(option);
    }
  }
}

function submitDetails() {
  params = new Object();
  params.name = getValue("DetailsName");
  if (params.name == null || params.name.length < 2) {
    alert("Name is too short");
    return;
  }
  if (params.name.length > 40) {
    alert("Name is too long (maximum 40 characters)");
    return;
  }
  params.email = getValue("DetailsEmail");
  if (params.email == null || params.email.length < 7 
      || params.email.indexOf("@") < 0 || params.email.indexOf(".") < 0) {
    alert("Please enter valid email address.");
    return;
  }
  params.company = getValue("DetailsCompany");
  if (params.company == null || params.company.length < 2) {
    alert("Company is to short");
    return;
  }
  if (params.company.length > 40) {
    alert("Company is too long (maximum 40 characters)");
    return;
  }
  params.url = getValue("DetailsUrl");
  if (params.url == null || params.url.length < 7) {
    alert("URL is to short");
    return;
  }
  //Phone has been removed.
  /*
  params.phone = getValue("DetailsPhone");
  if (params.phone == null || params.phone.length < 5) {
    alert("Phone number is to short");
    return;
  }
  if (params.phone.length > 40) {
    alert("Phone number is too long (maximum 40 digits)");
    return;
  }
  */
  
  doRequest(params, "developerDetails", detailsLoaded, "DeveloperDetailsLoading");
}

function detailsLoaded(request) {
  if (request.status == 200) {
    var status = eval(request.responseText);
    if (status == "success" && user != null) {
      setDisplay("DeveloperDetails", "none");
      updateDeveloperDetails(user);
    }
    else {
      alert("Application failed: " + status);
    }
  }
  else {
    alert("Application failed. Please try again.");    
  }
}

function cancelDetails() {
  setDisplay("DeveloperDetails", "none");
  loadMyWidgets();
}

function editDetails() {
  setDisplay("DeveloperDetails", "block");  
  setDisplay("DetailsCancel", "block");  
  setDisplay("MyWidgets", "none");  
}

function loadMyWidgets() {
  setDisplay("MyWidgets", "block");
  params = new Object();
  doRequest(params, "getMyWidgets", myWidgetsLoaded, "MyWidgetsLoading");
}

function myWidgetsLoaded(request) {
  if (request.status == 200) {
    var status = eval(request.responseText);
    var table = document.getElementById("MyWidgetsRows");
    clear(table);
    for (var i = 0; i < widgets.length; i++) {
      var row = document.createElement("tr");
      row.setAttribute("class", "myWidgetsRowClass" + i % 2);
      table.appendChild(row);
      
      var cell = document.createElement("td");
      cell.setAttribute("class", "myWidgetsCellClass");
      row.appendChild(cell);
      var img = document.createElement("img");
      img.setAttribute("class", "myWidgetsEditClass");
      img.setAttribute("title", "Edit Widget");
      img.src = "images/Edit.png";
      img.widget = widgets[i];
      img.onclick = function(event) {
        showUpdateWidget(this.widget);
      }
      cell.appendChild(img);
      cell.appendChild(document.createTextNode(widgets[i].title));
      
      cell = document.createElement("td");
      cell.setAttribute("class", "myWidgetsCellClass");
      row.appendChild(cell);
      cell.appendChild(document.createTextNode(widgets[i].version));

      cell = document.createElement("td");
      cell.setAttribute("class", "myWidgetsCellClass myWidgetsAddButton");
      row.appendChild(cell);
      var link = document.createElement("button");
      link.innerHTML = "Show 'Add' Button";
      link.path = widgets[i].path;
      link.title = widgets[i].title;
      link.onclick = function(event) {
        var template = document.getElementById("AddButtonTemplate");
        var popup = new PopupDialog();
        var title = template.title;
        title = title.replace(/\$title\$/, this.title);
        popup.title = title;
        var content = template.innerHTML;
        content = content.replace(/\$path\$/, this.path);
        content = content.replace(/\$path\$/, this.path);
        content = content.replace(/\$path\$/, this.path);
        content = content.replace(/\$title\$/, this.title);
        content = content.replace(/\$title\$/, this.title);
        popup.content = content;
  	    popup.left = event.clientX;
  	    popup.top = event.clientY;
        popup.showPopup();  
      }
      cell.appendChild(link);

      cell = document.createElement("td");
      cell.setAttribute("class", "myWidgetsCellClass");
      row.appendChild(cell);
      var created = new Date();
      created.setTime(widgets[i].updated);
      cell.appendChild(document.createTextNode(created.toLocaleString()));

      cell = document.createElement("td");
      cell.setAttribute("class", "myWidgetsCellClass");
      row.appendChild(cell);
      var updated = new Date();
      updated.setTime(widgets[i].updated);
      cell.appendChild(document.createTextNode(updated.toLocaleString()));

      cell = document.createElement("td");
      cell.setAttribute("class", "myWidgetsCellClass");
      row.appendChild(cell);
      var status = widgets[i].status;
      var statusText = "";
      switch (status) {
        case 0:
          statusText = "Online";
          break;
        case 1:
          statusText = "Submitted";
          break;
        case 2:
          statusText = "Disabled";
          break;
        case 4:
          statusText = "Online/Pending update";
          break;
        case 6:
          statusText = "Disabled/Pending update";
          break;
      }
      cell.appendChild(document.createTextNode(statusText));
    }
    if (widgets.length == 0) {
      var row = document.createElement("tr");
      table.appendChild(row);
      
      var cell = document.createElement("td");
      cell.setAttribute("class", "myWidgetsCellClass");
      cell.setAttribute("colspan", 5);
      row.appendChild(cell);
      cell.appendChild(document.createTextNode("No widgets"));
    }
  }
  else {
    alert("Loading widgets failed.");
  }
}

function showAddWidget() {
  myBrowser.setInnerText(document.getElementById("AddWidgetTitle"), "Add New Widget");
  setValue("WidgetTitle", "");
  setValue("WidgetSummary", "");
  setValue("WidgetDescription", "");
  setValue("WidgetVersion", "1.0");
  setValue("WidgetNews", "");
  setValue("WidgetId", "");
  document.getElementById("WidgetCategories").selectedIndex = -1;
  document.getElementById("WidgetCopyrightCheckbox").checked = false;
  document.getElementById("WidgetTermsCheckbox").checked = false;
  setDisplay("WidgetNewsRow", "none");
  setDisplay("AddWidgetButton", "none");
  setDisplay("AddWidget", "block");
  var options = document.getElementById("WidgetCategories").options;
  for (var i = 0; i < options.length; i++) {
    options[i].selected = false;    
  }
  updateCategoriesText();
}

function hideAddWidget() {
  setDisplay("AddWidget", "none");
  setDisplay("AddWidgetButton", "block");
}

function submitWidget() {
  params = new Object();  
  var id = getValue("WidgetId");
  if (id != null && id.length > 0) {
    params.id = id;
  }
  params.title = getValue("WidgetTitle");
  if (params.title.length == 0) {
    alert("Please choose a title.");
    return;
  }
  params.summary = getValue("WidgetSummary");
  if (params.summary.length == 0) {
    alert("Please choose a summary.");
    return;
  }
  params.description = getValue("WidgetDescription");
  if (params.description.length == 0) {
    alert("Please choose a description.");
    return;
  }
  params.version = getValue("WidgetVersion");
  if (params.version.length == 0) {
    alert("Please choose a version number.");
    return;
  }
  params.news = getValue("WidgetNews");
  var result = getCategoriesText();
  if (result.length == 0) {
    alert("Please choose at least one category.");
    return;
  }  
  params.categories = result;
  params.fileName = getValue("WidgetUpload");
  
  var checkbox = document.getElementById("WidgetCopyrightCheckbox");
  if (!checkbox.checked) {
    alert("Please confirm the copyright ownership.");
    return;    
  }
  checkbox = document.getElementById("WidgetTermsCheckbox");
  if (!checkbox.checked) {
    alert("Please agree to the Terms and Conditions.");
    return;    
  }
  
  hideAddWidget();
  doRequest(params, "addUpdate", widgetUpdated, "MyWidgetsLoading");
  if (params.fileName.length > 0) {
    document.forms["WidgetUploadForm"].submit();
  }  
}

function getCategoriesText() {
  var result = "";
  var options = document.getElementById("WidgetCategories").options;
  for (var i = 0; i < options.length; i++) {
    if (options[i].selected) {
      if (result.length > 0) {
        result += ",";
      }  
      result += options[i].text
    }
  }
  return result;
}

function updateCategoriesText() {
  var text = document.getElementById("WidgetCategoriesText");
  clear(text);
  var result = getCategoriesText();
  if (result.length > 0) {
    text.appendChild(document.createTextNode("(" + result + ")"));
  }  
}

function widgetUpdated(request) {
  if (request.status == 200) {
    var submit = false;
    var status = eval(request.responseText);
    if (status == "success") {
      if (!submit) {
        alert("Submit failed.");
      }
      loadMyWidgets();
    }
    else {
      location.reload(true);
    }
  }
}

function showUpdateWidget(widget) {
  myBrowser.setInnerText(document.getElementById("AddWidgetTitle"), "Update Widget");
  setValue("WidgetTitle", widget.title);
  setValue("WidgetSummary", widget.summary);
  setValue("WidgetDescription", widget.description);
  setValue("WidgetVersion", widget.version);
  setValue("WidgetNews", widget.news);
  setValue("WidgetId", widget.id);
  setDisplay("WidgetNewsRow", null);
  setDisplay("AddWidgetButton", "none");
  setDisplay("AddWidget", "block");
  var options = document.getElementById("WidgetCategories").options;
  for (var i = 0; i < options.length; i++) {
    options[i].selected = false;    
    for (var j = 0; j < widget.categories.length; j++) {
      if (options[i].text == widget.categories[j]) {
        options[i].selected = true;
        break;
      }    
    }
  }
  updateCategoriesText();
  document.getElementById("WidgetCopyrightCheckbox").checked = false;
  document.getElementById("WidgetTermsCheckbox").checked = false;
  scrollTo(0, 0);
}

function setDisplay(element, status) {
  document.getElementById(element).style.display = status;
}

function getValue(element) {
  return document.getElementById(element).value;
}

function setValue(element, value) {
  if (value != null) {
    document.getElementById(element).value = value;
  }
  else {
    document.getElementById(element).value = null;    
  }  
}