// wcarch.js

/////////////////////////////////////////////////////////////////////////////
// DATA EXPORT SUPPORT
/////////////////////////////////////////////////////////////////////////////

// Global objects for inter-window communication
page_info = new Object() ;	// interwindow communication data
popup = null ;		// permanent popup window pointer

// Input parameters
page_info.stn_id      = "" ;
page_info.stn_index   = "" ;
page_info.stn_name    = "" ;
page_info.first_date  = "" ;
page_info.last_date   = "" ;
page_info.export_form = "" ;

// Returnable parameters
page_info.start_date  = "" ;
page_info.stop_date   = "" ;
page_info.numdays     = "" ;
page_info.zip         = "" ;
page_info.header      = "1" ;

function exportData(url, width, height) {

	if (!width) width = 400 ;
	if (!height) height = 250 ;

	if (popup && !popup.closed && popup.location) {
		popup.location.href = url;
	} else {
		popup = window.open (url, "popup_dialog", "dependent=yes,resizable=yes,width="+width+",height="+height) ;
		//status=yes - deleted
		popup.opener = self ;
		// This is to fix bug in Opera 7.20 - it cannot access data allocated here thru automatic "opener".
		// Possibly, it allocates variables in namespace of frame, from which this function has been called.
		// (NS7 and IE6 allocates them within topmost window, where the function is located).
	}
	if (window.focus) popup.focus() ;
}

function doExport() {
	//if (window.focus) window.focus() ;
	var form_name = page_info.export_form ;
	var form = document.forms[form_name] ;
	var script = form.action ;
	var fname ;
	var key1 = page_info.start_date ? page_info.start_date : null ;
	var key2 = page_info.stop_date  ? page_info.stop_date  : null ;
	var key3 = page_info.numdays    ? page_info.numdays    : null ;
	fname = (key1 && key2)
			? key1+"_"+key2
			: (key1 && key3)
				? key1+"_"+key3
				: (key2 && key3)
					? key3+"_"+key2
					: key1
						? key1+"_"+"xxx"
						: key2
							? "xxx"+"_"+key2
							: key3 + "_today" ;
	fname = "stn" + page_info.stn_index + "_" + fname ;

	var expwnd ;
	if (page_info.zip) {
		form.target = null ;
		form.action = script+"/"+fname+".zip" ;
		expwnd = null ;
	} else {
		form.target = "export" ;
		form.action = script+"/"+fname+".txt" ;
		expwnd = window.open("", "export", "resizable=yes,menubar=yes,scrollbars=yes") ;
		if (expwnd && expwnd.focus) expwnd.focus() ;
	}
	form.stn_id.value     = page_info.stn_id ;
	form.start_date.value = page_info.start_date ;
	form.stop_date.value  = page_info.stop_date ;
	form.zip.value        = page_info.zip ;
	form.header.value     = page_info.header ;
	form.numdays.value    = page_info.numdays ;
	form.submit() ;

	// Restore
	form.action = script ;
}

var dad ;
var pi ;
var dd1, mm1, yy1, dd2, mm2, yy2 ;
var first_date, last_date ;

function get_export_info(isRus) {
	dad = window.opener ;
	if (!dad) {
		alert (isRus ? "Oops! Родительское окно исчезло..."
			     : "Oops! Parent window vanished...") ;
		window.close() ;
	}

	if (!dad.closed && dad.page_info) {
		pi = dad.page_info ;
	}
	if (!pi) {
		alert(isRus ? "Oops! Недоступна переменная page_info...\n\nЛибо родительское окно закрыто, либо ваш браузер не поддерживает возможности, необходимые для выполнения этой операции."
			    : "Oops! Variable page_info inaccessible...\n\nEither parent window closed, or you browser lacks capabilities, required for this operation.") ;
		window.close() ;
	}

	// Prepare first/last dates
	var first = (pi.first_date) ? pi.first_date.split(/\D+/) : null ;
	var last  = (pi.last_date)  ? pi.last_date.split(/\D+/)  : null ;
	if (first && first.length >= 3) {
		yy1 = first[0] ;
		mm1 = first[1] ;
		dd1 = first[2] ;
		first_date = dd1+"."+mm1+"."+yy1 ;
	}
	if (last && last.length >= 3) {
		yy2 = last[0] ;
		mm2 = last[1] ;
		dd2 = last[2] ;
		last_date = dd2+"."+mm2+"."+yy2 ;
	}
}

