﻿// JavaScript Document
//----------------------------------------------------------------------------
// Catalog Main
//
// version:   2.0
// date:      27/08/10
// author:    [Olivier Robert]
//-----------------------------------------------------------------------------

var $j = jQuery.noConflict();

$j(document).ready(function () {

  var masterId = "ctl00_content_";

  var Catalog = {

    init: function () {

      this.firstPage = "1";

      this.catalogNumPage = 196;
      this.notInCatalogNumPage = 54;

      this.catalogContainer = "catalogBrowser";
      this.notInCatalogContainer = "notInCatalogBrowser";

      this.catalogImagePath = "catalog/SAS_CATALOG_2011_PAGE_";
      this.notInCatalogImagePath = "not_in_catalog/SAS_NOT_IN_CATALOG_2011_PAGE_";

      this.param = {

        productType: "catalog",
        pageCurrent: "01",
        totalPage: Catalog.catalogNumPage,
        path: Catalog.catalogImagePath,
        folder: "public/"

      };


      $j('div.browser_container').append('<div class="loading"><span>&nbsp;</span></div>');
      $j('div.browser_container div.loading').css({ 'display': 'none' });

      $j('div.browser_container div.thumb_page').css({ 'display': 'none' });

      $j('div.browser_container input#' + masterId + 'catalogJumpCategoryGo').css({ 'display': 'none' });
      $j('div.browser_container input#' + masterId + 'notInCatalogJumpCategoryGo').css({ 'display': 'none' });

      $j('input#catalogJumpPage').numeric();
      $j('input#notInCatalogJumpPage').numeric();

      Catalog.controlPage();
      Catalog.jumpCategory();

      ////////////////////////////////////////////////////////////////////////////////////

      var pageGetParam = null;
      var viewParamEl = null;
      var viewParam = Catalog.param.productType;

      var pageHash = window.location.hash;
      var pageHashParam = pageHash != null ? pageHash.split("=") : null;
      var pageHashCurrent = pageHashParam.length > 1 ? pageHashParam[1] : null;

      var pageUrl = location.href != null ? location.href.split("?") : null;

      if (pageUrl.length > 1) {

        var pageUrlParamEl = pageUrl.length > 1 ? pageUrl[1].split("&") : null;

        if (pageUrlParamEl.length > 1) {

          viewParamEl = pageUrlParamEl.length > 1 ? pageUrlParamEl[0].split("=") : null;
          viewParam = viewParamEl != null ? viewParamEl[1] : null;

          var pageParamEl = pageUrlParamEl.length > 1 ? pageUrlParamEl[1].split("=") : null;
          pageGetParam = pageUrlParamEl.length > 1 ? pageParamEl[1] : null;

        } else {

          viewParamEl = pageUrl[1].length > 1 ? pageUrl[1].split("=") : null;
          viewParam = viewParamEl != null ? (viewParamEl[1]).replace("#page", "") : null;

        }

      }

      ////////////////////////////////////////////////////////////////////////////////////////

      if (pageHashCurrent == null && pageGetParam == null) {

        Catalog.param.pageCurrent = "01";

      } else {

        Catalog.param.pageCurrent = pageGetParam != null ? pageGetParam : pageHashCurrent;

      }

      Catalog.param.productType = viewParam;
      Catalog.param.totalPage = viewParam == "new_items" ? Catalog.notInCatalogNumPage : Catalog.catalogNumPage;
      Catalog.param.path = viewParam == "new_items" ? Catalog.notInCatalogImagePath : Catalog.catalogImagePath;

      //////////////////////////////////////////////////////////////////////////////////////////////////////////

      if (Catalog.param.pageCurrent !== null) {

        var prevPageChk = parseInt(Catalog.param.pageCurrent) - 1 < Catalog.firstPage ? Catalog.param.totalPage : parseInt(Catalog.param.pageCurrent) - 1;
        var prevPage = prevPageChk < 10 ? "0" + prevPageChk : prevPageChk;

        var nextPageChk = parseInt(Catalog.param.pageCurrent) + 1 > Catalog.param.totalPage ? Catalog.firstPage : parseInt(Catalog.param.pageCurrent) + 1;
        var nextPage = nextPageChk < 10 ? "0" + nextPageChk : nextPageChk;

        $j('div.browser_container div.loading').fadeIn(200, function () {

          Catalog.loadPage(Catalog.param.pageCurrent, prevPage, nextPage, Catalog.param.totalPage, Catalog.param.folder);

        });

      }

    },

    loadPage: function (currentPage, prevPage, nextPage, totalPage, folder) {

      var img = new Image();

      $j(img).load(function () {

        $j('div.browser_container div.page_container img').fadeOut(10000).remove();

        $j('div.browser_container div.loading').fadeOut(200);

        $j('div.browser_container div.page_container').append(this);

        $j(this).fadeIn();

        $j('div.browser_container div.control.page span').html(currentPage + ' / ' + totalPage);
        $j('div.browser_container div.control.prev a').attr('rel', prevPage);
        $j('div.browser_container div.control.next a').attr('rel', nextPage);

        window.location.hash = 'page=' + currentPage;

      })

			.attr('src', './image/' + folder + Catalog.param.path + currentPage + '.jpg');

      Catalog.loadThumbnail(prevPage, nextPage, folder);

    },

    loadThumbnail: function (prevPage, nextPage, folder) {

      var path = Catalog.param.path == 'catalog/SAS_CATALOG_2011_PAGE_' ? 'catalog/thumb/SAS_CATALOG_2011_PAGE_' : 'not_in_catalog/thumb/SAS_NOT_IN_CATALOG_2011_PAGE_';

      $j('div.thumb_image img').fadeOut(200).remove();

      var img_prev = new Image();

      $j(img_prev).load(function () {

        $j('div.thumb_page.prev div.thumb_image').append(this);

        $j(this).fadeIn();

      })

			.attr('src', './image/' + folder + path + prevPage + '.jpg');

      var img_next = new Image();

      $j(img_next).load(function () {

        $j('div.thumb_page.next div.thumb_image').append(this);

        $j(this).fadeIn();

      })

			.attr('src', './image/' + folder + path + nextPage + '.jpg');

    },

    ajaxLoadPage: function (gotoPage) {

      $j('div.browser_container div.loading').fadeIn(200, function () {

        $j.ajax({
          type: 'POST',
          url: 'system/service/productPageBrowser.asmx/getProductPage',
          data: '{"pageNumber": ' + gotoPage + ', "productType": "' + Catalog.param.productType + '"}',
          contentType: 'application/json; charset=utf-8',
          dataType: 'json',
          success: function (response) {

            var data = (typeof (response.d)) == 'string' ? eval('(' + response.d + ')') : response.d;

            Catalog.loadPage(data.currentPage, data.prevPage, data.nextPage, data.totalPage, data.pathPage);

            $j('input.jump_page').val(gotoPage);

          },
          error: function (error) {

            alert(error.responseText);
          }
        });

      });

    },

    controlPage: function () {

      $j('div.control a').click(function (e) {
        e.preventDefault();

        var gotoPage = $j(this).attr('rel');

        Catalog.ajaxLoadPage(gotoPage);

      });

      $j('input.jump_page_button').click(function (e) {
        e.preventDefault();

        Catalog.jumpPage();

      });

      $j('form').submit(function (e) {
        e.preventDefault();

        Catalog.jumpPage();

      });

      $j('div.control.prev, div.control.next')
			.mouseenter(function () {

			  if ($j(this).hasClass('prev')) {

			    showThumb('prev');

			  } else if ($j(this).hasClass('next')) {

			    showThumb('next');

			  }

			})
			.mouseleave(function () {

			  if ($j(this).hasClass('prev')) {

			    hideThumb('prev');

			  } else if ($j(this).hasClass('next')) {

			    hideThumb('next');

			  }

			});

      function showThumb(dir) {

        $j('div.browser_container div.thumb_page.' + dir).fadeIn(100);

      }

      function hideThumb(dir) {

        $j('div.browser_container div.thumb_page.' + dir).fadeOut(100);

      }

    },

    jumpPage: function () {

      var gotoPage = Catalog.param.productType == "catalog" ? $j('input#catalogJumpPage').val() : $j('input#notInCatalogJumpPage').val();

      if (parseInt(gotoPage) !== "" && parseInt(gotoPage) > 0 && gotoPage < (parseInt(Catalog.param.totalPage) + 1)) {

        Catalog.ajaxLoadPage(gotoPage);

      } else {

        $j('input.jump_page').val("01");

        alert("This page could not be found. Please try another page.");

      }

    },

    jumpCategory: function () {

      $j('select.category_list').change(function () {

        var gotoPage = $j(this).val()

        Catalog.ajaxLoadPage(gotoPage);
      })
    }

  }

  //-------------------------------------------------------//
  // Page Initialize                                       //
  //-------------------------------------------------------//

  Catalog.init();

});
