/*
 * 投票
*/

JcastJS_vote = function () {};
honbanHost = "www.j-cast.com";

//Ajaxのリクエスト先
if (location.hostname.indexOf(honbanHost) >= 0) {
    JcastJS_vote.vote_url = "http://www.j-cast.com/__transit.php";
} else {
    JcastJS_vote.vote_url = "http://www.j-cast.com/news/admin/tools/vote_action.php";
}
//FOR TEST
JcastJS_vote.vote_url = "http://www.j-cast.com/__transit.php";

JcastJS_vote.ajax_timeout = 8000;//Ajax通信時のリクエストがタイムアウトするまでの時間(ミリ秒)
JcastJS_vote.exec_type = "0";//実行種別(0:結果をみる/1:投票)
JcastJS_vote.choice_index = "";//選択した選択肢のインデックス
JcastJS_vote.Cookiekey = "jcast_vote";//クッキーの名前
JcastJS_vote.Message_Cookie = "既に投票済みです。結果を表示します。";
JcastJS_vote.error_vote_message = "投票する項目を選んでください。";
JcastJS_vote.error_message = "ただいまメンテナンス中のためご利用できません。悪しからずご了承ください。";
JcastJS_vote.sccess_message = "総投票数：";
JcastJS_vote.test_mode = "";//テストモードの場合"true"に設定
JcastJS_vote.delimiter = "+";//クッキー保存時の区切り文字
JcastJS_vote.cookiemax_cnt = 200;//クッキーの最大保存件数
JcastJS_vote.btnNo = 0;//押下したボタンのnumber

/*
window.onload = function() {
//"結果をみる"ボタンを有効にする
//document.getElementById("preview").disabled = false;
}
*/
JcastJS_vote.radioclick = function(){
//"投票"ボタンを有効にする
//document.getElementById("vote").disabled = false;
}
$(document).ready(function() {//
//document.getElementById("vote").disabled = false;
//document.getElementById("preview").disabled = false;
});


$(function(){
    $("#Questionnaire").submit(function(){
    //投票ボタンの判定
        if(JcastJS_vote.btnNo==1){
            JcastJS_vote.exec_type="1";
            //ラジオボタンの入力チェック
            if(JcastJS.NullCheckForRadio(document["Questionnaire"].elements["choice"],JcastJS_vote.error_vote_message) == true){
                //選択した選択肢のインデックス取得
                JcastJS_vote.choice_index = $("input[name=choice]:checked").val();
                if(JcastJS_vote.test_mode != "true"){
                    var Cookiedata = JcastJS_vote.CookieRead(JcastJS_vote.Cookiekey);//cookie取得
                    //Cookieのチェックを行う(keyに対応するdataが登録済みであるかどうか)
                    if(Cookiedata.indexOf(JcastJS_vote.delimiter + entryId + JcastJS_vote.delimiter) >= 0){
                        //既に登録済み(登録済みの場合は結果表示を行う)
                        JcastJS_vote.exec_type="0";//結果表示の実行に変更
                        JcastJS_vote.choice_index = "";//結果表示に変更したため初期化

                        //エラーの表示をおこなう？("連続した投票は行えません"的な)
                        alert(JcastJS_vote.Message_Cookie);
                    } else {
                        //未登録のためCookieの登録を行う
                        if(Cookiedata ==""){//先頭にdelimiter設定
                            Cookiedata = JcastJS_vote.delimiter;
                        }

                        /**********************************************
                         *200個のentryIdが登録可能な仕様とする
                         *200個を超えた場合は、古いentryIdと消す(delimiterの数はcookiemax_cnt+1)
                         *個数の根拠:(先頭delimiter(bite)+11(bite)+delimiter(bite))*200個=2401(bite) < 4096(bite)←ひとつのクッキーあたりの最大サイズ
                         **********************************************/
                        var pos = 0;//delimiterを最後に見つけた位置
                        var id_cnt = 0;//クッキーに登録済みのentry_idの数
                        for(var i=1;i<=JcastJS_vote.cookiemax_cnt;i++){
                            id_cnt = i;
                            pos = Cookiedata.indexOf(JcastJS_vote.delimiter, pos+1);
                            if(pos < 0){//なくなった
                                break;
                            }

                            if(id_cnt == JcastJS_vote.cookiemax_cnt){//max値に達している場合
                                Cookiedata = Cookiedata.substring(Cookiedata.indexOf(JcastJS_vote.delimiter,1)); //先頭のentryIdを削除
                            }
                        }
                        Cookiedata = Cookiedata + entryId + JcastJS_vote.delimiter;
                        //JcastJS_vote.CookieWrite(JcastJS_vote.Cookiekey,Cookiedata,0);//cookie登録
                        JcastJS_vote.CookieWrite(JcastJS_vote.Cookiekey,Cookiedata,365);//cookie登録
                   }
                }
            }
            else{
                return false;
            }
        }
        JcastJS_vote.execute_ajax();
        return false;
    });
});
/*押下時処理*/
JcastJS_vote.execute_ajax = function() {
    $("#status_area").empty().append("Now Loading...");

    $.ajax({
          type: "POST",
          timeout:JcastJS_vote.ajax_timeout,
          dataType: "json",
          data: {
                 "eid": entryId,
                 "choice":JcastJS_vote.choice_index,
                 "btn":JcastJS_vote.exec_type
                     },
          cache: false,
          url: JcastJS_vote.vote_url,
          success: function (rdata) {
          JcastJS_vote.drawgraph(rdata);
          return;
   },
   error: function(xml, status, e){
       JcastJS_vote.drawgraph("");
       return;
   }
  });

}

