/**
 * public api key for reCaptcha service
 */
var captchaPublicKey = '6Lf2NAUAAAAAAO-oMx_OnTzk_JsRiZlLw_X5xITf';

/**
 * activate a form for validation and submission with field requirements as well
 * as a captcha requirement
 *
 * note: must not be called before domready
 *
 * @param string formId
 * @param string captchaId
 * @return false
 */
function activateForm(formId, captchaId){
   Recaptcha.create(captchaPublicKey, captchaId, {'theme': 'red'});
	var formEl = $(formId);
	var captchaEl = $(captchaId);
	var clickOnce = false;
	formEl.submit = function(){
		var status = false;
		pageTracker._trackPageview(window.location + "#Submit:" + document.title);
		status = formValid();
		if(status == true){
				if (clickOnce == false){
		            clickOnce = true;
		          var req = new Request({
					'url': formEl.get('action'),
					'method': 'post',
					'data': formEl,
					'evalResponse': true,
					'onComplete': function(){
						if (captcha_error != ''){
	                        alert(captchaMessage(captcha_error));
							Recaptcha.reload();
						} else if (captcha_redirect != ''){
							location.href = captcha_redirect;
						} else {
							alert('An unknown error has occurred. Notify the website administrator.');
							Recaptcha.reload();
						}
						formEl.setStyle('opacity', '1');
					    clickOnce = false;
					}
				});
				formEl.setStyle('opacity', '0.3');
				req.send();
			
				return(false);
				}else{
					return false;
				}
				
		}else{
		  return (false);
		}		
	};
}
function ajax_captcha(formId, captchaId){
	Recaptcha.create(captchaPublicKey, captchaId, {'theme': 'red'});
	var formEl = $(formId);
	var clickOnce = false;
	var submitBtn = $('submit');
	submitBtn.setStyle('cursor','pointer');
	submitBtn.addEvent('click', function(ev){
		//ev.stop();
		pageTracker._trackPageview(window.location + "#Submit:" + formId);
		return formEl.fireEvent('submit');
	});
	formEl.addEvent('submit', function(e){
		e.stop();
		pageTracker._trackPageview(window.location + "#Submit:" + document.title);
		var status = false;
		status = formValid();
		if(status == true){
			this.set('send', {
				'evalResponse': true,
				'noCache': true,
				'onSuccess': function(){
					//alert(server_error);
					//alert(captcha_error);
					if (server_error != ''){
						if(server_error == 'invalid-age'){
							handleResponse('age', 'error-msg');
							formEl.setStyle('opacity', '1');
						}else if (server_error == 'invalid-data'){
							handleResponse('data', 'error-msg');
							formEl.setStyle('opacity', '1');
						}else if (server_error == 'invalid-email'){
							handleResponse('email', 'error-msg');
							formEl.setStyle('opacity', '1');
						}
						return(false);
					} else {
						if (captcha_error == ''){
	                        formEl.setStyle('display', 'none');
							handleResponse('success', 'thank-you');
						} else {
							alert(captchaMessage(captcha_error));
							formEl.setStyle('opacity', '1');
							Recaptcha.reload();
						}
					}
				},
				'onFailure': function(){
					handleResponse('connection', 'error-msg');
					return(false);
				},
				'onException': function(){
					handleResponse('exception', 'error-msg');
					return(false);
				}
			});
			this.setStyle('opacity', '0.3');
			this.send();
		}else{
		  return(false);
		}		
	});
}
function formRequest(formId, captchaId, responseId){
	Recaptcha.create(captchaPublicKey, captchaId, {'theme': 'red'});
	var formEl, clickOnce, submitBtn, FormSend, server_error, captcha_error;
	formEl = $(formId);
	clickOnce = false;
	submitBtn = $('submit');
	submitBtn.setStyle('cursor','pointer');
	FormSend = new Form.Request($(formId), $(responseId), {
    	requestOptions: {
    		evalScripts: true,
        	spinnerOptions: {
        	    message: 'Submitting your question...'
        	}
    	},
    	resetForm: true,
    	onSuccess: function(){
    		if (FormSend.request.response.html.indexOf('CAPTCHA') > -1){
    			clickOnce = false;
    			Recaptcha.reload();
    		} else {
    			clickOnce = false;
				$(formId).fade('out');
    		}
    	},
    	onFailure: function(){
    		handleResponse('connection', responseId);
    		clickOnce = false;
    		Recaptcha.reload();
    	}
	});
	submitBtn.addEvent('click', function(ev){
		ev.stop();
		if (clickOnce === false){
			clickOnce = true;
			var status = false;
			status = formValid();
			if(status == true){
				pageTracker._trackPageview(window.location + "#Submit:" + formId);
				FormSend.send();
			} else {
				clickOnce = false;
			}
		}
	});
}
function ajaxifyForm(formId){
	var formEl = $(formId);
	var clickOnce = false;
	var submitBtn = $('submit');
	formEl.addEvent('submit', function(e){
		new Event(e).stop();
		var status = false;
		status = formValid();
		if(status == true){
			this.set('send', {
				'evalResponse': true,
				'noCache': true,
				'onSuccess': function(){
					if (server_error != ''){
						if(server_error == 'invalid-age'){
							handleResponse('age', 'error-msg');
						}else if (server_error == 'invalid-data'){
							handleResponse('data', 'error-msg');
						}else if (server_error == 'invalid-email'){
							handleResponse('email', 'error-msg');
						}
						return(false);
					} else {
						formEl.setStyle('display', 'none');
						handleResponse('success', 'thank-you');
						return(false);
					}
					this.setStyle('opacity', '1');
				},
				'onFailure': function(){
					handleResponse('connection', 'error-msg');
					return(false);
				},
				'onException': function(){
					handleResponse('exception', 'error-msg');
					return(false);
				}
			});
			this.setStyle('opacity', '0.3');
			this.send();
		}else{
		  return(false);
		}		
	});
	submitBtn.setStyle('cursor','pointer');
	submitBtn.addEvent('click', function(ev){
		ev.stop();
		pageTracker._trackPageview(window.location + "#Submit:" + formId);
		return formEl.fireEvent('submit');
	});
}
function submitFormNoAjax(formId){
	var formEl = $(formId);
	var clickOnce = false;
	var status = false;
	status = formValid();
	if(status == true){
		if (clickOnce == false){
			clickOnce = true;
			pageTracker._trackPageview(window.location + "#Submit:" + document.title);
		    formEl.submit();
		}else{
		  return (false);
		}
	}else{
		return (false);
	}
}
/**
 * convert an error code from reCaptcha to a human readable error message
 *
 * @param string code
 * @return string message
 */
