/*************************************************************************************************** * Website: www.warmforestflash.com * Blog: www.warmforestflash.com/blog * Email: hello@warmforestflash.com * Feel free to use this code in any way you want other than selling it. * Thanks. -Jay ***************************************************************************************************/ package com.warmforestflash { import flash.display.Sprite; import flash.events.*; import flash.text.*; import flash.net.*; import gs.TweenLite; import gs.OverwriteManager; import gs.plugins.*; TweenPlugin.activate([BlurFilterPlugin]); public class ContactForm extends Sprite { // Fields private var _nameField:Sprite; private var _emailField:Sprite; private var _messageField:Sprite; // Text fields private var _nameTextField:TextField; private var _emailTextField:TextField; private var _messageTextField:TextField; private var _alertTextField:TextField; // Labels public var nameText:String; public var emailText:String; public var messageText:String; public var sendButtonText:String; public var sendingText:String; public var errorEmailText:String; public var errorServerText:String; public var confirmationText:String; // Colors public var textColor:uint; public var borderColor:uint; public var backgroundColor:uint; public var selectedBorderColor:uint; public var selectedBackgroundColor:uint; public var selectedBlurAmount:uint; public var sendButtonTextColor:uint; public var sendButtonTextRollOverColor:uint; public var sendButtonColor:uint; public var sendButtonRollOverColor:uint; public var errorColor:uint; public var confirmationColor:uint; // Layout public var nameWidth:Number; public var emailWidth:Number; public var messageWidth:Number; public var messageHeight:Number; public var verticalSpacing:Number; //============================================================================================================================ public function ContactForm() //============================================================================================================================ { OverwriteManager.init(); addEventListener(Event.ADDED_TO_STAGE, onAddedToStage, false, 0, true); // Set default label settings nameText = "Je naam"; emailText = "Je emailadres"; messageText = "Zeg het maar..."; sendButtonText = "VERZENDEN"; sendingText = "Je bericht wordt verzonden..."; errorEmailText = "Er is iets mis met je emailadres"; errorServerText = "Fout met de server. Probeer later nog eens."; confirmationText = "Bericht verzonden. Dankjewel!"; // Set default color settings textColor = 0x000000; borderColor = 0xb0c4de; backgroundColor = 0xffffff; selectedBorderColor = 0xc0ece6; selectedBackgroundColor = 0xb0c4de; selectedBlurAmount = 15; sendButtonTextColor = 0xffffff; sendButtonTextRollOverColor = 0x12303f; sendButtonColor = 0x12303f; sendButtonRollOverColor = 0xb0c4de; errorColor = 0xff4400; confirmationColor = 0x05b59a; // Set default layout settings nameWidth = 250; emailWidth = 250; messageWidth = 400; messageHeight = 142; verticalSpacing = 10; } //============================================================================================================================ private function init():void //============================================================================================================================ { createContactForm(); } //============================================================================================================================ private function setFieldNames():void //============================================================================================================================ { if(_nameTextField.text == "") _nameTextField.text = nameText; if(_emailTextField.text == "") _emailTextField.text = emailText; if(_messageTextField.text == "") _messageTextField.text = messageText; } //============================================================================================================================ private function validateEmail(e:String):Boolean //============================================================================================================================ { // Check length if(e.length >= 7) { // Check for an @ sign if(e.indexOf("@") > 0) { // Check for at least 2 characters following the @ if((e.indexOf("@") + 2) < e.lastIndexOf(".")) { // Check for a domain name of at least 2 characters if (e.lastIndexOf(".") < (e.length - 2)) { // If all the above tests pass, the email address is in valid format return true; } } } } return false; } //============================================================================================================================ private function validateForm():void //============================================================================================================================ { var cf:Object = this; var n:String = cf.getChildAt(0).getChildAt(2).text; var e:String = cf.getChildAt(1).getChildAt(2).text; var m:String = cf.getChildAt(2).getChildAt(2).text; if(validateEmail(e)) { var loader:URLLoader = new URLLoader(); var req:URLRequest = new URLRequest("contact_form.php"); var variables:URLVariables = new URLVariables(); loader.dataFormat = URLLoaderDataFormat.VARIABLES; req.method = URLRequestMethod.POST; variables.senderName = n; variables.senderEmail = e; variables.senderMessage = m; req.data = variables; loader.load(req); loader.addEventListener(Event.COMPLETE, onSendComplete); _alertTextField.text = sendingText; TweenLite.to(_alertTextField, 0.1, {tint:confirmationColor}); function onSendComplete(e:Event):void { loader.removeEventListener(Event.COMPLETE, onSendComplete); if (e.target.data.returnValue == 1) // Message sent { TweenLite.to(_alertTextField, 0.1, {tint:confirmationColor}); _alertTextField.text = confirmationText; _nameTextField.text = nameText; _emailTextField.text = emailText; _messageTextField.text = messageText; stage.focus = null; TweenLite.to(_nameField.getChildByName("br"), 0.5, {tint:null}); TweenLite.to(_emailField.getChildByName("br"), 0.5, {tint:null}); TweenLite.to(_messageField.getChildByName("br"), 0.5, {tint:null}); TweenLite.to(_nameField.getChildByName("bg"), 0.5, {tint:null}); TweenLite.to(_emailField.getChildByName("bg"), 0.5, {tint:null}); TweenLite.to(_messageField.getChildByName("bg"), 0.5, {tint:null}); } else // Server error { TweenLite.to(_alertTextField, 0.1, {tint:errorColor}); _alertTextField.text = errorServerText; } } } else // Email is not valid { TweenLite.to(_alertTextField, 0.1, {tint:errorColor}); _alertTextField.text = errorEmailText; stage.focus = _emailTextField; } } //============================================================================================================================ // CREATORS //============================================================================================================================ //============================================================================================================================ private function createPixelArrow(c:uint):Sprite //============================================================================================================================ { var t:Sprite = new Sprite(); t.graphics.beginFill(c, 1); t.graphics.drawRect(0, 0, 1, 1); t.graphics.drawRect(1, 1, 1, 1); t.graphics.drawRect(2, 2, 1, 1); t.graphics.drawRect(1, 3, 1, 1); t.graphics.drawRect(0, 4, 1, 1); t.graphics.endFill(); t.name = "pixelArrow_mc"; return t; } //============================================================================================================================ private function createContactForm():void //============================================================================================================================ { var h:int = 22; var font:Font = new FontText(); var tf:TextFormat = new TextFormat(); tf.font = font.fontName; tf.size = 12; tf.color = textColor; tf.leading = 3; _nameField = new Sprite(); var nameBr:Sprite = new Sprite(); nameBr.graphics.beginFill(borderColor); nameBr.graphics.drawRect(0, 0, nameWidth, h); nameBr.graphics.endFill(); nameBr.name = "br"; var nameBg:Sprite = new Sprite(); nameBg.graphics.beginFill(backgroundColor); nameBg.graphics.drawRect(1, 1, nameWidth - 2, h - 2); nameBg.graphics.endFill(); nameBg.name = "bg"; _nameTextField = new TextField(); _nameTextField.name = "nameTextField"; _nameTextField.type = TextFieldType.INPUT; _nameTextField.tabIndex = 1; _nameTextField.width = nameWidth - 7; _nameTextField.height = h; _nameTextField.x = 3; _nameTextField.y = 4; _nameTextField.defaultTextFormat = tf; _nameTextField.antiAliasType = AntiAliasType.ADVANCED; _nameTextField.embedFonts = true; _nameTextField.wordWrap = false; _nameTextField.multiline = false; _nameTextField.maxChars = 100; _nameTextField.text = nameText; _nameTextField.addEventListener(FocusEvent.FOCUS_IN, onFocus, false, 0, true); _nameField.addChild(nameBr); _nameField.addChild(nameBg); _nameField.addChild(_nameTextField); _emailField = new Sprite(); var emailBr:Sprite = new Sprite(); emailBr.graphics.beginFill(borderColor); emailBr.graphics.drawRect(0, 0, emailWidth, h); emailBr.graphics.endFill(); emailBr.name = "br"; var emailBg:Sprite = new Sprite(); emailBg.graphics.beginFill(backgroundColor); emailBg.graphics.drawRect(1, 1, emailWidth - 2, h - 2); emailBg.graphics.endFill(); emailBg.name = "bg"; _emailTextField = new TextField(); _emailTextField.name = "emailTextField"; _emailTextField.type = TextFieldType.INPUT; _emailTextField.tabIndex = 2; _emailTextField.width = emailWidth - 7; _emailTextField.height = h; _emailTextField.x = 3; _emailTextField.y = 4; _emailTextField.defaultTextFormat = tf; _emailTextField.antiAliasType = AntiAliasType.ADVANCED; _emailTextField.embedFonts = true; _emailTextField.wordWrap = false; _emailTextField.multiline = false; _emailTextField.maxChars = 100; _emailTextField.text = emailText; _emailTextField.addEventListener(FocusEvent.FOCUS_IN, onFocus, false, 0, true); _emailField.addChild(emailBr); _emailField.addChild(emailBg); _emailField.addChild(_emailTextField); _messageField = new Sprite(); var messageBr:Sprite = new Sprite(); messageBr.graphics.beginFill(borderColor); messageBr.graphics.drawRect(0, 0, messageWidth, messageHeight); messageBr.graphics.endFill(); messageBr.name = "br"; var messageBg:Sprite = new Sprite(); messageBg.graphics.beginFill(backgroundColor); messageBg.graphics.drawRect(1, 1, messageWidth - 2, messageHeight - 2); messageBg.graphics.endFill(); messageBg.name = "bg"; _messageTextField = new TextField(); _messageTextField.name = "messageTextField"; _messageTextField.type = TextFieldType.INPUT; _messageTextField.tabIndex = 3; _messageTextField.width = messageWidth - 7; _messageTextField.height = messageHeight; _messageTextField.x = 3; _messageTextField.y = 4; _messageTextField.defaultTextFormat = tf; _messageTextField.antiAliasType = AntiAliasType.ADVANCED; _messageTextField.embedFonts = true; _messageTextField.wordWrap = true; _messageTextField.multiline = true; _messageTextField.maxChars = 2500; _messageTextField.text = messageText; _messageTextField.addEventListener(FocusEvent.FOCUS_IN, onFocus, false, 0, true); _messageField.addChild(messageBr); _messageField.addChild(messageBg); _messageField.addChild(_messageTextField); _alertTextField = new TextField(); _alertTextField.name = "errorField_mc"; _alertTextField.autoSize = TextFieldAutoSize.LEFT; _alertTextField.defaultTextFormat = tf; _alertTextField.antiAliasType = AntiAliasType.ADVANCED; _alertTextField.embedFonts = true; _alertTextField.wordWrap = false; _alertTextField.multiline = false; _alertTextField.text = ""; addChild(_nameField); addChild(_emailField); _emailField.y = h + verticalSpacing; addChild(_messageField); _messageField.y = (h + verticalSpacing) * 2; addChild(_alertTextField); _alertTextField.x = 3; _alertTextField.y = _messageField.y + messageHeight + 8; var sendButton:Sprite = createSendButton(); addChild(sendButton); sendButton.x = Math.round(messageWidth - sendButton.width); sendButton.y = _messageField.y + messageHeight + verticalSpacing; } //============================================================================================================================ private function createSendButton():Sprite //============================================================================================================================ { var s:Sprite = new Sprite(); var font:Font = new FontSmall(); var tf:TextFormat = new TextFormat(); tf.font = font.fontName; tf.size = 12; tf.color = sendButtonTextColor; var t:TextField = new TextField(); t.autoSize = TextFieldAutoSize.LEFT; t.defaultTextFormat = tf; t.selectable = false; t.embedFonts = true; t.text = sendButtonText; t.x = 8; t.y = -1; t.name = "txt"; var bg:Sprite = new Sprite(); bg.graphics.beginFill(sendButtonColor); bg.graphics.drawRect(0, 0, t.width + 18, 25); bg.graphics.endFill(); bg.name = "bg"; var ar:Sprite = createPixelArrow(sendButtonTextColor); ar.x = 3; ar.y = 4; s.buttonMode = true; s.mouseChildren = false; s.addEventListener(MouseEvent.CLICK, onSendButtonClick, false, 0, true); s.addEventListener(MouseEvent.ROLL_OVER, onSendButtonRollOver, false, 0, true); s.addEventListener(MouseEvent.ROLL_OUT, onSendButtonRollOut, false, 0, true); s.addChild(bg); s.addChild(ar); s.addChild(t); return s; } //============================================================================================================================ // LISTENERS //============================================================================================================================ //============================================================================================================================ private function onAddedToStage(e:Event):void //============================================================================================================================ { init(); removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage); } //============================================================================================================================ private function onSendButtonClick(e:MouseEvent):void //============================================================================================================================ { validateForm(); } //============================================================================================================================ private function onSendButtonRollOver(e:MouseEvent):void //============================================================================================================================ { TweenLite.to(e.target.getChildByName("bg"), 0.5, {tint:sendButtonRollOverColor}); TweenLite.to(e.target.getChildByName("txt"), 0.5, {tint:sendButtonTextRollOverColor}); TweenLite.to(e.target.getChildByName("pixelArrow_mc"), 0.5, {tint:sendButtonTextRollOverColor}); } //============================================================================================================================ private function onSendButtonRollOut(e:MouseEvent):void //============================================================================================================================ { TweenLite.to(e.target.getChildByName("bg"), 0.5, {tint:null}); TweenLite.to(e.target.getChildByName("txt"), 0.5, {tint:null}); TweenLite.to(e.target.getChildByName("pixelArrow_mc"), 0.5, {tint:null}); } //============================================================================================================================ private function onFocus(e:Event):void //============================================================================================================================ { setFieldNames(); var mc:Object; var names:Array = [_nameField, _emailField, _messageField]; switch (e.target.name) { case "nameTextField": mc = _nameField; if(e.target.text == nameText) e.target.text = ""; break; case "emailTextField": mc = _emailField; if(e.target.text == emailText) e.target.text = ""; break; case "messageTextField": mc = _messageField; if(e.target.text == messageText) e.target.text = ""; break; default: trace("Switch statement error"); } TweenLite.from(mc.getChildByName("br"), 0.5, {blurFilter:{blurX:selectedBlurAmount, blurY:selectedBlurAmount}}); for(var i:uint = 0; i < 3; i++) { var t:Object = names[i]; if(t == mc) { TweenLite.to(t.getChildByName("br"), 0.5, {tint:selectedBorderColor}); TweenLite.to(t.getChildByName("bg"), 0.5, {tint:selectedBackgroundColor}); } else { TweenLite.to(t.getChildByName("br"), 0.5, {tint:null}); TweenLite.to(t.getChildByName("bg"), 0.5, {tint:null}); } } } } }