var xmlg;
var xmlmem = [];
var maxcnt = 8;
var inindex_mas = [];
var seccnt = 0;

var isAnimation = false;


$(function(){
	animate_xml();
	setInterval('next_operation()', 1000);
});

function next_operation() {
	if (seccnt == 9) {
		secCountUp();
		setTimeout('animate_xml()', 1);
		seccnt = 0;
	} else {
		secCountUp();
		seccnt = seccnt + 1;
	}
}



function animate_xml(){
	if (isAnimation) {
//alert("アニメーション中です。");
		return;
	}

    // APIインタフェース活性化 2010/06/30 LV
    var target_url = "";
    switch (window.location.protocol)
    {
    case "https:":
        target_url = document.getElementById("secure_base_url").innerHTML;
        break;
    default:
        target_url = document.getElementById("base_url").innerHTML;
        break;
    }

    if (target_url == 'undefined' || target_url == null) {
        target_url = ".";
    }

    var wl_xml = target_url + "/index.php?act=work_list&n_count=8&api=true";
	//var wl_xml = "common/xml/work_list.xml";


	$.ajax({
		type: "GET",
		url: wl_xml,
		cache: false,
		dataType: "xml",
		success: parseXml,
		error: function(XMLHttpRequest, textStatus, errorThrown){ isAnimation = false; }
	});
}




function parseXml(xml){

	isAnimation = true;
//	clearInterval(intervalId);

	var now = new Date();
	var nowMili = new Date(now).getTime();
	var inindexstart = [];
	var i;
	var target;
	var index;

	if ($(xml).find("info").attr("status") == "NG" || $(xml).find("info").attr("status") == "ng") {  // XMLのステータスがNG
		isAnimation = false;
		return false;
	}

	// データ件数が8件でない場合、処理終了
	if ($(xml).find("info").find("count").text() != maxcnt || $(xml).find("work").length != maxcnt) {
		isAnimation = false;
		return false;
	}

	if (xmlmem.length == 0) {  // XMLメモリが空（1回目のXML読み込み）
		// XML全件をHTMLに表示
		var cnt = 0;
		$(xml).find("work").each(function(index){
			if (index == maxcnt) {
				return false;
			}
			if (!(target = $("#scroll table:eq(" + index + ")"))) return false;

				var work_from_time = getWorkFrom(now, nowMili, $(this).find("match_date").text());

				var html =   "<tr>\n"
				 + "<td id=\"td_operation\"><a href=\"" + $(this).find("url").text() +  "\">" + $(this).find("operation").text() + "</a></td>\n"
				 + "<td id=\"td_prefecture\">" + $(this).find("prefecture").text() + "</td>\n"
				 + "<td id=\"td_money\">" + $(this).find("money").text() + "</td>\n"
				 + "<td id=\"td_application_count\">" + $(this).find("application_count").text() + "</td>\n"
				 + "<td id=\"td_question_count\">" + $(this).find("question_count").text() + "</td>\n"
				 + "<td id=\"td_work_from\">" + work_from_time + "</td>\n"
				 + "</tr>\n";

				target.html(html);

				target.fadeIn(1);

				inindexstart[cnt] = index;

				// XMLメモリに保存
				xmlmem[cnt] = $(this);
				cnt = cnt + 1;

		});

		var inindexlgth = inindexstart.length;
		for (i = 0; i < inindexlgth; i++) {
			inindex_mas[i] = inindexstart[i];
		}

//		intervalId = setInterval('animate_xml()', 10000);
		isAnimation = false;
	} else {
		xmlg = $(xml);

		// リストからフェードアウト
		listFadeOut();

	}

	return true;
}

