/*
 * js.js - SHIN-ASAHI ELECTRIC IND CO.,LTD
 *
 * Modification:  2008-12-19
 * Copyright (C)ainsoph All rights reserved.
 * ver 0.02
 */


/*@cc_on _d=document;eval('var document=_d')@*/

var cache = [];
var list = [];
var page = 0;
var max = 20;
var xml;
var state = 0;

Array.prototype.random = function () {
  this.sort( function (a,b) {
    var i = Math.ceil(Math.random()*100)%2;
    return (i == 0) ? -1 : 1;
  });
}

jQuery.easing.easeOutCubic = function(x, t, b, c, d) {
  return c*((t=t/d-1)*t*t + 1) + b;
};


/*
 有効な最終要素のインデックスを取得
*/
function getLastThumbIndex(cache) {
  for(var i=0; i<cache.length; i++)
    if (! cache[i].visible) return i;
  return cache.length;
}

/*
 サムネイル表示
*/
function showThumbs(cache, list, func) {
  var current = 0;
  $("div#photos ul li img").css("opacity", "0");
  $("div#pager").css("opacity", "0");
  $("div#pager").addClass("active").animate({height: "hide"}, 1000, 'easeOutCubic');
  //list.random();

  var lastIndex = getLastThumbIndex(cache);
  var tid = setInterval(timer, 100);
  function timer(){
    if (current == max) clearTimeout(tid);
    if (current < cache.length) { 
      if(cache[list[current]].visible) cache[list[current]].obj.addClass("active").animate({opacity: 1}, 1500, 'easeOutCubic', function(){ state++; if (state == lastIndex) { state = max; if (func) func(); } });
      current++;
    }
  }
}


/*
 サムネイル非表示
*/
function hideThumbs(cache, list, func) {
  var current = 0;
  list.sort(function(a, b) {return a - b;});

  var tid = setInterval(timer, 50);
  function timer(){
    if (current == max) clearTimeout(tid);
    if (current < cache.length) { 
      cache[list[current]].obj.animate({opacity: 0}, 500, 'easeOutCubic', function(){ state--; $(this).removeClass("active"); if (state == 0 && func) { func(); } });
      current++;
    }
  }
}

/*
  表示領域（リスト要素のオブジェクト）の配列化
*/
function createCache(cache, list) {
  function thumbs(obj, i){
    this.obj = obj;
    this.visible = false;
    return this;
  };
  // 要素生成
  $("div#photos").prepend('<ul></ul>');
  for (var i =0; i<max; i++) {
    $("div#photos ul").append('<li><a rel="shadowbox;options={handleOversize:\'none\'}" href="#" title=""><img src="" /></a></li>');
  }
  $("div#photos ul li a img").each(function(i) {
    cache[i] = new thumbs($(this), i);
    list[list.length] = i;
  });
}


/*
 ページャーの生成
*/
function showPager(_xml) {
  var navString = [];
  var pageCount = ($(_xml).find("item").length / max) | 0;
  if (($(_xml).find("item").length % max) != 0) pageCount++;
  if (page > 0) navString[navString.length] = '<a href="#' + (parseInt(page)-1) + '">&lt;&lt; PREV</a>';
  for (var i=0; i<pageCount; i++) {
    if (i == page) navString[navString.length] = '<strong>' + i + '</strong>';
    else navString[navString.length] = '<a href="#' + i + '">' + i + '</a>';
  }
  if (page < pageCount-1) navString[navString.length] = '<a href="#' + (parseInt(page)+1) + '">NEXT &gt;&gt;</a>';
  $("div#pager").html(navString.join("｜"));
  $("div#pager").addClass("active").animate({height: "show", opacity: 1}, 1000, 'easeOutCubic');

  $("div#pager a").click(function(){
    var i = $(this).attr("href").split("#");
    i = i[i.length-1];
    updatePage(i);
    $("div#pager").animate({height: "hide", opacity: 0}, 1000, 'easeOutCubic');
    return false;
  });

}


/*
 要素のsrc属性を更新
*/
function updateImages(_xml) {
  var thumb = [];
  var photo = [];
  var title = [];
  $(_xml).find("item").each(function(i) {
    if (i >= page*max && i<page*max+max) {
      thumb[thumb.length] = $(this).children("thumb").text() || '';
      photo[photo.length] = $(this).children("photo").text() || '';
      title[title.length] = $(this).children("title").text() || '';
    }
  });
  // 画像の入れ替え
  for (var i =0; i<cache.length; i++) {
    cache[i].visible = (thumb[i]) ? true : false;
    cache[i].obj.attr("src", thumb[i]);
    cache[i].obj.parent().attr("title", title[i]);
    cache[i].obj.parent().attr("href", (cache[i].visible) ? photo[i] : "#");
  }
}

function updatePage(i) {
  hideThumbs(cache, list, function(){
    page = i;

    // 要素のsrc属性を更新
    updateImages(xml);

    // サムネイル表示
    showThumbs(cache, list, function(){
      // ページャー生成
      showPager(xml);
    });

    // ShadowBoxの初期化
    Shadowbox.init();
  });
  return false;
}

/*

*/
$(function(){

  // XMLロード
  $.ajax({
    url: 'http://www.s-asahi.co.jp/gallery/gallery.xml',
    type: 'GET',
    dataType: 'xml',
    timeout: 1000,
    error: function(){
      $("div#photos").append('<p style="width: 300px; margin: 200px auto; padding: 1em; border: 1px solid #999999; background-color: #000000; font-size: 12px; color: #EEEEEE;">データの読み込みに失敗しました。<br />しばらくしてから再読み込みして下さい。</p>');
    },
    success: function(_xml){
      xml = _xml;

      // 要素と配列の構築
      createCache(cache, list);

      // 要素のsrc属性を更新
      updateImages(xml);

      // サムネイル表示
      showThumbs(cache, list, function(){
        // ページャー生成
        showPager(xml);
      });

      // ShadowBoxの初期化
      Shadowbox.init();
    }
  });


});

