// imaja-artwork.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.
// Version: 1.6 Adds more support for handhelds, changed list view
//
// Functions: 
// picscanprefs getparam addAttribute getSearchAsArray loadFrame 
// displayThumbnail displayListview displayFullSize displayTinyPreloader makeEntryForm
// getFormData getformascommaseparatedvalues assembleAndGo 
// makeImageInfo addImageRec makedatastatement displayThumbnailTable
// displayNextPrevLinks viewaslist initSlideshow displayNavigation displayGalleryImage
// Edit this --> loadDatabase
//
// URL?cur=0
// URL?viewas=list
// URL?viewas=thumbnails
// URL?viewas=entryform

var columns = 14;
var currentImage = 0;
var thumbnailsize = 60;
var navbuttonsize = 24;
var paramstr = window.document.location.search;
var showInfo = true;
var showNavigation = true;
var handhelddisplay = false;

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;
}

var picscanprefs = new picscanprefs("images", "images/thumbnails", thumbnailsize, thumbnailsize);

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 = addAttribute(str, "title", this.title + ", " + (index+1));
  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'>");
  document.write("<a name='" + index + "'></a>");
  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 + "&";
  var visibleindex = parseInt(index)+1;

//  document.write(visibleindex);
//  document.write("</td><td valign='top'>");
  document.write(imagestr.link(linkurl));
  document.write("</td><td valign='top'>");
  document.write("<span class='mediumbody'>");
  document.write("<b>");
  document.write(this.title.link(linkurl));
  document.write("</b>");
  document.write("</span>");
  document.write("<br>");
  document.write("$ " + this.price);
  document.write(", ");
  document.write(this.size);
  document.write(", ");
  document.write(this.medium);
  document.write("</td><td valign='top'>");
  document.write("</td><td valign='top'>");
  document.write("</td><td valign='top'>");
  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() {
// bgcolor='#888888'
  document.write("<table width='100%' cellpadding='1' cellspacing='0' border='0' >");
  if (handhelddisplay) {
    document.write("<tr><td valign='top' halign='center'>");
  }
  else {
    document.write("<tr><td valign='top' halign='center' height='550' width='550'>");
  }
  
  document.write("<div align='center'>");
 
  if (showNavigation) {
    displayNavigation();
  }
  
  var imagestr = "<img";
  imagestr = addAttribute(imagestr, "src", this.image);
  imagestr = addAttribute(imagestr, "border", 0);
  imagestr = addAttribute(imagestr, "align", "center");
  imagestr = addAttribute(imagestr, "alt", this.title + ": imaja - greg jalbert");
  imagestr = addAttribute(imagestr, "name", this.title + ": imaja - greg jalbert");
  imagestr = closetag(imagestr);

  var nextindex = parseInt(currentImage)+1;
  if (nextindex > gImageRecCount-1)
    nextindex = gImageRecCount-1;
  var linkurl;
  linkurl = baseurl + "?cur=" + nextindex + "&";
  document.write(imagestr.link(linkurl));
  
  document.write("</div>");

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

  if (showInfo) {
  
  document.write("<td valign='middle' width='220'>");

  document.write("<table border='0' cellpadding='8'><tr><td>"); 

  document.write("<br>");
  // this.title.link(this.thumbnail)
  document.write("<h4>" + this.title + "</h4>");
  document.write("<p>");
//   document.write("<table border='0'><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>Frame: " + this.frame + "<br>" + "$" + this.price + " ");

  document.write("<p>");
  document.write("<a href='mailto:art" + "06" + "@imaja.com?subject=imaja artwork: " + this.title + "'>E-mail a comment to the artist</a>");

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

  document.write("<p>");
document.write('<form action="https://www.paypal.com/cgi-bin/webscr" method="post">');
document.write('<input type="hidden" name="business" value="greg@imaja.com">');
document.write('<input type="hidden" name="return" value="http://www.imaja.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.imaja.com/store/paymentcancelled.html">');
// document.write('<input type="hidden" name="image_url" value="https://secure.us.com/imaja/secure/logo-imaja-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="greg@imaja.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>"); // close info table

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

} // end if showInfo

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

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

function displayTinyPreloader() {
  var str = "<img";
  str = addAttribute(str, "src", this.image);
  str = addAttribute(str, "width", 16);
  str = addAttribute(str, "height", 16);
  str = addAttribute(str, "hspace", 2);
  str = addAttribute(str, "vspace", 2);
  str = closetag(str);
  document.write(str + " ");
}


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.displayTinyPreloader = displayTinyPreloader;
  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' width='100%'>");
	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>");
}

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

  document.write("<table border='0' cellspacing='0' cellpadding='2' width='480'>");
  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) {
    amppos = paramstr.indexOf('&', pos);
	if (amppos == 0) {
	   amppos = paramstr.length();
	}
	currentImage = paramstr.substring(pos+4,amppos);
  }
  //    currentImage = getparam("cur");
  pos = paramstr.indexOf("thumbnailsize=");
  if (pos > 0) {
	thumbnailsize = paramstr.substring(pos+14, paramstr.indexOf('&', pos));
    // thumbnailsize = getparam("thumbnailsize");
    picscanprefs.thumbnailwidth = thumbnailsize;
    picscanprefs.thumbnailheight = thumbnailsize;
  }
}


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

