﻿package com
{
	import flash.display.MovieClip;
	import fl.data.DataProvider;
	import flash.events.Event;
	import com.Debug;
	import flash.events.MouseEvent;
	import flash.net.FileFilter;
	import flash.net.FileReference;
	import flash.events.FocusEvent;
	import com.*;
	
	public class CertificateInput extends MovieClip
	{
		private var xmlParams:XMLList;
		private var monthLabels:Array = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
		private var templateType:Array = new Array("Course Completion Certificate Style 1", "Course Completion Certificate Style 2", "Course Completion Certificate Style 3", "Course Completion Certificate Style 4", "Awards Certificate Style 1", "Awards Certificate Style 2", "Awards Certificate Style 3", "Awards Certificate Style 4", "Gift Certificate Style 1", "Gift Certificate Style 2");
		private var templateMc:MovieClip;

		public function CertificateInput():void
		{
			//init();
		}
		
		public function init(in_XMLVal:XMLList):void
		{
			xmlParams = in_XMLVal;
			setDefaultData();			
			
		}
		
		private function setDefaultData():void
		{
			var _dpTemplates:DataProvider = new DataProvider();
			for (var i = 0; i < templateType.length; i++)
			{
				_dpTemplates.addItem( { label:templateType[i], data:i } );
			}
			
			templateList.dataProvider = _dpTemplates;
			templateList.selectedIndex = Number(xmlParams.@Template);
			updateTemplateType(null);
			
		}
		
		private function drawCompletionTemplate():void
		{
			mcCompletion.visible = true;
			mcAwards.visible = false;
			mcGift.visible = false;
			templateMc = mcCompletion;
			
			if (xmlParams.CourseName == "")
			{
				templateMc.v_Course1.text = "Enter course name";
			}
			else
			{
				templateMc.v_Course1.text = xmlParams.CourseName;
			}
			
			drawDateChooser();
			
			templateMc.logoImageFile.text = xmlParams.Logo.@image;
			
			drawSignature();			
		}
		
		private function drawAwardsTemplate():void
		{
			mcCompletion.visible = false;
			mcAwards.visible = true;
			mcGift.visible = false;
			templateMc = mcAwards;
			templateMc.placeTxt.text = xmlParams.others.@place;
			drawSignature();
		}
		
		private function drawGiftTemplate():void
		{
			mcCompletion.visible = false;
			mcAwards.visible = false;
			mcGift.visible = true;
			templateMc = mcGift;
			templateMc.placeTxt.text = xmlParams.others.@place;
			templateMc.giftAmountTxt.restrict = "0-9"
			templateMc.giftAmountTxt.text = xmlParams.others.@giftAmount;
			templateMc.giftFromTxt.text = xmlParams.others.@giftFrom;
			drawSignature();
		}
		
		private function drawSignature():void
		{
			//Debug.log(xmlParams.Sign.@Selected+"<><><><>")
			if (xmlParams.Sign.@Selected == "opt_1")
			{
				templateMc.signImageFile.type = "dynamic";
				templateMc.signBrowseBtn.enabled = false;
				templateMc.signTxt.type = "input"
				templateMc.signTxt.text = xmlParams.Sign.@Value;
				
				if(templateMc.signTxt.hasEventListener(Event.CHANGE))
					templateMc.signTxt.removeEventListener(Event.CHANGE, updateSignature);
				templateMc.signTxt.addEventListener(Event.CHANGE, updateSignature);
				if(templateMc.signBrowseBtn.hasEventListener(MouseEvent.CLICK))
					templateMc.signBrowseBtn.removeEventListener(MouseEvent.CLICK, browseHandler);
				templateMc[xmlParams.Sign.@Selected].selected = true;
			}
			else
			{
				if(templateMc.signTxt.hasEventListener(Event.CHANGE))
					templateMc.signTxt.removeEventListener(Event.CHANGE, updateSignature);
				if(templateMc.signBrowseBtn.hasEventListener(MouseEvent.CLICK))
					templateMc.signBrowseBtn.removeEventListener(MouseEvent.CLICK, browseHandler);
				templateMc.signBrowseBtn.addEventListener(MouseEvent.CLICK, browseHandler);
				templateMc.signImageFile.type = "dynamic";
				templateMc.signBrowseBtn.enabled = true;
				templateMc.signImageFile.text = xmlParams.Sign.@image;
				templateMc.signTxt.type = "dynamic";
				templateMc[xmlParams.Sign.@Selected].selected = true;
			}
		}
		
		private function drawDateChooser():void
		{
			var _arrDate:DataProvider = new DataProvider();
			var _arrMonth:DataProvider = new DataProvider();
			var _arrYear:DataProvider = new DataProvider();
			var _startYear:Number = 2009;
			var _iTotalYears:Number = 10
			
			// Create data for date
			for (var i = 1; i <= 31; i++ )
			{
				_arrDate.addItem( { label:i, data:i } );
			}
			
			// Create data for Month
			for (var j = 0; j < 12; j++ )
			{
				_arrMonth.addItem( { label:monthLabels[j], data:j } );
			}
			
			// Create data for Year
			for (var k = 0; k < _iTotalYears; k++ )
			{
				_arrYear.addItem( { label:(_startYear + k), data:(_startYear + k) } );
			}
			
			templateMc.ddFrom.dataProvider = _arrDate;
			templateMc.mmFrom.dataProvider = _arrMonth;
			templateMc.yyFrom.dataProvider = _arrYear;
			
			templateMc.ddTo.dataProvider = _arrDate;
			templateMc.mmTo.dataProvider = _arrMonth;
			templateMc.yyTo.dataProvider = _arrYear;	
			
			var dateFrom = xmlParams.Date.@From;
			if (dateFrom != "")
			{
				var splitDate = dateFrom.split("/");
				templateMc.ddFrom.selectedIndex = splitDate[0];
				templateMc.mmFrom.selectedIndex = splitDate[1];
				templateMc.yyFrom.selectedIndex = splitDate[2];
				updateFromDate(null);
			}
			
			var dateTo = xmlParams.Date.@To;
			if (dateTo != "")
			{
				var splitDate1 = dateTo.split("/");
				templateMc.ddTo.selectedIndex = splitDate1[0];
				templateMc.mmTo.selectedIndex = splitDate1[1];
				templateMc.yyTo.selectedIndex = splitDate1[2];
				updateToDate(null);
			}
		}
		private function addEvents():void
		{
			templateList.addEventListener(Event.CHANGE, updateTemplateType);
			
			if(templateMc.v_Course1 != null)
			{
				templateMc.v_Course1.addEventListener(Event.CHANGE, courseNameChanged);
				templateMc.v_Course1.addEventListener(FocusEvent.FOCUS_IN, chceckCourseName);
				templateMc.v_Course1.addEventListener(FocusEvent.FOCUS_OUT, chceckCourseName);
				
				templateMc.ddFrom.addEventListener(Event.CHANGE, updateFromDate);
				templateMc.mmFrom.addEventListener(Event.CHANGE, updateFromDate);
				templateMc.yyFrom.addEventListener(Event.CHANGE, updateFromDate);
				
				templateMc.ddTo.addEventListener(Event.CHANGE, updateToDate);
				templateMc.mmTo.addEventListener(Event.CHANGE, updateToDate);
				templateMc.yyTo.addEventListener(Event.CHANGE, updateToDate);
				
				templateMc.logoBrowseBtn.addEventListener(MouseEvent.CLICK, browseHandler);	
			}
			templateMc.opt_1.addEventListener(MouseEvent.CLICK, signTypeHandler);
			templateMc.opt_2.addEventListener(MouseEvent.CLICK, signTypeHandler);
			if(templateMc.placeTxt != null)
			{
				templateMc.placeTxt.addEventListener(Event.CHANGE, updatePlace);
			}
			
			if(templateMc.giftAmountTxt != null)
			{
				templateMc.giftAmountTxt.addEventListener(Event.CHANGE, updateAmount);
				templateMc.giftFromTxt.addEventListener(Event.CHANGE, updateGiftFrom);
			}
		}
		private function removeEvents():void
		{
			if(templateList.hasEventListener(Event.CHANGE))
			templateList.removeEventListener(Event.CHANGE, updateTemplateType);
			
			if(templateMc.v_Course1!=null){
				if(templateMc.v_Course1.hasEventListener(Event.CHANGE))
				templateMc.v_Course1.removeEventListener(Event.CHANGE, courseNameChanged);
				
				if(templateMc.v_Course1.hasEventListener(FocusEvent.FOCUS_IN))
				templateMc.v_Course1.removeEventListener(FocusEvent.FOCUS_IN, chceckCourseName);
				
				if(templateMc.v_Course1.hasEventListener(FocusEvent.FOCUS_OUT))
				templateMc.v_Course1.removeEventListener(FocusEvent.FOCUS_OUT, chceckCourseName);
				
				if(templateMc.ddFrom.hasEventListener(Event.CHANGE))
				templateMc.ddFrom.removeEventListener(Event.CHANGE, updateFromDate);
				
				if(templateMc.mmFrom.hasEventListener(Event.CHANGE))
				templateMc.mmFrom.removeEventListener(Event.CHANGE, updateFromDate);
				
				if(templateMc.yyFrom.hasEventListener(Event.CHANGE))
				templateMc.yyFrom.removeEventListener(Event.CHANGE, updateFromDate);
				
				if(templateMc.ddTo.hasEventListener(Event.CHANGE))
				templateMc.ddTo.removeEventListener(Event.CHANGE, updateToDate);
				
				if(templateMc.mmTo.hasEventListener(Event.CHANGE))
				templateMc.mmTo.removeEventListener(Event.CHANGE, updateToDate);
				
				if(templateMc.yyTo.hasEventListener(Event.CHANGE))
				templateMc.yyTo.removeEventListener(Event.CHANGE, updateToDate);
				
				
				
				if(templateMc.logoBrowseBtn.hasEventListener(MouseEvent.CLICK))
				templateMc.logoBrowseBtn.removeEventListener(MouseEvent.CLICK, browseHandler);			
			}
			if(templateMc.opt_1.hasEventListener(MouseEvent.CLICK))
			templateMc.opt_1.removeEventListener(MouseEvent.CLICK, signTypeHandler)
			
			if(templateMc.opt_2.hasEventListener(MouseEvent.CLICK))
			templateMc.opt_2.removeEventListener(MouseEvent.CLICK, signTypeHandler)
			
			if(templateMc.placeTxt != null)
			{
				if(templateMc.placeTxt.hasEventListener(Event.CHANGE))
				templateMc.placeTxt.removeEventListener(Event.CHANGE, updatePlace);
			}
			
			if(templateMc.giftAmountTxt != null)
			{
				if(templateMc.giftAmountTxt.hasEventListener(Event.CHANGE))
				templateMc.giftAmountTxt.removeEventListener(Event.CHANGE, updateAmount);
				
				if(templateMc.giftFromTxt.hasEventListener(Event.CHANGE))
				templateMc.giftFromTxt.removeEventListener(Event.CHANGE, updateGiftFrom);
			}
		}
		
		private function chceckCourseName(e:FocusEvent):void 
		{
			if (e.type == "focusIn")
			{
				if (xmlParams.CourseName == "")
				{
					templateMc.v_Course1.text = "";
				}
			}
			else if(e.type == "focusOut")
			{
				if (xmlParams.CourseName == "")
				{
					templateMc.v_Course1.text = "Enter course name";
				}
			}
		}
		
		private function updateTemplateType(e:Event):void 
		{
			xmlParams.@Template = templateList.selectedIndex;
			if (templateList.selectedIndex < 4)
			{
				drawCompletionTemplate();
			}
			else if (templateList.selectedIndex > 3 && templateList.selectedIndex < 8)
			{
				drawAwardsTemplate();
			}
			else if (templateList.selectedIndex > 7 && templateList.selectedIndex < 10)
			{
				drawGiftTemplate();
			}
			removeEvents();
			addEvents();
		}
		
		private function courseNameChanged(e:Event):void 
		{
			xmlParams.CourseName = templateMc.v_Course1.text;	
			//Debug.log(xmlParams+"::Course Name Update")
		}
		
		private function updateFromDate(e:Event):void 
		{
			xmlParams.Date.@From = templateMc.ddFrom.selectedIndex + "/" + templateMc.mmFrom.selectedIndex + "/" + templateMc.yyFrom.selectedIndex;
			xmlParams.Date.@FromValue = templateMc.ddFrom.selectedLabel + " " + templateMc.mmFrom.selectedLabel + ", " + templateMc.yyFrom.selectedLabel;
			//Debug.log(xmlParams.Date.@From)
		}
		
		private function updateToDate(e:Event):void 
		{
			xmlParams.Date.@To = templateMc.ddTo.selectedIndex + "/" + templateMc.mmTo.selectedIndex + "/" + templateMc.yyTo.selectedIndex;
			xmlParams.Date.@ToValue = templateMc.ddTo.selectedLabel + " " + templateMc.mmTo.selectedLabel + ", " + templateMc.yyTo.selectedLabel;
			//Debug.log(xmlParams.Date.@To)
		}
		
		private function signTypeHandler(e:MouseEvent):void 
		{
			if (e.currentTarget.name == "opt_1")
			{
				templateMc.signImageFile.type = "dynamic";
				templateMc.signBrowseBtn.enabled = false;
				templateMc.signTxt.type = "input"
				templateMc.signTxt.text = xmlParams.Sign.@Value;
				templateMc.signTxt.addEventListener(Event.CHANGE, updateSignature);
				templateMc.signBrowseBtn.removeEventListener(MouseEvent.CLICK, browseHandler);
			}
			else
			{
				templateMc.signTxt.removeEventListener(Event.CHANGE, updateSignature)
				templateMc.signBrowseBtn.addEventListener(MouseEvent.CLICK, browseHandler);
				templateMc.signImageFile.type = "dynamic";
				templateMc.signBrowseBtn.enabled = true;
				templateMc.signImageFile.text = xmlParams.Sign.@image;
				templateMc.signTxt.type = "dynamic";
			}
			xmlParams.Sign.@Selected = e.currentTarget.name;
		}
		
		private function browseHandler(e:MouseEvent){
			fileRef = new FileReference();
			if (e.target.name == "logoBrowseBtn")
			{
				fileRef.addEventListener(Event.SELECT, logoSelectHandler);
			}
			else
			{
				fileRef.addEventListener(Event.SELECT, signSelectHandler);
			}
			fileRef.browse(getTypes());
		}
		
		private function getTypes():Array {
			var allTypes:Array = new Array();
			allTypes.push(new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)", "*.jpg;*.jpeg;*.gif;*.png"));
			return allTypes;
		}
		
		private function logoSelectHandler(evt:Event) {
			var file:FileReference = FileReference(evt.target);
			xmlParams.Logo.@image = file.name;
			templateMc.logoImageFile.text = file.name;
			//Debug.log(xmlParams+"::logoSelect")
		}
		
		private function signSelectHandler(evt:Event) {
			var file:FileReference = FileReference(evt.target);
			xmlParams.Sign.@image = file.name;
			templateMc.signImageFile.text = file.name;
			//Debug.log(xmlParams+"::Sign Select")
		}
		
		private function updateSignature(e:Event):void 
		{
			xmlParams.Sign.@Value = templateMc.signTxt.text;
			//Debug.log(xmlParams+"::Sign Update")
		}
		
		private function updatePlace(e:Event):void
		{
			xmlParams.others.@place = templateMc.placeTxt.text;
		}
		
		private function updateAmount(e:Event):void
		{
			xmlParams.others.@giftAmount = templateMc.giftAmountTxt.text;
		}
		
		private function updateGiftFrom(e:Event):void
		{
			xmlParams.others.@giftFrom = templateMc.giftFromTxt.text;
		}
	}
	
}