JcastJS_vote.drawgraph = function(data){
    var drawflg = 0;//グラフをひとつでも描いた場合は1にする

    var roop_array = new Array();//5回繰り返しとなる処理をroopで処理するための配列(選択肢が増えても対応楽チン)
    /* グラフ表示エリアのタグID、票数表示エリアのタグID、テーブル一行のタグID、
     * ラジオボタンのタグID、JSONのデータを取得するためのKey
     */
    roop_array =[{"graph_area":"graph_area1","graph_bg":"graph_bg1","votes_number_area":"votes_number_area1","tr":"tr1","radio_area":"radio_area1","radio_button":"radio_button1","key":"choice1","bar_color":"bar_pink"},{"graph_area":"graph_area2","graph_bg":"graph_bg2","votes_number_area":"votes_number_area2","tr":"tr2","radio_area":"radio_area2","radio_button":"radio_button2","key":"choice2","bar_color":"bar_orange"},
{"graph_area":"graph_area3","graph_bg":"graph_bg3","votes_number_area":"votes_number_area3","tr":"tr3","radio_area":"radio_area3","radio_button":"radio_button3","key":"choice3","bar_color":"bar_yellow"},
{"graph_area":"graph_area4","graph_bg":"graph_bg4","votes_number_area":"votes_number_area4","tr":"tr4","radio_area":"radio_area4","radio_button":"radio_button4","key":"choice4","bar_color":"bar_green"}, {"graph_area":"graph_area5","graph_bg":"graph_bg5","votes_number_area":"votes_number_area5","tr":"tr5","radio_area":"radio_area5","radio_button":"radio_button5","key":"choice5","bar_color":"bar_blue"}];

    //ボタン削除
    $("#vote").remove();
    $("#preview").remove();

    if(data != ""){
        //サーバから取得した票数の合計算出
        var total_votes_count = 0;
        for(var i=0;i<roop_array.length;i++){
            if(data[roop_array[i]["key"]] != ""){
                total_votes_count = total_votes_count + parseInt(data[roop_array[i]["key"]]);
            }
        }

        //グラフ描画
        for(var ii=0;ii<roop_array.length;ii++){
            if(data[roop_array[ii]["key"]] != ""){
                //フラグセット
                drawflg = 1;
                //ラジオボタン削除
                $('#'+ roop_array[ii]["radio_button"]).remove();
		
                //グラフ表示
                //別のスタイルシートでここで使用しているidにスタイルの定義がされていて、TESTに邪魔なためコメントアウト(Gifアニメーションを利用したグラフ)
                //$('#'+ roop_array[ii]["graph_area"]).empty().append('<div id="css_graph"><div class="graph_base"><div class="graph" style="width:'+ Math.floor(data[roop_array[ii]["key"]] *300/total_votes_count) +'px;"></div><p>' + Math.floor(data[roop_array[ii]["key"]] *100/total_votes_count) + '%</p></div></div>');
              //描画
                //parcentage
                var width_bar = data[roop_array[ii]["key"]] *100/total_votes_count;
              
                //背景色,背景幅設定
		//$('#'+ roop_array[ii]["graph_bg"]).css({ backgroundColor:"lightgrey", textAlign:"left"});
                //$('#'+ roop_array[ii]["graph_area"]).empty().append('<span class= "vote-text">&nbsp;' + Math.round(width_bar*10)/10 + '%</div>');
		$('#'+ roop_array[ii]["graph_area"]).empty().append("&nbsp;");
		
                //$('#'+ roop_array[ii]["graph_area"]).after('<div class= "vote-text">&nbsp;' + Math.round(width_bar*10)/10 + '%</div>');

		var myParcentage = Math.round(width_bar*10)/10;	

		if ( !total_votes_count ){
			//投票が0
			$('#'+ roop_array[ii]["graph_area"]).css({ width:"0px", display:"none"});
			$( '.vote-text' ).css( {display:"none"} );
		} else {
			switch ( myParcentage ){
			case 0:
				//非表示
				$('#'+ roop_array[ii]["graph_area"]).css({ width:"0px", display:"none"});
				break;
			default:
				$('#'+ roop_array[ii]["graph_area"]).after('<div class= "vote-text">' + Math.round(width_bar*10)/10 + '%</div>');
				$('#'+ roop_array[ii]["graph_area"]).css({ width:"0px"});
				$('#'+ roop_array[ii]["graph_area"]).addClass(roop_array[ii]["bar_color"]);
				$('#'+ roop_array[ii]["graph_area"]).animate( { width:Math.floor(width_bar*2) + "px"}, 1500 );
				break;
			}
		}
		//描画エフェクト
		

                //票数表示   //各選択肢の票数は表示しないためコメントアウト
                //   $('#'+ roop_array[ii]["votes_number_area"]).empty().append(data[roop_array[ii]["key"]]+"票");
            }
            else{//サーバから取得した値がnullの場合は行ごと削除
                $('#'+ roop_array[ii]["tr"]).remove();
            }
        }


        if(drawflg == 0){//エラー処理(グラフをひとつも描かない場合は質問も削除)
            $("#question").remove();
            JcastJS_vote.result_func("error");
        }
        else{
            JcastJS_vote.result_func("success",total_votes_count);
        }
    }
    else{
        $("#question").remove();
        for(var ii=0;ii<roop_array.length;ii++){
            //サーバから取得した値がnullの場合は行ごと削除
            $('#'+ roop_array[ii]["tr"]).remove();
        }
        //エラー処理
        JcastJS_vote.result_func("error");
    }
}
/********************************
*結果を(status_areaに)表示する
*引数：success,errorのいずれか、総投票数
*(successの場合は第二引数を総投票数として表示)
*返却値：なし
*********************************/
JcastJS_vote.result_func = function(get_result, total_cnt){//success,errorのいずれかを引数に

 if(get_result =="success"){
     //$("#status_area").remove();//status_areaを総投票数表示領域とするためコメントアウト
     $("#status_area").empty().append(JcastJS_vote.sccess_message + total_cnt + "票").css({ textAlign:"right" });

}
 else{
     $("#status_area").empty().append(JcastJS_vote.error_message);
 }
}


