﻿package com.comp
{
	import com.controller.DropDownController;
	
	import fl.data.DataProvider;
	
	import fl.controls.ComboBox
	import flash.events.Event
	import flash.events.FocusEvent;
	import fl.events.ComponentEvent;
	import flash.text.TextFormat
		import flash.text.TextField
	/**
	 * ...
	 * @author Snehalata Nagaje
	 */
	public class DropDownWidget
	{
		private var c_xmlCaptivateParams:XML;
		private var c_comboControllerObj:DropDownController;
		private var c_arrComoboItems:Array;
		private var c_variableSelected:String;
		private var dropdownEditUI:DropDownEditUI
		private var xmlOut:String;
		private var widget_cmb:ComboBox
		private var origDataProvider:DataProvider
		private var textFormattingData:XMLList
		private var currentSelectedTheme:String
		public function DropDownWidget()
		{
			init();
		}
		
		private function init():void
		{
			c_arrComoboItems= new Array();
			c_comboControllerObj = DropDownController.getInstance();
			
			c_xmlCaptivateParams =c_comboControllerObj.c_xmlCaptivateParams;
			c_arrComoboItems=c_xmlCaptivateParams.data.split(",");
			currentSelectedTheme=String(c_xmlCaptivateParams.selectedTheme);
			c_variableSelected=String(c_xmlCaptivateParams.variable);
			textFormattingData=c_xmlCaptivateParams.textProperties
		}
		
		public function drawEditUI():void {
			
			 dropdownEditUI= new DropDownEditUI();
			dropdownEditUI.items_txt.text=c_arrComoboItems.join(",");
			dropdownEditUI.variable_txt.text=c_variableSelected
			c_comboControllerObj.c_objRootRef.addChild(dropdownEditUI);
			dropdownEditUI.oTextFormatterComp.setData(textFormattingData);
			dropdownEditUI.oTextFormatterComp.init();
			pupulateThemes();
			SelectDefaultTheme();
			
		}
		function pupulateThemes():void
		{
			var dp:DataProvider = new DataProvider();
			dp.addItem({label:"Default"});
			dp.addItem({label:"Mac"});
			dp.addItem({label:"Windows"});
			dropdownEditUI.theme_cb.dataProvider=dp
			dropdownEditUI.theme_cb.addEventListener(Event.CHANGE,OnThemeChanged);
		}
		private function OnThemeChanged(evt:Event):void
		{
			
		}
		public function generateComoboBox():void
		{
			var dp:DataProvider = new DataProvider();
			 widget_cmb= new ComboBox();
			for (var i = 0; i < c_arrComoboItems.length; i++)
			{
				
				dp.addItem({label:c_arrComoboItems[i],data:c_arrComoboItems[i]});
			}
			widget_cmb.dataProvider = dp;
			origDataProvider=dp
			widget_cmb.addEventListener(Event.CHANGE,OnSelectionchanged);
			widget_cmb.textField.addEventListener(Event.CHANGE,OnUserEnteredValue);
			widget_cmb.addEventListener(FocusEvent.FOCUS_IN,OnTextFocusEvent);
			
			
			widget_cmb.editable=true
			widget_cmb.drawNow();
			widget_cmb.selectedIndex=0
			widget_cmb.x=0
			widget_cmb.y=0
			c_comboControllerObj.c_objRootRef.addChild(widget_cmb);
			var comboBoxStyle:TextFormat= new TextFormat();
			comboBoxStyle.underline=textFormattingData.textDecoration.attribute("underline")=="true"?true:false
			comboBoxStyle.italic=textFormattingData.textDecoration.attribute("italic")=="true"?true:false;
			comboBoxStyle.bold=textFormattingData.textDecoration.attribute("bold")=="true"?true:false;
			comboBoxStyle.font=textFormattingData.font.attribute("face")
			comboBoxStyle.size=Number(textFormattingData.font.attribute("size"));
			comboBoxStyle.color=textFormattingData.color.attribute("textColor")
			comboBoxStyle.leading=3
			widget_cmb.textField.setStyle("textFormat",comboBoxStyle);
			//widget_cmb.textField.background = true
			//widget_cmb.textField.backgroundColor = 0xff0000;
			var txt:TextField= new TextField();
			var maxWidth=0;
			for (i = 0; i < c_arrComoboItems.length; i++)
			{
				txt.autoSize="left"
				txt.setTextFormat(comboBoxStyle);
				txt.text=c_arrComoboItems[i]
				txt.setTextFormat(comboBoxStyle);
				txt.border=true
				if(maxWidth<txt.width)
				{
					maxWidth=txt.width
				}
				
			}
			// to restrict to default size of combo
			if(maxWidth>100)
			{
				widget_cmb.width=maxWidth+30
			}
			
			widget_cmb.dropdown.setRendererStyle("textFormat",comboBoxStyle);
			ApplyTheme();
			c_comboControllerObj.c_objRootRef[c_variableSelected]=widget_cmb.selectedItem.data
			c_comboControllerObj.c_objRootRef.StoreVariableInVarHand(c_variableSelected,c_comboControllerObj.c_objRootRef[c_variableSelected]);
		}
		
		private function OnTextFocusEvent(e:FocusEvent):void 
		{
			widget_cmb.open();
		}
		private function ApplyTheme():void
		{
			
			switch(currentSelectedTheme)
			{
				case "Mac":
				
				widget_cmb.setStyle("overSkin",ComboBox_overSkin_mac)
				widget_cmb.setStyle("upSkin",ComboBox_upSkin_mac)
				widget_cmb.setStyle("downSkin",ComboBox_downSkin_mac)
				widget_cmb.setStyle("disabledSkin",ComboBox_disabledSkin_mac)
				
				widget_cmb.setStyle("cellRenderer",ComboBox_disabledSkin_mac)
				
				widget_cmb.setStyle("downArrowDisabledSkin",ScrollArrowDown_disabledSkin_mac)
				widget_cmb.setStyle("downArrowDownSkin",ScrollArrowDown_downSkin_mac)
				widget_cmb.setStyle("downArrowOverSkin",ScrollArrowDown_overSkin_mac)
				widget_cmb.setStyle("downArrowUpSkin",ScrollArrowDown_upSkin_mac)


				widget_cmb.setStyle("thumbUpSkin",ScrollThumb_upSkin_mac)
				widget_cmb.setStyle("thumbDisabledSkin ",ScrollThumb_overSkin_mac)
				widget_cmb.setStyle("thumbDownSkin",ScrollThumb_downSkin_mac)
				widget_cmb.setStyle("thumbOverSkin",ScrollThumb_overSkin_mac)

				widget_cmb.setStyle("thumbIcon",ScrollBar_thumbIcon_mac)
				
				
				widget_cmb.setStyle("trackDisabledSkin",ScrollTrack_skin_mac)
				widget_cmb.setStyle("trackDownSkin",ScrollTrack_skin_mac)
				widget_cmb.setStyle("trackOverSkin",ScrollTrack_skin_mac)
				widget_cmb.setStyle("trackUpSkin",ScrollTrack_skin_mac)
				
				widget_cmb.setStyle("upArrowDisabledSkin",ScrollArrowUp_disabledSkin_mac)
				widget_cmb.setStyle("upArrowDownSkin ",ScrollArrowUp_downSkin_mac)
				widget_cmb.setStyle("upArrowOverSkin",ScrollArrowUp_overSkin_mac)
				widget_cmb.setStyle("upArrowUpSkin",ScrollArrowUp_upSkin_mac)
				
				break;
				
				case "Default":
				
				break;
				case "Windows":
				widget_cmb.setStyle("overSkin",ComboBox_overSkin_win)
				widget_cmb.setStyle("upSkin",ComboBox_upSkin_win)
				widget_cmb.setStyle("downSkin",ComboBox_downSkin_win)
				widget_cmb.setStyle("disabledSkin",ComboBox_disabledSkin_win)
				
				widget_cmb.setStyle("cellRenderer",ComboBox_disabledSkin_win)
				
				widget_cmb.setStyle("downArrowDisabledSkin",ScrollArrowDown_disabledSkin_win)
				widget_cmb.setStyle("downArrowDownSkin",ScrollArrowDown_downSkin_win)
				widget_cmb.setStyle("downArrowOverSkin",ScrollArrowDown_overSkin_win)
				widget_cmb.setStyle("downArrowUpSkin",ScrollArrowDown_upSkin_win)


				widget_cmb.setStyle("thumbArrowUpSkin",ScrollThumb_upSkin_win)
				widget_cmb.setStyle("thumbDisabledSkin ",ScrollThumb_overSkin_win)
				widget_cmb.setStyle("thumbDownSkin",ScrollThumb_downSkin_win)
				widget_cmb.setStyle("thumbOverSkin",ScrollThumb_overSkin_win)

				widget_cmb.setStyle("thumbIcon",ScrollBar_thumbIcon_win)
				
				
				widget_cmb.setStyle("trackDisabledSkin",ScrollTrack_skin_win)
				widget_cmb.setStyle("trackDownSkin",ScrollTrack_skin_win)
				widget_cmb.setStyle("trackOverSkin",ScrollTrack_skin_win)
				widget_cmb.setStyle("trackUpSkin",ScrollTrack_skin_win)
				
				widget_cmb.setStyle("upArrowDisabledSkin",ScrollArrowUp_disabledSkin_win)
				widget_cmb.setStyle("upArrowDownSkin ",ScrollArrowUp_downSkin_win)
				widget_cmb.setStyle("upArrowOverSkin",ScrollArrowUp_overSkin_win)
				widget_cmb.setStyle("upArrowUpSkin",ScrollArrowUp_upSkin_win)
				break;
			}
		}
		private function SelectDefaultTheme():void
		{
			var l=dropdownEditUI.theme_cb.dataProvider.length;
			var aThems=dropdownEditUI.theme_cb.dataProvider
			for(var i=0;i<l;i++)
			{
				if(aThems.getItemAt(i).label==currentSelectedTheme)
				{
					dropdownEditUI.theme_cb.selectedIndex=i
					break;
				}
			}
		}
		private function OnUserEnteredValue(evt:Event):void
		{
			trace("OnUserChangedValue"+evt.target.text);
			updateDataProvider(evt.target.text);
			
		}
		private function updateDataProvider(value):void
		{
			 var l = origDataProvider.length;    
			var aDataProvider=origDataProvider
			var aUpdated:Array= new Array();
			for(var z=0;z<l;z++){   
			
				if(aDataProvider.getItemAt(z).data.substr(0,value.length) == value)
				aUpdated.push(aDataProvider.getItemAt(z));
			}
			
			var aUpdatedDataProvider:DataProvider= new DataProvider(aUpdated);
			widget_cmb.dataProvider=aUpdatedDataProvider;
			widget_cmb.drawNow();
			widget_cmb.open();
		}
		private function OnSelectionchanged(evt:Event):void
		{
			if(evt.target.selectedItem!=null)
			{
				c_comboControllerObj.c_objRootRef[c_variableSelected]=evt.target.selectedItem.data
				c_comboControllerObj.c_objRootRef.StoreVariableInVarHand(c_variableSelected,c_comboControllerObj.c_objRootRef[c_variableSelected]);
			}
			//
			
		}
		// this will form xml ad per user input
		public function objectToString()
		{
			var textformattedData=dropdownEditUI.oTextFormatterComp.getData()
			var  xmlOut="<mydata><data>"+dropdownEditUI.items_txt.text+"</data><variable>"+dropdownEditUI.variable_txt.text+"</variable>"+String(textformattedData)+"<selectedTheme>"+dropdownEditUI.theme_cb.selectedItem.label+"</selectedTheme></mydata>";
			
			//c_xmlCaptivateParams=new XML(c_xmlCapivateString);
			return xmlOut;
		}
		
	}
	
}