﻿function ChangePhoto(objectId, newFilePath, overlayId) {
  var overlay = $("#" + overlayId);
  overlay.show();
  var element = $("#" + objectId);
  element.load(function() {
    overlay.hide();
    $(this).unbind('load');
  });
  element.attr('src', newFilePath);
  if (element.complete) {
    overlay.hide();
    element.unbind('load');
  }
  return false;
}

/*MISC*/
function print_page() {
  window.print();
}

function change_number_of_items(_strURLStart, _strItemList) {
  var objTemp = document.getElementById(_strItemList);
  var strTemp = _strURLStart;

  if (objTemp) {
    strTemp += objTemp.options[objTemp.selectedIndex].value;
    window.location.href = strTemp;
  }
}

function jump_to_page(_strURLStart, _strPageList) {
  var objTemp = document.getElementById(_strPageList);
  var strTemp = _strURLStart;

  if (objTemp) {
    strTemp += objTemp.options[objTemp.selectedIndex].value;
    window.location.href = strTemp;
  }
}

function multi_command(_strCommandName, _strQueryString, _strMultiName, _strMultiValue) {
  var intMinimumSelection = 0;

  switch (_strCommandName) {
    case "Merge":
      intMinimumSelection = 2;
      break;

    case "Delete":
      intMinimumSelection = 1;
      break;

    default:
      intMinimumSelection = 0;
  }

  if ((_strMultiValue.split(",").length - 2) >= intMinimumSelection) {
    var strNewQueryString = _strQueryString + "&" + _strMultiName + "=" + _strMultiValue;
    window.location.search = strNewQueryString;
  }
  else {
    var strPlural = "s";
    if (intMinimumSelection == 1) {
      strPlural = "";
    }
    alert("Please select at least " + intMinimumSelection + " record" + strPlural + " to " + _strCommandName + ".");
  }
}

function multi_select(_strMultiPrefix, _bolSelected) {
  var objTemp;
  var frmTemp = document.getElementById("form1"); // default form name for .NET
  var strTemp = "";

  if (frmTemp) {
    for (var x = 0; x < frmTemp.length; x++) {
      objTemp = frmTemp.elements[x];
      if (objTemp.id.search(_strMultiPrefix) == 0 && objTemp.id.search("chkMultiSelect") > 0) {
        objTemp.checked = _bolSelected;
        strTemp += objTemp.id + "\n";
        objTemp.onclick();
      }
    }
  }
}

function change_multi_selection(_strMultiIDs, _intContentID, _strCheckboxName) {
  var _objTemp = document.getElementById(_strCheckboxName);

  if (_objTemp) {
    if (_objTemp.checked) {
      if (_strMultiIDs.search("," + _intContentID + ",") < 0) {
        _strMultiIDs += _intContentID + ","
      }
    }
    else {
      if (_strMultiIDs.search("," + _intContentID + ",") >= 0) {
        _strMultiIDs = _strMultiIDs.replace("," + _intContentID + ",", ",")
      }
    }
  }

  return _strMultiIDs;
}

function set_field_value(_strTargetName, _strValue) {
  var objTarget = document.getElementById(_strTargetName);
  if (objTarget) {
    objTarget.value = _strValue;
  }
}

function set_text(_objTarget, _strValue) {
  if (_objTarget) {
    _objTarget.value = _strValue;

  }
}

var objDisabledObject;
var strDisabledObjectName;

function disable_object3(_objTarget, _strMessage) {
  if (!_strMessage) {
    _strMessage = "Processing . . ."
  }
  if (_objTarget) {
    _objTarget.blur();
    _objTarget.style.display = "none";
    var objTargetDis = document.getElementById(_objTarget.id + "_Disabled");
    objTargetDis.innerHtml = _strMessage;
    objTargetDis.style.display = "";
    objDisabledObject = _objTarget;
  }
}

function disable_object4(_objTarget, _strObjectName) {
  if (_objTarget) {
    //_objTarget.blur();
    _objTarget.style.display = "none";
    objDisabledObject = _objTarget;
    strDisabledObjectName = _strObjectName
    var objTargetDis = document.getElementById(_objTarget.id.replace(_strObjectName, "lbl" + _strObjectName.substring(3)) + "_Disabled");
    objTargetDis.style.display = "";
  }
}

