// viewer.js: javascript routines for data image navigation
//

// Global Variables
var menu_prefix = "img/";		//menu image location
var data_prefix = "data/ModelObsTexaqs/Images/";		//data image location
var model_prefix = "data/";	//model image location
var profiler_prefix = "data/";	//model image location
var chem_prefix = "data/";	//model image location
var mobile_prefix = "data/";	//model image location
var img_type = ".png";
var data_file_name = new String();
var model_file_name = new String();

var monarr = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var Monarr = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");



// modeltype = 0 : Profiler
var profiler_models = new Array("AURAMS","CHRONOS","nmmcmaqV1", "WrfchemV1","WrfchemV2","wrf_nmm12","bams15","bams5","Stem-12");
var profiler_models_6 = new Array("AURAMS_6","CHRONOS_6","CMAQ_6", "WRF36_6","WrfchemV2-12","wrf_nmm12","BAMS15_6","BAMS5_6","Stem-12");
var profiler_models_9 = new Array("AURAMS_9","CHRONOS_9","CMAQ_9", "WRF36_9","WRF12_9","WRFNMM_9","BAMS15_9","BAMS5_9","STEM12_9");
var profiler_model_path = new Array("ModelCmcchemV4/ImageRaw28km/","ModelCmcchemV3/ImageRaw21km/", "ModelCmaqchemV2/ImageRaw12km/", "ModelWrfchemV4/ImageRaw36km/","ModelWrfchemV5/ImageRaw12km/","ModelWrfchemNMMV6/ImageRaw40km/","ModelBamschemV3/ImageRaw15km/","ModelBamschemV4/ImageRaw5km/","ModelUichemV2/ImageRaw12km/");
var profiler_sites = new Array("acl","bhm","bpa","brz","bvl","cle","hve","lpt","lvw","mdy","nbf");
var profiler_name = new Array("Arcola","Brenham","Beaumont Port Arthur","Bravoz","Beeville","Cleburne","Huntsville","LaPorte","Longview","Moody","New Braunfels");
//var profiler_fields = new Array("snr","ras","ozn","met","ens");
var profiler_fields = new Array("snr","ras","ozn","met");

// modeltype = 1 : Chemistry
var chem_models = new Array("AURAMS","CHRONOS","nmmcmaqV1", "WrfchemV1","WrfchemV2","wrf_nmm12","bams15","bams5","Stem-12");
var chem_models_6 = new Array("AURAMS_6","CHRONOS_6","CMAQ_6", "WRF36_6","WrfchemV2-12","wrf_nmm12","BAMS15_6","BAMS5_6","Stem-12");
var chem_models_9 = new Array("AURAMS_9","CHRONOS_9","CMAQ_9", "WRF36_9","WRF12_9","WRFNMM_9","BAMS15_9","BAMS5_9","STEM12_9");
var chem_model_path = new Array("ModelCmcchemV4/ImageRaw28km/","ModelCmcchemV3/ImageRaw21km/", "ModelCmaqchemV2/ImageRaw12km/", "ModelWrfchemV4/ImageRaw36km/","ModelWrfchemV5/ImageRaw12km/","ModelWrfchemNMMV6/ImageRaw40km/","ModelBamschemV3/ImageRaw15km/","ModelBamschemV4/ImageRaw5km/","ModelUichemV2/ImageRaw12km/");
var chem_sites = new Array("ald","chv","gal","dpk","sbr","dnt","ham","kfm","cnr","knk","mid","hin","cln","mvl");
var chem_name = new Array("Aldine (Houston)","Channelview (Houston)","Galveston Airport","Deer Park (Houston)","Seabrook (Houston)","Denton Airport (Dallas)","Hamshire (Beaumont/PA)","Kaufman (Dallas)","Conroe (Houston)","Karnack (Marshall)","Midlothian Twr (Dallas)","Hinton St. (Dallas)","Clinton (Houston)","Mauriceville (Beaumont)");

