// Everything here copyright (c) NitroSell Limited
// NO REPRODUCTION OF *ANY* KIND PERMITTED!


function strInArray(strNeedle,aryHaystack) {
  for (var i in aryHaystack) 
    if (aryHaystack[i] == strNeedle) 
      return i;
  return false;
}

function triggerProductChanged(nId) {
  if (gel('prodcode') != null && gel('prodcode').value != nId) {
    gel('prodcode').value = nId;
    setTimeout('updateProductSelection()',300);
  }
}

function sanitizeValue(value) {
  if (value)
    return value.replace('&pound;',"\u00A3");
}

var arySelected = new Array();

function populateSelect(number,nCount,selectedValue,boolFirstTime) {
  if (arySelected.length == 0) 
    for(var i = 1;i<=nCount;i++) 
      arySelected[ i ] = eval("aryDim"+i+"["+selectedValue+"]");

  for(var i=1;i<=nCount;i++) {
    if (gel('seldim'+i).options.length){
      var ary = eval("aryDim"+i);
      arySelected[i] = ary[ gel('seldim'+i).value ];
      if (i == 2 && nCount == 3) {
        // incase the second variation is not available we need to recalc..
        var aryParent = eval("aryDim"+(i-1));
        var sParentValue = gel('seldim'+(i-1)).options[ gel('seldim'+(i-1)).selectedIndex ].text;
        var aryChildren = new Array();
        for (var nId in ary) 
          if (aryParent[nId] == sParentValue)
            aryChildren[ aryChildren.length ] = ary[ nId ];

        if (!strInArray(arySelected[i],aryChildren))
          arySelected[i] = aryChildren[0];
      }
    }
  }

  var aryDone = new Array();
  var aryIndex = new Array();
  var aryDims = new Array();
  var aryDone = new Array();
  var nProductId = 0;

  for(var nDim =1;nDim<=nCount;nDim++) {
    aryDims[ nDim ] = eval("aryDim"+nDim);
    aryDone[ nDim ] = new Array();
    aryIndex[ nDim ] = 0;
    gel('seldim'+nDim).options.length = 0;
  }

  for (var nId in aryDim1) {
    var bHasOption = true;
    for(var nDim = 1;nDim<=nCount;nDim++) {

      if (nDim > 1) {
        if (aryDims[ (nDim-1) ][nId] != arySelected[ (nDim-1) ]) {
          bHasOption = false;
          break;
        }
      }

      if (bHasOption) {
        if (!strInArray(aryDims[ nDim ][nId],aryDone[ nDim ])) {
          var objCurSel = gel("seldim"+nDim);
          objCurSel.options[ aryIndex[ nDim ] ] = new Option(sanitizeValue(aryDims[ nDim ][nId]),nId);
          aryDone[ nDim ][ aryIndex[nDim]  ] = aryDims[ nDim ][nId];
          if (arySelected[ nDim ] == aryDims[ nDim ][ nId ]) 
            objCurSel.selectedIndex = aryIndex[ nDim ];
          if (aryIndex[ nDim ] == 0 && nDim == nCount)
            nProductId = nId;
          aryIndex[ nDim ]++;
        }

        if (nDim == nCount) {
          nTmp = 1;
          while (nTmp <= nCount) {
            if ( aryDims[ nTmp ][ nId ] != arySelected[ nTmp ]) 
              break;
            else if ( nCount == nTmp) 
              nProductId = nId;
            nTmp++;
          }
        }
      }
    }
  }
  triggerProductChanged(nProductId);
}

function validateQty(errMessage) {
  var objQty = document.forms.frmMain.quantity;
  if (parseInt(objQty.value,10) > 0) {
    if (typeof aryMaxItemQty !== "undefined" && typeof aryMaxItemQty[gel('prodcode').value] !== undefined &&
        document.forms.frmMain.quantity.value > aryMaxItemQty[gel('prodcode').value]) {
      if (aryMaxItemQty[gel('prodcode').value] === 0) {
        alert("Sorry, this item is out of stock.");
      } else {
        alert("Please enter a lower quantity. There "+(aryMaxItemQty[gel('prodcode').value] == 1 ? "is":"are")+" only "+aryMaxItemQty[gel('prodcode').value]+" of this item still available.");
      }
      document.forms.frmMain.quantity.focus();
      return false;
    } else {
      return true;
    }
  } else {
    alert(errMessage);
    return false;
  }
}

var matrixNumElements = 0;
var matrixProductId = 0;
var matrixDivReplacement = '';

function refreshItemData(nId,numberDimensions,divName) {
  matrixNumElements = numberDimensions;
  matrixProductId = nId;
  matrixDivReplacement = divName;
  ajax_get('/store/store.asp?action=get_product_data&prodcode='+nId,callbackGotItemData);
}

function callbackGotItemData(bSuccess,sData) {
  if (bSuccess) {
    gel(matrixDivReplacement).innerHTML = ajaxRequest.responseText;
    populateSelect(1,matrixNumElements,matrixProductId,true);
  }
}

function tellAFriend() {
  gel('product_id').value = gel('prodcode').value;
  gel('frmTell').submit();
}

var imageWindow;
var currentProfileName = '';

function getProductImageSource(sViewName) {
  var image = gel('productphoto').src;
  imageBits = image.split('/');
  image = imageBits[imageBits.length-1];

  var profileArray  = sEnabledViews.split(',');
  for(var c=0;c<profileArray.length;c++)
    if (profileArray[c] != '') 
      image = image.replace(escape(profileArray[c])+'-','');
  if (sViewName != '')
    image = sViewName+'-'+image;
  return sNSCImagePath+image;
}

function changeProductPhotoView(profile,profileList) {
  gel('productphoto').src = getProductImageSource(profile);
  currentProfileName = profile;
}

function showEnlargedView(productName, profileList) { 
  ShowEnlarged(currentProfileName);
}

function ShowEnlarged(prefixName) {
  if (prefixName)
    window.open('/store/go/enlarged/'+document.forms['frmMain'].prodcode.value+'/'+prefixName+'/','','width=1,height=1,scrollbars=no');
  else
    window.open('/store/go/enlarged/'+document.forms['frmMain'].prodcode.value+'/','','width=1,height=1,scrollbars=no');
}

function setReviewUseful(reviewId, useful,sThanksText) {

  ajax_get('/store/store.asp?action=do&doaction=ratereview&productreview_id='+reviewId+'&useful='+useful, null);

  var reviewElem = gel("review-useful-"+reviewId);
  if (sThanksText) 
    reviewElem.innerHTML = "<p><em>"+sThanksText+"</em></p>";
  else
    reviewElem.innerHTML = "<p><em>Thank you! Your feedback has been recorded.</em></p>";
}

function loginRedirect() { gel("login-redirect").submit(); }
function registerRedirect() { gel("register-redirect").submit(); }

function checkStoreSelectStore() { 
  ajax_get('/store/store.asp?action=do&doaction=checkstockstorelist',callbackGotCheckStockPage1);
}

function callbackGotCheckStockPage1(bSuccess,sData) {
  if (bSuccess && gel('stockcheck'))
    sec('stockcheck',sData);
}

function checkStoreStockByProductId(nStoreId, nProductId) {
  ajax_get('/store/store.asp?action=do&doaction=checkstockatstore&store_id='+nStoreId+'&product_id='+nProductId,callbackGotCheckStockPage2);
}

function callbackGotCheckStockPage2(bSuccess,sData) {
  if (bSuccess && gel('stockcheckresult')) 
    sec('stockcheckresult',sData);
}


