var CalculationResultView = Class.create();

CalculationResultView.prototype = ({

	initialize: function (config)
	{
		//this.order			= config.orderId;
		this.shippingContainer	= config.shippingContainer;
		this.shippingField	= config.shippingField;
		this.shippingSpan	= config.shippingSpan;
		
		this.insuranceContainer	= config.insuranceContainer;
		this.insuranceField	= config.insuranceField;
		this.insuranceSpan	= config.insuranceSpan;
		
		this.inputsContainer = config.container;
		this._RecalculateUrl = config.recalculateUrl;
		this._processText	 = config.calculationProcessText;
		
		this._shippingNoteArea = config.shippingNoteArea;
		this._insuranseNoteArea = config.insuranceNoteArea;
		this._dutyNoteArea		= config.orderDutyNoteArea;
		this._vatNoteArea		= config.orderVatNoteArea;
		
		this._fieldTotalIncludedTaxes 	= 'total_included_taxes';
		this._fieldTotalBeforeTaxes 	= 'cost_before_taxes';
		this._fieldResultDuty 			= 'result_duty';
		this._fieldResultVAT			= 'result_vat';
		
		this._errorNoItemsBlock			= 'no_items_error';
		
		this._inputsEnabled	= false;
		this._checkBoxes	= new Array();
		this.__AjaxRequest = false;
		this.__Timer = false;
		this.showTimeOut    = 100;
		this._PostwaitEffectsStrings = new Array();
		this.defaultResult = new Object({before: 0, 
										vat:0, 
										duty:0,
										total:0, 
										shippingNote: '', insuranseNote: '', vatNote:'', dutyNote: ''});		
		this.isWaitEffect = false;
		Event.observe(document, 'dom:loaded', this._setCatchers.bindAsEventListener(this));
	},

	_setCatchers: function(objEvent)
	{
		this._getDefaulValues();
		this._checkBoxes = $(this.inputsContainer).select('input[type="checkbox"]');
		
		for(var i=0; i< this._checkBoxes.length; i++ )
		{
			Event.observe(this._checkBoxes[i], 'click', this._enableInputs.bindAsEventListener(this,this._checkBoxes[i]));
		}
		Event.observe( $(this.shippingField), 'keyup' , this._preRequest.bindAsEventListener(this) );
		Event.observe( $(this.insuranceField), 'keyup' , this._preRequest.bindAsEventListener(this) );
		
	},
	
	_getDefaulValues: function()
	{
		this.defaultResult.total 	= $(this._fieldTotalIncludedTaxes).innerHTML;
		this.defaultResult.before 	= $(this._fieldTotalBeforeTaxes).innerHTML;
		this.defaultResult.duty		= $(this._fieldResultDuty).innerHTML;
		this.defaultResult.vat		= $(this._fieldResultVAT).innerHTML;
		
		this.defaultResult.shippingNote		= $(this._shippingNoteArea).innerHTML;
		this.defaultResult.insuranseNote	= $(this._insuranseNoteArea).innerHTML;
		this.defaultResult.vatNote			= $(this._vatNoteArea).innerHTML;
		this.defaultResult.dutyNote			= $(this._dutyNoteArea).innerHTML;
		
	},
	
	_setDefaultValues: function()
	{
		$(this._fieldTotalIncludedTaxes).innerHTML = this.defaultResult.total;
		$(this._fieldTotalBeforeTaxes).innerHTML = this.defaultResult.before;
		$(this._fieldResultDuty).innerHTML = this.defaultResult.duty;
		$(this._fieldResultVAT).innerHTML = this.defaultResult.vat;
		
		$(this._shippingNoteArea).innerHTML = this.defaultResult.shippingNote;
		$(this._insuranseNoteArea).innerHTML = this.defaultResult.insuranseNote;
		$(this._vatNoteArea).innerHTML		= this.defaultResult.vatNote;
		$(this._dutyNoteArea).innerHTML = this.defaultResult.dutyNote;		
	},
	
	_enableInputs: function( objEvent, currentCheckBox )
	{
		//alert(currentCheckBox.checked);
		if(currentCheckBox.checked){
			currentCheckBox.up('tr').className = currentCheckBox.up('tr').className.replace("blueRowDis", "blueRow");
			var isHasUnchecked = false;
			for(var i=0; i < this._checkBoxes.length; i++){
				if( !this._checkBoxes[i].checked ){
					isHasUnchecked = true;
				}
			}
			if( !isHasUnchecked){
				$(this.insuranceContainer).hide();
				$(this.insuranceSpan).show();				
				
				$(this.shippingContainer).hide();
				$(this.shippingSpan).show();
				this._inputsEnabled = false;
				this._setDefaultValues();
			} else {
				this._recalculate(null);
				$(this._errorNoItemsBlock).hide();
			}
			
		} else { //if(currentCheckBox.checked) - false
			currentCheckBox.up('tr').className = currentCheckBox.up('tr').className.replace("blueRow", "blueRowDis"); 
			if(!this._inputsEnabled){
				$(this.insuranceSpan).hide();
				$(this.insuranceContainer).show();
				
				$(this.shippingSpan).hide();
				$(this.shippingContainer).show();
				this._inputsEnabled = true;
			}
			var isHasEnabled = false;
			for(var i=0; i < this._checkBoxes.length; i++){
				if( this._checkBoxes[i].checked ){
					isHasEnabled = true;
				}
			}
			if( !isHasEnabled ){
			$(this._errorNoItemsBlock).show();
			} else {			
				this._recalculate(null);
			}
		}//end if(currentCheckBox.checked) - else
		
	},
	
	_preRequest: function( objEvent )
	{
		var key = objEvent.which || objEvent.keyCode;
        
        if( this.__AjaxRequest) return;
		if (this.__Timer) clearTimeout(this.__Timer);
		this.__Timer = window.setTimeout(function() {
			this._recalculate(key)
		}.bind(this), this.showTimeOut);
		
	},
	
	_recalculate: function( key )
	{
		var keys = [Event.KEY_TAB, Event.KEY_LEFT, Event.KEY_UP, Event.KEY_DOWN, Event.KEY_RIGHT, 
					13 /*Enter*/, 
					36 /*Home*/,
					35 /*End*/
					];
		var link = this._RecalculateUrl;
		var separator = '?';

		if ( keys.indexOf(key) == -1 && this._checkFields() )
		{
			for(var i=0; i< this._checkBoxes.length; i++)
			{
				if( this._checkBoxes[i].checked ) {
					link += separator + 'prods[]='+this._checkBoxes[i].value;
					separator = '&';
				}
			}
			var shippingValue 	= $(this.shippingField).value;
			var insuranceValue 	= $(this.insuranceField).value; 
			link +=separator +'shipping=' + shippingValue + separator + 'insurance='+ insuranceValue;
			
			if (!this.isWaitEffect)
				this._waitEffect();
			
			this.__AjaxRequest = new Ajax.Request(link, {
	    	    'onSuccess': this._setnewResult.bindAsEventListener(this,shippingValue,insuranceValue)});
		
		} //end if( this._checkFields() ){
		return false;
	},
	
	_setnewResult: function(objResponse, shipping, insuranse)
	{
		var calcResult = objResponse.responseJSON;
		$(this._fieldTotalIncludedTaxes).innerHTML = calcResult.cost_including_taxes;
		$(this._fieldTotalBeforeTaxes).innerHTML = calcResult.cost_before_taxes;
		$(this._fieldResultDuty).innerHTML		 = calcResult.duty;
		$(this._fieldResultVAT).innerHTML		 = calcResult.vat;
		$(this._insuranseNoteArea).innerHTML 	= calcResult.insuranse_note;
		$(this._shippingNoteArea).innerHTML 	= calcResult.shipping_note;
		$(this._vatNoteArea).innerHTML			= calcResult.vat_note;
		$(this._dutyNoteArea).innerHTML			= calcResult.duty_note;
						
		this._stopWaitEffect();
		
		this.__AjaxRequest = null;
		clearTimeout(this.__Timer);
		 
		if( shipping != $(this.shippingField).value || insuranse != $(this.insuranceField).value){
			this._recalculate(null);
		}		
		return true;
	},
	
	
	
	_checkFields: function()
	{
		var isValid = true;
		if( !$(this.insuranceField).value || !isValidNumber($(this.insuranceField).value) ){
			$(this.insuranceField).style.border = "2px solid red";
			$(this.insuranceField).focus();
			isValid = false;
		} else {
			$(this.insuranceField).style.border = "1px solid #C3C3C3";
		}

		if( !$(this.shippingField).value || !isValidNumber($(this.shippingField).value) ){
			$(this.shippingField).style.border = "2px solid red";
			$(this.shippingField).focus();
			isValid = false;
		}else {
			$(this.shippingField).style.border = "1px solid #C3C3C3";
		}
		
		return isValid;
	},
	
	_waitEffect: function()
	{
		this.isWaitEffect = true;
		var allElems = $(this.inputsContainer).select('td.results_title');
		var maxWidth = 0;
		for(var i=0; i< allElems.length; i++){
			this._PostwaitEffectsStrings[i] = allElems[i].innerHTML;
			maxWidth = Math.max(maxWidth,allElems[i].getWidth() );
			allElems[i].innerHTML = this._processText;
		}
		//return true;
		for(var i=0; i< allElems.length; i++){
			allElems[i].style.width = parseInt(maxWidth - 24) + 'px';
			//allElems[i].style.width = maxWidth + "px";
		}
	},
	
	_stopWaitEffect: function()
	{
		this.isWaitEffect = false;
		var allElems = $(this.inputsContainer).select('td.results_title');
		for(var i=0; i< allElems.length; i++){
			//allElems[i].style.width = ""; 
			allElems[i].innerHTML = this._PostwaitEffectsStrings[i];
		}		
	}	
});
