﻿// JScript File
var RM = new Object();
RM.console = window.console || { };
RM.console.error = RM.console.error || function(x) {};
RM.console.warn = RM.console.warn || function(x) {};
RM.console.log = RM.console.log || function(x) {};

function isNullOrEmpty(value) {
    return (value == null || value.length == 0);
}

var Styles = new Object();
Styles.FAILEDVALIDATION = "failedvalidation";

function Querystring(qs) { // optionally pass a querystring to parse
	this.params = {};
	
	if (qs == null) qs = location.search.substring(1, location.search.length);
	if (qs.length == 0) return;

	qs = qs.replace(/\+/g, ' ');
	var args = qs.split('&'); // parse out name/value pairs separated via &
	
	for (var i = 0; i < args.length; i++) {
		var pair = args[i].split('=');
		var name = decodeURIComponent(pair[0]);
		
		var value = (pair.length==2)
			? decodeURIComponent(pair[1])
			: name;
		
		this.params[name] = value;
	}
}

Querystring.prototype.get = function(key, default_) {
	var value = this.params[key];
	return (value != null) ? value : default_;
}

Querystring.prototype.contains = function(key) {
	var value = this.params[key];
	return (value != null);
}
 
function getCookie(c_name)
{
    if (document.cookie.length>0)
    {
        c_start=document.cookie.indexOf(c_name + "=");
        if (c_start!=-1)
        {
            c_start=c_start + c_name.length+1;
            c_end=document.cookie.indexOf(";",c_start);
            if (c_end==-1) c_end=document.cookie.length;
            return unescape(document.cookie.substring(c_start,c_end));
        }
    }
    return "";
}

function setCookie2(referrer) {
    var date = new Date();
    var expireDays = 7;
    date.setDate(date.getDate() + expireDays);
    
    var cookieStr = "rmreferral=" + referrer + ";expires=" + date.toGMTString() + ";";
    document.cookie = cookieStr;
}

function setCookie() {
    var date = new Date();
    var expireDays = 7;
    date.setDate(date.getDate() + expireDays);
    
    var qs = new Querystring();
    var cookieVal = qs.get("ref", "");
    
    var cookieStr = "rmreferral=" + cookieVal + ";expires=" + date.toGMTString() + ";";
    document.cookie = cookieStr + document.cookie;
}
 
function checkMail(emailElem, validationElem)
{
    if (isNullOrEmpty(emailElem.value)) {
        validationElem.show();
        validationElem.innerHTML = "An email address is required."
        return false;
    }
    var email = emailElem.value;
    var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    if (filter.test(email)) {
        return true;
    }
    else {
        validationElem.innerHTML = "A valid email address is required.";
        validationElem.style.display="block";
        return false;
    }
}

function EmailSubmitter() {
    this.Email = $('email');
    this.Button = $('goBtn');
    this.FailureDiv = $('failureDiv');
    this.ThankYouDiv = $('thankYouDiv');
    this.EmailDiv = $('emailDiv');
    this.ValidationDiv = $('validationDiv');
    this.ErrorMessage = "Ooops! We're sorry - please try again later.";
    // Edit
    this.HandlerPath = "http://rocketmatter.com/marketingbeta/scripts/";
    
    RM.console.log("EmailSubmitter ctor...");
    this.init();
}

EmailSubmitter.prototype.init = function() {
    Event.observe(this.Email, 'keypress', this.keyPress.bindAsEventListener(this));
    Event.observe(this.Button, 'click', this.submitEmail.bindAsEventListener(this));
}


EmailSubmitter.prototype.keyPress = function(evt) {
    var key = evt.which || evt.keyCode;
    if (key == Event.KEY_RETURN) {
        this.submitEmail(evt);
    }    
}

EmailSubmitter.prototype.failure = function(transport) {
    try {
        RM.console.log(transport.responseText);    
        this.ThankYouDiv.hide();
        this.EmailDiv.show();
        this.FailureDiv.innerHTML = this.ErrorMessage;
        
    } catch (err) {
        Otive.logError(err);
    }
}

EmailSubmitter.prototype.success = function(transport) {
    try {
        RM.console.log(transport.responseText);
        if (transport.responseText != "Failure") {
            this.ThankYouDiv.show();
            this.EmailDiv.hide();
        }
        else {
            this.ThankYouDiv.hide();
            this.EmailDiv.show();
            this.FailureDiv.innerHTML = this.ErrorMessage;
            this.FailureDiv.show();
        }
    } catch (err) {
        Otive.logError(err);
    }
}

EmailSubmitter.prototype.validate = function(evt) {
        var stopSubmission = false;
        
        if (!checkMail(this.Email, this.ValidationDiv)) {
            stopSubmission = true;
            this.Email.addClassName(Styles.FAILEDVALIDATION);
        }
        else {
            this.Email.removeClassName(Styles.FAILEDVALIDATION);
            this.ValidationDiv.hide();
        }    
        
        if (stopSubmission) {
            Event.stop(evt);
        }
    
        return !stopSubmission;
    }

EmailSubmitter.prototype.submitEmail = function(evt) {

    RM.console.log("EmailSubmitter submitEmail ...");
    
    var submitEmail = this.validate(evt);
    if (!submitEmail) {
        return;
    }
    
    var url = "../scripts/ajax_email_handler.php?e=";
    new Ajax.Request(url + this.Email.value, {
        method: 'get',
        onSuccess: this.success.bindAsEventListener(this),
        onFailure: this.failure.bindAsEventListener(this),
        onException: this.failure.bindAsEventListener(this)
    });
    
    Event.stop(evt);
}
