// Product Form Utils
// REQUIRES: utils.js, form.js

// Globals
var DEFAULT_SERIES_ID = '002';
var DEFAULT_PRODUCT_ID = '01';

var ARR_LOC_ID = 0;
var ARR_LOC_DESC = 4;
var ARR_LOC_FEATURES = 5;
var ARR_LOC_NAME = 3;
var ARR_LOC_PRICE = 2;
var ARR_LOC_SKU = 1;

var HIRES_CONTAINER_ID = "coreContentContainer";
var LOADING_IMAGE_PATH = "/images/loading.gif";
var PRODNAV_ID = "coreNav";
var PRODFORM_CONTAINER_ID = "formContainer";
var PRODFORM_ID = FORM_NAME_ADDTOCART;
var PRODFORM_SKUFIELD_ID = "hosted_button_id";
var PRODFORM_INITIALELEM_ID = "name_first";

var IMGPATH_PRFX = "/images/content/";
var TITLE_IMGPATH_PRFX = "title_";
var FILENAME_VARIANT_SEP = "_";
var HIRES_FILENAME_SFFX = ".jpg";
var LORES_FILENAME_SFFX = "lo.jpg";
var NAV_FILENAME_SFFX = ".gif";
var THUMB_FILENAME_SFFX = ".gif";
var TITLE_FILENAME_SFFX = ".png";

var PRODTITLE_ID = "prodTitle";
var PRODDESC_ID = "prodDesc";
var PRODID_ID = "prodID";
var PRODPRICE_ID = "prodPrice";
var PRODTHUMB_ID = "prodThumb";
var PRODFEATURES_ID = "features";

var LORES_WIDTH = 200;
var LORES_HEIGHT = 200;
var NAVITEM_ID_PRFX = "prod";
var NAVITEM_WIDTH = 100;
var NAVITEM_HEIGHT = 50;
var NAVITEM_ALT_PRFX = "View: '";
var NAVITEM_ALT_SFFX = "'";
var CLASS_NAVITEM = "link";
var CLASS_NAVITEM_OFF = CLASS_NAVITEM + " off";
var CLASS_NAVITEM_ON = CLASS_NAVITEM + " on";
var CLASS_NAVITEM_OVER = CLASS_NAVITEM + " over";

var NUM_THUMBS = 3;
var THUMB_ID_PRFX = "thumb";
var CLASS_THUMB = "link";
var CLASS_THUMB_OFF = CLASS_THUMB + " off";
var CLASS_THUMB_ON = CLASS_THUMB + " on";
var CLASS_THUMB_OVER = CLASS_THUMB + " over";

var SCROLL_DIV_ID = "coreNav";
var SCROLL_INTERVAL = 25;
var SCROLL_CTRL_DOWN = "scrollDown";
var SCROLL_CTRL_UP = "scrollUp";

var CLASS_PRODTHUMB = "contentThumb";
var CUSTOMER_ORDER_URL_BASE = "/contact.php";

var sCustomOrderURL = CUSTOMER_ORDER_URL_BASE;
var nScrollTimerID = 0;
var oScrollDiv;
var nScrollDivHeight;
var oNavItem;
var oNavCtrl;
var nLookahead;
var sCurSeriesID = null;
var sCurProdID = null;
var sCurKittySKU = null;
var nCurThumbNum = 0;
var oSbuf = new StringBuffer();


/**
 * Go to page for target product
 */
function loadProd( sSeriesID, sProdID ) {
	
  oSbuf.clear();
  oSbuf.append('/product.php?s=');
  oSbuf.append(sSeriesID);
  oSbuf.append('&p=');
  oSbuf.append(sProdID);
  oSbuf.append('&nv=');

  oScrollDiv = document.getElementById(SCROLL_DIV_ID);
	oSbuf.append(oScrollDiv.scrollTop);
	
	document.location.href = oSbuf.toString();
}


/**
 * Initialise product information
 */
function initProducts( sSeriesID, sProdID, nScrollToPos ) {

	sCurSeriesID = (sSeriesID) ? sSeriesID : DEFAULT_SERIES_ID;
	sCurProdID = (sProdID) ? sProdID : DEFAULT_PRODUCT_ID;
	sCurKittySKU = sCurSeriesID + '-' + sCurProdID;
	
	// Set navigation scroller position
	scrollNavTo(nScrollToPos, sProdID);
}


/**
 * Get high-resolution product image path for given product SKU
 */