var chem_fields = new Array("met","chm","ens","enspm");
//var chem_fields = new Array("detmet_4", "detchm_4","ensO3_4","ensPM_4");

// modeltype = 2 : Mobile - lidar
var mobile_models = new Array("AURAMS","CHRONOS","nmmcmaqV1", "WrfchemV1","WrfchemV2-27","WrfchemV2-12","BAMS-15","BAMS-45","Stem-12");
var mobile_models_short = new Array("AURAMS","CHRONOS","cmaq", "WrfchemV1","wrf27","wrf12","BAMS-15","BAMS-45","Stem-12");
var mobile_model_path = new Array("ModelCmcchemV2/ImageRaw42km/","ModelCmcchemV1/ImageRaw21km/", "ModelCmaqchemV1/ImageRaw12km/", "ModelWrfchemV1/ImageRaw27km/","ModelWrfchemV2/ImageRaw27km/","ModelWrfchemV3/ImageRaw12km/","ModelBamschemV1/ImageRaw45km/","ModelBamschemV2/ImageRaw15km/","ModelUichemV1/ImageRaw12km/");
var mobile_sites = new Array("lac","rhb");
var mobile_name = new Array("Lidar Aircraft","Ron Brown" );
var rhb_fields = new Array("snr","ras","ozn","met","chem" );
var lidar_fields = new Array("ozn","tjr","o3_model" );


// Set Current Time
// Hours are increment of 12 h initialization time
//var Now = new Date("September 16, 2003");
//var Now = new Date();
var Now = new Date("August 14, 2006");
Now.setUTCMinutes(0);
Now.setUTCSeconds(0);
Now.setUTCMilliseconds(0);
var expDate = new Date();
expDate.setTime(Now.getTime() - 1000*60*60*48);  // Data becomes archive after 48 hours

// Get or set cookie values
var dataparam =  new Cookie(document, "TEXAQSSUMMER2006", 0);

if (!dataparam.load() || !dataparam.pfield || !dataparam.date || !dataparam.time || !dataparam.caldate || !dataparam.archive || !dataparam.pmodel || !dataparam.psite || !dataparam.msite || !dataparam.modeltype || !dataparam.csite) {
 
dataparam.pfield = 0;
dataparam.psite = 0;
dataparam.pmodel = 3;

dataparam.cfield = 0;
dataparam.csite = 0;
dataparam.cmodel = 3;

dataparam.mfield = 0;
dataparam.msite = 0;
dataparam.mmodel = 0;

// Lidar date and time
dataparam.ldate = '04185';
dataparam.ltime = '00';

dataparam.modeltype = 0;

dataparam.date = writeDateStr(Now);
dataparam.time = (Now.getUTCHours() < 12) ? "00" : "12";
dataparam.caldate = writeDateStr(Now);
dataparam.archive = 1;
dataparam.store();
}

filenames();


// Set default image file names

