Share = {
	parameters: {},
	shareContainer: null,
	containerChildren: null,
	charCountMax: 250,
	shareConfirmation: false,
	showingView: null,
	movieFinished: false,
	hidden: 1,
	shown: 0,
	inputDefaults: [],
	defaultsSet: false,
	shareId: 101,
	shareSendAgainSet: false,
	initOptions: function (a) {
		this.options = Object.extend({
			controller: $("moviecontroller"),
			sharecontainer: $("sharecontainer"),
			shareformid: "shareform",
			sharetoggles: $$(".sharetoggle"),
			rnameinput: $("sharername"),
			remailinput: $("shareremail"),
			rname: $("rnametext"),
			snameinput: $("sharesname"),
			semailinput: $("sharesemail"),
			sname: $("snametext"),
			messageinput: $("sharemessage"),
			messagecharcount: $("sharecharcount"),
			message: $("sharepreviewmessage"),
			formsubmit: $("sendformsubmit"),
			sendingbtn: $("sendingbtn"),
			defaultShareMessageContainer: $("defaultShareMessage")
		},
		a[0] || {});
		this.shareToggles = this.options.sharetoggles;
		this.shareContainer = this.options.sharecontainer;
		this.shareFormId = this.options.shareformid;
		this.shareForm = $(this.shareFormId);
		this.rNameInput = this.options.rnameinput;
		this.rEmailInput = this.options.remailinput;
		this.rName = this.options.rname;
		this.sNameInput = this.options.snameinput;
		this.sEmailInput = this.options.semailinput;
		this.sName = this.options.sname;
		this.messageInput = this.options.messageinput;
		this.messageCharCount = this.options.messagecharcount;
		this.message = this.options.message;
		this.formSubmit = this.options.formsubmit;
		this.sendingBtn = this.options.sendingbtn;
		if(this.sendingBtn.visible()) this.sendingBtn.hide();
		var c = this.options.defaultShareMessageContainer;
		this.setDefaultMessage(c.innerHTML);
		var b = $("shareBackMessage");
		if (b) {
			this.setBackMessage(b.innerHTML)
		}
	},
	toggleVideo: function () {
		var c = this.trackingDescription();
		var a = window.location.href;
		/*AC.Tracking.trackPage({
			pageName: c,
			prop6: c,
			prop4: a
		});*/
		this.initOptions(arguments);
		var b = this.options.controller;
		this.toggleView(b)
	},
	addValidation: function () {
		this.valid = new Validation(this.shareFormId, {
			onSubmit: false,
			onFormValidate: this.processForm.bind(this)
		});
		
		// Shorter message for iPad to fit on one line
		if(AC && AC.Detector && AC.Detector._isIpad){ var emailValidationMessage = "Valid email address required."; }
		else { var emailValidationMessage = "Valid email address required. Example: steve@mac.com"; }
		
		Validation.addAllThese([
			["required", "This is a required field.", function (a) {
				$("shareform").enable();
				return !Validation.get("IsEmpty").test(a)
			}],
			["validate-email", emailValidationMessage, function (a) {
				$("shareform").enable();
				return Validation.get("IsEmpty").test(a) || /\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.test(a)
			}]]);
		Event.observe(this.shareForm, "submit", function (a) {
			Event.stop(a);
			this.formSubmit.hide();
			this.sendingBtn.show();
			this.shareForm.disable();
			this.valid.validate();
		}.bindAsEventListener(this));
		this.validationAdded = true;
	},
	toggleView: function (a) {
		if (this.shown == 0) {
			this.shown = 1;
			this.hidden = 0;
			if ($("main") && !$("main").hasClassName("shareactive")) {
				$("main").addClassName("shareactive")
			}
			if (a) {
				a.Stop();
				if (a.controllerPanel.hasClassName("active")) {
					a.controllerPanel.removeClassName("active")
				}
			}
			if (!this.validationAdded) {
				this.addValidation()
			} else {
				this.valid.reset()
			}
			this.buildForm();
			this.shareToggles[this.hidden].setStyle({
				visibility: "hidden"
			});
			new Effect.Appear(this.shareToggles[this.shown], {
				duration: 0.3
			})
		} else {
			if (this.shown == 1) {
				this.shown = 0;
				this.hidden = 1;
				if ($("main") && $("main").hasClassName("shareactive")) {
					$("main").removeClassName("shareactive")
				}
				if (a && !a.controllerPanel.hasClassName("active")) {
					a.controllerPanel.addClassName("active")
				}
				this.shareToggles[this.hidden].hide();
				this.shareToggles[this.shown].setStyle({
					visibility: "visible"
				});
				if (a && a.movie) {
					a.movie.style.zIndex = "10000";
					if (!$("moviecontainer").hasClassName("loading")) {
						setTimeout(a.Play.bind(a), 100)
					}
				}
			}
		}
	},
	updateCharCount: function (a) {
		this.messageCharCount.innerHTML = this.charCountMax - this.messageInput.value.length
	},
	buildForm: function () {
		if (this.shareForm) {
			this.shareForm.show();
			if(this.shareConfirmation) this.shareConfirmation.hide()
			if($('backtovideoMessage')) $('backtovideoMessage').show();
		}
		this.rName.innerHTML = this.rNameInput.value;
		this.sName.innerHTML = this.sNameInput.value;
		this.message.innerHTML = this.messageInput.value;
		this.setInputDefaults();
		this.updateCharCount();
		Event.observe(this.rNameInput, "keyup", function (a) {
			this.previewInput(this.rNameInput, this.rName)
		}.bind(this));
		Event.observe(this.sNameInput, "keyup", function (a) {
			this.previewInput(this.sNameInput, this.sName)
		}.bind(this));
		Event.observe(this.messageInput, "keydown", function (a) {
			var c = (typeof a.which !== "undefined") ? a.which : a.keyCode;
			if (c != 37 && c != 38 && c != 39 && c != 40 && c != 8) {
				if ((this.messageInput.value.length) === this.charCountMax) {
					if (a.preventDefault) {
						a.preventDefault()
					} else {
						a.returnValue = false
					}
				} else {
					if (this.messageInput.selectionStart) {
						var b = this.messageInput.selectionEnd
					}
					this.messageInput.focus();
					if (this.messageInput.selectionStart) {
						this.messageInput.selectionEnd = b
					}
				}
			}
		}.bind(this), false);
		Event.observe(this.messageInput, "keyup", function (a) {
			this.previewInput(this.messageInput, this.message);
			this.updateCharCount()
		}.bind(this));
		Event.observe(window, "unload", function (a) {
			this.inputDefaults.each(function (b) {
				if($(b.id)) $(b.id).value = b.value;
				else b.value = '';
			}.bind(this))
		}.bind(this))
	},
	setDefaultMessage: function (a) {
		if (!this._defaultMessage) {
			this.messageInput.value = a;
			this._defaultMessage = a
		}
	},
	defaultMessage: function () {
		return this._defaultMessage
	},
	setBackMessage: function (a) {
		$("backtovideoMessage").innerHTML = a
	},
	backMessage: function () {
		return $("backtovideoMessage").innerHTML
	},
	setInputDefaults: function () {
		if (!this.defaultsSet) {
			$$("#shareform .default").each(function (a) {
				this.inputDefaults.push({
					id: a.id,
					value: a.value
				})
			}.bind(this));
			this.inputDefaults.each(function (b, a) {
				this.inputDefaults[b.id] = b
			}.bind(this));
			$$("#shareform .default").each(function (b, a) {
				Event.observe(b, "focus", function () {
					if (b.hasClassName("default")) {
						b.removeClassName("default");
						b.value = ""
					}
				});
				Event.observe(b, "blur", function () {
					if (b.value == "") {
						b.value = this.inputDefaults[a].value;
						if (!b.hasClassName("default")) {
							b.addClassName("default")
						}
						if (b == this.sNameInput) {
							this.previewInput(b, this.sName)
						}
						if (b == this.rNameInput) {
							this.previewInput(b, this.rName)
						}
					}
				}.bind(this))
			}.bind(this));
			this.defaultsSet = true
		}
	},
	previewInput: function (a, c) {
		if (c.innerText) {
			c.innerText = a.value
		} else {
			var b = document.createTextNode(a.value);
			c.innerHTML = "";
			c.appendChild(b)
		}
	},
	trackingDescription: function () {
		if (!this._trackingDescription) {
			var a = document.getElementsByName("TrackingDescription")[0];
			var b = "";
			if (typeof a === "undefined") {
				//b = AC.Tracking.pageName()
			} else {
				b = a.getAttribute("content")
			}
			this._trackingDescription = b
		}
		return this._trackingDescription
	},
	prop3ForTrackedEventNamed: function (a) {
		return (this.trackingDescription() + " - " + a)
	},
	buildConfirmation: function () {
		this.shareSendAgain = $("sharesendagain");
		this.shareConfirmation = $("shareconfirmation");
		if (!this.shareSendAgainSet) {
			//var a = "Share: Send to another friend";
			Event.observe(this.shareSendAgain, "click", function (b) {
				Event.stop(b);
				/*this.trackingDescription();
				AC.Tracking.trackClick({
					prop3: this.prop3ForTrackedEventNamed(a)
				},
				$("sharesendagain"), "o", a);*/
				this.previewInput(this.rNameInput, this.rName);
				new Effect.Fade(this.shareConfirmation);
				new Effect.Appear(this.shareForm, {
					duration: 0.3
				});
				if($('backtovideoMessage')) $('backtovideoMessage').show();
			}.bind(this));
			this.shareSendAgainSet = true
		}
	},
	processForm: function (a, e) {
		if (!a) {
			this.sendingBtn.hide();
			this.formSubmit.show()
		}
		if (a) {
			var b = "Share: Send Email";
			var d = {
				prop3: this.prop3ForTrackedEventNamed(b),
				prop16: "Send to Friends",
				eVar16: "Send to Friends",
				events: "event3"
			};
			//AC.Tracking.trackClick(d, $("sendingbtn"), "o", b);
			var c = $F(e.getElementsBySelector('input[name="rname"]')[0]) + ", " + $F(e.getElementsBySelector('input[name="sname"]')[0]) + " has sent you a video.";
			var f = e.serialize().toQueryParams();
			if (this.rNameInput.hasClassName("default")) {
				f.rname = ""
			}
			if (this.sNameInput.hasClassName("default")) {
				f.sname = ""
			}
			f.shareId = this.shareId;
			Object.extend(f, this.parameters);
			if (typeof(f.copy) === "undefined") {
				f.copy = false
			} else {
				f.copy = true
			}
			this.sendReq(f)
		}
	},
	acknowledgeComplete: function () {
		try {
			new Effect.Fade(this.shareForm, {
				afterFinish: function (b) {
					this.rNameInput.value = "";
					this.rEmailInput.value = "";
					this.rNameInput.value = this.inputDefaults[this.rNameInput.id].value;
					if (!this.rNameInput.hasClassName("default")) {
						this.rNameInput.addClassName("default")
					}
					this.rEmailInput.value = this.inputDefaults[this.rEmailInput.id].value;
					if (!this.rEmailInput.hasClassName("default")) {
						this.rEmailInput.addClassName("default")
					}
					this.sendingBtn.hide();
					this.formSubmit.show();
					$("shareform").enable();
				}.bind(this)
			});
			this.buildConfirmation();
			new Effect.Appear(this.shareConfirmation, {
				duration: 0.3
			})
			if($('backtovideoMessage')) $('backtovideoMessage').hide();
		} catch(a) {}
	},
	sendReq: function (c) {
		var a = c.sharePhpUrl || "/trailers/global/scripts/share.php";
		var b = new Ajax.Request(a, {
			method: "POST",
			parameters: c,
			onComplete: this.acknowledgeComplete.bind(this)
		})
	}
};