// リストからフェードアウト
function listFadeOut(){

	var i;
	var j;
	var k;

	var incnt = 0;
	var delcnt = 0;
	var remcnt = 0;
	var delid = [];
	var inindex = [];
	var rem = [];
	var inid = [];
	var inidcnt = 0;
	var inid2 = [];
	var inidcnt2 = 0;
	var thisxmlmem;
	var index;
	var index2;

	var inindexmaslgth = inindex_mas.length;
	for (i = 0; i < inindexmaslgth; i++) {
		inindex[i] = inindex_mas[i];
	}

	// 更新に伴うフェードアウトデータ取得
	$(xmlg).find("work").each(function(index2, thisxml){
		i = 0;
		$(xmlmem).each(function(index, thisxmlmem){

			// 更新データの判定
			// 更新データのうち、給与・応募数・質問数が更新された場合は、他の更新データより上位に移動
			if ($(thisxml).find("work_id").text() == $(thisxmlmem).find("work_id").text()) {

				// 給与
				if ($(thisxml).find("money").text() != $(thisxmlmem).find("money").text()) {
					delid[delcnt] = $(thisxmlmem).find("work_id").text();
					delcnt = delcnt + 1;
					inid[inidcnt] = $(thisxml).find("work_id").text();
					inidcnt = inidcnt + 1;
					return false;
				}
				// 応募数
				if ($(thisxml).find("application_count").text() != $(thisxmlmem).find("application_count").text()) {
					delid[delcnt] = $(thisxmlmem).find("work_id").text();
					delcnt = delcnt + 1;
					inid[inidcnt] = $(thisxml).find("work_id").text();
					inidcnt = inidcnt + 1;
					return false;
				}
				// 質問数
				if ($(thisxml).find("question_count").text() != $(thisxmlmem).find("question_count").text()) {
					delid[delcnt] = $(thisxmlmem).find("work_id").text();
					delcnt = delcnt + 1;
					inid[inidcnt] = $(thisxml).find("work_id").text();
					inidcnt = inidcnt + 1;
					return false;
				}



				// 職種
				if ($(thisxml).find("operation").text() != $(thisxmlmem).find("operation").text()) {
					delid[delcnt] = $(thisxmlmem).find("work_id").text();
					delcnt = delcnt + 1;
					inid2[inidcnt2] = $(thisxml).find("work_id").text();
					inidcnt2 = inidcnt2 + 1;
					return false;
				}
				// 地域
				if ($(thisxml).find("prefecture").text() != $(thisxmlmem).find("prefecture").text()) {
					delid[delcnt] = $(thisxmlmem).find("work_id").text();
					delcnt = delcnt + 1;
					inid2[inidcnt2] = $(thisxml).find("work_id").text();
					inidcnt2 = inidcnt2 + 1;
					return false;
				}
				// 経過時間
				if ($(thisxml).find("match_date").text() != $(thisxmlmem).find("match_date").text()) {
					delid[delcnt] = $(thisxmlmem).find("work_id").text();
					delcnt = delcnt + 1;
					inid2[inidcnt2] = $(thisxml).find("work_id").text();
					inidcnt2 = inidcnt2 + 1;
					return false;
				}
				// URL
				if ($(thisxml).find("url").text() != $(thisxmlmem).find("url").text()) {
					delid[delcnt] = $(thisxmlmem).find("work_id").text();
					delcnt = delcnt + 1;
					inid2[inidcnt2] = $(thisxml).find("work_id").text();
					inidcnt2 = inidcnt2 + 1;
					return false;
				}
				return false;
			}
			i = i + 1;
		});

		// 新規データの判定
		// 新規データは上位に移動（給与・応募数・質問数が更新されたデータと同じ扱い）
		if (i >= maxcnt) {
			inid[inidcnt] = $(thisxml).find("work_id").text();
			inidcnt = inidcnt + 1;
		}
	});

	for (i = 0; i < inidcnt2; i++) {
		inid[inidcnt] = inid2[i];
		inidcnt = inidcnt + 1;
	}

	// データフェードアウト
	var delidlgth = delid.length;
	$(xmlmem).each(function(index, thisxmlmem){
		var target;
		if (!(target = $("#scroll table:eq(" + inindex_mas[index] + ")"))) return false;

		i = 0;
		$(xmlg).find("work").each(function(index2, thisxml){
			if ($(thisxmlmem).find("work_id").text() == $(thisxml).find("work_id").text()) {
				for(j = 0; j < delidlgth; j++) {
					if ($(thisxmlmem).find("work_id").text() == delid[j]) {
						target.fadeOut(50);
						rem[remcnt] = false;
						remcnt = remcnt + 1;
						inindex[incnt] = inindex_mas[index];
						incnt = incnt + 1;
						break;
					}

				}
				if (j >= delidlgth) {
					rem[remcnt] = true;
					remcnt = remcnt + 1;
				}
				return false;
			}
			i = i + 1;
		});
		if (i >= maxcnt) {
			target.fadeOut(50);
			rem[remcnt] = false;
			remcnt = remcnt + 1;
			inindex[incnt] = inindex_mas[index];
			incnt = incnt + 1;
		}
	});

	// リスト内スクロールダウン
	setTimeout(function(){listScrollDown(inindex, inid, rem)}, 10);

}

