/** This JS file needs MochiKit.  */
// var BaseURL = "http://localhost:8000/";
// var BaseURL = "http://174.129.204.26/";
 var BaseURL = "http://japan-in-motion.com/";
var TimerId = null;
var Interval = 800;

function mkGarally() {
    MochiKit.Visual.roundElement('garally-top', {corners: "top"});
    MochiKit.Visual.roundElement('garally-bottom', {corners: "bottom"});
}
/* MochiKit.DOM.addLoadEvent(mkGarally); */

function roundDiv(div_id) {
    MochiKit.Visual.roundElement(div_id);
}

/** imgElem要素を非同期通信で取得した画像で置き換える。
*/
function getThumbImg(imgElem, evt) {
    // 非同期通信で取得した画像とimgタグを入れかえる
    var imgObj = IMG({name:"tImg"});
    imgObj.src = evt.responseText;
    // 画像を入れ替える
    MochiKit.DOM.swapDOM(imgElem, imgObj);
}

function changeThumbImage(imgElem) {
    // 現在の画像IDを取得し、次の画像をセットする
    var curimg = imgElem.src;
    if ( isNull(curimg) )	return;
    if ( curimg.indexOf("btn_play.gif", 0) != -1 )	// play画像自体はコマ再生しない
	return;
    if ( curimg.indexOf("thumb-", 0) == -1 )	// photoの場合は、コマ再生しない
	return;
    var tmpary = curimg.split('_');
    var imgid = curimg.split('thumb-')[1];
    if ( isNull(imgid) )	return;		// photoの場合は、コマ再生しない
    imgid = imgid.split('_')[0];
    var curid = parseInt(tmpary[1].split('.')[0]);
    var nextid = curid + 1
    var nextImg_fn = "";
    var nextImg = null;
    var num_of_thumbs_per_image = 10

    if ( nextid >= num_of_thumbs_per_image )	nextid = 1;
    nextImg_fn = "thumb-" + imgid + '_' + String(nextid) + ".jpg";
    // 画像の取得
    imgElem.src = BaseURL + "res/jim/thumbs/" + nextImg_fn;
}

function startThumbAnime(evtObj) {
    // サムネールアニメーションを開始する
    var newH = MochiKit.Base.partial(changeThumbImage, evtObj.target());
    TimerId = setInterval(newH, Interval);
}

function stopThumbAnime(evtObj) {
    // サムネールアニメーションを停止する
    if ( !isNull(TimerId) )
	clearInterval(TimerId);
}

function setOnMouseEvent(spanElem) {
    // rollover時にサムネールのアニメーションを行う関数を登録
    MochiKit.Signal.connect(spanElem, "onmouseover", startThumbAnime);
    MochiKit.Signal.connect(spanElem, "onmouseout", stopThumbAnime);
}

function setAnimationEvent() {
    var elems = MochiKit.DOM.getElementsByTagAndClassName("div", "thumb_img");
    MochiKit.Base.map(setOnMouseEvent, elems);
}

// connect(window, "onload", setAnimationEvent);


/** for comment functions */
function update_chars_left(obj, evt) {
    var max_len = 140;
    var chars_left_span = MochiKit.DOM.getElement("chars_left");
    var textarea = obj;
    var tweet_len = textarea.value.length;
	 
    if (tweet_len >= max_len) {
        textarea.value = textarea.value.substring(0, max_len); // truncate
	chars_left_span.innerHTML = "0";
    } else {
	chars_left_span.innerHTML = String(max_len - tweet_len);
    }
}

/** JSON形式で返ってきた映画の評価点をmovitem.htmlに反映させる関数。
 */
function voteSuccess(movid, evt) {
    var jsonData = evt.responseText.split('<')[0].replace('\n\n\n\n', '');
    var jsonReq = MochiKit.Base.evalJSON(jsonData);
    var new_score = jsonReq.score.score;
    var num_votes = jsonReq.score.num_votes;
    var mov_score_div = MochiKit.DOM.getElement("ratings_" + movid);

    mov_score_div.innerHTML = new_score + "/" + num_votes;
}

function voteError(evt) {
    alert("vote error", "dbg");
}

function onPlayBtnEvt(imgElem, evtObj) {
    MochiKit.Visual.fade(imgElem, {to:'1.0'});
}

var Start_Alpha = '0.8';
function outPlayBtnEvt(imgElem, evtObj) {
    MochiKit.Visual.fade(imgElem, {to:Start_Alpha});
}

function alpha(imgElem, alpha_val) {
    Start_Alpha = String(alpha_val);
    MochiKit.Visual.fade(imgElem, {to: String(alpha_val)});
    MochiKit.Signal.connect(imgElem, "onmouseover", MochiKit.Base.partial(onPlayBtnEvt, imgElem));
    MochiKit.Signal.connect(imgElem, "onmouseout", MochiKit.Base.partial(outPlayBtnEvt, imgElem));
}

/** 動画ページ（=pageid）ごとに投票を行える関数。
 */
