/* ------------------------------------------------------------------
* バナーランダム表示JavaScriptライブラリー
* 2008-09-04
* by futomi
* ---------------------------------------------------------------- */

(function () {

/* ------------------------------------------------------------------
* ■設定
* ---------------------------------------------------------------- */
var banners = [
	/* あ */
	[  1, "http://www.cocopri.jp/ts/ts57.gif", "http://www.cocopri.jp/takarasagashi/form.htm"],
	/* 惜しい！ */
	[100, "http://www.cocopri.jp/ts/ts84.gif", "http://www.cocopri.jp/mp-bk08.html"],
	/* 惜しい！ */
	[100, "http://www.cocopri.jp/ts/ts07.gif", "http://www.cocopri.jp/prince/form.cgi#bucknumber"],
	/* 通常（ハズレ） */
	[799, "http://www.cocopri.jp/ts/ts00.gif", "http://www.cocopri.jp/takara.html"]
];

/* --------------------------------------------------------------- */

addEventListener(window, "load", init);

function init() {
	var link_list = getElementsByClassName(document, "random-banner");
	for( var i=0; i<link_list.length; i++ ) {
		if(link_list[i].nodeName != "A") { continue; }
		change_banner_content(link_list[i]);
	}
}

function change_banner_content(elm) {
	var coefficient_sum = 0;
	for( var i=0; i<banners.length; i++ ) {
		coefficient_sum += banners[i][0];
	}
	var pointer = Math.floor((Math.random() * coefficient_sum)) + 1;
	var pos = 0;
	for( var i=0; i<banners.length; i++ ) {
		pos += banners[i][0];
		if(pos >= pointer) {
			var img = elm.getElementsByTagName("IMG").item(0);
			if(img) {
				img.src = banners[i][1];
			}
			elm.href = banners[i][2];
			break;
		}
	}
}

/* ------------------------------------------------------------------
* DOM methods
* ---------------------------------------------------------------- */

function addEventListener(elm, type, func, useCapture) {
	if(! elm) { return false; }
	if(! useCapture) {
		useCapture = false;
	}
	if(elm.addEventListener) {
		elm.addEventListener(type, func, false);
	} else if(elm.attachEvent) {
		elm.attachEvent('on'+type, func);
	} else {
		return false;
	}
	return true;
}

function getElementsByClassName(element, classNames) {
	if(element.getElementsByClassName) {
		return element.getElementsByClassName(classNames);
	}
	var tokens = split_a_string_on_spaces(classNames);
	var tn = tokens.length;
	var nodes = element.all ? element.all : element.getElementsByTagName("*");
	var n = nodes.length;
	var array = new Array();
	if( tn > 0 ) {
		if( document.evaluate ) {
			var contains = new Array();
			for(var i=0; i<tn; i++) {
				contains.push('contains(concat(" ",@class," "), " '+ tokens[i] + '")');
			}
			var xpathExpression = "/descendant::*[" + contains.join(" and ") + "]";
			var iterator = document.evaluate(xpathExpression, element, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
			var inum = iterator.snapshotLength;
			for( var i=0; i<inum; i++ ) {
				var elm = iterator.snapshotItem(i);
				if( elm != element ) {
					array.push(iterator.snapshotItem(i));
				}
			}
		} else {
			for(var i=0; i<n; i++) {
				var elm = nodes.item(i);
				if( elm.className == "" ) { continue; }
				var class_list = split_a_string_on_spaces(elm.className);
				var class_name = class_list.join(" ");
				var f = true;
				for(var j=0; j<tokens.length; j++) {
					var re = new RegExp('(^|\\s)' + tokens[j] + '(\\s|$)')
					if( ! re.test(class_name) ) {
						f = false;
						break;
					}
				}
				if(f == true) {
					array.push(elm);
				}
			}
		}
	}
	/* add item(index) method to the array as if it behaves such as a NodeList interface. */
	array.item = function(index) {
		if(array[index]) {
			return array[index];
		} else {
			return null;
		}
	};
	//
	return array;
};

/* split a string on spaces */
split_a_string_on_spaces = function(string) {
	string = string.replace(/^[\t\s]+/, "");
	string = string.replace(/[\t\s]+$/, "");
	var tokens = string.split(/[\t\s]+/);
	return tokens;
};

})();
