// ----
// name of monthes
var mtLabel = [
	'January', 'Feburary', 'March', 'April', 'May', 'June',
	'July', 'August', 'September', 'October', 'November', 'December'
];

// --- 
// data model
var axObj = {
	cfs: null,     // original conference data array 
	cfidIdx: null, // index of conference ID
	ccIdxCf: null, // 
	snIdxCf: null, // index of short-name
	ddIdxCf: null, // 
	llIdxCf: null, // index by lat and long value
	kwIdxCf: null, // index by keywords
	dtIdxCf: null, // index by dates
	baseURL: "http://www.netaro.info/~zetaka/projects/ConfShare/",
}

// ----
// find index of axObj.cfs from conference ID
function findArrayIndexByConfID(cfID) {
	var c;

	for (c=0; c<axObj.cfs.length; ++c){
		if ( cfID == axObj.cfs[c].id ) { break; }
	}

	return c;
}

// ----
// find conference record by year-month labels
// scan CFS array
function findCfIDsByMonth( monthLabelArray ) {
	var idval=null;

	for (var q=0; q<monthLabelArray.length; ++q) {
		// console.log( '=> '+monthLabelArray[q] ); 
		for (var r=0; r<axObj.cfs.length; ++r) {
			if ( axObj.cfs[r].period.indexOf( monthLabelArray[q] ) >= 0 ) {
				if (null == idval) { idval=new Array(); }
				idval.push( axObj.cfs[r].id );
			}
		}
	}

	return idval;
}

// ----
// find conference record by lat and long. 
function findCfIDsByLatLong(lat, long) {
	var idval=null;

	var objRef = axObj.llIdxCf[lat+','+long];
	if ( objRef ) {
		if (null == idval) { idval=new Array(); }
		for (var m=0; m<objRef.indexes.length; ++m) {
			idval.push( axObj.cfs[ objRef.indexes[m] ].id );
		}
	}

	return idval;
}

// ----
// find conference record by shortname. 
// scan CFS array
function findCfIDsByShortname(snStr) {
	var idval=null;

	// exceptional case.
	if ('_unknown_' == snStr) { snStr=''; }

	for (var c=0; c<axObj.cfs.length; ++c){
		if ( snStr == axObj.cfs[c].abbrtitle ) { 
			if (null == idval) { idval=new Array(); }
			idval.push( axObj.cfs[c].id );
		}
	}

	return idval;
}

// ----
// find conference record by lat and long. 
function findCfIDsByCountry(cnm) {
	var idval=null;

	var objRef = axObj.ccIdxCf[cnm];
	if ( objRef ) {
		if (null == idval) { idval=new Array(); }
		for (var ctnm in objRef) { 
			var cfAryRef=objRef[ctnm];
			for (q=0; q<cfAryRef.length; ++q) {
				idval.push( axObj.cfs[ cfAryRef[ q ] ].id );
			}
		}
	}

	return idval;
}

// ----
// find conference record by lat and long. 
function findCfIDsByCity(cityName, countryName) {
	var idval=null;
	var targetCountry=countryName.toLowerCase();
	var targetCity=cityName.toLowerCase();

	for ( var ntNm in axObj.ccIdxCf ) {
		if ( ntNm.toLowerCase().indexOf( targetCountry ) < 0 ) {
			continue;
		}
		for ( var ctNm in axObj.ccIdxCf[ntNm] ) {
			if ( ctNm.toLowerCase().indexOf( targetCity ) >= 0 ) {
				if (null == idval) { idval=new Array(); }
				var cfAryRef=axObj.ccIdxCf[ntNm][ctNm];
				for (q=0; q<cfAryRef.length; ++q) {
					idval.push( axObj.cfs[ cfAryRef[ q ] ].id );
				}
			}
		}
	}

	return idval;
}

// ----
function didLoadedDS1(data, statusCode) {
	if (200==statusCode) {
		// 
		axObj.cfs=eval(data);
		// alert(axObj.cfs.length+' conferences');

		// make various index 
		makeIndex();

		// 
		setupConferenceList();
		setupSubmissionDeadlineList();
		putMarkersOntheMap(axObj.llIdxCf);

		setupLocationList();
		setupShortnamesList();
		setupKeywordsList();
		setupDateList();

		Ext.get('footerMsgLeft').dom.innerHTML='&nbsp;Total '+axObj.cfs.length+' data';
	} else {
		alert('failed to get dataSrc 1: '+statusCode);
	}
}