function moVote(direction, pageid) {
    var updown_control = MochiKit.DOM.getElement("mov-vote");
    var updown_label = MochiKit.DOM.getElement("updown-label");
    var uparrow = MochiKit.DOM.getElement("up-arrow");
    var downarrow = MochiKit.DOM.getElement("down-arrow");
    var d = null;
    var postobj = null;
    var newH = null;

    MochiKit.Visual.fade(updown_control, {to: '0.6'});
    updown_label.innerHTML = "Thanks!";
    uparrow.innerHTML = '<img src="/res/jim/btn_uparrow.png"/>';
    downarrow.innerHTML = '<img src="/res/jim/btn_downarrow.png"/>';
    // 非同期でサーバに投票結果をアップロードする。
    d = MochiKit.Async.doXHR("/jim/" + pageid + "/" + direction + "vote/",
	      {method: "POST",
	       sendContent: postobj});
    newH = MochiKit.Base.partial(voteSuccess, pageid);
    d.addCallback(newH);
}

/** JSON形式で返ってきた映画の評価点をmovitem.htmlに反映させる関数。
 */
function spamVoteSuccess(cmt_id, evt) {
    var jsonData = evt.responseText.split('<')[0].replace('\n\n\n\n', '');
    var jsonReq = MochiKit.Base.evalJSON(jsonData);
    // var new_score = jsonReq.score.score;
    // var num_votes = jsonReq.score.num_votes;
    // mov_score_div.innerHTML = new_score + "/" + num_votes;
}

/** コメント（=comment_id）ごとに投票を行える関数
 */
function spamVote(direction, comment_id) {
    var spam_div = MochiKit.DOM.getElement("cmt_" + comment_id);
    var d = null;
    var postobj = null;
    var newH = null;

    MochiKit.Visual.fade(spam_div, {to: '0.2'});
    spam_div.innerHTML = '<img src="/res/jim/btn_spam.png"/>';
    // 非同期でサーバに投票結果をアップロードする。
    d = MochiKit.Async.doXHR("/jim/cmt/" + comment_id + "/" + direction + "vote/",
	      {method: "POST",
	       sendContent: postobj});
    newH = MochiKit.Base.partial(spamVoteSuccess, comment_id);
    d.addCallback(newH);
}

/** movitem.htmlのスタートポイント
 */
function comment_initFunc(evt) {
    var new_tweet_input = MochiKit.DOM.getElement("new_tweet");
    var tweet_alert = MochiKit.DOM.getElement("tweet-login-alert");
    if ( !isNull(new_tweet_input) ) {
	var newH = MochiKit.Base.partial(update_chars_left, new_tweet_input);
	MochiKit.Signal.connect(new_tweet_input, "onkeyup", newH);
	update_chars_left(new_tweet_input, null);
    }
    if ( !isNull(tweet_alert) )
	MochiKit.Visual.roundElement('tweet-login-alert', {corners: "tr bl"});
    // MochiKit.Visual.roundClass('p', 'anchor-area', {corners: "tr bl"});
}


/** LaflaJapanMap.swfの県をクリックしたときに発生するリクエストに
 *  応答するハンドラ。
 */
function show_mapresult(evt) {
    var divelem = MochiKit.DOM.getElement("leftmain");
    divelem.innerHTML = evt.responseText;
    setAnimationEvent();
}


/** LaflaJapanMap.swfからコールされる関数群 */

function click_pref(pref) {
    // alert("pref: " + pref);
    var d = MochiKit.Async.doXHR("/jim/map/" + pref + "/"
				 , {method: "GET"});
    d.addCallback(show_mapresult);    
}

/** /map/のonload時にコールされる関数。
 *  /jim/mapinfo/から送信されるJSON情報をグローバル変数MapInfoに格納する。
 */
var MapInfo = null;		/* /jim/mapinfoから送信されるJSON */
function get_mapinfo_evt(evt) {
    MapInfo = MochiKit.Base.evalJSON(evt.responseText);
}

function get_mapinfo() {
    var d = MochiKit.Async.doXHR("/jim/mapinfo/"
				 , {method: "GET"});
    d.addCallback(get_mapinfo_evt);
}

/** map_serach.htmlからコールされる。
 */
function mapMain() {
    get_mapinfo();
    setAnimationEvent();
}

/** map上をマウスオーバーしたときに発行される関数
 */
function m_over_area(area_name) {
    var area = MochiKit.DOM.getElement("map-area");
    var pref = MochiKit.DOM.getElement("map-pref");
    var desc = MochiKit.DOM.getElement("map-desc");
    area.innerHTML = area_name;
    pref.innerHTML = desc.innerHTML = "";
}

function m_over_pref(pref_name) {
    var num_of_displays = 10;			// 何個の観光資源名を表示するかを設定する。
    var area = MochiKit.DOM.getElement("map-area");
    var pref = MochiKit.DOM.getElement("map-pref");
    var desc = MochiKit.DOM.getElement("map-desc");
    var dbg = MapInfo;
    if ( (area == null) || (area == "&nbsp;") )		return;

    pref.innerHTML = pref_name;
    desc.innerHTML = "";
    var area_name = area.innerHTML;
    var sight = null;
    var sight_name = "";
    if ( area_name in MapInfo ) {
	if ( pref_name in MapInfo[area_name] ) {
	    var sights = MapInfo[area_name][pref_name];
	    for ( var i = 0; i < sights.length; i++ ) {
		for ( sight_name in sights[i] ) {};
		desc.innerHTML += '<div class="map-sight">'
		    + ' <font color="#888888">('
		    + sights[i][sight_name]
		    + ') </font>'
		    + sight_name
		    + '</div>';
		if ( --num_of_displays == 0 )	break;
	    }
	} else {
	    desc.innerHTML = "No results."
	}
    } else {
	desc.innerHTML = "No results."
    }
}

