// imaja-gallery.js

// scriptmaster=greg@imaja.com
// This script is Copyright (c) 2001-2009 Greg Jalbert
// Copying or using this script is expressly forbidden. 
// For licensing information, contact greg@imaja.com.
//
// Functions: 
// picscanprefs getparam addAttribute getSearchAsArray loadFrame 
// displayThumbnail displayListview displayFullSize makeEntryForm
// getFormData getformascommaseparatedvalues assembleAndGo 
// makeImageInfo addImageRec makedatastatement displayThumbnailTable
// displayNextPrevLinks viewaslist initSlideshow displayNavigation
//
// URL?cur=0
// URL?viewas=list
// URL?viewas=thumbnails
// URL?viewas=entryform

var columns = 14;
var currentImage = 0;
var thumbnailsize = 40;
var paramstr = window.document.location.search;
var picscanprefs;

var baseurl = window.document.location.href;
if (baseurl.indexOf("?") > 0)
    baseurl = baseurl.substring(0, baseurl.indexOf("?"));

function picscanprefs(imageDirectory, thumbnailDirectory, thumbnailwidth, thumbnailheight) {
  this.imageDirectory = imageDirectory;
  this.thumbnailDirectory = thumbnailDirectory;
  this.thumbnailwidth = thumbnailwidth;
  this.thumbnailheight = thumbnailheight;
}

function getparam(name) {
  var paramlist = window.document.location.search;
  var pos = paramlist.indexOf(name + "=");
  if (pos > 0) {
    return paramlist.substring(pos+paramlist.length(), paramlist.indexOf('&', pos));
  }
}

function addAttribute(tagstring, attrname, attrvalue) {
  tagstring = tagstring + " " + attrname + "='" + attrvalue + "'";
  return tagstring;
}

function closetag(str) {
  return str + ">";
}

function getSearchAsArray() {
   var minNav3 = (navigator.appName == "Netscape" && 
      parseInt(navigator.appVersion) >= 3)
   var minIE4 = (navigator.appName.indexOf("Microsoft") >= 0 && 
      parseInt(navigator.appVersion) >= 4)
   var minDOM = minNav3 || minIE4   // Baseline DOM required  for this function
   var results = new Array()
   if (minDOM) {
      location
      var input = unescape(location.search.substr(1))
      if (input) {
         var srchArray = input.split("&")
         var tempArray = new Array()
         for (i = 0; i < srchArray.length; i++) {
            tempArray = srchArray[i].split("=")
            results[tempArray[0]] = tempArray[1]
         }
      }
   }
   return results
}

function loadFrame() {
   if (location.search) {
      var srchArray = getSearchAsArray()
      if (srchArray["content"]) {
         self.content.location.href = srchArray["content"]
      }
   }
}

function displayThumbnail(index) {
  var str = "<img";
  str = addAttribute(str, "src", this.thumbnail);
  str = addAttribute(str, "width", picscanprefs.thumbnailwidth);
  str = addAttribute(str, "height", picscanprefs.thumbnailheight);
  str = addAttribute(str, "border", 0);
  str = closetag(str);
  linkurl = baseurl + "?cur=" + index + "&" + "viewas=thumbnails&";
  document.write(str.link(linkurl));
  if (false) {
  	document.write("<br>");
  	// document.write("<br>baseurl=" + baseurl);
 	trunctitle = this.title.substring(0, 10) + "...";
  	document.write(trunctitle.link(linkurl));
  }
}

function displayListview(index) {

  document.write("<tr><td valign='top'>");
  var imagestr = "<img";
  imagestr = addAttribute(imagestr, "src", this.thumbnail);
  imagestr = addAttribute(imagestr, "width", picscanprefs.thumbnailwidth);
  imagestr = addAttribute(imagestr, "height", picscanprefs.thumbnailheight);
  imagestr = addAttribute(imagestr, "border", 0);
  imagestr = closetag(imagestr);
  linkurl = baseurl + "?cur=" + index + "&";
  document.write(index);
//  document.write("</td><td valign='top'>");
//  document.write(imagestr.link(linkurl));
  document.write("</td><td valign='top'>");
  document.write(this.title.link(linkurl));
  document.write("</td></tr>");

 // document.write("<br>");
  // document.write("<br>baseurl=" + baseurl);
 // trunctitle = this.title.substring(0, 10) + "...";
//  document.write(trunctitle.link(linkurl));
}