function getPathHiRes( sCurKittySKU, nVariantNum ) {

  oSbuf.clear();
  oSbuf.append(IMGPATH_PRFX);
  oSbuf.append(sCurKittySKU);
  oSbuf.append(FILENAME_VARIANT_SEP);
  oSbuf.append(nVariantNum);
  oSbuf.append(HIRES_FILENAME_SFFX);
	return(oSbuf.toString());
}


/**
 * Set product thumb to 'over' state
 */
function setNavItemOver( sProdID ) {

	if (sProdID != sCurProdID) {
	
	  document.getElementById(NAVITEM_ID_PRFX + sProdID).className = CLASS_NAVITEM_OVER;
	}
}


/**
 * Set product thumb to 'on' state
 */
function setNavItemOn( sProdID ) {

  document.getElementById(NAVITEM_ID_PRFX + sProdID).className = CLASS_NAVITEM_ON;
}


/**
 * Set product thumb to 'out' state
 */
function setNavItemOut( sProdID ) {

  document.getElementById(NAVITEM_ID_PRFX + sProdID).className = (sProdID != sCurProdID) ? CLASS_NAVITEM_OFF : CLASS_NAVITEM_ON;
}


/**
 * Set thumb to 'over' state
 */
function setThumbOver( nThumbNum ) {

	if (nThumbNum != nCurThumbNum) {
	
	  document.getElementById(THUMB_ID_PRFX + nThumbNum).className = CLASS_THUMB_OVER;
	}
}


/**
 * Set thumb to 'on' state
 */
function setThumbOn( nThumbNum ) {

  document.getElementById(THUMB_ID_PRFX + nThumbNum).className = CLASS_THUMB_ON;
}


/**
 * Set thumb to 'out' state
 */
function setThumbOut( nThumbNum ) {

  document.getElementById(THUMB_ID_PRFX + nThumbNum).className = (nThumbNum != nCurThumbNum) ? CLASS_THUMB_OFF : CLASS_THUMB_ON;
}


/**
 * Show high-resolution version of product image
 */
function showHiRes( nVariantNum ) {

	var oThumb = document.getElementById(THUMB_ID_PRFX + nCurThumbNum);
	oThumb.className = CLASS_THUMB_OFF;
	nCurThumbNum = nVariantNum;
	
	document.getElementById(HIRES_CONTAINER_ID).style.backgroundImage = "url(" + getPathHiRes(sCurKittySKU, nVariantNum) + ")";
	oThumb = document.getElementById(THUMB_ID_PRFX + nCurThumbNum);
	oThumb.className = CLASS_THUMB_ON;
}


/**
 * Scroll target container up
 */
function scrollUp() {
 
	oScrollDiv = document.getElementById(SCROLL_DIV_ID);
	nScrollDivHeight = oScrollDiv.scrollHeight;
	nLookahead = (oScrollDiv.scrollTop - 10);

	oScrollDiv.scrollTop = (nLookahead > 0) ? nLookahead : 0;
	nScrollTimerID = setTimeout("scrollUp()", SCROLL_INTERVAL);
}


/**
 * Scroll target container down
 */
function scrollDown() {
 
	oScrollDiv = document.getElementById(SCROLL_DIV_ID);
	nScrollDivHeight = oScrollDiv.scrollHeight;
  nLookahead = (oScrollDiv.scrollTop + 10);

  oScrollDiv.scrollTop = (nLookahead < nScrollDivHeight) ? nLookahead : nScrollDivHeight;
  nScrollTimerID = setTimeout("scrollDown()", SCROLL_INTERVAL);
}
 

/**
 * Stop scrolling in target container
 */
function stopScroll() {

  clearTimeout(nScrollTimerID);
}


/**
 * Scroll to target navigation item/position
 */
function scrollNavTo( nTargetPos, sProdID ) {

  oScrollDiv = document.getElementById(SCROLL_DIV_ID);
	oNavCtrl = document.getElementById(SCROLL_CTRL_UP);
	
	// Use top of target nav item if no desired position available
	if (!nTargetPos) {
	
	  oNavItem = document.getElementById(NAVITEM_ID_PRFX + sProdID);
		nTargetPos = oNavItem.offsetTop - oNavCtrl.offsetHeight;
	}
	
	oScrollDiv.scrollTop = nTargetPos;
}


/**
 * Add current item to shopping cart
 */
function addToCart() {

	document.getElementById(PRODFORM_SKUFIELD_ID).disabled = false;
	validateForm(document.forms[PRODFORM_ID]);
}


/**
 * Show shopping cart
 */
function showCart() {
	
	document.getElementById(PRODFORM_SKUFIELD_ID).disabled = true;
	document.forms[PRODFORM_ID].submit();
}

