(function () {

addListener(window, 'load', function(){
	var ps_url = '/project.csv';
	var cs_url = '/works.csv';
	// Project Stories
	xhrReq(ps_url, showProjects);
	// Cases
	xhrReq(cs_url, showCases);
});

function xhrReq(url, cb) {
	var xhr = getXhr();
	xhr.open('GET', url, true);
	xhr.onreadystatechange = function() {
		if( xhr.readyState != 4 ) { return; }
		if( xhr.status == 200 ) {
			cb(xhr.responseText);
		} else {
			cb('');
		}
	};
	xhr.send(null);
}

function showProjects(csv) {
	var list = parseCsv(csv);
	// ページに表示
	for( var i=1; i<=4; i++ ) {
		var cols = list.shift();
		if( ! cols ) { break; }
		var img_src = cols[0];
		var link_href = cols[1];
		var copy_text = cols[2];
		var title_text = cols[3];
		var cate_text = cols[4];
		//
		var img = document.getElementById('ps-img-' + i);
		if(img) { img.src = img_src; }
		//
		var link = document.getElementById('ps-link-' + i);
		if(link) { link.href = link_href; }
		//
		var copy = document.getElementById('ps-copy-' + i);
		if(copy) { copy.innerHTML = copy_text; }
		//
		var title = document.getElementById('ps-title-' + i);
		if(title) { setTextContent(title, title_text); }
		//
		var cate = document.getElementById('ps-cate-' + i);
		if(cate) { setTextContent(cate, cate_text); }
	}
}

function showCases(csv) {
	var list = parseCsv(csv);
	//
	var fixed = {};
	var closeup_list = [];
	var unfixed_list = [];
	for( var i=0; i<list.length; i++ ) {
		var cols = list[i];
		if( ! cols ) { continue; }
		var closeup = cols[5];
		var pos = cols[6];
		var pos_num = parseInt(pos);
		if( pos.match(/^\d+$/) &&  pos_num >= 1 && pos_num <= 7 ) {
			if( fixed[pos_num] ) {
				// 捨てる
			} else {
				fixed[pos_num] = cols;
			}
		} else if( /クローズアップ/.test(closeup) ) {
			closeup_list.push(cols);
		} else {
			unfixed_list.push(cols);
		}
	}
	// ページに表示
	for( var i=1; i<=7; i++ ) {
		var cols = fixed[i];
		if( ! cols ) {
			if( i <= 3 ) {
				cols = closeup_list.shift();
			} else {
				cols = unfixed_list.shift();
			}
		}
		if( ! cols ) { continue; }
		var img_src = cols[0];
		var link_href = cols[1];
		var comp_text = cols[2];
		var title_text = cols[3];
		var cate_text = cols[4];
		var closeup = cols[5];
		//
		var prefix = '';
		var idx = 0;
		if( i <= 3 ) {
			prefix = 'cs';
			idx = i;
		} else {
			prefix = 'cn';
			idx = i - 3;
		}
		//
		var img = document.getElementById(prefix + '-img-' + idx);
		if(img) { img.src = img_src; }
		//
		var link = document.getElementById(prefix + '-link-' + idx);
		if(link) { link.href = link_href; }
		//
		var comp = document.getElementById(prefix + '-comp-' + idx);
		if(comp) { setTextContent(comp, comp_text); }
		//
		var comp_row = document.getElementById(prefix + '-comp-row-' + idx);
		if( comp_row && ! comp_text ) {
			comp_row.style.display = 'none';
		}
		//
		//
		var title = document.getElementById(prefix + '-title-' + idx);
		if(title) { setTextContent(title, title_text); }
		//
		var cate = document.getElementById(prefix + '-cate-' + idx);
		if(cate) { setTextContent(cate, cate_text); }
	}
}

function parseCsv(csv) {
	var lines = csv.split("\n");
	var list = [];
	for( var i=0,len=lines.length; i<len; i++ ) {
		var line = lines[i];
		line = line.replace("\r", '');
		if( ! line ) { continue; }
		var cols = lines[i].split(',');
		for( var j=0; j<cols.length; j++ ) {
			var v = cols[j];
			v = v.replace(/^\"/, '');
			v = v.replace(/\"$/, '');
			cols[j] = v;
		}
		list.push(cols);
	}
	// 配列をシャッフル
	shuffleArray(list);
	return list;
}

function setTextContent(el, text) {
	if( ! el ) { return; }
	el.innerHTML = '';
	el.appendChild( document.createTextNode(text) );
}

/*
function shuffleArray(ary) {
	var i = ary.length;
	while(i){
		var j = Math.floor(Math.random()*i);
		var t = ary[--i];
		ary[i] = ary[j];
		ary[j] = t;
	}
}
*/

function shuffleArray(list) {
	var i = list.length;
	while (--i) {
		var j = Math.floor(Math.random() * (i + 1));
		if (i == j) continue;
		var k = list[i];
		list[i] = list[j];
		list[j] = k;
	}
}

function addListener(elm, type, func) {
	if(! elm) { return false; }
	if(elm.addEventListener) {
		elm.addEventListener(type, func, false);
	} else if(elm.attachEvent) {
		elm['e'+type+func] = func;
		elm[type+func] = function(){elm['e'+type+func]( window.event );}
		elm.attachEvent( 'on'+type, elm[type+func] );
	} else {
		return false;
	}
	return true;
}

function getXhr() {
	var o = null;
	if(window.XMLHttpRequest) {
		o = new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		try {
			o = new window.ActiveXObject("Msxml2.XMLHTTP.3.0");
		} catch(e) {
			return null;
		}
	}
	return o;
}

})();
