//environment variables
var img_path = "http://dlib.nyu.edu/maassimages/";


function switchPortalFocus(portal) {
  /** switch portal elements based on naming convention
    * naming convention:
    * image id = portalId + Img
    * header text id = portalId + Hdr
    * portal body id = portalId + Txt
  **/
  var portal_id = portal.id;
  var image_id = portal_id + "Img";
  var header_id = portal_id + "Hdr";
  var body_id = portal_id + "Txt";
  var image = document.getElementById(image_id);
  var portal = document.getElementById(portal_id);
  switchImg(image);
  switchPortal(portal);
}

function switchImg(image) {
  /** switch images based on naming convention
    * naming convention:
    * imageID.jpg = "normal" state
    * imageID_in.jpg = "altered" state
  **/
  var imageFolder = "imgs/";
  var id = image.id;
  var src = image.src;
  var alteredRegExp =/.+_in.jpg/i;
  var isAltered= alteredRegExp.test(src);

  if(isAltered == true) {
    image.src = imageFolder + id + ".jpg";
  } else {
    image.src = imageFolder + id + "_in.jpg";
  }
}

function switchPortal(portal) {
  /** switch classes based on naming convention
    * naming convention:
    * portalID + HomePortal = "normal" state
    * portalID + HomePortalSelected = "altered" state
  **/
  var id = portal.id;
  var currentClass = portal.className;
  var alteredRegExp =/.+Selected/;
  var isAltered= alteredRegExp.test(currentClass);

  if(isAltered == true) {
    portal.className = id + "HomePortal";
  } else {
    portal.className = id + "HomePortal homePortalSelected";
  }
}

function launch_result_img() {
  var resultImg = document.getElementById("searchResultImg");
  if (resultImg) {
    var src = resultImg.src;
    launch_img(src);
  }
}

function launch_results_thumbnail(thumbnail) {
  /** launch full image based on naming convention
    * naming convention:
    * thumbnail = imgID + t.jpg
    * full image = imgID + s.jpg
  **/
  var thumbSrc = thumbnail.src;
  var thumbRegExp = /t.jpg/i;
  var fullSrc = thumbSrc.replace(thumbRegExp, "s.jpg");
  launch_img(fullSrc);
}

function launch_tour_img (img_file){
  var img = img_path + img_file;
  launch_img(img);
}

function launch_feature_img (img_file){
  var img = img_path + img_file;
  launch_img(img);
}

function launch_img(img) {
  var img_window = window.open(img, "_blank", "top=50, left=350, toolbar=yes, resizable=yes, scrollbars=yes, height=700, width=600");
  img_window.focus();
}

function viewResultItem(item, xsl) {
  var itemId = item.id;
  window.location = "../servlet/ShowResultsSvlt?xmlIn=" + itemId + "&xslIn=" + xsl;
}

function prevImg(event) {
  var resultDiv = document.getElementById('searchResult');
  var resultImg = document.getElementById('searchResultImg');
  resultImg.src = imgArr[prev];
  refreshImg("var resultImg = document.getElementById('searchResultImg'); resultImg.src = imgArr[prev];", resultDiv);
  prev = prev - 1;
  next = next - 1;
  displayImgNav();
}

function nextImg(event) {
  var resultDiv = document.getElementById('searchResult');
  var resultImg = document.getElementById('searchResultImg');
  resultImg.src = imgArr[next];
  refreshImg("var resultImg = document.getElementById('searchResultImg'); resultImg.src = imgArr[next];", resultDiv);
  next++;
  prev++;
  displayImgNav();
}

function displayImgNav() {
  var prevImgNav = document.getElementById('resultImgPrev');
  var nextImgNav = document.getElementById('resultImgNext');
  var sepImgNav = document.getElementById('resultImgSep');
  if (prev < 0) {
    prevImgNav.style.visibility = "hidden";
  } else {
    prevImgNav.style.visibility = "visible";
  }

  if (next >= imgArr.length) {
    nextImgNav.style.visibility = "hidden";
  } else {
    nextImgNav.style.visibility = "visible";
  }

  if (nextImgNav.style.visibility != "hidden" && prevImgNav.style.visibility != "hidden") {
    sepImgNav.style.visibility = "visible";
  } else {
    sepImgNav.style.visibility = "hidden";
  }
}

function refreshImg(statement, resultDiv) {
  /** because of peculiar activity of Mozilla Firefox
    * this function will perform some benign javascript
    * to get Firefox to display the image.
  **/
  resultDiv.style.overflow = "hidden";
  eval(statement);
  window.setTimeout("var resultDiv = document.getElementById('searchResult'); resultDiv.style.overflow = 'scroll';", 5);
}

function pop_url(url) {
  window.open(url, "_blank");
}

function pop_url_anchor(anchor) {
  var url = anchor.href;
  pop_url(url);
}

function validate_search_parameters(form) {
  var result = false;
  var i;

  //constants
  var EMPTY_STRING = "";
  var SEARCH_ELEMENT = "search";
  var TERM_ELEMENT = "term";
  var FIELD_ELEMENT = "field";
  var SCAN = "scan";
  var KEYWORD = "keyword";
  var DATE = "date";
  var EMPTY_TERM_MESSAGE = "Please enter a term to search on";
  var INCORRECT_DATE_MESSAGE = "Please enter a valid year in the form YYYY";
  
  //date regular expression YYYY
  var dateRegExp = /^[1-9][0-9][0-9][0-9]$/;

  if(form) {
    var formElements = form.elements;
    var searchElement;
    var termElement = "test";
    var fieldElement;
    if (formElements) {
      for(i=0; i<formElements.length; i++) {
        if (searchElement) {
          if ((searchElement.value == SCAN) || (termElement && fieldElement)) {
            if (searchElement.value == KEYWORD) {
              termElement.value = termElement.value.trim();
              if (termElement.value == EMPTY_STRING) {
                alert(EMPTY_TERM_MESSAGE);
                break;
              }
              if (fieldElement.value == DATE) {
                if (termElement.value.match(dateRegExp) == null) {
                  alert(INCORRECT_DATE_MESSAGE);
                  break;
                }
              }
            }
            result = true;
            break;
          }
        }
        var formElement = formElements[i];
        if (formElement) {
          switch (formElement.name) {
            case SEARCH_ELEMENT:
              searchElement = formElement;
              break;
            case TERM_ELEMENT:
              termElement = formElement;
              break;
            case FIELD_ELEMENT:
              fieldElement = formElement;
              break;
          }
        }
      }
    }
  }
  return result;
}

String.prototype.trim = function(){
  return this.replace(/^\s*|\s*$/g,'');
}
