//почтовый гаджет, структуру аккаунтов, папок и писем держим во внутренней структуре
function __CurrencyRate(id)
{
	this.stepTimer = 1000;	
	this.lang = Locale.Gadgets.CurrencyRate;
	this.Core = new __StdModuleCore(this, id, 'kalrndar', this.lang.title, this.lang.desc);
	this.currentClassName = 'CurrencyRate';
	this.currencyList = {};
	
	var nowDate = new Date();	
	
	this.currentDay = this.nowDay = addZero(nowDate.getDate());	
	this.currentMonth = this.nowMonth = addZero(nowDate.getMonth()+1);	
	this.currentYear = this.nowYear = nowDate.getFullYear();
	
	this.prepareWorkSpace();
	this.redrawDateSelectForm();	
		
	Update.request(this.currentClassName, 'module', 'get_sources_and_currencies', { id: this.id });
	Update.request(this.currentClassName, 'module', 'get_rates', { id: this.id });		
	
	this.Core.AddUpdater('getRatesTimer'+this.id, this.periodicalRefresh.bind(this), this.stepTimer);	
}


//-------------------------------------------------------------------------------
__CurrencyRate.prototype.periodicalRefresh = function(){	
	var options = {};
	Update.request(this.currentClassName, 'module', 'get_rates', {id: this.id}, options, true);
}

//-------------------------------------------------------------------------------
//удаляем таймеры при уделении гаджета
__CurrencyRate.prototype.onDelete = function(){	
	
	if(this.Core.Timers && this.Core.Timers['getRatesTimer'+this.id]) {
		delete this.Core.DeleteUpdater('getRatesTimer'+this.id);
	}	
}

//-------------------------------------------------------------------------------
__CurrencyRate.prototype.CB_getRates = function(data) {	
	var self = this;
	
	if(sizeof(data.errors) > 0) {
		alert(data.errors[0].message);
		return false;
	}
	
	if(!data || !data.variables || !data.variables.currency_list) return false;
	var vars = data.variables;
	
	this.currencyList = data.variables.currency_list;
	//this.metalList = data.variables.met_list;
	
	var date_str = '';

	if(vars.date)	 {
		var re = new RegExp('(\\d\\d\\d\\d)(\\d\\d)(\\d\\d)','i');		
		re.exec(vars.date);		
		var tmpDate = new Date(RegExp.$1, parseInt(RegExp.$2)-1, RegExp.$3);			
	}else{
		var tmpDate = new Date();
	}
	
	this.currentDay = addZero(tmpDate.getDate());	
	this.currentMonth = addZero(parseInt(tmpDate.getMonth())+1);	
	this.currentYear  = tmpDate.getFullYear();
		
	this.redrawCurrencyList();
	this.redrawDateSelectForm();
	//this.redrawMetallListList();
	
}

//-------------------------------------------------------------------------------
//создает два div  в Content, один для валют, другой для металлов
__CurrencyRate.prototype.prepareWorkSpace = function(data) {	
	
	var tmp_str = '<div id=dateSelectContext'+this.id+
		'></div><div style="margin-top: 5px;" id=currencyContext'+this.id+
		'></div>';
	
	this.Content.innerHTML = tmp_str;	
	this.currencyContext = $('currencyContext'+this.id);
	this.dateSelectContext = $('dateSelectContext'+this.id);	
}

//-------------------------------------------------------------------------------
__CurrencyRate.prototype.redrawDateSelectForm = function() {	
	
	var self = this;
	var sel_str = '';
	
	var tmp_str = '<form id=dateSelectForm'+this.id+' >';
	tmp_str+= '<table class=std_padding1><tr>';		
	
	tmp_str+= '<td><select name=day style="font-size: 10px;" >';
	
	for(var dayNum = 1; dayNum < 32; dayNum++) {
		zdayNum = addZero(dayNum);
		if(zdayNum == this.currentDay) sel_str = 'selected'; else sel_str = '';
		tmp_str+= '<option '+sel_str+' value="'+zdayNum+'">'+dayNum+'</option>';		
	}
	
	tmp_str+= '</select></td><td><select name=month style="font-size: 10px;" >';
	
	for(var monthNum in Locale.Months) {
		if(Number(monthNum) == Number(this.currentMonth)) sel_str = 'selected'; else sel_str = '';
		tmp_str+= '<option '+sel_str+' value="'+addZero(monthNum)+'">'+Locale.Months[monthNum]+'</option>';		
	}
	
	tmp_str+= '</select></td><td><select name=year style="font-size: 10px;" >';
	
	
	for(var yearNum = 1999; yearNum <= this.nowYear; yearNum++) {
		if(yearNum == this.currentYear) sel_str = 'selected'; else sel_str = '';
		tmp_str+= '<option '+sel_str+' value="'+yearNum+'">'+yearNum+'</option>';		
	}
	
	tmp_str+= '</select></td>';
	
	tmp_str+= '<td><input  type=submit class=std_button value="'+ Locale['ToShow'] +'"></td></tr></table></form>';
	
	this.dateSelectContext.innerHTML = tmp_str;
	
	this.dateSelectForm = $('dateSelectForm'+this.id);	
	this.dateSelectForm.onsubmit = this.ON_dateSelect;
	this.dateSelectForm.xdata = {gadgetObj: self}
}