function displayFullSize() {

  document.write("<table width='100%' cellpadding=12 cellspacing=0 border=0>");
  document.write("<tr><td valign='top' halign='center' width='320'>");
//  document.write("<tr><td valign='top' halign='center'>");

  document.write("<div align='center'>");
  var str = "<img";
  str = addAttribute(str, "src", this.image);
  // var scalePercent = "200%";
  // str = addAttribute(str, "width", scalePercent);
  // str = addAttribute(str, "height", scalePercent);
  str = addAttribute(str, "border", 0);
  str = addAttribute(str, "align", "left");
  str = addAttribute(str, "hspace", "20");
  str = closetag(str);
  document.write(str);
  // document.write("<br>");
  // document.write(this.image);
  document.write("</div>");

  // document.write("</td><td valign='top' width='220'>");

  document.write("<br>");
  // this.title.link(this.thumbnail)
document.write("<h4>" + this.title + "</h4>");
  document.write("<p>");
  document.write("<table border='0' cellpadding='4'><tr><td><p>");  // height='240' 
  document.write(this.description);
  document.write("</p></td></tr></table>");

  // document.write(this.title.link(this.thumbnail));
  document.write("</p>");
 // document.write("<p>");
 // document.write(this.medium + "<br>" + this.size + "<br>" + "$" + this.price + " ");

  document.write("<p>");
//  document.write("<a href='mailto:email@yourdomain.com?subject=YourGalleryName: " + this.title + "'>E-mail a comment</a>");

//  document.write("</td></tr><tr><td colspan=1>");

if (false) {
  document.write("<p>");
document.write('<form action="https://www.paypal.com/cgi-bin/webscr" method="post">');
document.write('<input type="hidden" name="business" value="email@yourdomain.com">');
document.write('<input type="hidden" name="return" value="http://www.yourdomain.com/store/paymentsuccess.html">');
document.write('<input type="hidden" name="undefined_quantity" value="1">');
document.write('<input type="hidden" name="item_name" value="' + this.title + '">');
// document.write('<input type="hidden" name="item_number" value="XXXXX">');
document.write('<input type="hidden" name="amount" value="' + this.price + '">');
// document.write('<input type="hidden" name="no_shipping" value="1">');
document.write('<input type="hidden" name="cancel_return" value="http://www.yourdomain.com/store/paymentcancelled.html">');
document.write('<input type="hidden" name="image_url" value="https://yourdomain.com/images/logo-yourdomain-paypal.jpg">');
document.write('<input type="hidden" name="no_note" value="0">');
document.write('<input type="hidden" name="cn" value="Comments">');
document.write('<input type="image" src="../images/AddToCartGrBr.gif" name="submit" alt="Buy Now">');
document.write('</form>');

document.write('<form name="_xclick" target="paypal" action="https://www.paypal.com/cgi-bin/webscr" method="post">');
document.write('<input type="hidden" name="cmd" value="_cart">');
document.write('<input type="hidden" name="business" value="email@yourdomain.com">');
document.write('<input type="image" src="../images/ViewCartGrBr.gif" border="0" name="submit" alt="View Cart">');
document.write('<input type="hidden" name="display" value="1">');
document.write('</form>');
}

document.write("</td></tr></table>");

  document.write("<p>");
}

