//Javascript Sauce v1.0
//by: Blake Dy

////////////////////
//GLOBAL VARIABLES//
var MGJS_MAX_SIMULTANEOUS_AJAX_REQUESTS = 50;
var MGJS_AJAX_ARRAY                     = new Array(MGJS_MAX_SIMULTANEOUS_AJAX_REQUESTS);
var MGJS_REQ_ARRAY                      = new Array(MGJS_MAX_SIMULTANEOUS_AJAX_REQUESTS);
var MGJS_CACHE_ARRAY                    = new Array();
var MGJS_SERVER                         = location.protocol + "//" + location.host;
//GLOBAL VARIABLES//
////////////////////

function dynamicCSS(filename) {
	var mycss = document.createElement('link');
	
	mycss.rel = 'stylesheet'
	mycss.type = 'text/css';
	mycss.href = filename;
	document.getElementsByTagName('head')[0].appendChild(mycss);
}

////////////////////////
//AJAX PROCESSING UNIT//

//make ajax request
function makeRequest(url,parameters,action,method) {
	if (MGJS_CACHE_ARRAY[url + "?" + parameters] != null) {
		processAction(action,check_action(action),MGJS_CACHE_ARRAY[url + "?" + parameters]);
		return;
	}
	
	jQuery.ajax({
	   type: method,
	   url: url,
	   data: parameters,
	   cache: true,
	   success: function(response){
			processAction(action,check_action(action),response);
			MGJS_CACHE_ARRAY[url + "?" + parameters] = response;
		 },
		 error: function(response){
			//alert(msg);
		 }
	});
}

//process response
function processRequest() {
	for (var i = 0; i < MGJS_MAX_SIMULTANEOUS_AJAX_REQUESTS; i++) {
		if (MGJS_AJAX_ARRAY[i] && MGJS_AJAX_ARRAY[i].readyState == 4) {
			if (MGJS_AJAX_ARRAY[i].status == 200) {
				var action = MGJS_REQ_ARRAY[i].action;
				var actionType = MGJS_REQ_ARRAY[i].actionType;
				var response = MGJS_AJAX_ARRAY[i].responseText;
				MGJS_CACHE_ARRAY[MGJS_REQ_ARRAY[i].url + "?" + MGJS_REQ_ARRAY[i].parameters] = response;
				processAction(action,actionType,response);
			} else {
				//alert(MGJS_AJAX_ARRAY[i].status);
			}
			MGJS_AJAX_ARRAY[i] = null;
		}
	}
}

//perform action
function processAction(action,type,response) {
	switch(type){
	case "id":
		document.getElementById(action).innerHTML = response;
		break;    
	case "function":
		var func = action;
		var args = null;
		var index = func.search(/\(.*\)/);
		if (index > 0) {
			args = func.slice(index+1,func.length-1);
			args = args.split(',');
			if(args[0].length == 0 && args.length == 1){args[0] = response;}
			else{
				for (var i = 0; i < args.length; i++) {
					args[i] = eval(args[i]);
				}
				args.push(response);
			}
			func = func.slice(0,index);
		} else { args = 0; }
		
		if (args.length > 0) {
			eval(func).apply(null,args);
		} else {
			eval(func)(response);
		}
		break;
	default:
		alert("JSAUCE ERROR: UNKNOWN");
	}
}

//checks if action exists
function check_action(action) {
	if(!action || action == "") {alert("JSAUCE ERROR\nmissing argument: action"); return false;}
	
	if(typeof action == "string"){
		var func = action;
		var index = func.search(/\(.*\)/);
		if (index > 0) {func = func.slice(0,index);}
		if (eval("typeof " + func + " == 'function'")) {return "function";}
		else if (document.getElementById(action)) {return "id";}
	}
	
	//if(typeof action == "function") {return "function";}
	//if(typeof action == "object") {return "id";}
	
	alert("JSAUCE ERROR\nnot a function or id: "+action); return false;
}

//dummy function for action calls
function mgjs_dummy(){
	 //alert(arguments[0]);
}

//AJAX PROCESSING UNIT//
////////////////////////



//////////////////
//SEND FUNCTIONS//

//api send
function mgjs_hero_api_send(campaign_id, msisdn, content_id, message, feedback){
	date = new Date();
	post = "campaign_id=" + escape(campaign_id) +
		   "&content_id=" + escape(content_id) +
		   "&to=" + escape(msisdn) +
		   "&message=" + escape(message) +
		   "&time=" + escape(date.getTime());
	feedback.css("display","block");
	feedback.find("#hero-msg-loading").css("display","block");
	feedback.find("#hero-msg-success").css("display","none");
	feedback.find("#hero-msg-error").css("display","none");
	makeRequest(MGJS_SERVER + "/code/apisend.rb", post, 
				"mgjs_hero_api_response('"+feedback.attr("id")+"&"+campaign_id+"')",
				"POST")
}

