package com.panache.creative.forms { import flash.events.*; import flash.net.*; import flash.display.MovieClip; import flash.display.StageDisplayState; import flash.text.Font; import flash.text.TextFormat; import com.panache.debug.*; public class FormServiceRequest extends MovieClip { private var formData:Array = new Array(); private var formKey:String; private var formValue:String; private var formItem:String; private var requestKeyValue:String = ''; private var formInt:int = 0; private var _includesInvalidField:Boolean = false; private var _requestURL:String = ""; private var _requestType:String = "POST"; public var _getTarget:String = '_blank'; //INSTANCE OF PARENT CLASS private var _documentClass:*; //ACTION VARIABLES private var _action:String = "gotoFrame"; private var _actionValue:String = "1"; //CONSTANTS private static const DEBUG_SOURCE:String = "FORM_FINISH_BUTTON"; ///ACTION CONSTANTS private static const ACTION_GOTO_FRAME:String = "gotoFrame"; //IMPRESSIONS private var _trackImpression:String = "none"; public function FormServiceRequest() { MediaServicesAdDebug.reportTrace(null, DEBUG_SOURCE, "FormServiceRequest"); this.addEventListener(MouseEvent.CLICK, handleClick); this.addEventListener(Event.ADDED_TO_STAGE, handleStageReady); } private function handleStageReady(e:Event):void { try { var newFont:Font = new DINFont(); var format:TextFormat = new TextFormat(); format.font = newFont.fontName; format.size = 15; parent["zipcode"].defaultTextFormat = format; parent["zipcode"].embedFonts = true; parent["zipcode"].text = "YOUR ZIP CODE"; parent["zipcode"].addEventListener(MouseEvent.CLICK, onZipcodeClicked); parent["comboBox"].buttonMode = true; parent["comboBox"].useHandCursor = true; parent["comboBox"].addEventListener("10", onComboBoxChange); parent["comboBox"].addEventListener("20", onComboBoxChange); parent["comboBox"].addEventListener("50", onComboBoxChange); parent["comboBox"].addEventListener("100", onComboBoxChange); parent["comboBox"].addEventListener("comboBoxExpand", onComboBoxExpand); parent["comboBox"].addEventListener("comboBoxCollapse", onComboBoxCollapse); parent["comboBox"].addEventListener(MouseEvent.CLICK, onComboBoxClicked); } catch(e:Error) { MediaServicesAdDebug.reportErrorTrace("Stage not ready", e, DEBUG_SOURCE, "FormServiceRequest"); } } private function updateFormArray(aKeyName:String, aKeyValue:String):void { _documentClass = parent.parent as MovieClip; _documentClass.formObject[aKeyName] = aKeyValue; for (var keyName:String in _documentClass.formObject) { var keyValue:* = _documentClass.formObject[keyName]; MediaServicesAdDebug.reportTrace("keyName=" + keyName + " keyValue=" + _documentClass.formObject[keyName], DEBUG_SOURCE, "updateFormArray"); } } private function handleClick(e:MouseEvent):void { MediaServicesAdDebug.reportTrace("Request Type: " + _requestType + " Request Target: "+ _getTarget + " URL: " + _requestURL, DEBUG_SOURCE, "handleClick"); /* _includesInvalidField = false; var formField; for (var i:int =0; i < parent.numChildren; i++){ if(parent.getChildAt(i) is IFormValidate) { formField = parent.getChildAt(i); if(formField.validateComponent() == false) { _includesInvalidField = true; } else { updateFormArray(formField.getKey(), formField.getValue()); } } } if(!_includesInvalidField) { processURLRequest(_requestURL); } */ try { var queryStr:String = "http://imagen01.247realmedia.com/RealMedia/ads/Creatives/USNetwork/Sample_Jason_Panache_DemoAssets/LoehmannsRequest.html?"; if( isNaN(Number(parent["zipcode"].text)) || parent["zipcode"].length != 5 ) { trace("not a number"); parent["zipcode"].text = "YOUR ZIP CODE"; return; } queryStr += "zip=" + parent["zipcode"].text; queryStr += "&miles=" + _radiusSelected; navigateToURL(new URLRequest(queryStr), "_blank"); handleAction(); } catch(e:Error) { MediaServicesAdDebug.reportErrorTrace("Error sending", e, DEBUG_SOURCE, "handleClick"); } } private var _radiusSelected:int = 10; // default 10 miles radius private function onComboBoxExpand(e:Event):void { parent.setChildIndex(this, parent.numChildren-1); parent.setChildIndex(parent["comboBox"], parent.numChildren-1); } private function onComboBoxCollapse(e:Event):void { parent.setChildIndex(parent["comboBox"], parent.numChildren-1); parent.setChildIndex(this, parent.numChildren-1); } private function onComboBoxChange(e:Event):void { trace("combochange"); _radiusSelected = Number(e.type); _documentClass = parent.parent as MovieClip; _documentClass.sendImpression("milesSelected"); trace("_radiusSelected=" + _radiusSelected); } private function onComboBoxClicked(e:MouseEvent):void { trace("comboclicked"); _documentClass = parent.parent as MovieClip; _documentClass.pauseAdRoll(); if( isNaN(Number(parent["zipcode"].text)) || parent["zipcode"].text == "" ) parent["zipcode"].text = "YOUR ZIP CODE"; } private function onZipcodeClicked(me:MouseEvent):void { MediaServicesAdDebug.reportTrace("zipcode clicked", DEBUG_SOURCE, "onZipcodeClicked"); if( isNaN(Number(parent["zipcode"].text)) ) parent["zipcode"].text = ""; try { parent["zipcode"].stage.focus = parent["zipcode"]; parent["zipcode"].setSelection(parent["zipcode"].length,parent["zipcode"].length); } catch(e:Error) { MediaServicesAdDebug.reportErrorTrace("Cannot access stage", e, DEBUG_SOURCE, "onZipcodeClicked"); } _documentClass = parent.parent as MovieClip; //_documentClass.pauseAdRoll(); _documentClass.sendImpression("zipcodeClicked"); } private function sendData(url:String, parameters:String):void { var request:URLRequest = new URLRequest(url); var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.TEXT; request.data = parameters; loader.addEventListener(Event.COMPLETE, handleComplete); loader.addEventListener(IOErrorEvent.IO_ERROR, onIOError); MediaServicesAdDebug.reportTrace("Sending Data -> Request Type: " + _requestType + "Parameters: " + parameters, DEBUG_SOURCE, "sendData"); if (_requestType.toUpperCase() == 'POST'){ request.method = URLRequestMethod.POST; loader.load(request); } else { request.method = URLRequestMethod.GET; if (_getTarget =="_self") { navigateToURL(request, "_self"); } else { try { stage.displayState = StageDisplayState.NORMAL; } catch(error:Error) { MediaServicesAdDebug.reportErrorTrace("Cannot access to the stage", error, DEBUG_SOURCE, "sendData"); } navigateToURL(request, "_blank"); } } } private function handleComplete(event:Event):void { MediaServicesAdDebug.reportTrace("Handle Complete", DEBUG_SOURCE, "handleComplete"); var loader:URLLoader = URLLoader(event.target); } private function onIOError(event:IOErrorEvent):void { MediaServicesAdDebug.reportErrorTrace("Function: onIOError - Error loading URL. Try changing the _requestType to GET." , event as Error, DEBUG_SOURCE, "onIOError") } public function processURLRequest(requestURL:String):void { var queryParam:String = ''; var _documentClass:* = parent.parent as MovieClip; for (var keyName:String in _documentClass.formObject) { var keyValue:* = _documentClass.formObject[keyName]; MediaServicesAdDebug.reportTrace("keyName=" + keyName + " keyValue=" + _documentClass.formObject[keyName], DEBUG_SOURCE, "processURLRequest"); queryParam += keyName + "=" + _documentClass.formObject[keyName] + "&"; MediaServicesAdDebug.reportTrace("queryParam=" + queryParam, DEBUG_SOURCE, "processURLRequest"); } sendData(requestURL, queryParam); handleAction(); } private function startProcess():void{ } private function handleAction():void { _documentClass = parent.parent as MovieClip; var buttonParent = parent as MovieClip; if(_trackImpression != "" && _trackImpression != "none") { _documentClass.sendImpression(_trackImpression); } switch(_action) { case ACTION_GOTO_FRAME: try { buttonParent.gotoAndPlay(Number(_actionValue)); } catch(e:Error){ trace(e); } break; } } [Inspectable(defaultValue="Enter URL")] public function get URL(){ return _requestURL; } public function set URL(URL:String):void{ _requestURL = URL; } [Inspectable(defaultValue="POST")] public function get requestURLType(){ return _requestType; } public function set requestURLType(type:String):void{ _requestType = type; } [Inspectable] public function get action():String { return _action; } public function set action(action:String):void{ _action = action; } [Inspectable] public function get actionValue():String { return _actionValue; } public function set actionValue(actionValue:String):void{ _actionValue = actionValue; } [Inspectable] public function get getTarget():String { return _getTarget; } public function set getTarget(getTarget:String):void{ _getTarget = getTarget; } [Inspectable] public function get trackImpression():String { return _trackImpression; } public function set trackImpression(trackImpression:String):void { _trackImpression = trackImpression; } } }