function makeEntryForm() {
  document.write('<form name="imageInfoEntryForm" action="browser.html" method="Get">');
  document.write('image:<input type="text" name="image" size="50" maxlength="200"><br>');
  document.write('title:<input type="text" name="title" size="50" maxlength="200"><br>');
  document.write('thumbnail:<input type="text" name="image" size="50" maxlength="200"><br>');
  document.write('medium:<input type="text" name="medium" size="50" maxlength="200"><br>');
  document.write('size:<input type="text" name="size" size="50" maxlength="200"><br>');
  document.write('frame:<input type="text" name="frame" size="50" maxlength="200"><br>');
  document.write('price:<input type="text" name="price" size="50" maxlength="200"><br>');
  document.write('description:<textarea name="description" cols="80" rows="8"></textarea><br>');
  document.write('datastatement:<textarea name="datastatement" cols="80" rows="8"></textarea><br>');
  document.write('<input type="submit" value="Submit" name="submit">&nbsp;&nbsp;<input type="reset" value="Reset">');
  document.write('<INPUT type="button" VALUE="comma separated values" onClick="makedatastatement(this.form)">');
  document.write('</form>');
}

// Browser and Document Object Model version variables
var minNav3 = (navigator.appName == "Netscape" && parseInt(navigator.appVersion) >= 3)
var minIE4 = (navigator.appName.indexOf("Microsoft") >= 0 && parseInt(navigator.appVersion) >= 4)
var minDOM = minNav3 || minIE4   // baseline DOM required for this function

// Generic function converts form element name-value pairs
// into a URL search string.
function getFormData(form) {
	var searchString = "?"
	var element, onePair
	// Harvest values for each type of form element
	for (var i = 0; i < form.elements.length; i++) {
		element = form.elements[i]
		if (element.type == "text" || element.type == "textarea") {
			onePair = escape(element.name) + "="
			onePair += escape(element.value)
		} else if (element.type.indexOf("select") != -1) {
			onePair = escape(element.name) + "="
			onePair += escape(element.options[element.selectedIndex].value)
		} else if (element.type == "radio" || element.type == "checkbox") {
			if (element.checked) {
				onePair = escape(element.name) + "="
				onePair += escape(element.value)
			} else continue
		} else continue
		searchString += onePair + "&"
	}
	return searchString
}

// Generic function converts form element name-value pairs
// into a URL search string.
function getformascommaseparatedvalues(form) {
	var recordstring = '';
	var element, datavalue
	// Harvest values for each type of form element
	for (var i = 0; i < form.elements.length; i++) {
		element = form.elements[i]
		if (element.name == "datastatement") { 
			continue
		} else if (element.type == "text" || element.type == "textarea") {
			datavalue = element.value
		} else if (element.type.indexOf("select") != -1) {
			datavalue = element.options[element.selectedIndex].value
		} else if (element.type == "radio" || element.type == "checkbox") {
			if (element.checked) {
				datavalue = element.value
			} else continue;
		} else continue;
		recordstring += '"' + datavalue + '"';
		if (form.elements[i+1].name != "datastatement") { 
		  recordstring += ', ';
		}
	}
	// recordstring += '"';
	return recordstring;
}

// Invoked by button to format form data and navigate
// to new page and pass data as URL search string.
function assembleAndGo(form) {
	if (minDOM) {
		var formData = getFormData(form)
		location.href = form.action + formData
	}
}

var lineterminator = "\n";

function makedatastatement(form) {
	if (minDOM) {
		var formData = getformascommaseparatedvalues(form);
// 	form.datastatement.value = form.datastatement.value + "addImageRec( " + formData + " );" + lineterminator + lineterminator;
    form.datastatement.value = "addImageRec( " + formData + " );" + lineterminator + lineterminator;
	}

}

function makeImageInfo(image, title, thumbnail, medium, size, frame, price, description) {
  this.image = picscanprefs.imageDirectory + "/" + image;
  if (title == null)
    title = image;
  if (thumbnail == null)
    thumbnail = image;
  this.title = title; 
  this.thumbnail = picscanprefs.thumbnailDirectory + "/" + thumbnail;
  this.medium = medium;
  this.size = size;
  this.frame = frame;
  this.price = price;
  this.description =  description;
  this.displayListview = displayListview;
  this.displayThumbnail = displayThumbnail;
  this.displayFullSize = displayFullSize;
  this.makeEntryForm = makeEntryForm;
}



