
// -----------------------------------------------------------------------------------------------------
//
//   CETELEM Client Side
//   Version 1.0, Modified: 03.05.2010
//	 Copyright 2010 by Stupar Alexandru, ASTINVEST COM SRL. All rights reserved.
//	 Contact office@devstudio.ro, www.devstudio.ro
//   
// -----------------------------------------------------------------------------------------------------

var Cetelem = (function() 
{
	return {		

		Forms: {
				"PaymentForm"        : "frmPay",
				"PaymentMethodName"  : "chkOnline",
				"PaymentMethodValue" : 2
			},
		
		Initialized: -1,
		WebsiteProtocol: '',	
		WebsiteAddress: '',
			
		RequestsPath: 'cetelem/requests/index.php',
		RequestsAddress: '',
		
		HTTPCetelem: null,
		Cache: new Array(),
		CachedResponse: '',
		
		Basket: {
				"GoodsCode"  : 0,
				"Simulation" : {
						"Period" 	  : 0,
						"Installment" : 0,
						"Interest"    : 0,
						"DAE" 		  : 0,
						"Income" 	  : 0
					},
				"Durations" : {
						"Minimum"     : 0,
						"Maximum"     : 0	
					},
				"Totals" : {
						"TotalWOVAT"  : 0,
						"TotalVAT"    : 0,
						"TotalWVAT"   : 0 
					}
				},					
		
		Initialize: function()
		{
			this.RequestsAddress = this.WebsiteProtocol + this.WebsiteAddress + '/' + this.RequestsPath;
			this.HTTPCetelem = this.CreateRequest();
			
		},
		
		GetElement: function (elementname)
		{			
			if (document.getElementById)
				if (document.getElementById(elementname))					
					return document.getElementById(elementname);

			if (document.getElementsByName)
				if (document.getElementsByName(elementname)[0])	
					return document.getElementsByName(elementname)[0];
					
			if (document.all)
				return eval('document.all.' + elementname);
					
			if (document.layers)
				return eval('document.layers.' + elementname);					
			
		},
		
		CreateRequest: function()
		{
			var request;

			if (window.XMLHttpRequest)
			{
				request = new XMLHttpRequest();
		
				if (request.overrideMimeType)
					request.overrideMimeType('text/xml');
		
				return request;
		
			}
			else if (window.ActiveXObject)
			{
				var versions = new Array("Microsoft.XmlHttp", "MSXML2.XmlHttp", "MSXML2.XmlHttp.3.0", "MSXML2.XmlHttp.4.0", "MSXML2.XmlHttp.5.0");
		
				for (var i = versions.length - 1; i >= 0; i--)
				{
					try 
					{
						request = new ActiveXObject(versions[i]);
						return request;
		
					} catch(e) {}
		
				}
		
			}
			throw new Error('Could not create CETELEM Request!');
			
		},
		
		GetRadioValue: function(formname, elementname)
		{
			var i;
			var selectelement;
			var isselected = 0;
				
			var elementobj = eval('document.' + formname + '.' + elementname);
				
			for (i = 0; i < elementobj.length; i++)
			{
				if (elementobj[i].checked)
				{
					selectelement = elementobj[i].value;
					var isselected = 1;
							
				}
		
			}
		
			if (isselected == 0)
			{
				return false;
				
			}
			else
			{
				return selectelement;	
				
			}
			
		},
		
		Implode: function(glue, pieces) 
		{
		    var i = '';
		    var retVal = '';
		    var tGlue = '';
		    
		    if (arguments.length === 1) 
		    {        
		    	pieces = glue;
		        glue = '';
		        
		    }
		    
		    if (typeof(pieces) === 'object') 
		    {
		        if (pieces instanceof Array) 
		        {            
		        	return pieces.join(glue);
		        	
		        }
		        else 
		        {
		            for (i in pieces) 
		            {
		                retVal += tGlue + pieces[i];                
		                tGlue = glue;
		                
		            }
		            
		            return retVal;
		            
		        }
		        
		    }    
		    else 
		    {
		        return pieces;
		        
		    }
		    
		},
		
		SizeOf: function(Elements)
		{
			var Count = 0;
			for (var i in Elements)
				Count = Count + 1;
				
			return Count;
				
		},
		
		InitializeTransaction: function()
		{
			if (this.GetRadioValue(this.Forms["PaymentForm"], this.Forms["PaymentMethodName"]) == this.Forms["PaymentMethodValue"])
			{
				if (this.Initialized == 1)
				{
					if (this.GetRadioValue(this.Forms["PaymentForm"], "AlgorithmID") == false)
					{
						alert('Va rugam alegeti o varianta din optiunile de durata a creditului pentru a continua!');
					
						return false;
								
					}
					else
					{
						if (typeof(this.Basket["Simulation"]) != 'undefined')
						{
							Arguments = { 
									0 : {"Name" : "OrderAmount", 		 "Value" : this.Basket["Totals"]["TotalWVAT"]},
									1 : {"Name" : "OrderGoodsCode", 	 "Value" : this.Basket["GoodsCode"]},
									2 : {"Name" : "DesiredLoadDuration", "Value" : this.Basket["Simulation"]["Period"]},
									3 : {"Name" : "MonthlyPayment", 	 "Value" : this.Basket["Simulation"]["Installment"]},
									4 : {"Name" : "OrderDownPayment", 	 "Value" : 0}
								};
								
							var Response = this.SendRequest(this.HTTPCetelem, "InitializeTransaction", Arguments).split(";");
						
							if (Response[0] == 1) 
							{
								var SplittedResponse = Response[1].split("|");
								
								this.GetElement('CetelemRedirectURL').value = SplittedResponse[0];						
								this.GetElement('RequestID').value = SplittedResponse[1];
								this.GetElement('TransactionID').value = SplittedResponse[2];
								this.GetElement('BasketID').value = SplittedResponse[3];
							
							}
							else 
							{
								alert('Serviciul de plata folosind rate CETELEM este temporar indisponibil. Va rugam reveniti sau alegeti o alta modalitate de plata!');	
								
							}
								
							return Response[0];
							
						}
						else
						{
							alert('Serviciul de plata folosind rate CETELEM este temporar indisponibil. Va rugam reveniti sau alegeti o alta modalitate de plata!');
					
							return false;
							
						}
						 
					}
						
				}
				else
				{
					alert('Serviciul de plata folosind rate CETELEM este temporar indisponibil. Va rugam reveniti sau alegeti o alta modalitate de plata!');
					
					return false;
					
				}	

			}
			
		},
		
		LoanSimulator: function()
		{
			var Arguments = {
					0 : {"Name" : "OrderAmount",   		 "Value" : this.Basket["Totals"]["TotalWVAT"]},
					1 : {"Name" : "OrderGoodsCode",		 "Value" : this.Basket["GoodsCode"]},
					2 : {"Name" : "DesiredLoadDuration", "Value" : this.GetElement('DesiredLoanDuration').value},
					3 : {"Name" : "OrderDownPayment", 	 "Value" : 0},
					4 : {"Name" : "AlgorithmID",	 	 "Value" : this.GetRadioValue(this.Forms["PaymentForm"], 'AlgorithmID')}
				};

			if (this.GetRadioValue(this.Forms["PaymentForm"], 'AlgorithmID') == "PLV") this.GetElement('DesiredLoanDuration').disabled = false;
				else this.GetElement('DesiredLoanDuration').disabled = true;
				
			var Response = this.SendRequest(this.HTTPCetelem, "LoanSimulator", Arguments).split(";");
			
			if (Response[0] == 0)
			{
				this.GetElement('CetelemSimulatorOutput').style.display = 'none';
				alert('Serviciul de plata folosind rate CETELEM este temporar indisponibil. Va rugam reveniti sau alegeti o alta modalitate de plata!');
				
			}
				
			if (Response[0] == 1)
			{
				Response[1] = Response[1].split("&");
				
				this.GetElement('CetelemSimulatorOutput').style.display = 'block';
				
				this.Basket["Simulation"] = {
						"Period" 	  : Response[1][0],
						"Installment" : Response[1][1],
						"Interest" 	  : Response[1][2],
						"DAE" 		  : Response[1][3],
						"Income" 	  : Response[1][4]
					};	
				
				this.GetElement('CetelemPeriod').innerHTML = Response[1][0] + " luni";
				this.GetElement('CetelemInstallment').innerHTML = Response[1][1] + " lei / luna";
				this.GetElement('CetelemInterest').innerHTML = Response[1][2] + " %";
				this.GetElement('CetelemDAE').innerHTML = Response[1][3] + " %";
				this.GetElement('CetelemIncome').innerHTML = Response[1][4] + " lei";
				
			}
			
		},
		
		LoadLoanSimulator: function(GoodsCode, TotalWOVAT, TotalVAT, TotalWVAT, DurationMinimum, DurationMaximum)
		{			
		 	this.UnloadLoanSimulator();

		 	this.Basket = {
		 			'GoodsCode'    : GoodsCode,
		 			'Totals' : {
		 				"TotalWOVAT" : TotalWOVAT,
		 				"TotalVAT"   : TotalVAT,
		 				"TotalWVAT"  : TotalWVAT
		 			}
		 		};
		 		
			var Table = document.createElement("Table");
			Table.setAttribute('id', 'CetelemPayment');
			Table.setAttribute('name', 'CetelemPayment');
			
			var TableRow = Table.insertRow(0);
			var TableCell = TableRow.insertCell(0);      
			
			var Arguments = {
					0 : {"Name" : "DurationMinimum", "Value" : DurationMinimum},
					1 : {"Name" : "DurationMaximum", "Value" : DurationMaximum}
				};
			
			TableCell.innerHTML = this.SendRequest(this.HTTPCetelem, "InitializeLoanSimulator", Arguments);
			 
			this.GetElement('CetelemWrapper').appendChild(Table);
			 
		},
		
		UnloadLoanSimulator: function() 
		{
			var Wrapper = this.GetElement('CetelemWrapper');
		 	for (var i = 0; i < Wrapper.children.length; i++)
		 		if (Wrapper.children[i].getAttribute('id') == 'CetelemPayment')
		 			Wrapper.removeChild(Wrapper.children[i]);
				
		},
		
		SendRequest: function(HTTP, ActionName, Arguments)
		{
			if (typeof(Arguments) == 'undefined')
				var Arguments = new Array();
				
			var Timestamp = new Date();
			var ArgumentsList = new Array();
			
			if (this.SizeOf(Arguments) > 0)
			{
				for (var i = 0; i < this.SizeOf(Arguments); i++)
					ArgumentsList[i] = Arguments[i]["Name"] + "=" +	Arguments[i]["Value"];
					
				ArgumentsList = "&" + this.Implode("&", ArgumentsList);
				
			}
						
			HTTP.open("GET", this.RequestsAddress + '?ActionName=' + ActionName + ArgumentsList + '&Timestamp=' + Timestamp.getTime(), false);
			HTTP.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
			
			HTTP.onreadystatechange = function()
			{
				if (HTTP.readyState == 4)
					Cetelem.CachedResponse = HTTP.responseText;
					
			}
			
			HTTP.send(null);	
			
			this.Cache['Response'] = Cetelem.CachedResponse;
			
			return this.Cache['Response'];
			
		}			
		
	};
			
})();
