/*______________________________________

  collection.js #080709
  
  Script written by Mahiro Komura <mahirok@mizuyari.jp>
  http://mizuyari.jp/
______________________________________*/

var collection;
mizuyari.addOnLoadEvent(mizGlobal_collectionAppInit);

function mizGlobal_collectionAppInit() {
 collection = new collectionApp("collection");
}

function mizGlobal_XMLLoaded(obj) {
 collection.xmlLoaded(obj);
}

function collectionApp (self) {
 this.self = 'window.' + self;
 this.items  = null;
 this.itemsSoatByAtoZ = new Array();
 this.itemListElmtId = 'collection-list';
 this.itemSetsKana = {
  "aa" : [0x3041,0x304a],
  "ka" : [0x304b,0x3054],
  "sa" : [0x3055,0x305e],
  "ta" : [0x305f,0x3069],
  "na" : [0x306a,0x306e],
  "ha" : [0x306f,0x307d],
  "ma" : [0x307e,0x3082],
  "ya" : [0x3083,0x3088],
  "ra" : [0x3089,0x308d],
  "wa" : [0x308e,0x3093]
 }
 this.activeItemSetId = null;
 this.xmlURL = 'collection.xml';
 this.ready = false;
 this.getXML();
}

collectionApp.prototype = {
 
getXML : function(obj) {
 sendRequest(mizGlobal_XMLLoaded,'','GET',this.xmlURL,true,true);
},
 
xmlLoaded : function(obj) {
 function a$(tagName, idx, attribute) {
  if (!idx) idx = 0;
  if (!itemElmt.getElementsByTagName(tagName)[idx]) return "";
  var value = itemElmt.getElementsByTagName(tagName)[idx].getAttribute(attribute);
  return value;
 }
 this.items = obj.responseXML.getElementsByTagName("item");
 for (var i=0; i<this.items.length; i++) {
  var itemElmt = this.items[i];
  var str = a$('author_name',0,'en').toLowerCase();
  this.itemsSoatByAtoZ[i] = {
   authorName : str,
   item : itemElmt
  }
 }
 this.itemsSoatByAtoZ.sort(function(a, b) {
  return (a.authorName > b.authorName) ? 1 : -1;
 });
 this.ready = true;
 var lang = getCookie("__collection-lang") || "ja" ;
 var filterStrInit = getCookie("__collection-filterStrInit") || "aa";
 this.printItems(lang,filterStrInit);
},

modifyActiveItemSet : function(itemSetId) {
 if (this.itemSetId != null) {
  mizuyari.removeClass(miz$('set-' + this.itemSetId),'active');
 }
 this.itemSetId = itemSetId;
 mizuyari.addClass(miz$('set-' + this.itemSetId),'active');
},

printItems : function(lang, filterStrInit) {
 function e$(tagName, idx) {
  if (!idx) idx = 0;
  if (!itemElmt.getElementsByTagName(tagName)[idx]) return "";
  var content = (!mizuyari.ua.isWinIE) ?
   itemElmt.getElementsByTagName(tagName)[idx].textContent : itemElmt.getElementsByTagName(tagName)[idx].text;
  return content;
 }

 function a$(tagName, idx, attribute) {
  if (!idx) idx = 0;
  if (!itemElmt.getElementsByTagName(tagName)[idx]) return "";
  var value = itemElmt.getElementsByTagName(tagName)[idx].getAttribute(attribute);
  return value;
 }

 function katakanaToHiragana(str) {
  var newStr = "";
  for(var i=0; i<str.length; i++) {
   var n = str.charCodeAt(i);
   if((n>=0x30A1) && (n<=0x30F6)) {
    var s = String.fromCharCode(n-0x60);
   } else {
    var s = str.charAt(i);
   }
   newStr += s;
  }
  return newStr;
 }

 if (!this.ready) return;
 var itemCount = 0;
 this.clearItemElements();
 if (filterStrInit) this.modifyActiveItemSet(filterStrInit);

 setCookie("__collection-lang",lang);
 setCookie("__collection-filterStrInit",filterStrInit)

 if (lang == "ja") {

  for (i=0; i<this.items.length; i++) {
   var tItem = this.items[i];
   var itemElmt = this.items[i];
   
   var authorNameInit = a$('author_name',0,'skana').charAt(0);
   authorNameInit = katakanaToHiragana(authorNameInit);
 
   var authorNameInitEn = a$('author_name',0,'en').charAt(0);
   authorNameInitEn = authorNameInitEn.toLowerCase();
 
   var authorNameInitCode = authorNameInit.charCodeAt(0);
 
   if ((lang == null || filterStrInit == null) ||
       (lang=="ja" && authorNameInitCode>=this.itemSetsKana[filterStrInit][0] && authorNameInitCode<=this.itemSetsKana[filterStrInit][1])
      ) {
    this.createItemElement("ja", i);
    itemCount++;
   }
  }

 } else {

  for (i=0; i<this.itemsSoatByAtoZ.length; i++) {
   var tItem = this.itemsSoatByAtoZ[i].item;
   var itemElmt = this.itemsSoatByAtoZ[i].item;
   
   var authorNameInit = a$('author_name',0,'skana').charAt(0);
   authorNameInit = katakanaToHiragana(authorNameInit);
 
   var authorNameInitEn = this.itemsSoatByAtoZ[i].authorName.charAt(0);
   authorNameInitEn = authorNameInitEn.toLowerCase();
 
   var authorNameInitCode = authorNameInit.charCodeAt(0);
 
   if ((lang == null || filterStrInit == null) ||
       (lang=="en" && authorNameInitEn==filterStrInit)
      ) {
    this.createItemElement("en", i);
    itemCount++;
   }
  }
 }

},

clearItemElements : function() {
 miz$(this.itemListElmtId).innerHTML = "";
},

createItemElement : function(lang, itemId) {
 function e$(tagName, idx) {
  if (!idx) idx = 0;
  if (!itemElmt.getElementsByTagName(tagName)[idx]) return "";
  var content = (!mizuyari.ua.isWinIE) ?
   itemElmt.getElementsByTagName(tagName)[idx].textContent : itemElmt.getElementsByTagName(tagName)[idx].text;
  return content;
 }

 function a$(tagName, idx, attribute) {
  if (!idx) idx = 0;
  if (!itemElmt.getElementsByTagName(tagName)[idx]) return "";
  var value = itemElmt.getElementsByTagName(tagName)[idx].getAttribute(attribute);
  return value;
 }

 var itemElmt = (lang=="ja") ? this.items[itemId] : this.itemsSoatByAtoZ[itemId].item;
 
 var newitemElement = document.createElement('div');
 newitemElement.setAttribute("id","item-" + itemId);
 newitemElement.setAttribute("class","item");
 newitemElement.setAttribute("className","item");

 // イメージブロック
 var newitemPics = document.createElement('div');
 newitemPics.setAttribute("class","pics");
 newitemPics.setAttribute("className","pics");
 var pic = e$('image');
 if (pic == "") pic = '/collection/images/thumb-noimage.jpg';
 newitemPics.innerHTML = '<a href="'+ e$('link') +'">'+'<img src="' + pic + '" alt="【写真：' + e$('prod_title').replace(/\x0D\x0A|\x0D|\x0A/g,"") +'】" />'+'</a>';

 // テキストブロック
 var newitemBodytext = document.createElement('div');
 newitemBodytext.setAttribute("class","bodytext");
 newitemBodytext.setAttribute("className","bodytext");

 // タイトル
 var newitemTitle = document.createElement('h4');
 var authorDates = (!e$('author_dates')) ? '' : ' [' + e$('author_dates') + ']';

 var prodTitleJa = (!e$('prod_title')) ? '' : e$('prod_title');
 var prodTitleEn = (!a$('prod_title',0,'en')) ? '' : a$('prod_title',0,'en');

 var authorRubyJa = (!a$('author_name',0,'kana')) ? '' : ' (' + a$('author_name',0,'kana') + ')';
 var authorRubyEn = (!a$('author_name',0,'en')) ? '' : a$('author_name',0,'en');
 var titleHTML = e$('author_name') + authorRubyJa + authorDates +'<br />' + prodTitleJa;
 newitemTitle.innerHTML = '<a href="'+ e$('link') +'">'+titleHTML+'</a>';

 // 仕様
 var newitemSpec = document.createElement('p');
 newitemSpec.setAttribute("class","spec");
 newitemSpec.setAttribute("className","spec");
 newitemSpec.innerHTML = authorRubyEn + authorDates + '<br />' + prodTitleEn;

 // 説明文
 var newitemDescription = document.createElement('p');
 newitemDescription.setAttribute("class","description");
 newitemDescription.setAttribute("className","description");
 newitemDescription.innerHTML = "";

 newitemBodytext.appendChild(newitemTitle);
 newitemBodytext.appendChild(newitemSpec);
 newitemBodytext.appendChild(newitemDescription);

 newitemElement.appendChild(newitemPics);
 newitemElement.appendChild(newitemBodytext);

 miz$(this.itemListElmtId).appendChild(newitemElement);

}

}

function getCookie(name) {
 if (!name || !document.cookie) return;
 var cookies = document.cookie.split("; ");
 for (var i=0; i<cookies.length; i++) {
  var str = cookies[i].split("=");
  if (str[0] != name) continue;
  return unescape(str[1]);
 }
 return;
}
function setCookie(name, value, domain, path, expires, secure) {
 if (!name) return;
 var str = name + "=" + escape(value);
 if (domain) {
  if (domain == 1) domain = location.hostname.replace(/^[^\.]*/, "");
  str += "; domain=" + domain;
 }
 if (path) {
  if (path == 1) path = location.pathname;
  str += "; path=" + path;
 }
 if (expires) {
  var nowtime = new Date().getTime();
  expires = new Date(nowtime + (60 * 60 * 24 * 1000 * expires));
  expires = expires.toGMTString();
  str += "; expires=" + expires;
 }
 if (secure && location.protocol == "https:") {
  str += "; secure";
 }
 document.cookie = str;
}
// ref.: http://www9.plala.or.jp/oyoyon/html/script/cookie.html