function mgjs_hero_api_response(feedback){
	var campmap = new Array();
	campmap[7080] = "Your song is on its way!";
	campmap[6974] = "Your building tour is on its way!";
	campmap[7104] = "Your house tour is on its way!";
	campmap[7276] = "Your getaway video is on its way!";
	campmap[7409] = "Your winning message is on its way!";
	campmap[7026] = "Your mobile deal is on its way!";
	campmap[7288] = "Thanks for signing up!";
	
	var feedbackArr = feedback.split("&");
	campaign_id = feedbackArr[1];
	feedback = $("#"+feedbackArr[0]);
	feedback.css("display","block");
	feedback.find("#hero-msg-loading").css("display","none");
	
	if ($(arguments[1]).find("response").attr("code") == "1"){
		feedback.find("#hero-msg-success").html(campmap[campaign_id]);
		feedback.find("#hero-msg-success").css("display","block");
	} else {
		feedback.find("#hero-msg-error").html($(arguments[1]).find("message").text());
		feedback.find("#hero-msg-error").css("display","block");
	}
}

function checkMinDigS(elem) {
	if(elem.value.length < 10 || elem.value == "Enter your mobile #...") {
		alert("Phone number must be 10 digits");
		return false;
	}
	return true;
}
//not really polymorphic functions in js
function checkMinDig(elem1, elem2, elem3) {
	if(elem1.value.length + elem2.value.length + elem3.value.length < 10) {
		alert("Phone number must be 10 digits");
		return false;
	}
	return true;
}

//SEND FUNCTIONS//
//////////////////



////////////////////////
//CONTACT US FUNCTIONS//


//contact us email send
function mgjs_contact_us_form(){
	var fullphone = escape($("#cu_phone1").val() + $("#cu_phone2").val() + $("#cu_phone3").val());
	var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
	
	if ($("#cu-firstname").val() === "" || $("#cu-lastname").val() === "") {
		alert("Please fill out your full name");
		return false;
	}
	if (fullphone.length < 10) {
		alert("Please fill out your full phone number");
		return false;
	}
	if (!emailPattern.test($("#cu-email").val())) {
		alert("Please fill out your correct email");
		return false;	
	}
	
	post =   "cu-firstname=" + escape($("#cu-firstname").val()) +
			 "&cu-lastname=" + escape($("#cu-lastname").val()) +
			 "&cu-email=" + escape($("#cu-email").val()) +
			 "&cu-title=" + escape($("#cu-title").val()) +
			 "&cu-phone=" + fullphone +
			 "&cu-company=" + escape($("#cu-company").val()) +
			 "&cu-message=" + escape($("#cu-message").val());
	makeRequest(MGJS_SERVER + "/code/contactus.rb", post, "mgjs_dummy()", "POST")
	
	alert("Your inquiry has been submitted, thank you!");
}


//CONTACT US FUNCTIONS//
////////////////////////

////////////////////////
//LANDING FORM FUNCTIONS//

//landing from email send
function mgjs_landing_form(){
	var fullphone = escape($("#phone1").val() + $("#phone2").val() + $("#phone3").val());
	var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
	var namePattern = /^[a-zA-Z._-]+((\s)[a-zA-Z._-]+)+$/;

	if (!namePattern.test($("#name").val())) {
		alert("Please fill out your full name");
		return false;
	}
	if (!emailPattern.test($("#email").val())) {
		alert("Please fill out your correct email");
		return false;	
	}
	
	post =   "name=" + escape($("#name").val()) +
			 "&email=" + escape($("#email").val()) +
			 "&phone=" + fullphone +
			 "&company=" + escape($("#company").val());
	makeRequest(MGJS_SERVER + "/code/landingForm.rb", post, "mgjs_dummy()", "POST");

	startDownload();
}

//opens window to download pdf file
function startDownload()
{
	var url='pdfs/Mogreet_ABCFamily_CaseStudy.pdf';
	window.open(url,'Download');
} 

/**Numbers in fields ONLY**/
function numbersonly(e, decimal) {
	var key = (window.event) ? event.keyCode : e.which;
	var keychar = String.fromCharCode(key);

	if ((key==null) || (key==0) || (key==8) ||  (key==9) || (key==13) || (key==27) ) { return true; }
	else if ((("0123456789").indexOf(keychar) > -1)) { return true; }
	else if (decimal && (keychar == ".")) { return true; }
	else { return false; }
}

//LANDING FORM FUNCTIONS//
////////////////////////



//////////////
//EASTER EGG//
document.onkeyup = konami_cheat;
var konami_code = [38,38,40,40,37,39,37,39,66,65];
var konami_mark = 0;
function konami_cheat(e){
	var key = (window.event) ? event.keyCode : e.keyCode;
	if(key == konami_code[konami_mark] && (location.pathname.match("/") || location.pathname.match("/index"))){
		konami_mark += 1;
		if(konami_mark == 10){
			alert('hello world');
			konami_mark = 0;
			// search_string = 'Konami Cheat Code';
			// search_type = 'key';
			// new_html = "<p/><br/><center><img src='images/loading.gif'></center>";
			// $('results').innerHTML = new_html;
			// $('page_title').innerHTML = search_string;
			// new_html = "<div id='search_text'></div><div id='my_clips'></div></center>";
			// mogreets = get_html_cache('konami_cheat_mogreets','parse_search_results()');
			// $('results').innerHTML = new_html;
			return false;
		}
	} else {
		konami_mark = 0;
	}
}
//EASTER EGG//
//////////////






