package com.oxylusflash.book { import com.oxylusflash.utils.StringUtil; import com.oxylusflash.utils.XMLUtil; import flash.display.Sprite; import flash.events.Event; import flash.events.FocusEvent; import flash.events.HTTPStatusEvent; import flash.events.IOErrorEvent; import flash.events.MouseEvent; import flash.events.SecurityErrorEvent; import flash.events.TimerEvent; import flash.geom.Rectangle; import flash.net.URLLoader; import flash.net.URLRequest; import flash.net.URLRequestMethod; import flash.net.URLVariables; import flash.utils.Timer; public class SendToFriend extends PopupWindowContent { private static const VALIDATION_OK:String = "validationOK"; public var yourNameInp:InputField; public var yourEmailInp:InputField; public var friendNameInp:InputField; public var friendEmailInp:InputField; public var commentInp:InputField; public var submitBtn:DynamicButton; public var resetBtn:DynamicButton; private var socialHolder:Sprite = new Sprite; private var yourEmailStr:String; private var yourNameStr:String; private var friendNameStr:String; private var friendEmailStr:String; private var commentStr:String; private var formSendLdr:URLLoader; private var formSendReq:URLRequest; private var formSendVar:URLVariables; private var inpToGainFocus:InputField; /** * Send to friend content. */ public function SendToFriend() { autoHideTimer.delay = 1000 * Global.xmlTellAFriend.messageTime; formSendReq = new URLRequest(Global.xmlTellAFriend.script); formSendReq.method = URLRequestMethod.POST; formSendVar = new URLVariables(); //formSendVar.subjectTemplate = Global.xmlTranslate.str45; //formSendVar.messageTemplate = Global.xmlTranslate.str46; //formSendVar.footerTemplate = Global.xmlTranslate.str47; yourNameInp.nextFocus = yourEmailInp; yourEmailInp.nextFocus = friendNameInp; friendNameInp.nextFocus = friendEmailInp; friendEmailInp.nextFocus = commentInp; commentInp.nextFocus = yourNameInp; yourNameInp.textField.restrict = "^0-9~!@#$%\\^&*()_+={}[]:;\\\\|<>?/"; friendNameInp.textField.restrict = "^0-9~!@#$%\\^&*()_+={}[]:;\\\\|<>?/"; yourNameInp.width = Global.xmlTellAFriend.formWidth; yourEmailInp.width = Global.xmlTellAFriend.formWidth; friendNameInp.width = Global.xmlTellAFriend.formWidth; friendEmailInp.width = Global.xmlTellAFriend.formWidth; commentInp.width = Global.xmlTellAFriend.formWidth; yourNameInp.y = 0; yourEmailInp.y = yourNameInp.y + yourNameInp.height + Global.xmlTellAFriend.fieldsYSpacing; friendNameInp.y = yourEmailInp.y + yourEmailInp.height + Global.xmlTellAFriend.fieldsYSpacing; friendEmailInp.y = friendNameInp.y + friendNameInp.height + Global.xmlTellAFriend.fieldsYSpacing; commentInp.y = friendEmailInp.y + friendEmailInp.height + Global.xmlTellAFriend.fieldsYSpacing; submitBtn.y = resetBtn.y = Global.xmlTellAFriend.height - submitBtn.height; commentInp.height = Global.xmlTellAFriend.height - commentInp.y - submitBtn.height - Global.xmlTellAFriend.fieldsYSpacing; yourNameInp.addEventListener(InputField.FOCUS, input_focusHandler, false, 0, true); yourEmailInp.addEventListener(InputField.FOCUS, input_focusHandler, false, 0, true); friendNameInp.addEventListener(InputField.FOCUS, input_focusHandler, false, 0, true); friendEmailInp.addEventListener(InputField.FOCUS, input_focusHandler, false, 0, true); commentInp.addEventListener(InputField.FOCUS, input_focusHandler, false, 0, true); yourNameInp.addEventListener(InputField.BLUR, input_blurHandler, false, 0, true); yourEmailInp.addEventListener(InputField.BLUR, input_blurHandler, false, 0, true); friendNameInp.addEventListener(InputField.BLUR, input_blurHandler, false, 0, true); friendEmailInp.addEventListener(InputField.BLUR, input_blurHandler, false, 0, true); commentInp.addEventListener(InputField.BLUR, input_blurHandler, false, 0, true); yourNameInp.addEventListener(InputField.SUBMIT, input_submitHandler, false, 0, true); yourEmailInp.addEventListener(InputField.SUBMIT, input_submitHandler, false, 0, true); friendNameInp.addEventListener(InputField.SUBMIT, input_submitHandler, false, 0, true); friendEmailInp.addEventListener(InputField.SUBMIT, input_submitHandler, false, 0, true); yourNameInp.addEventListener(InputField.CANCEL, input_cancelHandler, false, 0, true); yourEmailInp.addEventListener(InputField.CANCEL, input_cancelHandler, false, 0, true); friendNameInp.addEventListener(InputField.CANCEL, input_cancelHandler, false, 0, true); friendEmailInp.addEventListener(InputField.CANCEL, input_cancelHandler, false, 0, true); submitBtn.label = Global.xmlTranslate.str49; resetBtn.label = Global.xmlTranslate.str50; resetBtn.x = submitBtn.width + Global.xmlTellAFriend.buttonsXSpacing; submitBtn.addEventListener(MouseEvent.CLICK, submitBtn_clickHandler, false, 0, true); resetBtn.addEventListener(MouseEvent.CLICK, resetBtn_clickHandler, false, 0, true); resetForm(); } /** * Init. */ override public function init():void { if (Global.xmlTellAFriend.showSocialLinks) createSocialLinks(); } // Buttons events handlers. private function submitBtn_clickHandler(e:MouseEvent):void { submitForm(); } private function resetBtn_clickHandler(e:MouseEvent):void { resetForm(); } /** * Create new URL loader for submiting the form data. */ private function createNewFormSendLdr():void { if (formSendLdr) { formSendLdr.removeEventListener(IOErrorEvent.IO_ERROR, formSendLdr_eventHandler); formSendLdr.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, formSendLdr_eventHandler); formSendLdr.removeEventListener(Event.COMPLETE, formSendLdr_eventHandler); formSendLdr = null; } formSendLdr = new URLLoader(); formSendLdr.addEventListener(IOErrorEvent.IO_ERROR, formSendLdr_eventHandler, false, 0, true); formSendLdr.addEventListener(SecurityErrorEvent.SECURITY_ERROR, formSendLdr_eventHandler, false, 0, true); formSendLdr.addEventListener(Event.COMPLETE, formSendLdr_eventHandler, false, 0, true); } /** * Pressing the ESC key when an input has focus. * @param e */ private function input_cancelHandler(e:Event):void { if (e.currentTarget.parent is InputField) { switch(e.currentTarget.parent) { case yourNameInp: yourNameStr = yourNameInp.label = Global.xmlTranslate.str36; break; case yourEmailInp: yourEmailStr = yourEmailInp.label = Global.xmlTranslate.str35; break; case friendNameInp: friendNameStr = friendNameInp.label = Global.xmlTranslate.str45; break; case friendEmailInp: friendEmailStr = friendEmailInp.label = Global.xmlTranslate.str37; break; case commentInp: commentStr = commentInp.label = Global.xmlTranslate.str38; break; } } } /** * Pressing the ENTER key when an input has focus. * @param e */ private function input_submitHandler(e:Event):void { submitForm(); } /** * Input focus and blur handlers. * @param e */ private function input_focusHandler(e:Event):void { if (e.currentTarget is InputField) { switch(e.currentTarget) { case yourNameInp: if (yourNameStr == Global.xmlTranslate.str36) yourNameInp.label = ""; break; case yourEmailInp: if (yourEmailStr == Global.xmlTranslate.str35) yourEmailInp.label = ""; break; case friendNameInp: if (friendNameStr == Global.xmlTranslate.str45) friendNameInp.label = ""; break; case friendEmailInp: if (friendEmailStr == Global.xmlTranslate.str37) friendEmailInp.label = ""; break; case commentInp: if (commentStr == Global.xmlTranslate.str38) commentInp.label = ""; break; } } } private function input_blurHandler(e:Event):void { if (e.currentTarget is InputField) { switch(e.currentTarget) { case yourNameInp: if (!StringUtil.isBlank(yourNameInp.label)) yourNameStr = StringUtil.squeeze(yourNameInp.label); else yourNameStr = Global.xmlTranslate.str36; yourNameInp.label = yourNameStr; break; case yourEmailInp: if (!StringUtil.isBlank(yourEmailInp.label)) yourEmailStr = StringUtil.squeeze(yourEmailInp.label); else yourEmailStr = Global.xmlTranslate.str35; yourEmailInp.label = yourEmailStr; break; case friendNameInp: if (!StringUtil.isBlank(friendNameInp.label)) friendNameStr = StringUtil.squeeze(friendNameInp.label); else friendNameStr = Global.xmlTranslate.str45; friendNameInp.label = friendNameStr; break; case friendEmailInp: if (!StringUtil.isBlank(friendEmailInp.label)) friendEmailStr = StringUtil.squeeze(friendEmailInp.label); else friendEmailStr = Global.xmlTranslate.str37; friendEmailInp.label = friendEmailStr; break; case commentInp: if (!StringUtil.isBlank(commentInp.label)) commentStr = commentInp.textField.htmlText; else commentStr = Global.xmlTranslate.str38; commentInp.label = commentStr; break; } } } /** * Get message after form validation. * @return Validation message. */ private function formValidationMsg():String { if (yourNameStr == Global.xmlTranslate.str36) { inpToGainFocus = yourNameInp; return Global.xmlTranslate.str39; } if (yourEmailStr == Global.xmlTranslate.str35) { inpToGainFocus = yourEmailInp; return Global.xmlTranslate.str40; } if (!StringUtil.isEmail(yourEmailStr)) { inpToGainFocus = yourEmailInp; return Global.xmlTranslate.str41; } if (friendNameStr == Global.xmlTranslate.str45) { inpToGainFocus = friendNameInp; return Global.xmlTranslate.str45; } if (friendEmailStr == Global.xmlTranslate.str37) { inpToGainFocus = friendEmailInp; return Global.xmlTranslate.str42; } if (!StringUtil.isEmail(friendEmailStr)) { inpToGainFocus = friendEmailInp; return Global.xmlTranslate.str43; } if (commentStr == Global.xmlTranslate.str38) { inpToGainFocus = commentInp; return Global.xmlTranslate.str44; } return VALIDATION_OK; } /** * Sends the from data to a server side script. */ private function submitForm():void { var msg:String = formValidationMsg(); if (msg == VALIDATION_OK) { createNewFormSendLdr(); formSendVar.senderName = yourNameStr; formSendVar.senderEmail = yourEmailStr; formSendVar.recipientName = friendNameStr; formSendVar.recipientEmail = friendEmailStr; formSendVar.senderComment = commentStr; formSendReq.data = formSendVar; formSendLdr.load(formSendReq); popupWindow.disable(); alertAbout(Global.xmlTranslate.str48, false); } else { alertAbout(msg); } } /** * URL loader events handler. * @param e */ private function formSendLdr_eventHandler(e:Event):void { switch (e.type) { case IOErrorEvent.IO_ERROR: alertAbout(IOErrorEvent(e).text); break; case SecurityErrorEvent.SECURITY_ERROR: alertAbout(SecurityErrorEvent(e).text); break; case Event.COMPLETE: var responseData:Object = com.oxylusflash.utils.XMLUtil.getParams(new XML(formSendLdr.data)); if (responseData.success) { resetForm(); alertAbout(Global.xmlTranslate.str51); } else { alertAbout(responseData.message); } break; } } /** * On timer complete. */ override protected function autoHideTimer_timerCompleteHandler(e:TimerEvent):void { super.autoHideTimer_timerCompleteHandler(e); if (inpToGainFocus) { inpToGainFocus.gainFocus(); inpToGainFocus = null; } } /** * Reset form. */ private function resetForm():void { yourNameStr = yourNameInp.label = Global.xmlTranslate.str36; yourEmailStr = yourEmailInp.label = Global.xmlTranslate.str35; friendNameStr = friendNameInp.label = Global.xmlTranslate.str45; friendEmailStr = friendEmailInp.label = Global.xmlTranslate.str37; commentStr = commentInp.label = Global.xmlTranslate.str38; } override public function reset():void { resetForm(); } // SOCIAL private function createSocialLinks():void { this.addChild(socialHolder); socialHolder.x = yourNameInp.width + Global.xmlTellAFriend.formMarginRight; socialHolder.scrollRect = new Rectangle(0, 0, this.width - socialHolder.x, this.height); var socialEntry:SocialEntry; var yOffset:Number = 0; const len:int = Global.socialXML.entry.length(); for (var i:int = 0; i < len; ++i) { socialEntry = socialHolder.addChild(new LibSocialEntry) as SocialEntry; socialEntry.init(Global.socialXML.entry[i], socialHolder.scrollRect.width); socialEntry.y = yOffset; yOffset += socialEntry.height + Global.xmlTellAFriend.socialYSpacing; } } } }