/********************************************************************
 C&R研究所刊 「マッシュアップかんたんAtoZ」 サンプルコード
.....................................................................
 CAPTER 4-2 - アンケート メイン
.....................................................................
 (C) 2007 M.HONDA
********************************************************************/

var proxy = "../proxy/proxy.php";	// proxy.phpの相対アドレスを設定する

var key = "";
var numofQ = 8;
var graphSrc = "お待ち下さい";
var sChoice = [ "飼ってません", "犬", "猫", "鳥",
    "魚", "は虫類", "その他", "むしろ飼われてます" ];
var sQuestion = "Ｑ：あなたはいま、ペットを飼っていますか？";

//-------------------------------------------------------------------
// DB初期化

function initDB() {
    var i; 
    var url = "../proxy/db.php?CMD=RESET";
    requestRest("GET", url, true, function(res){
        for (i = 0;i < 8;i++) {
            var url = "../proxy/db.php?CMD=SET&counter=0";
            requestRest("GET", url, true, function(res){});
        }
    });
}

//-------------------------------------------------------------------
// イベントハンドラ

window.onload = function() {
    var i;
    var sOut = "";
    for (i = 0; i < numofQ; i++) {
        sOut += "<input type=\"radio\" name=\"choice\">" + sChoice[i] + "<br />"
    }
    document.getElementById("choices2").innerHTML = sOut;
    document.getElementById("question").innerHTML = sQuestion;

    // 送信ボタンのクリックイベント
    document.getElementById("vote_btn").onclick = function() {
        var setNum = chkVote();
        if (setNum != -1) {
            document.getElementById("trs").innerHTML =
                "<div id=\"mess\">投票処理中…</div>";
            incSelect(setNum);
        }
    }

    // グラフ表示ボタンのクリックイベント
    document.getElementById("view_btn").onclick = function() {
        drawGraph();
    }

    // Capchaを表示する
    var apiUrl = "http://www.trynt.com/captcha-api/v1/?code=auto&fo=2&bg=c0c0f0&b=c0c0f0";
    var url = proxy + "?METHOD=GET&URL=" + encodeURIComponent(apiUrl);
    requestRest("GET", url, true, function(res){
        dspCapcha(res.responseXML);
    });
}

//-------------------------------------------------------------------
// 投票項目チェック

function chkVote() {
    if (document.getElementById("key").value == key) {
        var i;
        for (i = 0; i < numofQ; i++){
            if (document.getElementsByName("choice")[i].checked == true){
                return i;
                }
        }
    } else {
        alert("入力内容に誤りがあります");
    }
    return -1;
}

//-------------------------------------------------------------------
// 投票項目カウントアップ

function incSelect(setNum) {
    var url = "../proxy/db.php?CMD=LOCK";
    requestRest("GET", url, true, function(res){
        if (res.responseText == "") {
            var urlGet = "../proxy/db.php?CMD=GET";
            requestRest("GET", urlGet, true, function(res) {
                eval("var oaDBData =" + res.responseText);
                oaDBData[setNum]["counter"]++;
                var id = setNum + 1;
                var queri = encodeURIComponent("id=" + id);
                var urlSet = "../proxy/db.php?CMD=REWRITE&id=" + id + "&counter=" + oaDBData[setNum]["counter"] + "&_queri=" + queri;
                requestRest("GET", urlSet, true, function(res) {
                    document.getElementById("trs").innerHTML = "<div id=\"mess\">投票完了しました</div>";
                    var url = "../proxy/db.php?CMD=UNLOCK";
                    requestRest("GET", url, true, function(res){});
                    drawGraph();
                });
            });
        } else {
            document.getElementById("trs").innerHTML = "<div id=\"mess\">システム異常発生。<br />操作し直してください。</div>";
        
        }
    });
}

function drawGraph() {
    var urlGet = "../proxy/db.php?CMD=GET";
    requestRest("GET", urlGet, true, function(res){
        eval("var oaDBData =" + res.responseText);
        drawGraphSub(oaDBData);
    });
}

function drawGraphSub(oaDBData) {
    var sOut = "";
    for(i in oaDBData) {
        sOut += "&value" + i + "=" + oaDBData[i]["counter"];
        sOut += "&text" + i + "=" + encodeURIComponent(sChoice[i]);
        }
    graphSrc = "<img style=\"margin-top:75px;\" src=\"http://graph.heartrails.com/api/?" + sOut + "\" />";
    document.getElementById("graph").innerHTML = graphSrc;
}

function dspCapcha(xml) {
    key = xml.getElementsByTagName("captcha_code")[0].firstChild.nodeValue;
    captcha = xml.getElementsByTagName("captcha_image")[0].firstChild.nodeValue;
    document.getElementById("capcha").innerHTML = "<img src=\"" + captcha + "\">";
}

//---------------------------------------------------------
// HTTPリクエスト発行

function requestRest(method, url, flag, func) {
    var request = myHttpRequest();
    request.open(method, url, flag);
    request.onreadystatechange = function() {
        if (request.readyState == 4) {
            func(request);
            }
        }
    request.send(null);
}

//---------------------------------------------------------
// HTTPリクエスト

function myHttpRequest()
    {
    if(window.XMLHttpRequest) { // 非IE
        return new XMLHttpRequest();
        } else if(window.ActiveXObject){    // IE
        try {
            return new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e1) {
                try {
                    return new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e2) {
                    return null;
                }
            }
        } else {
            return null;
        }
    }

//-------------------------------------------------------------------
// キャッシュ対策のユニーク文字列を作る

function getKillCacheCode(cSep) {
    var tDate = new Date();
    return cSep + tDate.getTime();
}

// EOF

