// NOTE: these functions use dynamic environment variables inserted on demand
// See file: /sys/xsp/js/functions.asp

function doPopupExternal(url) {
   popup = window.open(url, "_blank", "height=500,width=800,left=100,top=100,toolbars=yes,scrollbars=yes,menubar=yes,resizable=yes");
   popup.opener = window;
}

function doPopup(target, left, top, height, width, toolbars, scrollbars, menubar, resizable) {
   var value;
   var popup;
   var properties;
   value = "_blank";
   if (typeof(left) == "undefined")
      left = "100";
   if (typeof(top) == "undefined")
      top = "100";
   if (typeof(height) == "undefined")
      height = "400";
   if (typeof(width) == "undefined")
      width = "500";
   if (typeof(toolbars) == "undefined")
      toolbars = "no";
   else
      toolbars = booleanToYesNo(toolbars);
   if (typeof(scrollbars) == "undefined")
      scrollbars = "yes";
   else
      scrollbars = booleanToYesNo(scrollbars);
   if (typeof(menubar) == "undefined")
      menubar = "yes";
   else
      menubar = booleanToYesNo(menubar);
   if (typeof(resizable) == "undefined")
      resizable = "yes";
   else
      resizable = booleanToYesNo(resizable);
   properties = "height=" + height + ",width=" + width + ",left=" + left + ",top=" + top + ",toolbars=" + toolbars + ",scrollbars=" + scrollbars + ",menubar=" + menubar + ",resizable=" + resizable;
//window.alert(properties);
   popup = window.open(target, value, properties);
   popup.opener = window;
//   popup = window.showModalDialog(target, value, properties);
//   popup.parent = window;
}

function doInternalPopup(target, qs, left, top, height, width, toolbars, scrollbars, menubar, resizable) {
   target = URI_XSC_QS + target;
   if (qs != null && qs != '' && typeof(qs) != "undefined")
      target = target + "&" + qs;
   doPopup(target, left, top, height, width, toolbars, scrollbars, menubar, resizable);
}

function onDataFilterChange(datafilter, target) {
   var filter;
   filter = datafilter.options[datafilter.selectedIndex].value;
   target = URI_XSC_QS + target;
   if (filter != '')
      target += "&" + filter;
   window.navigate(target);
}

function resetLoginCookie(login_form) {
   login_notme.value = true;
   login_form.submit();
}

function confirmAction(message) {
   return window.confirm(message);
}

//confirmVersionDelete([true, false],[2,1]) {
function confirmVersionDelete(checkedArray, versionArray, publish) {
//   window.alert(checkedArray);
//   window.alert(versionArray);
   var ok;
   var num;
   var msg;
   var invalid;
   var publishedVersion;
   num = 0;
   invalid = false;
   publishedVersion = radioValue(publish);
   for (var i=0; i<checkedArray.length; i++) {
      if (checkedArray[i] == true) {
         num++;
         // Invalid to delete published version
         if (publishedVersion == versionArray[i]) {
            invalid = true;
            break;
         }
      }
   }
   if (invalid) {
      window.alert("Cannot delete published version");
      ok = false;
   }
   else if (num > 0) {
      ok = confirmAction("Delete version(s)?");
   }
   else
      ok = true;
   return ok;
}

function previewImage(id, height, width) {
   // Convert to thumbnail dimensions
   var tScale;
   var tHeight;
   var tWidth;
   tWidth = 100;
   tScale = tWidth/width;
   tHeight = height * tScale;
   document.imagepreview.height = tHeight;
   document.imagepreview.width = tWidth;
   document.imagepreview.src = "/xsp/asp/images/download.asp?id=" + id;
}

function previewVersion(uri, versionNo, draftNo) {
   var uri;
   if (typeof(versionNo) != "undefined") {
      if (typeof(draftNo) == "undefined")
         draftNo = 0;
      uri = URI_XSC_QS + uri + "&vn=" + versionNo + "&dn=" + draftNo;
   }
   else
      uri = URI_XSC_QS + uri;
   opener.navigate(uri);
}

function pageMouseOver(target) {
   target.style.backgroundColor="red";
   setCursorHand(target);
}

function pageMouseOut(target) {
   target.style.backgroundColor="transparent";
   resetCursor(target);
}

