//is this application in debug mode?
var isDebug = false;

//reviews per page constant
var REVIEWS_PER_PAGE = 3;

//total number of reviews for this product
var reviewsCount = 0;

//total number of review pages for this product
var pagesCount = 0;

//hold the product reviews HTML as an array
var reviewsArr = null;

//preload the loading image
var loaderImg = new Image();
loaderImg.src = '/images/ajax-loader.gif';

/* manage the reviews for this product and paging */
$(document).ready(function() {
  //---------------get the product reviews---------------------//
  id = parseInt($('#product_id').val());
  if(typeof id == 'undefined' || id == null || id === undefined || id == 0) //test product_id defined
    throw 'Unable to locate this Product';
  //perform AJAX request
  $('#productReviewsContainer').html('<img src="'+loaderImg.src+'" style="margin-left: 240px; border: none;" />');//show loader
  $.getJSON('/page/get-product-reviews/productID/'+id, function(data) {
    try {
      if(isEmpty(data)) {//malformed data
        throw 'This Products Review data is missing';
        $('#productReviewsContainer').css({display: 'none'});//hide container
        $('#productReviewsHeaderContainer').css({display: 'none'});//hide header container
      } else if(data.toString().length > 1) {
        //---------------data ok?---------------------//
        reviewsCount = parseInt(data.length);//set total number of reviews
        pagesCount = Math.ceil(reviewsCount / REVIEWS_PER_PAGE);//set number of pages
        if(reviewsCount > 0 && pagesCount > 0) {//ok, reviews exist so output the data in a nice table
          //build review header HTML
          var reviewHeadContent = '';
          reviewHeadContent += '<div class="reviewsHeader">';
          for(var i=0; i < pagesCount; i++) //write-in page tags
            reviewHeadContent += '<span id="headerSpan-'+i+'" class="reviewsHeaderSpn" title="Show Page '+(i+1)+' of '+pagesCount+'">'+(i+1)+'</span>';
          reviewHeadContent += '</div>';
          $('#productReviewsHeaderContainer').html(reviewHeadContent);//output the header
          //build review HTML
          var reviewContent = '';
          //write-in first "page" of reviews
          reviewContent += '<div id="reviewContent-0">';
          for(var i=0; i < REVIEWS_PER_PAGE; i++) {
            if(!isEmpty(data[i])) {//check this object is defined
              reviewContent += '<h2>'+data[i]['title']+'</h2>';
              reviewContent += '<img src="/images/'+parseInt(data[i]['rating'])+'-stars.jpg" alt="'+parseInt(data[i]['rating'])+'" />';
              reviewContent += '<p>"'+data[i]['body']+'"</p>';
              reviewContent += '<p><em>'+data[i]['customer_name']+'</em></p>';
            }
          }
          reviewContent += '</div>';
          $('#productReviewsContainer').html(reviewContent);//output the default page
          $('#headerSpan-0').addClass('selectedSpn');//set default as currently selected
          reviewsArr = new Array(pagesCount);//instantiate reviews array
          reviewsArr[0] = reviewContent;//set first review contents
          //---------------build "hidden" review pages---------------------//
          if(reviewsCount > REVIEWS_PER_PAGE) {//ignore when number of reviews LESS than 1 page
            var pageCheck = 0;
            var currPage = 1;
            for(var i=REVIEWS_PER_PAGE; i < reviewsCount; i++) {//start where default finished and build div's
              var reviewSubContent = '';//hold the sub-string
              reviewSubContent += '<div id="reviewContent-'+currPage+'">';
              reviewSubContent += '<h2>'+data[i]['title']+'</h2>';
              reviewSubContent += '<img src="/images/'+parseInt(data[i]['rating'])+'-stars.jpg" alt="'+parseInt(data[i]['rating'])+'" />';
              reviewSubContent += '<p>"'+data[i]['body']+'"</p>';
              reviewSubContent += '<p><em>'+data[i]['customer_name']+'</em></p>';
              reviewSubContent += '</div>';
              //manage pages
              if(pageCheck < REVIEWS_PER_PAGE) {//iterate counter
                pageCheck++;
              } else {//start a new page
                pageCheck = 1;
                currPage++;
              }
              //add sub-content to content array
              if(isEmpty(reviewsArr[currPage]))
                reviewsArr[currPage] = reviewSubContent;//set x "page" review contents
              else //already has content
                reviewsArr[currPage] += reviewSubContent;//append x "page" review contents
            }
          }
          //---------------events for page traversal---------------------//
          $('.reviewsHeaderSpn').click(function() {//click a "page" number and show that "page"
            var pageID = parseInt($(this).attr('id').replace('headerSpan-', ''));
            if(!isEmpty(reviewsArr[pageID])) {
              $('.reviewsHeaderSpn').each(function() {//unselect all
                $(this).removeClass('selectedSpn');
              });
              $(this).addClass('selectedSpn');//set this currently selected
              $('#productReviewsContainer').fadeOut('slow', function() {
                try {
                  $('#productReviewsContainer').html(reviewsArr[pageID]);//output the selected page
                  $('#productReviewsContainer').fadeIn('slow');//show
                } catch(err) {
                  if(isDebug) //else, do nothing
                    window.alert('Error changing Product Reviews:\nMessage: '+err.toString()+'\n');
                }
              });
            }
          });
        }
      }
    } catch(err) {
      if(isDebug) //else, do nothing
        window.alert('Error loading Product Reviews:\nMessage: '+err.toString()+'\n');
    }
  });
});

//check if a variable is defined and non-null
function isEmpty(val)
{
  if(typeof val == 'undefined' || val == null || val === undefined)
    return true;
  return false;
}