//-------------------------------------------------------------------------------
__CurrencyRate.prototype.ON_dateSelect = function() {	
	
	
	
	
	var gadgetObj = this.xdata.gadgetObj;		
		
	var dateSelectForm = gadgetObj.dateSelectForm;
	
	
	
	var day = dateSelectForm.day[dateSelectForm.day.selectedIndex].value;
	var month = dateSelectForm.month[dateSelectForm.month.selectedIndex].value;
	var year = dateSelectForm.year[dateSelectForm.year.selectedIndex].value;
	
	var date_str = ''+year+month+day;
		
	var options = {'date': date_str};	
		
	Update.request(gadgetObj.currentClassName, 'module', 'get_rates', { id: gadgetObj.id }, options, true);	
		
	return false;
}

//-------------------------------------------------------------------------------
__CurrencyRate.prototype.redrawCurrencyList = function(data) {	
	var self = this;
	
	var tmp_str = '<div style="font-weight: bold; margin-bottom: 5px;">';
	
	if(this.currentDay == this.nowDay && this.currentMonth == this.nowMonth &&
		this.currentYear == this.nowYear) {
		
		tmp_str+= 'Последние сводки';
		
	}else{
		tmp_str+= 'Сводки на '+this.currentDay+'.'+this.currentMonth+'.'+this.currentYear;
	}
	
	tmp_str+= '</div><table width=100% border=0 class=currencyList>';
	
	/*
	tmp_str+= '<tr><td></td><td ></td><td></td><td></td><td style="text-align: right"><b>знач.</b></td></tr>';
	*/
	
	for(var recordID in this.currencyList) {
		var currency = this.currencyList[recordID];	
	
		if(currency.date) {
			
			var date_array = currency.date.split(/\-/);
					
			var change_color = '-';
			var change_pic = '-';
			
			if(currency.change > 0) change_pic = '<img src="/img/i/str_up.gif" width=7 heght=4 border=0>';
			else	if(currency.change < 0)
					change_pic = '<img src="/img/i/str_down.gif" width=7 heght=4 border=0>';
			
							
			tmp_str+='<tr><td><a href="javascript: void(0);" title="'+ this.lang['ToDeleteQuotation'] +'" id=del_currency'+recordID
				+'><img src="/img/icons/x2.gif" width=12 height=12 border=0></a></td>';
			
			tmp_str+= '<td nowrap>'+date_array[2]+'/'+date_array[1]+'</td>';
			
			tmp_str+='<td nowrap>'+this.sources[currency.sourceID].short_title+'</td>';
			tmp_str+='<td nowrap>1 '+currency.currency1+'</td>';
		
			tmp_str+='<td nowrap  style="text-align: right">'+currency.rate+' '+
			currency.currency2+' </td>';
			
	
			tmp_str+='<td><a href="javascript: void(0)" id=changRate'+	this.id+recordID+' >'+
				change_pic+'</a></td></tr>';	
		
		}else{
			tmp_str+='<tr><td><a href="javascript: void(0);" title="'+ this.lang['ToDeleteQuotation'] +'" id=del_currency'+recordID+
				'><img src="/img/icons/x2.gif" width=12 height=12 border=0></a></td>';
			tmp_str+='<td nowrap>N/A</td>';
			
			tmp_str+='<td nowrap>'+this.sources[currency.sourceID].short_title+'</td>';			
			tmp_str+='<td nowrap>1 '+currency.currency_id+'</td>';		
			tmp_str+='<td nowrap  style="text-align: right">N/A</td></tr>';						
		}
		
	}
	
	tmp_str+= '</table>';	
	
		
	this.currencyContext.innerHTML = tmp_str;
	
	for(var recordID in this.currencyList) {
		var currency = this.currencyList[recordID];
		
		var del_href = $('del_currency'+recordID);
		del_href.onclick = this.ON_deleteCurrency;
		del_href.xdata = {gadgetObj: self, recordID: recordID};
		
		var change_href = $('changRate'+this.id+recordID);
		
		if(currency.change > 0) change_href.change_message = '+'+currency.change;
		else change_href.change_message = currency.change;
		
		change_href.onmouseover = function(e) {  Tooltip.Show(this.change_message, this);};		
		change_href.onmouseout = function() {Tooltip.Hide()};
						
	}	
			
}