function filenames() {

    // CMAQ at 06 only
    if (( (dataparam.modeltype == 0) && (dataparam.pmodel == 2) ) || ((dataparam.modeltype == 1) && (dataparam.cmodel == 2)) || ((dataparam.modeltype == 2) && (dataparam.mmodel == 2)) ){
        timeStr = '06';
    // AURAMS 00 only 
    } else if (( (dataparam.modeltype == 0) && (dataparam.pmodel == 0) ) || ((dataparam.modeltype == 1) && (dataparam.cmodel == 0)) ){
        timeStr = '00';
    // CHRONOS 00 only 
    } else if (( (dataparam.modeltype == 0) && (dataparam.pmodel == 1) ) || ((dataparam.modeltype == 1) && (dataparam.cmodel == 1)) ){
        timeStr = '00';
    // BAMS_15 06 & 18 only 
    } else if (( (dataparam.modeltype == 0) && (dataparam.pmodel == 6) ) || ((dataparam.modeltype == 1) && (dataparam.cmodel == 6)) ){
        timeStr = (dataparam.time == '00') ? '06' : '18';
    // BAMS_5 06 & 18 only 
    } else if (( (dataparam.modeltype == 0) && (dataparam.pmodel == 7) ) || ((dataparam.modeltype == 1) && (dataparam.cmodel == 7)) ){
        timeStr = (dataparam.time == '00') ? '06' : '18';
    // Stem 00 only 
    } else if (( (dataparam.modeltype == 0) && (dataparam.pmodel == 8) ) || ((dataparam.modeltype == 1) && (dataparam.cmodel == 8)) ){
        timeStr = '00';
    // Everything else
    } else { timeStr = dataparam.time}


if (dataparam.modeltype == 0) {
// Profiler files
	if (dataparam.pfield == 4) {
	// Ens data
data_file_name = 'data/ModelEnsembleChemV2/Images/' + profiler_sites[dataparam.psite] + '/' + profiler_sites[dataparam.psite] + dataparam.date +  timeStr + '_' + profiler_fields[dataparam.pfield] + img_type;

	} else if (dataparam.pfield == 2) {
data_file_name = model_prefix + profiler_model_path[dataparam.pmodel]  + profiler_sites[dataparam.psite] + '/' + profiler_sites[dataparam.psite] + dataparam.date +  timeStr + '_' + profiler_fields[dataparam.pfield] + img_type;

	} else if (dataparam.pfield < 3) {
data_file_name = data_prefix + profiler_sites[dataparam.psite] + '/' + profiler_sites[dataparam.psite] + dataparam.date + '.'+ timeStr + '_' + profiler_fields[dataparam.pfield] + img_type;

// Not met (single panel) fields
	model_file_name = model_prefix + profiler_model_path[dataparam.pmodel] + '/' + profiler_sites[dataparam.psite] + '/' + profiler_sites[dataparam.psite] + dataparam.date + timeStr + '_' + profiler_fields[dataparam.pfield] + img_type;

	} else if (dataparam.pfield == 3){
	// Surface Met
	data_file_name = model_prefix + profiler_model_path[dataparam.pmodel] + '/' + profiler_sites[dataparam.psite] + '/' + profiler_sites[dataparam.psite] + dataparam.date + timeStr + '_' + profiler_fields[dataparam.pfield] + img_type;
	}

} else if (dataparam.modeltype == 1) {
// Chemistry files

if (dataparam.cfield <2) {
data_file_name = chem_prefix + chem_model_path[dataparam.cmodel]+ chem_sites[dataparam.csite] + '/' + chem_sites[dataparam.csite] + dataparam.date + timeStr + '_' + chem_fields[dataparam.cfield] + img_type;
} else if (dataparam.cfield ==2) {
data_file_name = 'data/ModelEnsembleChemV2/Images/' + chem_sites[dataparam.csite] + '/' + chem_sites[dataparam.csite] + dataparam.date +  '00_' + chem_fields[dataparam.cfield] + img_type;
} else if (dataparam.cfield ==3) {
data_file_name = 'data/ModelEnsemblePMV2/Images/' + chem_sites[dataparam.csite] + '/' + chem_sites[dataparam.csite] + dataparam.date +  '00_' + chem_fields[dataparam.cfield] + img_type;
}


} else if ((dataparam.modeltype == 2) && (dataparam.msite == 0)) {

// Lidar Files
//data_file_name = mobile_prefix + mobile_model_path[dataparam.mmodel]+ mobile_sites[dataparam.msite] + '/' + mobile_sites[dataparam.msite] + dataparam.ldate + dataparam.ltime + '_' + lidar_fields[dataparam.mmodel] + img_type;
//data_file_name = 'data/ModelObsTexaqs/Images/dc3/dc3' + dataparam.ldate + dataparam.ltime + 'tjr.png' ;

if ( (dataparam.mfield != 2) && ( (dataparam.mmodel == 2) || (dataparam.mmodel == 4) || (dataparam.mmodel == 5) )) {
data_file_name = 'data/ModelObsTexaqs/Images/dc3/dc3_' + mobile_models_short[dataparam.mmodel] + '_' + dataparam.ldate + dataparam.ltime + lidar_fields[dataparam.mfield]+ img_type ;

} else if ( (dataparam.mfield == 2) && ( (dataparam.mmodel == 2) || (dataparam.mmodel == 4) || (dataparam.mmodel == 5) )) {

data_file_name = 'data/ModelObsTexaqs/Images/dc3/' + mobile_models_short[dataparam.mmodel] + '_' + dataparam.ldate + dataparam.ltime + lidar_fields[dataparam.mfield]+ img_type ;

} else {

data_file_name = 'data/ModelObsTexaqs/Images/dc3/dc3' + dataparam.ldate + dataparam.ltime + lidar_fields[dataparam.mfield]+ img_type ;
}

} else if ((dataparam.modeltype == 2) && (dataparam.msite == 1)) {
// RHB files
if (dataparam.mfield == 3) {
// met
data_file_name = 'data/' + mobile_model_path[dataparam.mmodel] + mobile_sites[dataparam.msite] + '/' + mobile_sites[dataparam.msite] + dataparam.date + timeStr + '_met' + img_type;

} else {
data_file_name = data_prefix + mobile_sites[dataparam.msite] + '/' + mobile_sites[dataparam.msite] + dataparam.date + '.' + timeStr + '_'+ rhb_fields[dataparam.mfield] + img_type;

model_file_name = model_prefix + mobile_model_path[dataparam.mmodel] + '/' + mobile_sites[dataparam.msite] + '/' + mobile_sites[dataparam.msite] + dataparam.date + timeStr + '_' + rhb_fields[dataparam.mfield] + img_type;
}
}

}

