/**
 * @fileoverview バナーをランダムに表示
 */
var randomBanner = randomBanner || {};
(function () {

/* ***** publick function ***** */
randomBanner.init = function randomBanner_init () {
	main();
}
randomBanner.getBanners = function randomBanner_getBanners () {
	return randomBanner.data;
}
randomBanner.getBannersLength = function randomBanner_getBannersLength () {
	return randomBanner.data.length;
}
randomBanner.getCurrentBannerNum = function randomBanner_getCurrentBannerNum () {
	return current;
}
randomBanner.setCurrentBannerNum = function randomBanner_setCurrentBannerNum (num) {
	current = num;
}

/* ***** private variable ***** */
var current = 0;

/* ***** private function ***** */
function main () {
	try {
		var banners = randomBanner.getBanners();
		banners = shuffleArray(banners);
		var targets = getElms('randomBanner', 'div');
		var i = targets.length;
		while (i--) {
			var banner = pickBanner(banners);
			setBanner(targets[i], banner);
		}
	} catch (e) {
		return false;
	}
}
/**
 * バナーをHTMLに挿入する
 * @returns {void}
 * @param {Object} target 挿入先のDOM
 * @param {Object} banner 挿入するバナーのDOM
 */
function setBanner (target, banner) {
	var target = target;
	var banner = makeBanner(banner);
	target.appendChild(banner);
}
/**
 * バナーのDOMを作成して返す
 * @returns {Object} バナーのDOM
 * @param {Object} バナー作成に使う属性値を収めたオブジェクト
 */
function makeBanner (banner) {
	var anchorAttr = banner.a;
	var imgAttr = banner.img;
	var anchor = makeElm('a', anchorAttr);
	var img = makeElm('img', imgAttr);
	anchor.appendChild(img);
	return anchor;
}
/**
 * DOMを作成して返す
 * @return {Object}
 * @param {String} HTMLの要素名
 * @param {Object} 属性値を収めたオブジェクト
 */
function makeElm (elm, attr) {
	var elm = document.createElement(elm);
	var i = attr.length;
	for (var i in attr) {
		elm[i] = attr[i];
	}
	return elm;
}
/**
 * バナー作成に使う属性値を収めたオブジェクトを配列から1件選び取る
 * @returns {Object} 選び、抜き出されたバナーの属性値を収めたオブジェクト
 * @param {Array} バナー作成に使う属性値を収めたオブジェクト群の配列
 */
function pickBanner (banners) {
	var amount = randomBanner.getBannersLength();
	var current = randomBanner.getCurrentBannerNum();
	var banner = banners[current];
	if (current + 1 === amount) {
		current = 0;
	} else {
		current++;
	}
	randomBanner.setCurrentBannerNum(current);
	return banner;
}
/**
 * 
 */

/**
 * バナーの配列をランダムソートする
 * @returns {Array}
 */
function shuffleBanners() {
	shuffleArray(randomBanner.data);
}
/**
 * 配列をランダムソートする
 * @returns {Array}
 * @param {Array} array ランダムソートしたい配列
 */
function shuffleArray(array) {
	var i = array.length;
	while (--i) {
		var j = Math.floor(Math.random() * (i + 1));
		if (i == j) continue;
			var k = array[i];
		array[i] = array[j];
		array[j] = k;
	}
	return array;
}
/**
 * class値により要素を取得する
 * @returns {Object}
 * @param {String} className
 * @param {String} tagName
 */
function getElms (className, tagName) {
	try {
		var results = [];
		var tagName = tagName.toUpperCase() || '*';
		var className = className;
		var elms = document.getElementsByTagName(tagName);
		var i = elms.length;
		while (i--) {
			if (elms[i].className === className) {
				results.push(elms[i]);
			}
		}
		return results;
	} catch (e) {
		return false;
	}
}

})();
