/*
 ******************************************************************************
 * File : starbox.rating.js 0.05
 * Copyright (C) 2005-2009 http://bizcaz.com/ All rights reserved.
 ******************************************************************************
 */
var SbArray  = new Array();
var SbRating = Class.create({
	base : 'http://hitspv.com/starbox.rating/js/prototype/starbox/',

	initialize: function(elem, opt) {
		this.options     = opt || {};
		this.options.tit = this.espace(this.options.tit);
		this.script      = [this.base, 'starbox.post.php'].join('');
		this.loader      = [this.base, 'css/ajax-loader.gif'].join('');

		if (this.options.rnk / 5) {
			this.rank(elem);
		}
		else {
			this.view(elem);
		}
	},
	showloader: function(elem, enable) {
		if (enable) {
			elem.innerHTML = '';
			elem.setStyle({height: '16px', background: 'transparent url('+this.loader+') no-repeat left center'});
		}
		else {
			elem.setStyle({height: 'auto', background: 'none'});
		}
	},
	espace: function(text) {
		text = text.split("&").join("&amp;" );
		text = text.split("<").join("&lt;"  );
		text = text.split(">").join("&gt;"  );
		text = text.split('"').join("&quot;");
		text = text.split("{").join("&#123;");
		text = text.split("}").join("&#125;");
		text = text.split("'").join("&#039;");
		return text;
	},
	post: function(elem, info) {
		var obj  = SbArray[elem.id];
		var sb   = obj.starbox;
		var pars = 'mode=0&bid='+obj.options.bid+'&eid='+obj.options.eid+'&avr='+sb.average+'&total='+sb.options.total+'&tit='+encodeURIComponent(obj.options.tit)+'&url='+encodeURI(obj.options.url);

		new Ajax.Request(obj.script, {
			method: 'post',
			parameters: pars,
			onComplete: function(req) {
				var result = req.responseText.split(':');

				if ('ok' == result[0]) {
					sb.options.locked = true;
				}
			}
		});

		return false;
	},
	view: function(elem) {
		var obj  = this;
		var pars = 'mode=1&bid='+obj.options.bid+'&eid='+obj.options.eid;

		obj.showloader($(elem), true);

		new Ajax.Request(obj.script, {
			method: 'post',
			parameters: pars,
			onComplete: function(req) {
				var locked = true;
				var result = req.responseText.split(':');

				obj.showloader($(elem), false);

				if (!obj.options.loc && 'ok' == result[0]) {
					locked = false;
				}

				obj.starbox = new Starbox(
					elem,					// エレメント ID
					result[1], {			// 現在のアベレージ
					color: '#FF9F2F',		// 星の前景
					background: '#cccccc',	// 星の背景
					hoverColor: '#ff8f8f',	// ホバーの色
					overlay: 'bigstar.png',	// オーバレイ画像指定
					stars: 5,				// 星の表示数
					max: 5,					// 最大アベレージ
					buttons: 5,			// stars を何分割にするか設定
											// たとえば、stars×２とすると１つ星が２分割される
					total: result[2],		// 総投票数
					identity: obj.eid,		// ID
											// インディケータ表示
					indicator: '<span style="font-size:20px;font-weight:bold;">#{average}</span> rating -- <span style="font-size:20px;font-weight:bold;">#{total}</span> votes ',
					onRate: obj.post,		// クリック時の処理
					inverse: false,			// 表示方向設定 false(左⇒右)/true(右⇒左)
					lockOnRate: true,		// 投票後ロック設定 false(なし)/true(ロック)
					locked: locked			// 投票不可設定 false(可)/true(不可)
				});
			}
		});
	},
	rank: function(elem) {
		var obj  = this;
		var pars = 'mode=2&bid='+obj.options.bid+'&eid=0&rank='+obj.options.rnk;

		obj.showloader($(elem), true);

		new Ajax.Request(obj.script, {
			method: 'post',
			parameters: pars,
			onComplete: function(req) {
				var json = eval(req.responseText);
				var out  = [];

				obj.showloader($(elem), false);
				out.push('<div id="starbox_rank"><ul>');

				if (json.length) {
					for (var i = 0;json.length > i;i++) {
						out.push(['<li><a href="', json[i].url, '" title="', json[i].title, '"><span>', json[i].average, '</span>', json[i].title, '</a></li>'].join(''));
					}
				}
				else {
					out.push('<li><em>Nothing</em></li>');
				}

				out.push('</ul></div>');
				$(elem).innerHTML = out.join('');
			}
		});
	}
});

function StarboxRating(elem, opt) {
	opt = Object.extend({
		bid: 0,
		eid: 0,
		url: '',
		loc: false,
		rnk: 0,
		tit: 'No Title'
	}, opt || {});
	SbArray[elem] = new SbRating(elem, opt);
}