if ((dataparam.modeltype == 2) && (dataparam.msite == 0)) {
// Lidar Date
var dataDate = readDateStr(dataparam.ldate);
dataDate.setUTCHours(dataparam.ltime);
} else {
var dataDate = readDateStr(dataparam.date);
dataDate.setUTCHours(dataparam.time);
}


// Create menu of available data times
function init_menu() {
//dataparam.pmodel = 3
//dataparam.cmodel = 3
	
    // ETA at 00 and 06 
    if (( (dataparam.modeltype == 0) && (dataparam.pmodel == 2) ) || ((dataparam.modeltype == 1) && (dataparam.cmodel == 2)) || ((dataparam.modeltype == 2) && (dataparam.mmodel == 2))){
        timeStr = '06';
        timeStr2 = '';
    // BAMS_15 at 06 and 18 
    } else if (( (dataparam.modeltype == 0) && (dataparam.pmodel == 6) ) || ((dataparam.modeltype == 1) && (dataparam.cmodel == 6)) || ((dataparam.modeltype == 2) && (dataparam.mmodel == 2))){
        timeStr = '06';
        timeStr2 = '18';
    // BAMS_5 at 06 and 18 
    } else if (( (dataparam.modeltype == 0) && (dataparam.pmodel == 7) ) || ((dataparam.modeltype == 1) && (dataparam.cmodel == 7)) || ((dataparam.modeltype == 2) && (dataparam.mmodel == 2))){
        timeStr = '06';
        timeStr2 = '18';
    // AURAMS 00 only
    } else if (( (dataparam.modeltype == 0) && (dataparam.pmodel == 0) ) || ((dataparam.modeltype == 1) && (dataparam.cmodel == 0)) ){
        timeStr = '00';
        timeStr2 = '';
    // CHRONOS 00 only
    } else if (( (dataparam.modeltype == 0) && (dataparam.pmodel == 1) ) || ((dataparam.modeltype == 1) && (dataparam.cmodel == 1)) ){
        timeStr = '00';
        timeStr2 = '';
    // Stem 00 only
    } else if (( (dataparam.modeltype == 0) && (dataparam.pmodel == 8) ) || ((dataparam.modeltype == 1) && (dataparam.cmodel == 8)) ){
        timeStr = '00';
        timeStr2 = '';
	} else if ((dataparam.modeltype == 2) && (dataparam.msite == 0)) {
		// Lidar data
		timeStr = dataparam.ltime;
        timeStr2 = '';
    // Everything else
    } else { 
		timeStr = '00';
		timeStr2 = '12';
	}

	document.writeln('Select the model cycle initialization:<br>');
	document.writeln('<form name="model_time">');


if (dataparam.archive != 0) {
// If archive date

		document.writeln('<select name="time" size="2" onChange="changeTime(this.form.time.options[this.form.time.selectedIndex].value);">');

			document.write('<option value="00" ');
			if (dataparam.time == '00') { document.write(' selected'); }
			document.write('>'+ timeStr +'Z ' + Monarr[dataDate.getUTCMonth()] + ' ');
			document.writeln(dataDate.getUTCDate() +'</option>');

			if (timeStr2 != '') {
			document.write('<option value="12"');
			if (dataparam.time == '12') { document.write(' selected'); }
			document.write('>'+ timeStr2 +'Z ' + Monarr[dataDate.getUTCMonth()] + ' ');
			document.writeln(dataDate.getUTCDate() +'</option>');
			}
} else {

// If current window

	document.writeln('<select name="time" size="2" onChange="changeDate(this.form.time.options[this.form.time.selectedIndex].value);">');
		date = new Date();
		date.setTime(Now.getTime());

		for (var i=0; i < 4; i++) {
		var option = new String();
		option += '<option value="';
		if (date.getUTCHours() < 12) {
			option += writeDateStr(date) + '00"';
            if (writeDateStr(date)+"00" == writeDateStr(dataDate)+dataparam.time) {
                option += ' selected';
            }
			option += '>';
			option += timeStr + ' Z ' + Monarr[date.getUTCMonth()] + ' ' ;
			option += date.getUTCDate();
		} else {
			if (timeStr2 != '') {
			option += writeDateStr(date) + '12"';
			if (writeDateStr(date)+"12" == writeDateStr(dataDate)+dataparam.time) {
				option += ' selected';
			}
			option += '>';
			option += timeStr2 + ' Z ' + Monarr[date.getUTCMonth()] + ' ' + date.getUTCDate();
			}
		}
		option += '</option>';
		document.writeln(option);
		date.setTime(date.getTime()-1000*60*60*12);
		}
	}
	document.writeln('</select></form>');
}