function enable_object3() {
  if (objDisabledObject) {
    objTarget = objDisabledObject;
    strObjectName = strDisabledObjectName;
  }
  if (objTarget) {
    var objTargetDis = document.getElementById(objTarget.id.replace(strObjectName, "lbl" + strObjectName.substring(3)) + "_Disabled");
    objTargetDis.style.display = "none";
    objTargetDis.innerHtml = "";
    objTarget.style.display = "";
    objTarget.focus();
  }
}

function disable_object2(_objTarget, _strMessage) {
  if (!_strMessage) {
    _strMessage = "Processing ..."
  }
  if (_objTarget) {
    _objTarget.value = _strMessage;
    //_objTarget.disabled = true;
    _objTarget.blur();
  }
}

function disable_object(_objTarget) {
  if (_objTarget) {
    _objTarget.blur();
    _objTarget.style.display = "none";
    var objTargetDis = document.getElementById(_objTarget.id + "Disabled");
    objTargetDis.style.display = "";
  }
  return true;
}

function fill_now_date(_objTarget) {
  if (_objTarget) {
    var dteTemp = new Date();
    var strMonth = pad_left((dteTemp.getMonth() + 1), "0", 2);
    var strDay = pad_left(dteTemp.getDate(), "0", 2);
    _objTarget.value = dteTemp.getFullYear() + "-" + strMonth + "-" + strDay;
  }
}

function fill_now_time(_objTarget, _strFormat) {
  if (_objTarget) {
    var dteTemp = new Date();
    var intHour = dteTemp.getHours();
    var intMinutes = dteTemp.getMinutes();
    var strAMPM = "";

    if (_strFormat == "12") {
      if (intHour > 12) {
        intHour -= 12;
        strAMPM = "p";
      }
      else {
        strAMPM = "a";
      }
    }

    var strHour = pad_left(intHour, "0", 2);
    var strMinutes = pad_left(intMinutes, "0", 2);
    _objTarget.value = strHour + ":" + strMinutes + strAMPM;
  }
}

function pad_left(_strOriginal, _chrFillCharacter, _intTotalLength) {
  return pad_string(_strOriginal, _chrFillCharacter, _intTotalLength, "left");
}

function pad_right(_strOriginal, _chrFillCharacter, _intTotalLength) {
  return pad_string(_strOriginal, _chrFillCharacter, _intTotalLength, "right");
}

function pad_string(_strOriginal, _chrFillCharacter, _intTotalLength, _strSide) {
  _strOriginal = String(_strOriginal);
  var strFill = "";
  var intFillCount = _intTotalLength - _strOriginal.length;

  for (x = 0; x < intFillCount; x++) {
    strFill += _chrFillCharacter;
  }

  var strResult = _strOriginal;
  if (_strSide == "left") {
    strResult = strFill + _strOriginal;
  }
  else if (_strSide == "right") {
    strResult = _strOriginal + strFill;
  }

  return strResult;
}

function open_brochure_window(pathEnd, orientation) {
  var width = 790;
  var height = 590;
  var port = ":" + location.port;
  if (port == ":") port = "";
  
  if (orientation == "landscape") {
    width += 224;
    height -= 120;
    pathEnd += "&ornt=landscape";
  }

  var path = "http://" + location.hostname + port + pathEnd;
  var name = "brochure";
  var brochureWindow = window.open(path, name, "width=" + width + ",height=" + height +
        ",resizable=yes,scrollbars=no,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no");
  if (brochureWindow) {
    brochureWindow.focus();
  }
}

function change_class(_strObjectName, _strClass) {
  var objTemp = document.getElementById(_strObjectName);
  objTemp.className = _strClass;
  return false;
}

function change_image(_strObjectName, _strFilePath, _strState) {
  var objTemp = document.getElementById(_strObjectName);
  if (objTemp) {
    if (_strState == "") {
      objTemp.src = _strFilePath;
    }
    else {
      objTemp.src = _strFilePath.replace(".", "_" + _strState + ".");
    }
  }
  return false;
}

function change_file(_strObjectName, _strFileName) {
  var objTemp = document.getElementById(_strObjectName);
  if (objTemp) {
    objTemp.src = _strFileName;
  }
  return false;
}

