// グローバル変数
var lang = "";
var largePath = "";
var smallPath = "";
var largeImageIndex = 0;
var pictureNum = 0;
var text;
var pageThumbnailLimit = 50;


/* 設定ファイルの読み込み
---------------------------------------------------------------------*/
var conf = new Config();

switch (location.search)
	{
	case "?l=na": conf.url = "conf/en-us/config.xml"; break;
	case "?l=eu": conf.url = "conf/en-gb/config.xml"; break;
	case "?l=fr": conf.url = "conf/fr-fr/config.xml"; break;
	case "?l=de": conf.url = "conf/de-de/config.xml"; break;
	default:      conf.url = "conf/ja-jp/config.xml";
}


var confIterator = new ObjectIterator();

conf.onComplete = function(eventObj)
	{
	// グローバル変数の設定
	lang = eventObj.config.language;
	largePath = eventObj.config.defines.largePath;
	smallPath = eventObj.config.defines.smallPath;

	confIterator.setObject(eventObj.config.resource.image);
	loadTextFiles(eventObj.config.resource.text);
}


/* テキストファイル読み込み
---------------------------------------------------------------------*/
var textList = new XMLParser();

textList.onComplete = function(eventObj)
	{
	text = eventObj.text;
	loadXMLFiles();
}


function loadTextFiles(src)
	{
	textList.url = src;
	textList.parameters = (new Date()).getTime();
	textList.load();
}


function getText(indexName)
	{
	return text[indexName][lang];
}


/* XMLファイルの読み込み
---------------------------------------------------------------------*/
var xmlRead = new XMLParser();

xmlRead.onComplete = function(xmlObj)
	{
	setPictureData(xmlObj);

	if (confIterator.hasNext())
		{
		loadXMLFiles();
	} else
		{
		setPictureDataComplete();
	}
}


function loadXMLFiles()
	{
	xmlRead.url = confIterator.next();
	xmlRead.parameters = (new Date()).getTime();
	xmlRead.load();
}


/* 読み込んだXMLデータを管理する
---------------------------------------------------------------------*/
var picCtrl = new PictureCtrl();


function setPictureData(xmlObj)
	{
	picCtrl.pushXMLObject(xmlObj.pics.item);
}


function setPictureDataComplete()
	{
	picCtrl.init();
	createPictureAreaElement();
}


/* 画面を作る
---------------------------------------------------------------------*/
function createPictureAreaElement()
	{
	setPictureNum();
	createPagerIndexElement();
}


/* ページャインデックスエレメントを作る
---------------------------------------------------------------------*/
function createPagerIndexElement()
	{
	var pagerTop = $("pagerTop");
	var pagerBottom = $("pagerBottom");

	var current = 0;
	while (picCtrl.hasNext())
		{
		var a       = document.createElement("a");
		a.id        = "pagerTopIndex" + current;
		a.href      = "javascript:changeList("+current+")";
		a.innerHTML = current + 1;
		pagerTop.appendChild(a);
		
		if (current < picCtrl.getLength()-1)
			pagerTop.innerHTML += "&nbsp;|&nbsp;";
		
		a           = document.createElement("a");
		a.id        = "pagerBottomIndex" + current;
		a.href      = "javascript:changeList("+current+")";
		a.innerHTML = current + 1;
		pagerBottom.appendChild(a);
		
		if (current < picCtrl.getLength()-1)
			pagerBottom.innerHTML += "&nbsp;|&nbsp;";
		
		current += 1;
		picCtrl.next();
	}
	reInit();
	
	// ページャー総枚数
	/*$("picture_num").innerHTML = $("picture_num2").innerHTML = 
		lang == "ja-jp" ? "全" + pictureNum + "件" : pictureNum;*/
}


/* 画像の総枚数を取得する
---------------------------------------------------------------------*/
function setPictureNum()
	{
	while (picCtrl.hasNext())
		{
		pictureNum += picCtrl.getCurrentObject().length;
		picCtrl.next();
	}
	picCtrl.reset();
}