////////////////////////////////////////////////////////////////////////
//changeField(field)
////////////////////////////////////////////////////////////////////////

function changeField(field) {


if (dataparam.modeltype == 0 ) {
	dataparam.pfield = field;
	dataparam.store();


	field_menu_image = new Image();
	field_menu_image.src =   'img/profiler/' + profiler_fields[dataparam.pfield] + img_type;


} else if (dataparam.modeltype == 1) {
	dataparam.cfield = field;
	dataparam.store();

	field_menu_image = new Image();
	field_menu_image.src = 'img/chem_4/' + chem_fields[dataparam.cfield] + img_type;

} else if ((dataparam.modeltype == 2) && (dataparam.msite == 0)) {
	dataparam.mfield = field;
	dataparam.store();
	field_menu_image = new Image();
	field_menu_image.src = 'img/lidar/' + lidar_fields[dataparam.mfield] + img_type;

} else if ((dataparam.modeltype == 2) && (dataparam.msite == 1)) {
	dataparam.mfield = field;
	dataparam.store();
	field_menu_image = new Image();
	field_menu_image.src = 'img/rhb/' + rhb_fields[dataparam.mfield] + img_type;
}

	document.field_menu.src = field_menu_image.src;
	filenames();
    window.location.href = window.location.href; 
}