function show_layer(_strLayerName, _intYPos, _intXPos) {
  document.getElementById(_strLayerName).style.top = _intYPos + "px";
  document.getElementById(_strLayerName).style.left = _intXPos + "px";
  document.getElementById(_strLayerName).style.visibility = "visible";
}

function hide_layer(_strLayerName) {
  if (document.getElementById(_strLayerName)) {
    document.getElementById(_strLayerName).style.visibility = "hidden";
  }
}

function set_location(_strLocation, _intHeight, _intWidth, _intLevel) {
  var intPointerOffset = 15;
  var intOffsetY = 0;
  var intOffsetX = 0;
  var intPageTop = document.documentElement.scrollTop;
  var intPageLeft = document.documentElement.scrollLeft;
  var intPageBottom = 0; //document.documentElement.scrollTop + window.innerHeight;
  var intPageRight = 0; //document.documentElement.scrollLeft + window.innerWidth;

  if (!_intLevel) {
    _intLevel = 0;
  }

  if (document.all) { // IE (is stupid)
    intPageBottom = document.documentElement.scrollTop + document.documentElement.offsetHeight;
    intPageRight = document.documentElement.scrollLeft + document.documentElement.offsetWidth;
  }
  else {
    intPageBottom = document.documentElement.scrollTop + window.innerHeight;
    intPageRight = document.documentElement.scrollLeft + window.innerWidth;
  }

  switch (_strLocation) {
    case "below":
      intOffsetY = intPointerOffset;
      intOffsetX = parseInt(-(_intWidth / 2));
      break;
    case "left":
      intOffsetY = parseInt(-(_intHeight / 2));
      intOffsetX = -(_intWidth + intPointerOffset);
      break;
    case "right":
      intOffsetY = parseInt(-(_intHeight / 2));
      intOffsetX = intPointerOffset;
      break;
    case "above":
    default:
      intOffsetY = -(_intHeight + intPointerOffset);
      intOffsetX = parseInt(-(_intWidth / 2));
      break;
  }

  if (document.all) { // IE (is stupid)
    intLocationY = intPageY + intOffsetY + intPageTop;
    intLocationX = intPageX + intOffsetX + intPageLeft;
  }
  else {
    intLocationY = intPageY + intOffsetY;
    intLocationX = intPageX + intOffsetX;
  }

  if (_intLevel < 1) {
    switch (_strLocation) {
      case "below":
        if ((intLocationY + _intHeight + intMargin) > intPageBottom) {
          set_location("above", _intHeight, _intWidth, _intLevel + 1);
        }
        break;
      case "left":
        if ((intLocationX - intMargin) < (intPageLeft)) {
          set_location("right", _intHeight, _intWidth, _intLevel + 1);
        }
        break;
      case "right":
        if ((intLocationX + _intWidth + intMargin) > intPageRight) {
          set_location("left", _intHeight, _intWidth, _intLevel + 1);
        }
        break;
      case "above":
      default:
        if ((intLocationY - intMargin) < intPageTop) {
          set_location("below", _intHeight, _intWidth, _intLevel + 1);
        }
        break;
    }
  }

  switch (_strLocation) {
    case "below", "above":
      if (intLocationX < intPageLeft) {
        intLocationX = intPageLeft + intMargin;
      }
      if ((intLocationX + _intWidth) > intPageRight) {
        intLocationX = intPageRight - _intWidth - intMargin;
      }
      break;
    case "left", "right":
      if (intLocationY < intPageTop) {
        intLocationY = intPageTop + intMargin;
      }
      if ((intLocationY + _intHeight) > intPageBottom) {
        intLocationY = intPageBottom - _intHeight - intMargin;
      }
      break;
  }
}
/*/MISC*/

/*FORMAT*/

function load_selection(_objTextbox) {
  var strResult = "";
 
  if (document.selection) {
    strResult = document.selection.createRange().text;
    _objTextbox.caretPos = document.selection.createRange().duplicate();
    }
  else if (_objTextbox.setSelectionRange) {
    strResult = _objTextbox.value.substring(_objTextbox.selectionStart, _objTextbox.selectionEnd);
    }
  return strResult;
  }

var strFontName = "";
var strSizeName = "";
var strColorName = "";
var strStyleName = "";