//-------------------------------------------------------------------------------
__CurrencyRate.prototype.ON_deleteCurrency = function() {	
	var gadgetObj = this.xdata.gadgetObj;
	var recordID = this.xdata.recordID;
	
	
	var options = {'recordID': recordID};
		
	Update.request(gadgetObj.currentClassName, 'module', 'del_currency', { id: gadgetObj.id }, options, true);	
	
	if(gadgetObj.currencyList[recordID]) {
		delete gadgetObj.currencyList[recordID];
		gadgetObj.redrawCurrencyList();
	}
	
	
	
}


//-------------------------------------------------------------------------------
__CurrencyRate.prototype.redrawMetallListList = function(data) {	
	
	var tmp_str = '<table width=100% border=0 class=currencyList>';
	
	
	tmp_str+= '<tr><td width=100%></td><td></td><td style="text-align: right"><b>'+ this.lang.contr['value'] +'</b></td><td style="text-align: right"><b>'+ this.lang.contr['change'] +'</b></td></tr>';
	
	for(var metallID in this.metalList) {
		var metal = this.metalList[metallID];
	
		var date_array = metal.date.split(/\-/);
		
		var change_color = 'black';
		if(metal.sell_change > 0) change_color = 'green';
			else if(metal.sell_change < 0) change_color = 'red';
						
		tmp_str+='<tr><td class=currencyTitle>'+metal.title+'</td>';
		tmp_str+='<td>'+date_array[2]+'/'+date_array[1]+'</td>';
		tmp_str+='<td>'+metal.sell+'</td>';
		tmp_str+='<td nowrap style="text-align: right; color:'+change_color+'">'+
						metal.sell_change+'</td></tr>';
	}
	
	tmp_str+= '</table>';
		
	this.metallContext.innerHTML = tmp_str;
		
}


//-------------------------------------------------------------------------------
__CurrencyRate.prototype.CB_getSourcesAndCurrencies = function(data) {	
	if(sizeof(data.errors) > 0) alert(data.errors[0].message);
	
	if(!data || !data.variables || !data.variables.currencyList || !data.variables.sourceList) return false;
	var vars = data.variables;
	
	this.currencies = data.variables.currencyList;
	this.sources = data.variables.sourceList;
	
	this.reDrawAddCurrencyForm();
	
}

//-------------------------------------------------------------------------------
__CurrencyRate.prototype.reDrawAddCurrencyForm = function(data) {
	var self = this;
	
	var tmp_str = '<form id=addCurrency'+this.id+
		'><table class=std_padding><tr><td>'+ this.lang['Currency'] +':</td><td><select style="font-size: 10px;" name=currencyID> ';
		
	for(var currencyID in this.currencies) {
		if(currencyID == 'RUR') continue;
		var currency = this.currencies[currencyID];
		tmp_str+= '<option  value="'+currencyID+'">'+
							htmlspecialchars(currency.title)+'</option> ';
	}
	
	tmp_str+= '</select></td></tr>';
	
	tmp_str+= '<tr><td>'+ Locale['Source'] +':</td><td><select name=sourceID style="font-size: 10px;"> ';
	
	for(var sourceID in this.sources) {
		var source = this.sources[sourceID];
		tmp_str+= '<option  value="'+sourceID+'">'+
							htmlspecialchars(source.title)+'</option> ';
	}
	
	tmp_str+= '</select></td></tr>';
	
	tmp_str+= '<tr><td align=right colspan=2><input class=std_button type=submit value="'+ this.lang['ToAddCur'] +'"></td></tr>';	
	
	tmp_str+= '</table></form>';
	
	this.Options.innerHTML = tmp_str;
	
	this.addCurrencyForm = $('addCurrency'+this.id);
	this.addCurrencyForm.xdata = {gadgetObj: self};
	this.addCurrencyForm.onsubmit = this.ON_submitCurrencyForm;
	
}

//-------------------------------------------------------------------------------
__CurrencyRate.prototype.ON_submitCurrencyForm = function() {
	
	var gadgetObj = this.xdata.gadgetObj;
	
	var addCurrencyForm = gadgetObj.addCurrencyForm;
	
	var currencyID = addCurrencyForm.currencyID[addCurrencyForm.currencyID.selectedIndex].value;
	var sourceID = addCurrencyForm.sourceID[addCurrencyForm.sourceID.selectedIndex].value;
		
	var options = {'currencyID': currencyID, 'sourceID': sourceID};
		
	Update.request(gadgetObj.currentClassName, 'module', 'add_currency', { id: gadgetObj.id }, options, true);	
	
	
	
	return false;
	
}


//-------------------------------------------------------------------------------
__CurrencyRate.prototype.Relay = function(data, part) {
		
	switch(data.event.action)
	{
		case 'get_rates':
		case 'add_currency':	
			this.CB_getRates(data);
			break;
		
		case 'get_sources_and_currencies':
			this.CB_getSourcesAndCurrencies(data);
			break;

		default:
			//this.parent.ctrlCallback(dataObj, section);
			return false;
			break;
	}
	
	 if (!part) this.Core.HideLoadingIcon();
	
}