////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
function changeLidar(date) {
    dataparam.ldate = date.substr(0,5);
    dataparam.ltime = date.substr(5,2);
	dataparam.archive = 1;
    dataparam.store();

    dataDate = readDateStr(dataparam.ldate);
    window.location.href = window.location.href;
}

////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
function changeSite(site) {
	if (dataparam.modeltype == 0) {
    dataparam.psite = site;
	} else if (dataparam.modeltype == 1) {
    dataparam.csite = site;
	} else {
    dataparam.msite = site;
	}
    dataparam.store();
    window.location.href = window.location.href; 
}


////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
function changeCal(date) {
    dataparam.caldate = date;
    dataparam.store();
	window.location.href = window.location.href;
}

////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
function changeModeltype(type) {

    dataparam.modeltype = type;
    dataparam.store();

    window.location.href = window.location.href;
}


////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
function changeModel(model) {

    model_menu_image = new Image();

	if (dataparam.modeltype == 0) {
    dataparam.pmodel = model;
    model_menu_image.src = menu_prefix +  profiler_models[dataparam.pmodel] + img_type;

	} else if (dataparam.modeltype == 1) {
		dataparam.cmodel = model;
	    model_menu_image.src = menu_prefix + chem_models[dataparam.cmodel] + img_type;

	} else {
		dataparam.mmodel = model;
	    model_menu_image.src = menu_prefix + mobile_models[dataparam.mmodel] + img_type;
	}
    dataparam.store();

    document.model_menu.src = model_menu_image.src;
    window.location.href = window.location.href; 
}

////////////////////////////////////////////////////////////////////////
// changeDate(dateTimeStr)
////////////////////////////////////////////////////////////////////////
function changeDate(dTStr) {
	dataparam.date = dTStr.substr(0,5);
	dataparam.store();

	dataDate = readDateStr(dataparam.date);
	window.location.href = window.location.href;
}


////////////////////////////////////////////////////////////////////////
// changeTime
////////////////////////////////////////////////////////////////////////
function changeTime(time)
{
    dataparam.time = time;
    dataparam.store();
	window.location.href = window.location.href;
}


////////////////////////////////////////////////////////////////////////
// readDateStr(dateStr) 
////////////////////////////////////////////////////////////////////////
function readDateStr(dateStr) {
	var year = (1 * dateStr.substr(0,2)) + 2000;
	var yd = 1 * dateStr.substr(2,3);

// check for leap year
    if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) monarr[1] ="29";
	var i = -1;
	while (yd > monarr[i+1] ) {
		yd -= monarr[i+1];
		++i;
	}
	var month = i+1;
	var day = yd;
	var date = new Date(year,month,day);
	date.setUTCHours(0);
	return date;
}


////////////////////////////////////////////////////////////////////////
// writeDateStr(date): read Date object and return formated string
////////////////////////////////////////////////////////////////////////

function writeDateStr(date) {
    var year = new String(date.getUTCFullYear()).substr(2,2);
    var yearDay = calYearDay(date);
 
    return(year + '' + yearDay );
}

///////////////////////////////////////////////////////////////////////
// calYearDay(date)
///////////////////////////////////////////////////////////////////////

function calYearDay(date) {
	var year = date.getUTCFullYear();
	var month = date.getUTCMonth();
	var day = date.getUTCDate() - 0;

// check for leap year
    if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
		monarr[1] = "29";
	} else {
		monarr[1] = "28";
	}

	var yearday = day - 0;

    for (var i=0; i < month; ++i) {
		var temp = monarr[i] - 0;
        yearday = yearday + temp;
    }
	
    if (yearday < 10) {
        yearday = '00'+yearday;
    } else if (yearday < 100) {
        yearday = '0'+yearday;
    }	
return yearday;
}