// ----
function loadDataSrc() {
	// initialize google map
  ovvwGmap('ConfMap', undefined, undefined, 1, true);

	var ds1url=axObj.baseURL+'conferences.js';
	GDownloadUrl(ds1url, this.didLoadedDS1); // ajax function by Google
};

// ---
// 会議名称から単語を抜き取る処理
function extractWordsFromConfName() {
	var tg=null;
	var wary=null;
	var dic=new Object();

	for (var u=0; u<axObj.cfs.length; ++u) {
		tg=''+axObj.cfs[u].title;
		tg=tg.replace(/\//g, " ");      // '/'は半角空白に置換
		tg=tg.replace(/[:,()]/g, " ");  // '/'は半角空白に置換
		tg=tg.replace(/'\d+/g, " ");    // '(数字)は半角空白に置換
		wary=tg.split(/\s+/);           // 空白文字群で切り分ける

		for (var a=0; a<wary.length; ++a) { 
			wary[a]=wary[a].toLowerCase(); 
			if ( ! dic[ wary[a] ] ) {
				dic[ wary[a] ]=new Object();
				dic[ wary[a] ].word=wary[a];
				dic[ wary[a] ].cfsIndexes=new Array();
			}
			dic[ wary[a] ].cfsIndexes.push(u);
		}
	}

	awd=new Array();
	for (var wd in dic) {
		// eliminate too short word
		if (wd.length < 3) { continue; }
		// eliminate some words because they might have no means.
		if ( wd.match(/and|its|the/) ) { continue; } 
		// eliminate words start from number
		if ( wd.match(/^\d+/) ) { continue; } 

		awd.push(wd);
	}
	awd.sort();
	for (var c=0; c<awd.length; ++c) {
		axObj.kwIdxCf[c]=dic[ awd[c] ];
	}

	delete dic;
	delete awd;
}

// ---------------------------------------------------------------------
// make various indexes from Conference information
function makeIndex() {
	// clear and initialize year-month index
	if (axObj.cfidIdx) { delete axObj.cfidIdx; axObj.cfidIdx=null; }
	axObj.cfidIdx = new Object();

	// clear and initialize country and city index
	if (axObj.ccIdxCf) { delete axObj.ccIdxCf; axObj.ccIdxCf=null; }
	axObj.ccIdxCf = new Object();

	// clear and initialize country and city index
	if (axObj.snIdxCf) { delete axObj.snIdxCf; axObj.snIdxCf=null; }
	axObj.snIdxCf = new Object();

	// clear and initialize country and city index
	if (axObj.ddIdxCf) { delete axObj.ddIdxCf; axObj.ddIdxCf=null; }
	axObj.ddIdxCf = new Object();

	// clear and initialize lat and long index 
	if (axObj.llIdxCf) { delete axObj.llIdxCf; axObj.llIdxCf=null; }
	axObj.llIdxCf = new Object();

	// clear and initialize lat and long index 
	if (axObj.kwIdxCf) { delete axObj.kwIdxCf; axObj.kwIdxCf=null; }
	axObj.kwIdxCf = new Array();

	// clear and initialize date index 
	if (axObj.dtIdxCf) { delete axObj.dtIdxCf; axObj.dtIdxCf=null; }
	axObj.dtIdxCf = new Object();

	for (var idx=0; idx<axObj.cfs.length; ++idx) {
		// console.log(idx+'=>'+axObj.cfs[idx].title);

		{
			if ( axObj.cfidIdx[ axObj.cfs[idx].id  ] ) {
				alert('Wrong conference ID value!: '+ axObj.cfs[idx].id);
			}
			axObj.cfidIdx[ axObj.cfs[idx].id  ] = idx;
		}

		{
			var dtv=Date.parseDate(axObj.cfs[idx].startdate, "Y-m-d");
			var edtv=Date.parseDate(axObj.cfs[idx].enddate, "Y-m-d");
			var todayVal=new Date(); // today

			while ( edtv.getTime() >= dtv.getTime() ) {
				if ( dtv.format('Y-m-d') >= todayVal.format('Y-m-d') ) {
					if ( ! axObj.dtIdxCf[ dtv.format('Y') ] ) {
						axObj.dtIdxCf[ dtv.format('Y') ] = new Object();
						axObj.dtIdxCf[ dtv.format('Y') ]._visible = true;
						axObj.dtIdxCf[ dtv.format('Y') ]._cfsIndexes = new Array();
					}
					var aryRef= axObj.dtIdxCf[ dtv.format('Y') ]._cfsIndexes;
					if ( ! IsValInArray(aryRef, idx) ) { aryRef.push( idx ); }

					if ( ! axObj.dtIdxCf[ dtv.format('Y') ][ dtv.format('m') ] ) {
						axObj.dtIdxCf[ dtv.format('Y') ][ dtv.format('m') ] = new Object();
						axObj.dtIdxCf[ dtv.format('Y') ][ dtv.format('m') ]._visible = true;
						axObj.dtIdxCf[ dtv.format('Y') ][ dtv.format('m') ]._cfsIndexes = new Array();
					}
					aryRef=axObj.dtIdxCf[ dtv.format('Y') ][ dtv.format('m') ]._cfsIndexes;
					if ( ! IsValInArray(aryRef, idx) ) { aryRef.push( idx ); }

					if ( ! axObj.dtIdxCf[ dtv.format('Y') ][ dtv.format('m') ][ dtv.format('d') ] ) {
						axObj.dtIdxCf[ dtv.format('Y') ][ dtv.format('m') ][ dtv.format('d') ] = new Object();
						axObj.dtIdxCf[ dtv.format('Y') ][ dtv.format('m') ][ dtv.format('d') ]._visible = true;
						axObj.dtIdxCf[ dtv.format('Y') ][ dtv.format('m') ][ dtv.format('d') ]._cfsIndexes = new Array();
					}
					aryRef=axObj.dtIdxCf[ dtv.format('Y') ][ dtv.format('m') ][ dtv.format('d') ]._cfsIndexes;
					if ( ! IsValInArray(aryRef, idx) ) { aryRef.push( idx ); }
				}
				dtv.setTime( dtv.getTime() + (24 * 3600 * 1000) ); // plus 24 hours.
			}
		}

		{
			var numSd=axObj.cfs[idx].deadlines.deadline.length;
			if (numSd > 0) {
				for (var idw=0; idw<numSd; ++idw) {
					var objRef=axObj.cfs[idx].deadlines.deadline[idw];
					if ( objRef.restdays >= 0 && objRef.desc.indexOf('deadline') >= 0) {
						if ( ! axObj.ddIdxCf[ objRef.datetime ] ) {
							axObj.ddIdxCf[ objRef.datetime ] = new Object();
							axObj.ddIdxCf[ objRef.datetime ].restdays = objRef.restdays;
							axObj.ddIdxCf[ objRef.datetime ].data = new Array();
						}

						var x=new Object();
						x.date=objRef.datetime;
						x.desc=objRef.desc;
						x.cfinfo=axObj.cfs[idx];
						axObj.ddIdxCf[ objRef.datetime ].data.push( x ); 
					}
				}
			}
		}

		{
			if ( ! axObj.ccIdxCf[axObj.cfs[idx].country] ) {
				axObj.ccIdxCf[axObj.cfs[idx].country] = new Object();
			}
			if ( ! axObj.ccIdxCf[axObj.cfs[idx].country][axObj.cfs[idx].city] ) {
				axObj.ccIdxCf[axObj.cfs[idx].country][axObj.cfs[idx].city] = new Array();
			}
			(axObj.ccIdxCf[axObj.cfs[idx].country][axObj.cfs[idx].city]).push( idx );
		}

		{ // make lat,long index
			var llStr=''+axObj.cfs[idx].ido+','+axObj.cfs[idx].kdo;

			if ( ! axObj.llIdxCf[llStr] ) {
				axObj.llIdxCf[llStr] = new Object;
				axObj.llIdxCf[llStr].display = true;
				axObj.llIdxCf[llStr].indexes = new Array();
			}
			axObj.llIdxCf[llStr].indexes.push( idx ); // index of "axObj.cfs" array
		}

		{ // make conference snortname index
			var sn='_unknown_';
			if ( axObj.cfs[idx].abbrtitle ) {
				sn=axObj.cfs[idx].abbrtitle; 
			}

			var ssn=sn.toLowerCase();
			if ( ! axObj.snIdxCf[ssn] ) {
				axObj.snIdxCf[ssn] = new Object();
				axObj.snIdxCf[ssn].name = sn;
				axObj.snIdxCf[ssn].cfsIndexes = new Array();
			} 
			axObj.snIdxCf[ssn].cfsIndexes.push ( axObj.cfs[idx] );
		}
	}

	extractWordsFromConfName();
}

//
// ends here
//