/********************************
*クッキーから読み込み
*引数：kword=キーワード
*返却値：データ
*********************************/
JcastJS_vote.CookieRead = function(kword)
{
    if(typeof(kword) == "undefined")// キーワードなし
    return;
    kword = kword + "=";
    kdata = "";
    scookie = document.cookie + ";";// クッキー情報を読み込む
    start = scookie.indexOf(kword);// キーワードを検索
    if (start != -1){    // キーワードと一致するものあり
        end = scookie.indexOf(";", start);    // 情報の末尾位置を検索
        kdata = unescape(scookie.substring(start + kword.length, end));  // データ取り出し
    }
  return kdata;
}

/********************************
*クッキーへの書き込み
*引数：kword=書込むキーワード kdata=書込むデータ kday=保存期間(日数)
*返却値：なし
*********************************/
JcastJS_vote.CookieWrite = function(kword, kdata, kday) {
    if(!navigator.cookieEnabled){    // クッキーが利用可能かどうか
        alert("クッキーへの書き込みができません。結果を表示します。");
        return;
    }

    var cookie_tmp = kword + "=" + escape(kdata) + ";";

    if(kday > 0){
        sday = new Date();
        sday.setTime(sday.getTime() + (kday * 1000 * 60 * 60 * 24));
        s2day = sday.toGMTString();
        cookie_tmp = cookie_tmp + "expires=" + s2day + ";";
    }

    cookie_tmp = cookie_tmp + "path = /;";
    document.cookie = cookie_tmp;
}