function add_font(_strTextField, _strSelection, _strFontName, _strSizeName, _strColorName, _strStyleName) {
  strFontName = _strFontName;
  strSizeName = _strSizeName;
  strColorName = _strColorName;
  strStyleName = _strStyleName;
  return add_format(_strTextField, _strSelection, 'font');
  }

function add_format(_strFieldName, _strSelection, _strCommand) {
  var objTextbox = document.getElementById(_strFieldName);
 
  if (objTextbox) {
    switch (_strCommand) {
      case "l" :
      case "r" :
      case "c" :
      case "j" :
        strText = "[" + _strCommand + "]" + _strSelection + "[/" + _strCommand + "]";
        break;
      case "line" :
        strText = "[line]"
        break;
      case "link" :
      case "newlink" :
      case "email" :
        strText = "[" + _strCommand + "=\"" + _strSelection + "\"]";
        break;
      case "font" :
        var strFont = getfontlistvalue(strFontName);
        var strSize = getfontlistvalue(strSizeName);
        var strColor = getfontlistvalue(strColorName);
        var strStyle = getfontlistvalue(strStyleName);
        if (strFont != "" || strSize != "" || strColor != "" || strStyle != "") {
        strText = "[";
        if (strFont != "") {
          strText += " font=\"" + strFont + "\"";
          }
        if (strSize != "") {
          strText += " size=\"" + strSize + "\"";
          }
        if (strColor != "") {
          strText += " color=\"" + strColor + "\"";
          }
        if (strStyle != "") {
          strText += " style=\"" + strStyle + "\"";
          }
        strText = strText.replace("[ ", "[") + "]" + _strSelection + "[/font]";
        }
        else {
          alert("Please choose Font settings from the lists.");
          strText = strSelection;
        }
        break;
      }
    
    if (objTextbox.createTextRange && objTextbox.caretPos) {
      var objTemp = objTextbox.caretPos;
      objTemp.text = objTemp.text.charAt(objTemp.text.length - 1) == ' ' ? strText + ' ' : strText;
      }
    else if (objTextbox.setSelectionRange) {
      var strValue = objTextbox.value;
      var intStart = objTextbox.selectionStart;
      var intEnd = objTextbox.selectionEnd;
      objTextbox.value = strValue.substring(0, intStart) + strText + strValue.substring(intEnd, strValue.length);
      }
    else {
      objTextbox.value += strText;
      }
    
    objTextbox.focus();
    return ""; // to reset the selection string
    }
  }

var strSelection = "";
var strTextboxName = "";

/*
Additional Helper functions - don't change below this line
*/

function getfontlistvalue(_strListName) {
  var strReturn = "";
  var objList = document.getElementById(_strListName);
  if (objList) {
    if (objList.selectedIndex != 0) {
      strReturn = objList.options[objList.selectedIndex].value;
      objList.selectedIndex = 0;
      }
    else {
      strReturn = "";
      }
    }
  else {
    strReturn = "";
    }
  return strReturn;
  }
/*/FORMAT*/

/*SUPERTOOLS*/
var intMargin = 5;
var intLocationY = 0;
var intLocationX = 0;
var intPageY = 0;
var intPageX = 0;
var intToolDelay = 500; // milliseconds (.5 seconds)
var bolMouseDown = false;

var intToolTipTimerID = 0;
var strToolTipObjectName = "divSuperToolTip";
var strToolTipContentObjectName = "divSuperToolTipContent";
var strToolTipContents = "";
var strToolTipLocation = "";
var intToolTipOffsetY = 0;
var intToolTipOffsetX = 0;
var intToolTipHeight = 0;
var intToolTipWidth = 0;
var bolToolTipPersist = false;

function show_SuperToolTip() {
  objTemp = document.getElementById(strToolTipObjectName)
  
  if (intToolTipHeight > 0) {
    objTemp.style.height = intToolTipHeight + "px"
    }
  else {
    objTemp.style.height = "";
  }
  
  if (intToolTipWidth > 0) {
    objTemp.style.width = intToolTipWidth + "px"
    }
  else {
    objTemp.style.width = "";
  }
    
  //document.getElementById(strToolTipObjectName).style.height = "";
  //document.getElementById(strToolTipObjectName).style.width = "";
  document.getElementById(strToolTipContentObjectName).innerHTML = strToolTipContents;

  var intHeight = document.getElementById(strToolTipObjectName).offsetHeight;
  var intWidth = document.getElementById(strToolTipObjectName).offsetWidth;
  
  set_location(strToolTipLocation, intHeight, intWidth);
  show_layer(strToolTipObjectName, intLocationY, intLocationX);
  return false;
  }
  