/* ページャのリフレッシュ スタイルを変更する
---------------------------------------------------------------------*/
function changePagerIndexStyle(indexNum)
	{
	for (var i = 0; i < picCtrl.getLength(); i++)
		{
		var tIndex = $("pagerTopIndex" + i);
		var bIndex = $("pagerBottomIndex" + i);

		tIndex.style.color = indexNum != i ? "#000" : "#E07A26";
		bIndex.style.color = indexNum != i ? "#000" : "#E07A26";
		tIndex.style.fontWeight = indexNum != i ? "normal" : "bold";
		bIndex.style.fontWeight = indexNum != i ? "normal" : "bold";
	}
}


/* ページャのリフレッシュ 矢印のトグル状態
---------------------------------------------------------------------*/
function changePagerArrowStyle(indexNum)
	{
	var tprev = $("pagerTopPrev");
	var tnext = $("pagerTopNext");
	var bprev = $("pagerBottomPrev");
	var bnext = $("pagerBottomNext");

	var listMax = picCtrl.getLength() - 1;
	
	tprev.style.visibility = indexNum == 0 ? "hidden" : "visible";
	bprev.style.visibility = indexNum == 0 ? "hidden" : "visible";
	tnext.style.visibility = indexNum == listMax ? "hidden" : "visible";
	bnext.style.visibility = indexNum == listMax ? "hidden" : "visible";
}


/* ページャアクション
---------------------------------------------------------------------*/
function changeList(listNum)
	{
	changePagerIndexStyle(listNum);
	changePagerArrowStyle(listNum);
	picCtrl.setIndex(listNum);
	createThumbnailElement(picCtrl.getCurrentObject());
	changeCurrentIndex(listNum);
}


/* 矢印キーアクション
---------------------------------------------------------------------*/
function changeNextList()
	{
	changeList(picCtrl.getCurrentIndex() + 1);
}

function changePreviousList()
	{
	changeList(picCtrl.getCurrentIndex() - 1);
}

function changeCurrentIndex(index)
	{
	var s = index;
	s = s == 0 ? 1 : s * pageThumbnailLimit + 1;
	var e = s + picIterator.getLength() - 1;
	
	// 何件中　○○-○○表示
	var indexPager = "";
	switch (lang){
		case "ja-jp":
			indexPager = "全 " + pictureNum + " 件中 " +　s + " - " + e + " 件を表示";
			break;
			
		case "en-us":
		case "en-gb":
			indexPager = "Displaying " + s + " - " + e + " of " + pictureNum + " total images";
			break;

		case "fr-fr":
			indexPager = "Images " + s + " à " + e + " sur " + pictureNum;
			break;
			
		case "de-de":
			indexPager = "Angezeigte Treffer " + s + " - " + e + " von " + pictureNum + " Treffern…";
			break;
	}
	
	$("index_pager").innerHTML = $("index_pager2").innerHTML = indexPager;
}

/* 画像を配置する
---------------------------------------------------------------------*/
var picIterator = new ObjectIterator();

function createThumbnailElement(picObject)
	{
	picIterator.setObject(picObject);
	picIterator.reset();

	var thumbnailArea = $("thumbnail");
	thumbnailArea.innerHTML = "";

	var table = document.createElement("table");
	table.border = 0;
	thumbnailArea.appendChild(table);
	
	var tbody = document.createElement("tbody");
	table.appendChild(tbody);
	
	while (picIterator.hasNext())
		{
		// 画像データを取得
		var pic = picIterator.next();
		
		var currentIndex = picIterator.getCurrentIndex();
		
		if (currentIndex % 5 == 1)
			{
			var tr = document.createElement("tr");
			tbody.appendChild(tr);
		}
		
		var td = document.createElement("td");
		tr.appendChild(td);
		
		var a = document.createElement("a");
		td.appendChild(a);
		
		with (a.style)
			{
			display = "block";
			width = "100px";
			height = "100px";
			backgroundImage = "url("+ smallPath + pic.picture +")";
		}
		a.href = "javascript:showPicture("+ (currentIndex - 1) +")";
	}

	// 1ページのサムネイル数は5に満たない時
	if (picIterator.getLength() < 5)
		{
		for (var i = 0; i < (5 - picIterator.getLength()); i++)
			{
			td = document.createElement("td");
			td.innerHTML = "&nbsp;";
			td.width = "20%";
			tr.appendChild(td);
		}
	}
}