var gImageRecs = new Array(100);
var gImageRecCount = 0;

function addImageRec(image, title, thumbnail, medium, size, frame, price, description)
{
	gImageRecs[gImageRecCount] = new makeImageInfo(image, title, thumbnail, medium, size, frame, price, description);
	gImageRecCount++;
}

// a simple version of addImageRec with only name and description
function addImageRecImageDescription(image, description)
{
	gImageRecs[gImageRecCount] = new makeImageInfo(image, "", "", "", "", "", "", description);
	gImageRecCount++;
}

function displayThumbnailTable() {
	var contentIndex = (0 % gImageRecCount);
	var dispCnt = gImageRecCount; // gImageRecCount or 3;
	var columnIndex = 0;

	document.write("<table cellpadding='2'>");
	document.write("<tr>");
	while (dispCnt > 0) {
		if (columnIndex >= columns) {
			columnIndex = 0;
			document.write("</tr><tr>");
		}
		dispCnt--;
		document.write("<td align=center valign='top'");
		if (contentIndex == currentImage)
		document.write("bgcolor='#FFFF00'");
		else
		document.write("bgcolor='#888888'"); 
		document.write(">");
		
		gImageRecs[contentIndex].displayThumbnail(contentIndex);
		document.write("</td>");
		contentIndex = (contentIndex + 1) % gImageRecCount;
		columnIndex ++;
	}
	document.write("</tr></table>");
}

// ButtonRightArrow.gif
// ButtonStartArrow.gif
// ButtonEndArrow.gif
// ButtonLeftArrow.gif
// ButtonList.gif
// ButtonThumbnails.gif

function displayNextPrevLinks() {
  var linkurl;
  var str;
  var imagestr;
  var buttondir = "../images/";
  var delimiter = "&nbsp;&nbsp;|&nbsp;&nbsp;";

  // create next and previous links
  var previndex = parseInt(currentImage)-1;
  if (previndex < 0)
    previndex = 0;

  var nextindex = parseInt(currentImage)+1;
  if (nextindex > gImageRecCount-1)
    nextindex = gImageRecCount-1;

  linkurl = baseurl + "?cur=0&"; // zz
  str="first";
//  document.write(str.link(linkurl) + delimiter);
  imagestr = "<img";
  imagestr = addAttribute(imagestr, "src", buttondir + "ButtonStartArrow.gif");
  imagestr = addAttribute(imagestr, "width", 24);
  imagestr = addAttribute(imagestr, "height", 24);
  imagestr = addAttribute(imagestr, "border", 1);
  imagestr = addAttribute(imagestr, "alt", str);
  imagestr = addAttribute(imagestr, "title", str);
  imagestr = closetag(imagestr);
  document.write(imagestr.link(linkurl));

  document.write(" ");

  linkurl = baseurl + "?cur=" + previndex + "&";
  str = "previous";
//  document.write(str.link(linkurl) + delimiter);
  imagestr = "<img";
  imagestr = addAttribute(imagestr, "src", buttondir + "ButtonLeftArrow.gif");
  imagestr = addAttribute(imagestr, "width", 24);
  imagestr = addAttribute(imagestr, "height", 24);
  imagestr = addAttribute(imagestr, "border", 1);
  imagestr = addAttribute(imagestr, "alt", str);
  imagestr = addAttribute(imagestr, "title", str);
  imagestr = closetag(imagestr);
  document.write(imagestr.link(linkurl));

  document.write(" ");

  linkurl = baseurl + "?cur=" + nextindex + "&";
  str = "next";
//  document.write(str.link(linkurl) + delimiter);
  imagestr = "<img";
  imagestr = addAttribute(imagestr, "src", buttondir + "ButtonRightArrow.gif");
  imagestr = addAttribute(imagestr, "width", 24);
  imagestr = addAttribute(imagestr, "height", 24);
  imagestr = addAttribute(imagestr, "border", 1);
  imagestr = addAttribute(imagestr, "alt", str);
  imagestr = addAttribute(imagestr, "title", str);
  imagestr = closetag(imagestr);
  document.write(imagestr.link(linkurl));

if (false) {  // do not display thumbnails view
  document.write(" ");

  linkurl = baseurl + "?viewas=thumbnails&cur=" + currentImage + "&";
  str="thumbnails";
//  document.write(str.link(linkurl) + delimiter);
  imagestr = "<img";
  imagestr = addAttribute(imagestr, "src", buttondir + "ButtonThumbnails.gif");
  imagestr = addAttribute(imagestr, "width", 24);
  imagestr = addAttribute(imagestr, "height", 24);
  imagestr = addAttribute(imagestr, "border", 1);
  imagestr = addAttribute(imagestr, "alt", str);
  imagestr = addAttribute(imagestr, "title", str);
  imagestr = closetag(imagestr);
  document.write(imagestr.link(linkurl));

}
  document.write(" ");
  linkurl = baseurl + "?viewas=list&";
  str="list";
//   document.write(str.link(linkurl) ); // + delimiter);
  imagestr = "<img";
  imagestr = addAttribute(imagestr, "src", buttondir + "ButtonList.gif");
  imagestr = addAttribute(imagestr, "width", 24);
  imagestr = addAttribute(imagestr, "height", 24);
  imagestr = addAttribute(imagestr, "border", 1);
  imagestr = addAttribute(imagestr, "alt", str);
  imagestr = addAttribute(imagestr, "title", str);
  imagestr = closetag(imagestr);
  document.write(imagestr.link(linkurl));

 document.write(" " + (parseInt(currentImage)+1) + " of " + gImageRecCount + " images");

//  linkurl = baseurl + "?cur=" + previndex + "&slideshow=1&"; // zz
//  str="slideshow";
//  document.write("&nbsp;&nbsp;|&nbsp;&nbsp;" + str.link(linkurl));
}