function set_SuperToolTip(_objEvent, _strMessage, _strLocation, _intHeight, _intWidth, _bolPersist){
  clearTimeout(intToolTipTimerID);
  bolToolTipPersist = _bolPersist;
  
  if (document.all) { // IE (is stupid)
    intPageY = _objEvent.clientY;
    intPageX = _objEvent.clientX;
    }
  else {
    intPageY = _objEvent.pageY;
    intPageX = _objEvent.pageX;
    }

  strToolTipLocation = _strLocation;
  strToolTipContents = _strMessage;

  if (!isNaN(_intHeight)) {
    intToolTipHeight = _intHeight;
    if (document.all) { // IE (is stupid)
      intToolTipHeight -= 3;
      }
    }
  else {
    intToolTipHeight = 0;
    }
  
  if (!isNaN(_intWidth)) {
    intToolTipWidth = _intWidth;
    }
  else {
    intToolTipWidth = 0;
    }

  intToolTipTimerID = setTimeout('show_SuperToolTip()', intToolDelay);
  }  

function hide_SuperToolTip() {
  if (!bolToolTipPersist) {
    clearTimeout(intToolTipTimerID);
    intToolTipTimerID = setTimeout('close_SuperToolTip();', intToolDelay);
    }
  }

function reset_SuperToolTip() {
  close_SuperToolTip();
  show_SuperToolTip();
  }
  
function keep_SuperToolTip() {
  clearTimeout(intToolTipTimerID);
  }

function close_SuperToolTip() {
  clearTimeout(intToolTipTimerID);
  //document.getElementById(strToolTipObjectName).style.visibility = "hidden"
  hide_layer(strToolTipObjectName);
  }

function pickup_SuperToolTip(_objEvent) {
  keep_SuperToolTip();
  //objCurrentToolBox = _objToolBox;
  var bolTemp = true;

  if (document.all) { // IE (is stupid)
    intToolTipOffsetY = _objEvent.offsetY + 4;
    intToolTipOffsetX = _objEvent.offsetX + 4;
    
    if (document.getElementById(strToolTipObjectName).style.visibility == "hidden") {
      bolTemp = false
      }
    }
  else {
    intToolTipOffsetY = _objEvent.layerY - 1;
    intToolTipOffsetX = _objEvent.layerX - 1;
    }

  if (bolTemp) {
    document.onmousemove = move_SuperToolTip;
    document.onmouseup = release_SuperToolTip;
    }
  }
  
function move_SuperToolTip(_objEvent) {
  if (document.getElementById(strToolTipObjectName)) {
    if (document.all) { // IE (is stupid)
      intPageY = event.clientY;
      intPageX = event.clientX;
      }
    else {
      intPageY = _objEvent.pageY;
      intPageX = _objEvent.pageX;
      }

    var intYPos = intPageY - intToolTipOffsetY;
    var intXPos = intPageX - intToolTipOffsetX;
    
    document.getElementById(strToolTipObjectName).style.top = intYPos + "px";
    document.getElementById(strToolTipObjectName).style.left = intXPos + "px";
    }
  }
  
function release_SuperToolTip(_objEvent) {
  document.onmousemove = null;
  document.onmouseup = null;
  }
  

//-------------------------------------------------

var objCurrentToolBox;
var strToolBoxLocation = "";
var strToolBoxObjectName = "";
var intToolBoxTimerID = 0;
var intToolBoxOffsetY = 0;
var intToolBoxOffsetX = 0;


function show_SuperToolBox(_objToolBox){
  clearTimeout(_objToolBox.intTimerID);

  if (!_objToolBox.bolVisible) {
    var intHeight = 0;
    var intWidth = 0;
    var objTemp = document.getElementById(_objToolBox.strName);
    
    objTemp.style.height = "";
    objTemp.style.width = "500px"; //strSuperToolBoxWidth;
    
    //objTemp.style.position = "absolute";

    intHeight = objTemp.offsetHeight;
    intWidth = objTemp.offsetWidth;
  
    set_location(strToolBoxLocation, intHeight, intWidth);
    show_layer(_objToolBox.strName, intLocationY, intLocationX);
    _objToolBox.bolVisible = true;
    }
    
  return false;
  }

