/*
 * Monir Abu Hilal's WebSite Script - http://www.monirabuhilal.com/
 * "Site.js" Copyright (c) 2008 - Monir Abu Hilal
 *	E-Mail : monirabuhilal[at]gmail.com 
 */


var Site = {
	//========[ Start Function ]==========================	
	start: function() {
		["Form", "Contact", "Cancel", "Email","Message",
		 		 "Subject", "Name", "Page", "Send"].each(function(_Field){
			Site[_Field] = $( _Field.toLowerCase() );
		});

		Site.Form.setStyle( "top", -Site.Form.offsetHeight);
		
		Site.Inputs = $$(Site.Form.getElementsByTagName("input"),
						 Site.Form.getElementsByTagName("textarea")[0]).addEvent("keydown",
			function() {

				this.$tmp.error = $("lbl" + this.id).innerHTML;

				if (this.$tmp.error) {
					this.$tmp.fx.start({
						"background-color": "#fff",
						"color": "#222",
						"border-width":"0px",
						"width":"500px"
					});
					
					this.title = "";
					$("lbl" + this.id).innerHTML = $("lbl" + this.id).title;
				}
		});
		

		
		Site.FxOptions = {
			"duration": 400,
			"transition": Fx.Transitions.Expo.easeOut,
			"wait": false
		};
		
		Site.Inputs.each(function(_InputField) {
			_InputField.$tmp.fx = new Fx.Styles( _InputField, Site.FxOptions );
		});
		
		Site.Box = new Element("div", {
			"id": "box"
		}).injectAfter(Site.Page).addEvent("click", Site.endBox);
		
		Site.BoxFx = new Fx.Styles(Site.Box, Site.FxOptions);
		
		Site.FormFx = new Fx.Styles(Site.Form, Site.FxOptions);
		
		Site.Contact.addEvent("click", Site.startBox);
		
		Site.Cancel.addEvent("click", Site.endBox);
		
		window.addEvent("resize", function() {
			Site.Box.setStyle("height", Window.getScrollHeight());
		});
		
		Site.XHR = new XHR({
			onSuccess: function(result) {
				//do nothing...
			},
			onError: function(rt) {
				Site.Contact.getParent().setHTML("mail error");
			}
		});
		Site.Send.addEvent("click", Site.sendMail);
		
		//$('MyMsnLink').href = $('MyMsnLink').href + "monir_best@hotmail.com";
	},
	
	startBox: function(e) {
		new Event(e).stop();
		if (Site.BoxStarted) {
			return;
		}
		Site.BoxStarted = true;
		Site.Box.setStyles({
			"height": Window.getScrollHeight()
		});
		Site.Box.setStyle("display", "");
		Site.BoxFx.start({
			"opacity": [0, 0.7]
		}).chain(function() {
			Site.FormFx.start({
				"top": 0
			}).chain(function() {
				Site.BoxFxCompleted = true;

			});
		});
	},
	
	endBox: function(e) {
		if (e) {
			new Event(e).stop();
		}
		if (!Site.BoxFxCompleted) {
			return;
		}
		Site.BoxStarted = false;
		Site.BoxFxCompleted = false;
		Site.FormFx.start({
			"top": -Site.Form.offsetHeight
		}).chain(function() {
			Site.BoxFx.start({
				"opacity": 0.00001
			}).chain(function() {
				Site.Box.setStyle("visibility", "hidden");
				Site.Box.setStyle("display", "none");
			});
		});
		
	},
	
	//========[ Send E-mail Function ]==========================
	sendMail: function() {
		var _ErrorColor = "#ff6600"; // the Error Border | Text Color
		
		var _ErrorArray = [];
		Site.Inputs.each(function(_InputField) {
			if ((_InputField == Site.Email && !_InputField.value.test(/\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/)) || !_InputField.value) {
				_ErrorArray.push(_InputField);
				_InputField.$tmp.error = true;
			}
		});
		
		//Check if the length of the message less than 18?
		if (!_ErrorArray.length && Site.Message.value.length < 18) {
			
			_ErrorArray.push(Site.Message);
			Site.Message.$tmp.error = true;

		}
		
		if (!_ErrorArray.length) { // No Errors, Sending the E-mail...
			
			Site.XHR.send("send.aspx",
						  "name=" + encodeURIComponent(Site.Name.value) + 
						  "&email=" + Site.Email.value + 
						  "&message=" + encodeURIComponent(Site.Message.value) + 
						  "&subject=" + encodeURIComponent(Site.Subject.value)
						  );
			
			Site.Contact.getParent().setStyles({
				"padding-top": "6px",
				"padding-bottom": "7px"					
			});
		
			Site.Contact.getParent().setHTML("thank you for writing!").removeEvent("click", Site.startBox).addEvent("click",
			function(e) {
				new Event(e).stop();
			}).setStyle("left", 240);
			Site.endBox();
			
		} else { // Change BackgroundColor Of The Error Fields....
			
			$$(_ErrorArray).each(function(_ErrorField) {
				_ErrorField.style.borderColor = _ErrorColor;
				
				_ErrorField.$tmp.fx.start({
					//"background-color": _ErrorColor,
					"color": _ErrorColor,
					"border-width":"3px",
					"width":"494px"
//					"margin-left":"-3px"
				});

			//====[ Set The Error Message ]===============================
				var strErrorMsg = "";
				var strOrigTitle = $("lbl" + _ErrorField.id).title;
				
				switch( _ErrorField ){
					case Site.Email:
						if (_ErrorField.text == undefined){
							strErrorMsg = "Error: this ( Field ) is empty!";
							_ErrorField.title = strErrorMsg;
							$("lbl" + _ErrorField.id).innerHTML = strOrigTitle + ' ( <font color="'+_ErrorColor+'">'+ _ErrorField.title +'</font> )';
						}else{
							strErrorMsg = "Error: Wrong Mail Format ( ex: monir@example.com )";
							_ErrorField.title = strErrorMsg;
							$("lbl" + _ErrorField.id).innerHTML = strOrigTitle + ' ( <font color="'+_ErrorColor+'">'+ _ErrorField.title +'</font> )';
						};
						break;    
						
					case Site.Message:
						strErrorMsg = "Error: Message Field is empty (or) Less than 18 charchter...";
						_ErrorField.title = strErrorMsg;
						$("lbl" + _ErrorField.id).innerHTML =  strOrigTitle + ' ( <font color="'+_ErrorColor+'">'+ _ErrorField.title +'</font> )';
						break;
						
					default:
						strErrorMsg = 'Error: this ( Field ) is empty!';
						_ErrorField.title = strErrorMsg;
						$("lbl" + _ErrorField.id).innerHTML = strOrigTitle + ' ( <font color="'+_ErrorColor+'">'+ _ErrorField.title +'</font> )';
				}
			//====[ Set The Error Message ]===============================				
				
			});
		}
	}
};
window.onload = Site.start;