function viewaslist() {
  var contentIndex = (0 % gImageRecCount);
  var dispCnt = gImageRecCount; // gImageRecCount or 3;

  document.write("<table border='0' cellspacing='0' cellpadding='1' width='550'>");
  while (dispCnt > 0) {
     dispCnt--;
     gImageRecs[contentIndex].displayListview(contentIndex);
     contentIndex = (contentIndex + 1) % gImageRecCount;
    //  document.write("<br>");
  }
  document.write("</table>");
}

function initSlideshow() {
  var pos;
  pos = paramstr.indexOf("cur=");
  if (pos > 0)
	currentImage = paramstr.substring(pos+4, paramstr.indexOf('&', pos));
  
  //    currentImage = getparam("cur");
  
  pos = paramstr.indexOf("thumbnailsize=");
  if (pos > 0)
	thumbnailsize = paramstr.substring(pos+14, paramstr.indexOf('&', pos));
  
  // thumbnailsize = getparam("thumbnailsize");
  picscanprefs = new picscanprefs("../images/", "../thumbnails/", thumbnailsize, thumbnailsize);

  picscanprefs.thumbnailwidth = thumbnailsize;
  picscanprefs.thumbnailheight = thumbnailsize;
}

function displayNavigation() {
  document.write("<p align='center'>");
  displayNextPrevLinks();
  document.write("<br><br><p>");
  
  if (paramstr.indexOf("viewas=list") > 0)  {
	document.write("<p align='center'>");
	viewaslist();
  }
  else if (paramstr.indexOf("viewas=thumbnails") > 0)  {
	displayThumbnailTable();
	document.write("<p align='center'>");
	gImageRecs[currentImage].displayFullSize();
	document.write("</p>");
  }
  else if (paramstr.indexOf("viewas=entryform") > 0)  {
	gImageRecs[currentImage].makeEntryForm();
	document.write("<p align='center'>");
	// gImageRecs[currentImage].displayFullSize();
	document.write("</p>");
  }
  else {
  document.write("<p align='center'>");
	gImageRecs[currentImage].displayFullSize();
	document.write("</p>");
  }
}

// Run the slideshow system
initSlideshow();