/* ライトボックスの呼び出し
---------------------------------------------------------------------*/
function showPicture(index)
	{
	valid.activate();
	largeImageIndex = index;
}

function showPictureAcitivatedLb(index)
	{
	largeImageIndex = index;
}


/* 拡大画面の初期化 : lightbox.js processInfo内で実行
---------------------------------------------------------------------*/
function initDetail()
	{
	changePicture(largeImageIndex)
	
	// 言語別初期化
	$("title_hd").innerHTML    = getText("title");
	$("nickname_hd").innerHTML = getText("nickname");
	//$("detail_prev").innerHTML = getText("previous");
	//$("detail_next").innerHTML = getText("next");
}


/* 拡大画像を呼びだし
---------------------------------------------------------------------*/
function putLargeImage(src)
	{
	$("picarea").style.backgroundImage = "url("+ src +")";
}


function putNickname(nickname)
	{
	$("nickname").innerHTML = nickname;
}


function putCaption(caption)
	{
	$("caption").innerHTML = caption;
}


/* 次へ前へ矢印のトグル
---------------------------------------------------------------------*/
function changeDetailPagerArrowStyle(index)
	{
	$("detail_prev").style.visibility =
		index + picCtrl.getCurrentIndex() == 0 ? "hidden" : "visible";

	$("detail_next").style.visibility =
		( (picCtrl.getCurrentIndex() + 1) >= picCtrl.getLength() ) &&
		( (picIterator.getCurrentIndex() + 1) >= picIterator.getLength() ) ?
		"hidden" : "visible";
}


/* 件数の更新
---------------------------------------------------------------------*/
function changeDetailCurrentIndex(index)
	{
	//var max = picCtrl.getCurrentIndex() * pageThumbnailLimit + picIterator.getLength();
	var me  = picIterator.getCurrentIndex() + 1 + picCtrl.getCurrentIndex() * pageThumbnailLimit;

	$("detail_counter").innerHTML = me + "&nbsp;/&nbsp;" + pictureNum;
}


/* 次の画像へ前の画像へ
---------------------------------------------------------------------*/
function changePicture(index)
	{
	picIterator.setIndex(index);

	var pic = picIterator.getCurrentObject();

	putLargeImage(largePath + pic.picture);
	putNickname(pic.nickname);
	putCaption(pic.caption);
	changeDetailCurrentIndex(index);
	changeDetailPagerArrowStyle(index);
}


function changeNextPicture()
	{
	// 現在のページの表示総数を超えたら、次の一覧表へ
	if ( (picIterator.getCurrentIndex() + 1) >= picIterator.getLength() )
		{
		changeNextList();
		showPictureAcitivatedLb(0);
		initDetail();
	} else
		{
		changePicture(picIterator.getCurrentIndex() + 1);
	}
}


function changePreviousPicture()
	{
	// 現在のページの下限になったら、次の一覧表へ
	if ( (picIterator.getCurrentIndex() + 1) <= 1 )
		{
		changePreviousList();
		showPictureAcitivatedLb(picIterator.getLength() - 1);
		initDetail();
	} else
		{
		changePicture(picIterator.getCurrentIndex() - 1);
	}
}


/* 再初期化
---------------------------------------------------------------------*/
function reInit()
	{
	picCtrl.reset();
	changeList(0);
	
	// 言語別初期化
	var tprev = $("pagerTopPrev");
	var tnext = $("pagerTopNext");
	var bprev = $("pagerBottomPrev");
	var bnext = $("pagerBottomNext");
	
	tprev.innerHTML = bprev.innerHTML = getText("previous");
	tnext.innerHTML = bnext.innerHTML = getText("next");
	$("notes").innerHTML = getText("note");
	$("header").style.backgroundImage = getText("headerImage");
	document.title = getText("documentTitle");
	$("hdtxt").innerHTML = getText("lead");
}


/* 実行
---------------------------------------------------------------------*/
function main()
	{
	conf.load();
}

Event.observe(window, "load", main, false);