function pageClick(target, id) {
//   window.alert('Page clicked');
   doInternalPopup("/home/work/edit", "type=page&id=" + id, 200, 200, 400, 400, false, true, false);
   window.event.cancelBubble = true;
}

function sectionMouseOver(target) {
   // Behaviour as for page
   // But keep method seperate
   // to enable future divergence
   pageMouseOver(target);
}

function sectionMouseOut(target) {
   // Behaviour as for page
   // But keep method seperate
   // to enable future divergence
   pageMouseOut(target);
}

function sectionClick(target, id) {
   window.alert('Section clicked: id=' + id);
   window.event.cancelBubble = true;
}

function paragraphMouseOver(target) {
   target.style.textDecoration="underline";
   setCursorHand(target);
}

function paragraphMouseOut(target) {
   target.style.textDecoration="none";
   resetCursor(target);
}

function paragraphClick(target, id) {
   window.alert('Paragraph clicked: id=' + id);
   window.event.cancelBubble = true;
}

function setCursorHand(target) {
   target.style.cursor='hand';
}

function resetCursor(target) {
   target.style.cursor='auto';
}

function booleanToYesNo(value) {
   return value ? "yes" : "no";
}

function refreshOpener() {
   var opener;
   opener = window.opener;
//   opener = window.parent;
   if (typeof(opener) != "undefined" && opener != null)
      opener.location.reload(true);
}

function validateSearch() {
   var ok;
   var searchQuery;
   searchQuery = search_form.search_query.value;
   if (trim(searchQuery) == '') {
      window.alert("Please type a word or words to search for");
      ok = false;
   }
   else
      ok = true;
   return ok;
}

function validateForm() {
   // TODO: Implement this method
   return confirmAction("Validate form?");
}

function launchEditor(source, uri, elementId, versionNo, draftNo) {
   var qs;
   if (typeof(elementId) == "undefined" || elementId == 0)
      window.alert("Error: element has no id");
   else {
      qs = "?action_select_element=true&uri={0}&element={1}&version_no={2}&draft_no={3}";
      qs = qs.replace("{0}", uri);
      qs = qs.replace("{1}", elementId);
      qs = qs.replace("{2}", versionNo);
      qs = qs.replace("{3}", draftNo);
      doPopup(URI_APP + "/xsp/asp/edit.asp" + qs, 100, 100, 300, 545, false, true, false, true);
   }
}

function launchVersions(uri) {
   var qs;
   qs = "?action_show_versions=true&uri={0}";
   qs = qs.replace("{0}", uri);
   doPopup(URI_APP + "/xsp/asp/version.asp" + qs, 100, 100, 300, 725, false, true, false, true);
}

function setModified() {
   the_form.modified.value = "true";
}

function checkModified() {
   if (the_form.modified.value == "true")
      return !confirmAction("Click CANCEL to lose text changes or OK then UPDATE to save.");
}

// TODO: set up sharing of server and clientside scripts
function trim(str) {
   if (str && str != null) {
      while (
         str.length > 0 && (
         str.charAt(0) == String.fromCharCode(32) ||
         str.charAt(0) == String.fromCharCode(9) ||
         str.charAt(0) == String.fromCharCode(10) ||
         str.charAt(0) == String.fromCharCode(13))) {

         str = str.substring(1);
      }
      while (
         str.length > 0 && (
         str.charAt(str.length-1) == String.fromCharCode(32) ||
         str.charAt(str.length-1) == String.fromCharCode(9) ||
         str.charAt(str.length-1) == String.fromCharCode(10) ||
         str.charAt(str.length-1) == String.fromCharCode(13))) {

         str = str.substring(0, str.length - 1);
      }
   }
   return str;
}

// Find checked value for radio group
function radioValue(objGroup) {
   var booFound;
   var varValue;
   var objField;
   booFound = false;
   for (var i=0; i<objGroup.length; i++) {
      objField = objGroup[i];
      varValue = objField.value;
      if (objField.checked) {
         booFound = true;
         break;
      }
   }
   return booFound ? varValue : null;
}

// Check or uncheck all the checkboxes in a form
function setCheckboxes(objForm, booChecked) {
   var objElement;
   for (var i=0; i<objForm.elements.length; i++) {
      objElement = objForm.elements[i];
      if (objElement.type == "checkbox")
         objElement.checked = booChecked;
   }
}

function autoHelpSubmit(nodeSelect) {
   document.getElementById("help").submit();
}


