var ExpireRates = {
	container: null,
	currNumberRecords: null,
	assetId: 0,
	today: 0,
	
	expiryGraphDialog: null,
	//height and width needed for ie bug fix
	bodyHeight: $('body').height(),
	bodyWidth:  $('body').width(),

	init: function(){
		ExpireRates.container = $('div.container');
		ExpireRates.container.find('select#asset').selectbox(
				{
					inputClass: 'selectboxBigLong',
					containerClass: 'selectbox-wrapperBig',
					scrollBar: true,
					hoverClass: 'selectHover',
					onChange :ExpireRates.assetChanged
				}
		)
		//Calendar setup
		
		Calendar.setup({
		      inputField  : "chooseDate",         // ID of the input field
		      ifFormat    : "%d/%m/%y",    // the date format
		      button      : "chooseDateTrigger",       // ID of the button
		      timeFormat  : 24,
		      showsTime   :false,
		      displayArea :'todayDateMSQLFormat',
		      daFormat    : "%Y-%m-%d",
		      onClose 	  : ExpireRates.filterExpireRates
    		});
    	
    	ExpireRates.today = ExpireRates.container.find('input#chooseDate').val();
    	ExpireRates.filterExpireRates();
    	//events
    	//dialog
    	


    	ExpireRates.expiryGraphDialog = $('div#expiryGraphDialog').dialog({
			autoOpen: 		false,
			modal:    		true,
			width:   	 	570,
			height:   		460,
			zIndex: 		2000,
			resizable: 		false,
			draggable: 		false,
			dialogClass: 	'expiryGraphDialog',
			open: function(event, ui) {

				//fixes nasty ie bug that for some reason scrools ths page
				//after platfrom opened

				$(".ui-widget-overlay").addClass('expiryGraphDialogOverlay')



	},
			close: function(event, ui){
				$('iframe#expiryGraphIframe').attr('src', '');
			}


		});


	},
	  /**
	*	every change of time value (Lightstreamer)
	*	we call to 'onUpdateTime' function
	*
	**/
	onUpdateTime: function() {
		
	},
	assetChanged: function(name, value, element){
		ExpireRates.assetId = parseInt(value);
		ExpireRates.filterExpireRates(null, null, null, null);
	},
	paginationConfig: function(numberRecords, onChange){
		//delete back and next button
		//because will created below
		ExpireRates.currNumberRecords = parseInt(numberRecords);
		ExpireRates.container.find('.back *, .next *').remove();
		
		jPagination.init ( { 	containers : { // HTML Elements - Wrapped in jQuery(!)
	 							 first : $('#paginationContainer .first'), 
	 							 back : $('#paginationContainer .back'),
	 							 pagination : $('#paginationContainer .pagination'),
                                 next : $('#paginationContainer .next'), last : $('#paginationContainer .last')					
	 						}, 
	 						pagination : { // Integers
	 							recordsNum : numberRecords, recordsPerPage : 20,
	 							pagesToShow : 10
	 						}, 
	 						callbacks : { // Callbacks
	 						onChange : onChange		
	 						},
							strings : {		// Strings
									first : '<<', 		// 'First page' string
									back : '<',// 'Back page' 	string
									next : '>',// 'Next page' 	string
									last : '>>',		// 'Last page' 	string
									seperator : ''		// Seperator 	string
							}
							
	 					});
	},
	
	pageChange: function(e, limitStart, limitOffset, pageNum){
	 	$.post(AppData.url + AppData.pageId + '/getExpiredRates', 
			   {limitStart: limitStart, limitOffset: limitOffset, pageNum: pageNum, clientId: AppData.pageParams}, 
			   ExpireRates.replaceExpireRates,'json');
	 	
	 },
	 
	 replaceExpireRates: function(rates){
	 	if(!ExpireRates.currNumberRecords){
			if(!ExpireRates.isShownRecordsMessage())ExpireRates.showNoRecordsMessage();
		}
		else{
			if(ExpireRates.isShownRecordsMessage()) ExpireRates.hideNoRecordsMessage();
		}
	 	
	 	var tbodyContainer = ExpireRates.container.find('table#expireRatesTable tbody');
	 	tbodyContainer.children('tr.odd, tr.even').remove();
	 	$.each(rates, function(key, rate){
	 		if(key %2 == '0')
	 			var className = 'odd';
	 		else	
	 			var className = 'even';
	 		
	 		var html = '<tr class="' + className + '" optionid="' + rate['id'] + '">';
	 		html += '<td class="leftTd">' + rate.assetName + '</td>';
	 		html += '<td>' + rate.endRate + '</td>';
	 		html += '<td>' + rate.endDateFormatted + '</td>';
	 		html +='</tr>';
	 		tbodyContainer.find('tr.last').before(html);
	 		
	 		
	 	
	 	});
	 	/* works fine, Iftach asked to disable this feture temporiary */
	 		ExpireRates.container.find('table#expireRatesTable tbody tr td').click(ExpireRates.showExpiryGraph);
	 },
	
	 /** Filter by all fields: 
	  *	type
	  * request time -> start
	  *	request time -> end
	**/
	filterExpireRates: function(e, limitStart, limitOffset, pageNum){
		if (typeof calendar == 'object') 
			calendar.hide();

		if(limitStart == null){
			limitStart = 0;
			limitOffset = 20;
			pageNum = 1;
		}
		
				
		var assetFilter = ExpireRates.assetId;
		var endDateFilter = ExpireRates.container.find('span#todayDateMSQLFormat').text();
		
		$.post(AppData.url + AppData.pageId + '/getExpiredRatesFiltered', 
				{
					assetId: assetFilter,
					endDate: endDateFilter,
				 	limitStart: limitStart,
				 	limitOffset: limitOffset,
				 	pageNum: pageNum
				}, 
				function(rates){
						///reconfig jPagination
							
						// all filter fields has their defaults values
						if(assetFilter == 0 &&  endDateFilter == ExpireRates.today)
							ExpireRates.paginationConfig(AppData.numberRecords, ExpireRates.pageChange);
						else{
							if(pageNum == 1)
								ExpireRates.paginationConfig(rates.numberRecords, ExpireRates.filterExpireRates);
						}		
						delete rates.numberRecords;
						//insert filtered calls to the table
						ExpireRates.replaceExpireRates(rates)
				}, 
		'json');
	},
	
	showNoRecordsMessage: function(){
		var trContainer = ExpireRates.container.find('tr.noRecords');
		ExpireRates.container.find('tr#lastRow').attr('class', '').addClass('specialLast');
		trContainer.removeClass('hidden');
	},
	
	hideNoRecordsMessage: function(){
		var trContainer = ExpireRates.container.find('tr.noRecords');
		ExpireRates.container.find('tr#lastRow').attr('class', '').addClass('last');
		trContainer.addClass('hidden');
	},
	
	isShownRecordsMessage: function(){
		
		var trContainer = ExpireRates.container.find('tr.noRecords');
		if(trContainer.hasClass('hidden')) return false;
		else return true;
	},

        showExpiryGraph: function(e){
		var optionId = $(e.target).parent().attr('optionid');
		ExpireRates.expiryGraphDialog.dialog('open');

		$('iframe#expiryGraphIframe').attr('src', AppData.url + 'ExpiryGraph/index/' + optionId)
									 .removeClass('hidden');

		$('div.expiryGraphDialogOverlay').height(bodyHeight)
	}
}



		





$(document).ready(function() { 
	ExpireRates.init();
}); 