// リスト内スクロールダウン
function listScrollDown(inindex, inid, rem){

	var i;
	var j;

	var downcnt = 0;
	var downpix;

	var remlgth = rem.length - 1;
	for (i = remlgth; i >= 0; i--) {
		// スクロールダウン回数取得
		if (rem[i] == false) {
			downcnt = downcnt + 1;
		}

		if (rem[i] == true) {

			// スクロールダウン
			var target =  $("#scroll table:eq(" + inindex_mas[i] + ")");

			downpix = 0;
			for (j = 0; j < downcnt; j++) {
				downpix = downpix + 25;
			}
			if (downpix > 0) {
				target.animate({top: "+=" + downpix + "px"}, 50);
			}
			inindex[i + downcnt] = inindex_mas[i];

			// XMLメモリ保存
			xmlmem[i + downcnt] = xmlmem[i];
		}
	}

	var fadeintime = 10;

	// リストへフェードイン
	setTimeout(function(){listFadeIn(inindex,inid)}, fadeintime);

}


// リストへフェードイン
function listFadeIn(inindex, inid){
	var i = 0;
	var fadeincnt = 0;
	var now = new Date();
	var nowMili = new Date(now).getTime();

	var inidlgth = inid.length;
	var target;
	var html;
	var work_from_time;
	var index;

	for(j = 0; j < inidlgth; j++) {
		$(xmlg).find("work").each(function(index){
			if ($(this).find("work_id").text() == inid[j]) {
				work_from_time = getWorkFrom(now, nowMili, $(this).find("match_date").text());

				html =   "<tr>\n"
				 + "<td id=\"td_operation\"><a href=\"" + $(this).find("url").text() +  "\">" + $(this).find("operation").text() + "</a></td>\n"
				 + "<td id=\"td_prefecture\">" + $(this).find("prefecture").text() + "</td>\n"
				 + "<td id=\"td_money\">" + $(this).find("money").text() + "</td>\n"
				 + "<td id=\"td_application_count\">" + $(this).find("application_count").text() + "</td>\n"
				 + "<td id=\"td_question_count\">" + $(this).find("question_count").text() + "</td>\n"
				 + "<td id=\"td_work_from\">" + work_from_time + "</td>\n"
				 + "</tr>\n";

				target = $("#scroll table:eq(" + inindex[fadeincnt] + ")");
				target.html(html);
				target.css("top", 25 * (fadeincnt + 1));
				target.fadeIn(200);

				// XMLメモリ保存
				xmlmem[fadeincnt] = $(this);

				fadeincnt = fadeincnt + 1;
				return false;
			}
		});
	}

	var inindexlgth = inindex.length;
	for (i = 0; i < inindexlgth; i++) {
		inindex_mas[i] = inindex[i];
	}

//	intervalId = setInterval('animate_xml()', 10000);
	isAnimation = false;
}


// 経過時間カウントアップ
function secCountUp() {

	if (isAnimation) {
		return;
	} else {

		var now = new Date();
		var nowMili = new Date(now).getTime();
		var i = 0;
		var work_from_time;
		var target;
		var index;

		$(xmlmem).each(function(index){

			work_from_time = getWorkFrom(now, nowMili, $(this).find("match_date").text());

			target = $("#scroll table tr #td_work_from:eq(" + inindex_mas[i] + ")");
			target.html(work_from_time);

			// XMLメモリ保存
			xmlmem[i] = $(this);

			i = i + 1;
		});

	}

	return;
}

// システム日付と作業開始時刻の差分取得
function getWorkFrom(now, nowMili, work_from) {

	var chkY = work_from.substr(0, 4);
	var chkM = work_from.substr(5, 2);
	var chkD = work_from.substr(8, 2);
	var chkH = work_from.substr(11, 2);
	var chkI = work_from.substr(14, 2);
	var chkS = work_from.substr(17, 2);

	var chkDate = new Date(chkY, (chkM - 1), chkD, chkH, chkI, chkS);
	var chkDateMili = new Date(chkDate).getTime();

	var work_from_time;

	if (chkDate > now) {
		work_from_time = "配信前";
	} else {
		var showTimeMili = Math.floor(nowMili  / 1000) - Math.floor(chkDateMili / 1000);
		var showTimeS = showTimeMili % 60;
		if (showTimeS < 10) {
			showTimeS = "0" + showTimeS;
		}
		var showTimeI = Math.floor((showTimeMili % 3600) / 60);
		if (showTimeI < 10) {
			showTimeI = "0" + showTimeI;
		}
		var showTimeH = Math.floor(showTimeMili / 3600);
		if (showTimeH < 10) {
			showTimeH = "0" + showTimeH;
		}
		work_from_time = showTimeH + ":" + showTimeI + ":" + showTimeS;
	}

	return work_from_time;

}