function init_export_form (form) {
	var els = form.elements ;
	var years  ;

	// Fill in years
	if (pi.years && pi.years.length) {
		years = pi.years ;
	} else {
		var today = new Date() ;
		var y_today = today.getYear() ;
		y_today += y_today > 1900 ? 0 : y_today > 100 ? 1900 : 2000 ;
		var y1 = yy1 ? yy1 : 1998 ;
		var y2 = yy2 ? yy2 : y_today ;

		years = new Array() ;
		for (var i=y1; i<=y2; i++) {
			years[years.length] = i ;
		}
	}

	for (var i=1; i<els.yyyy1.options.length; i++) {
		els.yyyy1.options[i] = null ;
	}
	for (var i=1; i<els.yyyy2.options.length; i++) {
		els.yyyy2.options[i] = null ;
	}
	for (var i=0; i<years.length; i++) {
		els.yyyy1.options[i+1] = new Option(years[i], years[i]) ;
		els.yyyy2.options[i+1] = new Option(years[i], years[i]) ;
	}


	// Select date controls
	if (pi.start_date) {
		var ymd=pi.start_date.split(/\D/) ;
		select_value (els.yyyy1, ymd[0]) ;
		select_value (els.mm1,   ymd[1]) ;
		select_value (els.dd1,   ymd[2]) ;
	}
	if (pi.stop_date) {
		var ymd=pi.stop_date.split(/\D/) ;
		select_value (els.yyyy2, ymd[0]) ;
		select_value (els.mm2,   ymd[1]) ;
		select_value (els.dd2,   ymd[2]) ;
	}

	// Setup other parameters
	if (pi.numdays > 0) {
		els.numdays.value = pi.numdays ;
	}
	els.zip.checked    = pi.zip    > 0 ? true : false ;
	els.header.checked = pi.header > 0 ? true : false ;
	return true ;
}

function exit_export_form (form, save, isRus) {
	if (save && dad && !dad.closed && dad.page_info) {
		var pi = dad.page_info ;
		var els = form.elements ;
		var start = false ;
		var stop  = false ;

		var yyyy1 = els.yyyy1.options[els.yyyy1.selectedIndex].value ;
		var mm1   = els.mm1.options[els.mm1.selectedIndex].value ;
		var dd1   = els.dd1.options[els.dd1.selectedIndex].value ;
		if (yyyy1 && mm1 && dd1) {
			pi.start_date = yyyy1+"-"+mm1+"-"+dd1 ;
			start = true ;
		} else {
			pi.start_date = "" ;
		}

		var yyyy2 = els.yyyy2.options[els.yyyy2.selectedIndex].value ;
		var mm2   = els.mm2.options[els.mm2.selectedIndex].value ;
		var dd2   = els.dd2.options[els.dd2.selectedIndex].value ;
		if (yyyy2 && mm2 && dd2) {
			pi.stop_date = yyyy2+"-"+mm2+"-"+dd2 ;
			stop = true ;
		} else {
			pi.stop_date = "" ;
		}

		pi.numdays = form.elements.numdays.value ;
		pi.zip     = form.elements.zip.checked ? 1 : 0 ;
		pi.header  = form.elements.header.checked ? 1 : 0 ;

		// Validate input
		if (start && stop && pi.start_date > pi.stop_date) {
			alert(isRus ? "Ошибка: конечная дата раньше начальной даты."
				    : "Error: End date earlier than start date.") ;
			return false ;
		}
		if (start && pi.last_date && pi.start_date > pi.last_date || stop && pi.first_date && pi.stop_date < pi.first_date) {
			alert(isRus ? "Ошибка: В архиве нет данных за этот период времени."
				    : "Error: No data in archive for this time period.") ;
			return false ;
		}
		if (!start && !stop && !pi.numdays) {
			alert(isRus ? "Ошибка: Не заданы временные параметры."
				    : "Error: Temporal parameters missing.") ;
			return false;
		}

		dad.top.doExport() ;
	}
	if (!save && window.focus) dad.focus() ;
	window.close() ;
}

//////////////////////////////////////////////////////////////////
// UTILITIES
//////////////////////////////////////////////////////////////////
function select_value(ctrl, value) {
// Select value in combo-box
	for (var i=0; i<ctrl.options.length; i++) {
		if (ctrl.options[i].value == value) {
			ctrl.selectedIndex = i ;
			return true ;
		}
	}
	return false ;
}