function captchaMessage(code){
	var msg = 'An unknown error occurred. Notify the website administrator.';
	switch(code){
		case 'invalid-site-public-key':
			msg = 'The CAPTCHA public key is invalid. Notify the website administrator.';
		break;
		case 'invalid-site-private-key':
			msg = 'The CAPTCHA private key is invalid. Notify the website administrator.';
		break;
		case 'invalid-request-cookie':
			msg = 'The challenge parameter was invalid. Notify the website administrator.';
		break;
		case 'incorrect-captcha-sol':
			msg = 'The CAPTCHA solution was incorrect. Please try again.';
		break;
		case 'verify-params-incorrect':
			msg = 'The parameters to /verify were invalid. Notify the website administrator.';
		break;
		case 'invalid-referrer':
			msg = 'The CAPTCHA API keys being used belong to another domain. Notify the website administrator.';
		break;
	}
	return(msg);
}
function handleResponse(code, responseId) {
    var block = $(responseId);
    if (code == 'success') {
        block.setStyle('display', 'block');
    } else {
        var msg = displayError(code);
        console.log(msg);
        block.set('html', msg);
        block.setStyle('display', 'block');
    }
}

function displayError(code) {
    var msg;
    switch (code) {
    case 'connection':
        msg = 'There was an issue with the server connection. Please notify the website administrator.';
        break;
    case 'exception':
        msg = 'There was an error processing your request. Please notify the website administrator.';
        break;
    case 'data':
        msg = 'There was a server error during the processing of your request. Please notify the website administrator.';
    case 'age':
        msg = "Although we are grateful that you want to send us a message, the Children's Online Privacy Protection Act prevents us from collecting information from consumers under the age of 13.  However, you are welcome to contact us by phone or mail. We regret any inconvenience this may cause.  If you would like us to respond to your inquiry via email, please include your email address in your letter.\n\nIndustry and Consumer Affairs\nThe Coca-Cola Company\n1 Coca-Cola Plaza\nAtlanta, GA 30313\n800-438-2653 (phone)";
        break;
    case 'email':
        msg = "The email address you entered was invalid. Please try again.";
        break;
    default:
        msg = 'An unknown error occurred. Please notify the website administrator.';
    }
    return (msg);
}
/**
 * toggle required fields in a form based on existence of the required class
 *
 * @param string formId
 * @return void
 */
function toggleRequired(form){
     	$(form).getElements('input,select').each(function(el){
		var label = el.getParent().getElement('label[for=' + el.get('id') + ']');
		var span = (label) ? label.getElement('span') : null;
		if (!span && el.hasClass('required')){
			new Element('span', {'class': 'red'}).set('text', '(required):').inject(label);
		} else if (span && !el.hasClass('required')){
			label.getElement('span').destroy();
		}
	});
}

window.log = function(){
  log.history = log.history || [];
  log.history.push(arguments);
  arguments.callee = arguments.callee.caller;  
  if(this.console) console.log( Array.prototype.slice.call(arguments) );
};
(function(b){function c(){}for(var d="assert,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profileEnd,time,timeEnd,trace,warn".split(","),a;a=d.pop();)b[a]=b[a]||c})(window.console=window.console||{});

