// rate_json.js

current_rate = new Array();
sleep_time = 5000; // default
time_old = '';

var pips = {
    "USDJPY" : 2,
    "EURJPY" : 2,
    "GBPJPY" : 2,
    "AUDJPY" : 2,
    "NZDJPY" : 2,
    "CADJPY" : 2
};

function cell(id,text){
	var e = $(id);
	if(e != undefined){
		e.innerHTML = text;
	}
}

function update(json){
    var data = eval('(' + json + ')');
    var date = new Date();

    date.setTime(Math.floor(data.timestamp));

    if( date.getTime() > time_old ){	
        var YYYY = date.getFullYear();
	var MM = date.getMonth() + 1;
	var DD = date.getDate();
	var hh = date.getHours();
	var mm = date.getMinutes();
	var ss = date.getSeconds();
	
        if(hh < 10) hh = "0" + hh;
	if(mm < 10) mm = "0" + mm;
	if(ss < 10) ss = "0" + ss;

//	var date_str = YYYY + '/' + MM + '/' + DD;
	var date_str = MM + '/' + DD; //要望によりYYYY削除　09/10/13
	var time_str = hh + ':' + mm + ':' + ss;

	cell("DATE",date_str);
	cell("TIME",time_str)
        cell("DATETIME",date_str + ' ' + time_str);

	for(var i = 0; i < data.rate.length; i++){
		var id = data.rate[i].currency_pair;

		var rate = data.rate[i];
		var old = current_rate[id] != undefined ? current_rate[id] : rate;

                spilt(id,rate.bid,rate.ask,old.bid,old.ask);

		// BID_HIGH
		cell(id + '_BID_HIGH',cvar(rate.bid_high,old.bid_high));

		// BID_LOW
		cell(id + '_BID_LOW',cvar(rate.bid_low,old.bid_low));

		// SPREAD
                var nn = rate.bid.split(".");
     
                var bid2 = rate.bid.replace("\.","");
                var ask2 = rate.ask.replace("\.","");

                var diff = new String(Math.abs(ask2 - bid2));

                var spead = calc(diff,nn[1].length - pips[id]);

                cell(id + '_SPREAD',spead);

		current_rate[id] = rate;
	}
   }

   time_old = date.getTime();

   if(data.delay != undefined) sleep_time = data.delay;

   if(sleep_time > 0) {setTimeout('getrate()',sleep_time)};
}

function spilt(id,bid,ask,old_bid,old_ask){
    var bid_left = bid.substring(0,bid.indexOf(".") + 1);
    var bid_big = bid.substring(bid.indexOf(".") + 1,bid.indexOf(".") + 3);
    var bid_right = bid.substring(bid.length-1,bid.length);

    var ask_left = ask.substring(0,ask.indexOf(".") + 1);
    var ask_big = ask.substring(ask.indexOf(".") + 1,ask.indexOf(".") + 3);
    var ask_right = ask.substring(ask.length-1,ask.length);

    // BID
    cell(id + '_BID_LEFT',"<font color=" + rate_cvar(bid,old_bid) + ">" + bid_left + "</font>");
    cell(id + '_BID_BIG',"<font color=" + rate_cvar(bid,old_bid) + ">" + bid_big + "</font>");
    cell(id + '_BID_RIGHT',"<font color=" + rate_cvar(bid,old_bid) + ">" + bid_right + "</font>");

    // ASK
    cell(id + '_ASK_LEFT',"<font color=" + rate_cvar(ask,old_ask) + ">" + ask_left + "</font>");
    cell(id + '_ASK_BIG',"<font color=" + rate_cvar(ask,old_ask) + ">" + ask_big + "</font>");
    cell(id + '_ASK_RIGHT',"<font color=" + rate_cvar(ask,old_ask) + ">" + ask_right + "</font>");
}

/*
* diff　          小数点なしのaskとbidの差
* digital_length　小数部分の個数
*/
function calc(diff,digital_length){
    var value = "";

    if(diff.length < digital_length){
        for(i = diff.length; i <= digital_length; i++){
            if(i != diff.length){
                value += "0"; 
            }
        }
        value = "0." + value + diff; 
    }else if(diff.length > digital_length){
          value = diff.substring(0,diff.length - digital_length) + "." + diff.substring(diff.length - digital_length,diff.length);
    }else{
        value = "0." + diff;
    }

    return value;    
}

function cvar(n,o){
	nn = parseFloat(n);

	if(o == undefined){
		if(nn > 0){
			return  '<span class="red">' + n  + '</span>';
		} else if(nn < 0){
			return  '<span class="blue">' + n  + '</span>';
		} else{
			return n;
		}
	} else{
		oo = parseFloat(o);

		if(oo < nn){
			return '<span class="red">' + n + '</span>';
		} else if(oo > nn){
			return '<span class="blue">' + n + '</span>';
		} else{
			return n;
		}
	}
}

function rate_cvar(n,o){
        nn = parseFloat(n);

        if(o == undefined){
                if(nn > 0){
                        return "#f70000";
                } else if(nn < 0){
                        return "#0466cc";
                } else{
                        return "";
                }
        } else{
                oo = parseFloat(o);

                if(oo < nn){
                        return "#f70000";
                } else if(oo > nn){
                        return "#0466cc";
                } else{
                        return "";
                }
        }
}

function getrate(){
	ajax.get("/market/rate/var/rate.json?" + new Date().getTime(),update);
}