function reset_SuperToolBox(_objToolBox) {
  close_SuperToolBox(_objToolBox);
  show_SuperToolBox(_objToolBox);
  }
  
function set_SuperToolBox(_objEvent, _objToolBox, _strLocation){
    var bolNoDelay = false;
    
    if (objCurrentToolBox) {
      bolNoDelay = objCurrentToolBox.bolVisible && !objCurrentToolBox.bolKeep;
      if (!objCurrentToolBox.bolKeep) {
        close_SuperToolBox(objCurrentToolBox);
        }
      }
      
    hide_SuperToolTip();
    
    if (document.all) { // IE (is stupid)
      intPageY = _objEvent.clientY;
      intPageX = _objEvent.clientX;
      document.getElementById(_objToolBox.strName).style.width = "100px";
      }
    else {
      intPageY = _objEvent.pageY;
      intPageX = _objEvent.pageX;
      }
  
    strToolBoxLocation = _strLocation;
  
    if (bolNoDelay) {
      show_SuperToolBox(_objToolBox);
      }
    else {
      _objToolBox.intTimerID = setTimeout('show_SuperToolBox(objCurrentToolBox);', intToolDelay);
      }
      
    objCurrentToolBox = _objToolBox;
  }  

function close_SuperToolBox(_objToolBox) {
  if (_objToolBox) {
    clearTimeout(_objToolBox.intTimerID);
    _objToolBox.bolVisible = false;
    _objToolBox.bolKeep = false;
    //document.getElementById(_objToolBox.strName).style.visibility = "hidden";
    hide_layer(_objToolBox.strName);
    }
  }

function hide_SuperToolBox(_objToolBox) {
  if (_objToolBox) {
    clearTimeout(_objToolBox.intTimerID);
    if (!_objToolBox.bolKeep) {
      _objToolBox.intTimerID = setTimeout('close_SuperToolBox(objCurrentToolBox);', intToolDelay);
      objCurrentToolBox = _objToolBox;
      }
    }
  }
  
function keep_SuperToolBox(_objToolBox) {
  if (_objToolBox) {
    clearTimeout(_objToolBox.intTimerID);
    //_objToolBox.bolKeep = _objToolBox.bolVisible;
    }
  }

function stick_SuperToolBox(_objToolBox) {
  if (_objToolBox) {
    clearTimeout(_objToolBox.intTimerID);
    _objToolBox.bolKeep = _objToolBox.bolVisible;
    }
  }

function pickup_SuperToolBox(_objEvent, _objToolBox) {
  keep_SuperToolBox(_objToolBox);
  objCurrentToolBox = _objToolBox;
  var bolTemp = true;

  if (document.all) { // IE (is stupid)
    intToolBoxOffsetY = _objEvent.offsetY + 4;
    intToolBoxOffsetX = _objEvent.offsetX + 4;
    
    if (!_objToolBox.bolVisible) {
      bolTemp = false;
      }
    //alert(intToolBoxOffsetY + " " + intToolBoxOffsetX);
    }
  else {
    intToolBoxOffsetY = _objEvent.layerY - 1;
    intToolBoxOffsetX = _objEvent.layerX - 1;
    }

  if (bolTemp) {
    document.onmousemove = move_SuperToolBox;
    document.onmouseup = release_SuperToolBox;
    }
  }
  
function move_SuperToolBox(_objEvent) {
  if (objCurrentToolBox) {
    if (document.all) { // IE (is stupid)
      intPageY = event.clientY;
      intPageX = event.clientX;
      }
    else {
      intPageY = _objEvent.pageY;
      intPageX = _objEvent.pageX;
      }

    var intYPos = intPageY - intToolBoxOffsetY;
    var intXPos = intPageX - intToolBoxOffsetX;
    
    document.getElementById(objCurrentToolBox.strName).style.top = intYPos + "px";
    document.getElementById(objCurrentToolBox.strName).style.left = intXPos + "px";
    }
  }
  
function release_SuperToolBox(_objEvent) {
  //objCurrentToolBox = null;
  document.onmousemove = null;
  document.onmouseup = null;
  }
/*/SUPERTOOLS*/