function makeButtonImageTag(image, str) {
  var imagestr = "<img";
  imagestr = addAttribute(imagestr, "src", image);
  imagestr = addAttribute(imagestr, "width", navbuttonsize);
  imagestr = addAttribute(imagestr, "height", navbuttonsize);
  imagestr = addAttribute(imagestr, "hspace", 18);
  imagestr = addAttribute(imagestr, "border", 0);
  imagestr = addAttribute(imagestr, "alt", str);
  imagestr = addAttribute(imagestr, "title", str);
  imagestr = closetag(imagestr);
  return imagestr;
}

function displayNextPrevLinks() {
  var linkurl;
  var str;
  var imagestr;
  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
  imagestr = makeButtonImageTag("../images/ButtonStartArrow.gif", "first");
  document.write(imagestr.link(linkurl));

  linkurl = baseurl + "?cur=" + previndex + "&";
  imagestr = makeButtonImageTag("../images/ButtonLeftArrow.gif", "previous");
  document.write(imagestr.link(linkurl));

  linkurl = baseurl + "?cur=" + nextindex + "&";
  imagestr = makeButtonImageTag("../images/ButtonRightArrow.gif", "next");
  document.write(imagestr.link(linkurl));

  linkurl = baseurl + "?viewas=thumbnails&cur=" + currentImage + "&";
  imagestr = makeButtonImageTag("../images/ButtonThumbnails.gif", "thumbnails");
  document.write(imagestr.link(linkurl));

  linkurl = baseurl + "?viewas=list&";
  imagestr = makeButtonImageTag("../images/ButtonList.gif", "list");
  document.write(imagestr.link(linkurl));

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

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

function displayHandheldNavigation() 
{
  var linkurl;
  var str;
  var imagestr;
  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
  imagestr = makeButtonImageTag("../images/ButtonStartArrow.gif", "first");
  document.write(imagestr.link(linkurl));

  linkurl = baseurl + "?cur=" + previndex + "&";
  imagestr = makeButtonImageTag("../images/ButtonLeftArrow.gif", "previous");
  document.write(imagestr.link(linkurl));

  linkurl = baseurl + "?cur=" + nextindex + "&";
  imagestr = makeButtonImageTag("../images/ButtonRightArrow.gif", "next");
  document.write(imagestr.link(linkurl));
*/

  document.write('<p align="center">');
// <a href="gallerymini.html?viewas=thumbnails">Grid</a> . 
// <a href="gallerymini.html?viewas=list">List</a> ... 

  linkurl = baseurl + "?viewas=thumbnails&cur=" + currentImage + "&";
  imagestr = makeButtonImageTag("../images/ButtonThumbnails.gif", "thumbnails");
  document.write(imagestr.link(linkurl));

  linkurl = baseurl + "?viewas=list&cur=" + currentImage + "#" + currentImage ;
  imagestr = makeButtonImageTag("../images/ButtonList.gif", "list");
  document.write(imagestr.link(linkurl));
  
  document.write(' . <a href="gallery.html?cur=' + currentImage + '&">Info</a> . ');
  document.write('<a href="http://www.imaja.com/">Imaja</a></p>');

}

function displayNavigation() {
  document.write("<p align='center'>");
  displayNextPrevLinks();
  document.write("<p>");
}

function displayGalleryImage() {
  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>");
//	gImageRecs[parseInt(currentImage)-1].displayTinyPreloader();
//	gImageRecs[parseInt(currentImage)+1].displayTinyPreloader();
  }
  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>");
//	gImageRecs[parseInt(currentImage)-1].displayTinyPreloader();
//	gImageRecs[parseInt(currentImage)+1].displayTinyPreloader();
  }
}
