/**
	This class is used to control the KnockOutMap  
	
	$Log: revConMap_v1.js,v $
	Revision 1.2  2011/07/05 14:30:53  cvsosir
	*** empty log message ***
	
	Revision 1.1  2009/11/25 09:32:23  cvsosir
	*** empty log message ***
	
	Revision 1.4  2009/11/24 09:00:35  cvsosir
	*** empty log message ***
	
	Revision 1.3  2009/10/12 09:44:34  cvsosir
	*** empty log message ***
	

	Revision 1.1  2009/05/25 15:27:05  cvsosir
	*** empty log message ***
*/
function RevConMap (basiswert, ansicht, puffer, maturity, maxperfpa)
{
	//keeps the underlyings the user can choose
	var underlyingStore = new Ext.data.Store ({
		reader: new Ext.data.JsonReader({
			fields: ['id', 'underlying', 'underlyingisin'],
			root: 'underlyings'
			}),
		proxy: new Ext.data.HttpProxy({
				url:'/!GetRevConMapUnderlyings' 
		})
	});
	underlyingStore.load();
	
	if (basiswert!="") {
		basiswert = decodeURIComponent(basiswert);
		basiswert = basiswert.replace(/Â®/g,"®");
		if (basiswert.indexOf("|") != -1) {
			tmpBasiswert = basiswert.split("|");
			var sUnderlying = tmpBasiswert[0];
			var sUnderlyingISIN = tmpBasiswert[1];
		} else {
			var sUnderlying="DAX®-Werte";
			var sUnderlyingISIN="special_dax";
		}
	} else {
		var sUnderlying="DAX®-Werte";
		var sUnderlyingISIN="special_dax";
	}
	var sPuffer=";cbPuffer_01;cbPuffer_02;cbPuffer_03;cbPuffer_04;cbPuffer_05;";
	var pufferValues = new Array();
	tmp = sPuffer;
	tmp = tmp.substring(1, tmp.length-1);
	var pufferArray = tmp.split(";");
	var sExpire="";
	var sSliderValues="";
	var sExpire = "";
	var sMaxPerf = "";
	var iAxes = 0;
	var url="/!GetRevConMap";
	var bPufferAllChecked = false;
	var bPufferMoreThanOneChecked = false;
	var chartWidth=870;
	var chart = new SWFObject("/flash/amxy/amxy.swf", "chart", chartWidth, "500", "8", "#FFFFFF");
	//chartObj can be used to maipulate the swf chart by js
	var chartObj =null;
	var StartUp = true;
	//Text der im "puffer-infobereich" angezeigt wird:
	var pufferText = new Array();
	pufferText[0] = "Alle gewählten Produkte haben die Eigenschaft, dass der Kurs der Basiswerte bis zum Bewertungstag  um mindestens 20% steigen muss, damit die maximale Rendite der Aktien-/ Indexanleihen erzielt werden kann.";
	pufferText[1] = "Je nach Produkt muss der Kurs der Basiswertes bis zum Bewertungstag  um 5% bis 20% steigen, damit die maximale Rendite erzielt werden kann.";
	pufferText[2] = "-5% bis 0% bedeutet, dass je nach Produkt der Kurs des Basiswertes bis zum Bewertungstag  um maximal 5% steigen muss, damit die maximale Rendite erzielt werden kann.<br/><br/>0% bis +5% bedeutet, dass je nach Produkt der Kurs der Basiswertes bis zum Bewertungstag  um maximal 5% fallen darf, damit die maximale Rendite erzielt werden kann.";
	pufferText[3] = "Je nach Produkt darf der Kurs der Basiswertes bis zum Bewertungstag  um 5% bis 20% fallen, damit die maximale Rendite erzielt werden kann.";
	pufferText[4] = "Alle gewählten Produkte haben die Eigenschaft, dass der Kurs der Basiswerte bis zum Bewertungstag  um mindestens 20% fallen darf, damit die maximale Rendite der Aktien-/ Indexanleihen erzielt werden kann.";


	var frmUnderlying = new Ext.form.FormPanel({
			renderTo:'frmUnderlying',
			frame: false,
			border:false,
			bodyBorder:false,
			width: 200,   
			bodyStyle: "background-color:#EDF3F7;padding:10px",
			items: [
				{
					xtype: 'combo',
					emptyText: sUnderlying, //'DAX®-Werte',
					listeners: {select:  handleUnderlyingSelection},
					name: 'Basiswert',
					hideLabel: true,
					mode: 'local',
					store: underlyingStore,
					displayField: 'underlying',
					width: 180,
					maxHeight : 160,
					typeAhead: true,
					triggerAction: 'all',
					forceSelection:true
				}
			]
		});
		
	var Checked = new Array();
	for (var i=0; i<(pufferArray.length); i++){
		if (puffer.indexOf(pufferArray[i]) != -1) {
				Checked.push(true);
			} else {
				Checked.push(false);
			}
		}
		
	var frmPuffer = new Ext.form.FormPanel({
		renderTo:'frmPuffer',
		frame: false,
		border:false,
		bodyBorder:false,
		width: 200,
		bodyStyle: "background-color:#EDF3F7;padding:10px;padding-top:7px;",
		items: [
		{
			xtype: 'checkbox',
			checked: Checked[0],
			hideLabel:true,
			boxLabel:'<img class="icon" src="images/icons/icon_square_1.gif" /> &lt;-20% Puffer <a rel="'+pufferText[0]+'"><img style="vertical-align:middle; margin: 0px 0px 0px 50px;" src="/images/main/icon_info.gif" alt="Info" title="Info" onmouseover="createToolTip(this.parentNode);" border="0" height="16" width="16"></a>',
			name: 'cbPuffer_01',
			category:'cbPuffer_01',
			listeners: {check: handleCheckEvent}
		},
		{
			xtype: 'checkbox',
			checked: Checked[1],
			hideLabel:true,
			boxLabel:'<img class="icon" src="images/icons/icon_square_2.gif" /> -20% bis -5% Puffer <a rel="'+pufferText[1]+'"><img style="vertical-align:middle; margin: 0px 0px 0px 14px;" src="/images/main/icon_info.gif" alt="Info" title="Info" onmouseover="createToolTip(this.parentNode);" border="0" height="16" width="16"></a>',
			name: 'cbPuffer_02',
			category:'cbPuffer_02',
			listeners: {check: handleCheckEvent}
		},
		{
			xtype: 'checkbox',
			checked: Checked[2],
			hideLabel:true,
			boxLabel:'<img class="icon" src="images/icons/icon_square_3.gif" /> -5% bis 5% Puffer <a rel="'+pufferText[2]+'"><img style="vertical-align:middle; margin: 0px 0px 0px 25px;" src="/images/main/icon_info.gif" alt="Info" title="Info" onmouseover="createToolTip(this.parentNode);" border="0" height="16" width="16"></a>',
			name: 'cbPuffer_03',
			category:'cbPuffer_03',
			listeners: {check: handleCheckEvent}
		},
		{
			xtype: 'checkbox',
			checked: Checked[3],
			hideLabel:true,
			boxLabel:'<img class="icon" src="images/icons/icon_square_4.gif" /> 5% bis 20% Puffer <a rel="'+pufferText[3]+'"><img style="vertical-align:middle; margin: 0px 0px 0px 22px;" src="/images/main/icon_info.gif" alt="Info" title="Info" onmouseover="createToolTip(this.parentNode);" border="0" height="16" width="16"></a>',
			name: 'cbPuffer_04',
			category:'cbPuffer_04',
			listeners: {check: handleCheckEvent}
		},
		{
			xtype: 'checkbox',
			checked: Checked[4],
			hideLabel:true,
			boxLabel:'<img class="icon" src="images/icons/icon_square_5.gif" /> &gt; 20% Puffer <a rel="'+pufferText[4]+'"><img style="vertical-align:middle; margin: 0px 0px 0px 50px;" src="/images/main/icon_info.gif" alt="Info" title="Info" onmouseover="createToolTip(this.parentNode);" border="0" height="16" width="16"></a>',
			name: 'cbPuffer_05',
			category:'cbPuffer_05',
			listeners: {check: handleCheckEvent}
		}]
	});

	function init()
	{	//erst beginnen, wenn alle beide slider komplett aufgebaut sind...
		if ((sliders.length >= 2))
		{
			//initializing the flash chart
			chart.addVariable("path", "flash/amxy/");
			chart.addParam("wmode","opaque");
			chart.addVariable("chart_id", "chart"); 
			applyFilterSettings();
			chart.addVariable("settings_file", encodeURIComponent(url+ '?sessionId=' + GLOBALSESSIONID + '&sConfig=true&axes='+iAxes));
			chart.addVariable("data_file", encodeURIComponent(url+ '?sessionId=' + GLOBALSESSIONID + '&sUnderlying='+ sUnderlying + '&sUnderlyingISIN=' + sUnderlyingISIN + '&sExpire=' + sExpire+ '&sPuffer='+sPuffer+'&iAxes='+iAxes+'&sMaxPerf='+sMaxPerf));
			chart.write("chartContainer");
			chartObj = document.getElementById('chart');
			StartUp = false;
			loadChart();
		} else {
			setTimeout(init, 250);
		}
	}


	function applyFilterSettings()
	{	
		try
		{
			today = document.getElementById("today");
		}
		catch(err)
		{
			//alert("catch: "+today);
		}
		if ((sliders.length >= 2) && (today != null))
		{
			//ansicht:
			//werte: 0/1/2
			if ((ansicht != "") && (ansicht != null)) {
				radioButton = document.getElementById("achsen"+ansicht); 
				if (radioButton != null)
				{
					radioButton.checked = "true";
					iAxes = ansicht;
				}
			}
			//sExpire=2009-10-14|2011-10-26
			sToday = today.innerHTML;
			if ((maturity != "") && 
				(maturity != sToday+"|-1") && 
				(maturity != null))
			{
				sExpire = maturity;
				data = maturity.split("|");
				if ((data[0] != "-1") && (sliders[0]!=null)) {
					sliders[0].setValue(data[0], 0);
				}
				if ((data[1] != "-1")  && (sliders[0]!=null)){
					sliders[0].setValue(data[1], 1);
				}
			}
			if ((maxperfpa != "") && (maxperfpa != "0|-1"))
			{
				data = maxperfpa.split("|");
				if ((data[0] != "-1")  && (sliders[1]!=null)) {
					sliders[1].setValue(data[0],0);
				}
				if ((data[1] != "-1")  && (sliders[0]!=null)){
					sliders[1].setValue(data[1],1);
				}
			}
			makeFilterText();
		} else {
			setTimeout(applyFilterSettings, 300);
		}
	}

	function makeFilterText()
	{
		txtArea = document.getElementById("txtAbstandSchwelle");
		sToday = document.getElementById("today");
		if ((sliders.length >= 2) && (txtArea!=null) && (sToday!=null))
		{
			iFilterCount = 0;
			sFilterText = "";
			checkPuffer();
			if ((bPufferAllChecked == false) && (bPufferMoreThanOneChecked == true))
			{
				sFilterText = sFilterText +"<br />&nbsp;&nbsp;<img src='/images/main/bg_pfeil_rot.gif'> Puffer";
				iFilterCount = iFilterCount +1;
			}
			//Fälligkeit:
			
			if ((sExpire != "") && (sExpire != sToday.innerHTML+"|-1"))
			{
				sFilterText = sFilterText +"<br />&nbsp;&nbsp;<img src='/images/main/bg_pfeil_rot.gif'> F&auml;lligkeit";
				iFilterCount = iFilterCount +1;
			}
			if ((sMaxPerf != "") && (sMaxPerf != "0|-1"))
			{
				sFilterText = sFilterText +"<br />&nbsp;&nbsp;<img src='/images/main/bg_pfeil_rot.gif'> Maximale Rendite p.a. in %";
				iFilterCount = iFilterCount +1;
			}
			
			if (iFilterCount>0) 
			{
				if (iFilterCount == 1) 
				{
					txtArea.innerHTML = "Für den Basiswert \""+sUnderlying+"\" ist folgender Filter gesetzt:"+sFilterText;
				} else {
					txtArea.innerHTML = "Für den Basiswert \""+sUnderlying+"\" sind folgende Filter gesetzt:"+sFilterText;
				}
			} else {
				txtArea.innerHTML = "Für den Basiswert \""+sUnderlying+"\" ist kein Filter gesetzt.";
			}
			txtArea.innerHTML = txtArea.innerHTML + "<br />";
		} else {
			setTimeout(makeFilterText, 200);
		}
	}
	
	function checkPuffer()
	{
		bPufferMoreThanOneChecked = false;
		bPufferAllChecked = true;
		sPuffer = "";
		for (var i=0; i<(pufferArray.length); i++){
			tmpCheckBox = document.getElementsByName(pufferArray[i])[0];
			tmpChecked = tmpCheckBox.checked;
			if (tmpChecked == true) {
				sPuffer=sPuffer.concat(pufferArray[i] + ';');
			}
			bPufferMoreThanOneChecked = (tmpChecked || bPufferMoreThanOneChecked);
			bPufferAllChecked = (tmpChecked && bPufferAllChecked);
		}
	}

	/**
	* Listeren for selecting something from underlying combobox.<b> 
	* @param frmComoBox The ComboBox as obj
	* @param record The dataset that was chosen
	* @param index The index within the combobox	
	*/
	function handleUnderlyingSelection(frmComboBox, record, index)
	{
		sUnderlying=record.get('underlying');
		sUnderlyingISIN= record.get('underlyingisin');
		//chartObj = document.getElementById('chart');
		/*
		legacy
		switch (sUnderlyingISIN)
		{
			case "special_dax":	if (iAxes !=1) {
									chartObj.reloadSettings(encodeURIComponent(url+ '?sessionId=' + GLOBALSESSIONID + '&sConfig=true&iAxes=1'));
									iAxes = 1;
								}
								break;
			case "special_stock":	if (iAxes !=1) {
									chartObj.reloadSettings(encodeURIComponent(url+ '?sessionId=' + GLOBALSESSIONID + '&sConfig=true&iAxes=1'));
									iAxes = 1;
								}
								break;
			case "special_index":	if (iAxes !=1) {
									chartObj.reloadSettings(encodeURIComponent(url+ '?sessionId=' + GLOBALSESSIONID + '&sConfig=true&iAxes=1'));
									iAxes = 1;
								}
								break;
			case "special_mdax":	if (iAxes !=1) {
										chartObj.reloadSettings(encodeURIComponent(url+ '?sessionId=' + GLOBALSESSIONID + '&sConfig=true&iAxes=1'));
										iAxes = 1;
									}
									break;
			case "special_eurostoxx":	if (iAxes !=1) {
											chartObj.reloadSettings(encodeURIComponent (url+ '?sessionId=' + GLOBALSESSIONID + '&sConfig=true&iAxes=1'));
											iAxes = 1;
										}
										break;
			default: 	if (iAxes !=0) {
							chartObj.reloadSettings(encodeURIComponent (url+ '?sessionId=' + GLOBALSESSIONID + '&sConfig=true&iAxes=0'));
							iAxes = 0;
						}
		}*/
		//noisin is the value of the dividing rule within the underlying combobox. nothing should happen when it got choosed
		if(sUnderlyingISIN != 'noisin') 
		{
			loadChart();
		}
	}
	
	this.handleCheckBoxChange=function(value)
	{
		makeFilterText();
		loadChart();
	}
	
	this.handleRadioChange= function (value)
	{
		//function handleRadioChange(value)
		if(value != iAxes) {
			if (chartObj==null) {
				chartObj = document.getElementById('chart');
			}
			iAxes = value;
			chartObj.reloadSettings(encodeURIComponent (url+ '?sessionId=' + GLOBALSESSIONID + '&sConfig=true&axes='+iAxes));
			loadChart();
		}
	}
	/**
	* Triggerd by the Fälligkeits slider.
	* @param value The value of the slider format: 0/2009-07-13|-1,   (slider id/date min | date max) -1 when all (open end) 
	*/
	
	this.setSliderValue= function (value)
	{
		//var sliderExpire=value;
		//replacing unused information for morpheus
		sSliderValues = getSliderValues();
		var tmp = new Array();
		tmp = sSliderValues.split(',');
		for (var i=0; i<(tmp.length-1); i++) {
			if (tmp[i].indexOf("0/")==0) {
				sExpire = tmp[i];
				sExpire = sExpire.replace("0/","");
				sExpire = sExpire.replace(",","");
			}
			if (tmp[i].indexOf("1/")==0) {
				sMaxPerf = tmp[i];
				sMaxPerf = sMaxPerf.replace("1/","");
				sMaxPerf = sMaxPerf.replace(",","");
				}
		}
		loadChart();
	}
	/**
	* Reloads the chart with filter settings
	*/
	function loadChart()
	{
		if (!StartUp)
		{
			makeFilterText();
			URL2GET = url + '?sessionId=' + GLOBALSESSIONID + '&sUnderlying='+ sUnderlying + '&sUnderlyingISIN=' + sUnderlyingISIN + '&sExpire=' + sExpire+ '&sPuffer='+sPuffer+'&iAxes='+iAxes+'&sMaxPerf='+sMaxPerf;
			Ext.Ajax.request({
				url: URL2GET,
				success: chartDataLoaded,
				failure: chartDataFailure
			})
		}
	}
	
	//Puffer Checkboxes
	function handleCheckEvent(checkbox, checked)
	{
		if(checkbox.checked == true)
		{
			sPuffer=sPuffer.concat(checkbox.category + ';');
		}
		else
		{
			sPuffer=sPuffer.replace(checkbox.category + ';',"");
		}
		loadChart();
	}
	
	/**
	* Is called when chart data was received from server
	* @param response The response obj
	*/
	function chartDataLoaded(response)
	{	
		if ((chartObj == null) && (response != null))
		{
			chartObj = document.getElementById('chart');
		}
		if ((chartObj != null) && (response != null))
		{
			var sResponseText=response.responseText;
			//feeding data into the flash chart
			chartObj.setData(sResponseText);
		}
	}
	/**
	* Triggered when ajax call failed
	* @response As obj
	*/
	function chartDataFailure(response)
	{}
	init();
}
