/* written by david shanley <theshanman@googlemail.com>, all javascript copyright ZipMyUrl
   please note that all this code requires mootools. */
   
var FAILED ="error";
var SUCCESS ="success";
var STYLE_INPUT = "text_input";
var STYLE_INPUT_ERROR = "text_input_error";

/* some predefined icons */
var okIcon = new Element('img', {
	"src" : "gfx/ok_tick.png",
	"alt" : "ok",
	"class" : "box_icon"
	});
   
window.addEvent('domready', function(){
	
	/* round what needs to be rounded (thanks to http://www.editsite.net/blog/rounded_corners.html) */
	//Rounded('rounded', 20, 20); disabled for now due to IE being lame.
	
});

/* url zipping JSON parsing */
function parseURLZipJSON(jsonData) {
	/* fade in zip again button */
	zipagainbutton.setStyle('display','block');
	
	var zipObj = Json.evaluate(jsonData);
	var zipResultData;
	if(zipObj.error != "true") {
		zipResultData = '<span class="zippedurllink">' +
						'<a href="http://zipmyurl.com/' + zipObj.zipURL + '" target="_blank">http://zipmyurl.com/' + zipObj.zipURL + '</a>' +
						'</span><br/><span class="zippedurlsummary">' + 
						'(the original URL was ' + zipObj.originalSize + ' characters long, your zipped URL is now only ' + zipObj.zippedSize + ')</span>';
	} else {
		var headmessage;
		if (zipObj.custom_fail == null) {
			headmessage = "unable to zip url";
		} else {
			headmessage = "someone already used that link!";
			$('zipurl_custom').removeClass('text_input');
			$('zipurl_custom').addClass('text_input_error');
			
			
		}
		zipResultData = '<span class="zippedurllink">' +
						headmessage +
						'</span><br/><span class="zippedurlsummary">' + 
						'(' + zipObj.message +')</span>';
	}
	/* update html */
	 $('zippedurlcontent').setHTML(zipResultData);
	
	
}

var authenticateErrorBox;
var processingRegistrationBox;
var processingRegistrationErrorBox;

/* test login */
function authenticateUser() {
		if($defined(authenticateErrorBox)) {
			authenticateErrorBox.toggle();
		}
}

var registrationFailed = false;
var passwordFailed = false;
var authenticationFailed = false;

/* JSON parser for registration */
function parseRegistrationData(json) { 
	var registerObj = Json.evaluate(json);
	var errorMessages = new Array();
	var errorMessage = null;
	/* look for failure */
	if(registerObj.result == FAILED) {
		/* handle recaptcha reloading */
			Recaptcha.destroy();
			//Recaptcha.reload()
			Recaptcha.create("6LeA3QAAAAAAAP8GWL-iwN617VtjnBMkALh70UHJ", "captcha", RecaptchaOptions);
			/* end recaptcha work */
	
		var errors = registerObj.errors;
		var fields = registerObj.fields;
		if(errors.length > 0) {
			registrationFailed = true;
			var errorList = new Element('ul');
			for(var x = 0; x < errors.length; x++) {
				if(errors[x].length > 0) {
					errorMessage = new Element('li');
					errorMessage.setHTML(errors[x]);
					errorMessage.injectInside(errorList);
				}
			}
			/* remove any previous errors from the DOM */
			var previousErrors = $('register_error_box_icon').getNext()
			if(previousErrors!=null) {
				previousErrors.remove();
			}
			/* inject new errors */
			errorList.injectAfter($('register_error_box_icon'));
			processingRegistrationBox.toggle();
			(function () { processingRegistrationErrorBox.toggle() }).delay(1000);
			(function() {
				/* change field styles */
				for(var m = 0; m < fields.length; m++) {
					if(fields[m].length > 0) {
						$(fields[m]).removeClass(STYLE_INPUT);
						$(fields[m]).addClass(STYLE_INPUT_ERROR);
					}
			 	}
			 }).delay(1000);
			
		}
	} // end failed
	/* look for success */
	if(registerObj.result == SUCCESS) {
		
		/* disable register button */
		$('registerAccountButton').setStyle('display','none');
		
		var title = registerObj.title;
		var copy = registerObj.copy;
		/* blank the error box out */
		$('register_error_box').setHTML("");
		okIcon.injectInside($('register_error_box'));
		title = new Element('span').setHTML("<h1 class=\"success\">" + title + "</h1>");
		copy = new Element('span',{"class" : "copy"}).setHTML(copy);
		title.injectAfter(okIcon);
		copy.injectAfter(title);
		processingRegistrationBox.toggle();
		(function () { processingRegistrationErrorBox.toggle() }).delay(1000);
				
	}
	
}

/* JSON parser for forgotten password */
function parsePasswordData(json) { 
	var passwordObj = Json.evaluate(json);
	var errorMessages = new Array();
	var errorMessage = null;
	/* look for failure */
	if(passwordObj.result == FAILED) {
		var errors = passwordObj.errors;
		var fields = passwordObj.fields;
		if(errors.length > 0) {
			passwordFailed = true;
			var errorList = new Element('ul');
			for(var x = 0; x < errors.length; x++) {
				if(errors[x].length > 0) {
					errorMessage = new Element('li');
					errorMessage.setHTML(errors[x]);
					errorMessage.injectInside(errorList);
				}
			}
			/* remove any previous errors from the DOM */
			var previousErrors = $('password_error_box_icon').getNext()
			if(previousErrors!=null) {
				previousErrors.remove();
			}
			/* inject new errors */
			errorList.injectAfter($('password_error_box_icon'));
			processingPasswordBox.toggle();
			(function () { processingPasswordErrorBox.toggle() }).delay(1000);
			(function() {
				/* change field styles */
				for(var m = 0; m < fields.length; m++) {
					if(fields[m].length > 0) {
						$(fields[m]).removeClass(STYLE_INPUT);
						$(fields[m]).addClass(STYLE_INPUT_ERROR);
					}
			 	}
			 }).delay(1000);
			
		}
	} // end failed
	/* look for success */
	if(passwordObj.result == SUCCESS) {
		
		/* disable register button */
		$('forgotPasswordButton').setStyle('display','none');
		
		var title = passwordObj.title;
		var copy = passwordObj.copy;
		/* blank the error box out */
		$('password_error_box').setHTML("");
		okIcon.injectInside($('password_error_box'));
		title = new Element('span').setHTML("<h1 class=\"success\">" + title + "</h1>");
		copy = new Element('span',{"class" : "copy"}).setHTML(copy);
		title.injectAfter(okIcon);
		copy.injectAfter(title);
		processingPasswordBox.toggle();
		(function () { processingPasswordErrorBox.toggle() }).delay(1000);
				
	}
}

/* JSON parser for authentication */
function parseAuthenticationData(json) { 
	var authObj = Json.evaluate(json);
	var errorMessages = new Array();
	var errorMessage = null;
	/* look for failure */
	if(authObj.result == FAILED) {
		var errors = authObj.errors;
		var fields = authObj.fields;
		if(errors.length > 0) {
			authenticationFailed = true;
			var errorList = new Element('ul');
			for(var x = 0; x < errors.length; x++) {
				if(errors[x].length > 0) {
					errorMessage = new Element('li');
					errorMessage.setHTML(errors[x]);
					errorMessage.injectInside(errorList);
				}
			}
			/* remove any previous errors from the DOM */
			var previousErrors = $('login_error_box_icon').getNext()
			if(previousErrors!=null) {
				previousErrors.remove();
			}
			/* inject new errors */
			errorList.injectAfter($('login_error_box_icon'));
			processingLoginBox.toggle();
			(function () { processingLoginErrorBox.toggle() }).delay(1000);
			(function() {
				/* change field styles */
				for(var m = 0; m < fields.length; m++) {
					if(fields[m].length > 0) {
						$(fields[m]).removeClass(STYLE_INPUT);
						$(fields[m]).addClass(STYLE_INPUT_ERROR);
					}
			 	}
			 }).delay(1000);
			
		}
	} // end failed
	/* look for success */
	if(authObj.result == SUCCESS) {
		
		/* disable login button */
		$('authenticateUserButton').setStyle('display','none');
		
		var title = authObj.title;
		var copy = authObj.copy;
		/* blank the error box out */
		$('login_error_box').setHTML("");
		okIcon.injectInside($('login_error_box'));
		title = new Element('span').setHTML("<h1 class=\"success\">" + title + "</h1>");
		copy = new Element('span',{"class" : "copy"}).setHTML(copy);
		title.injectAfter(okIcon);
		copy.injectAfter(title);
		processingLoginBox.toggle();
		(function () { processingLoginErrorBox.toggle() }).delay(1000);
		(function () { window.location="home.do"; }).delay(2000); // wait a couple of seconds and then re-direct.
	}
}


/* JSON parser for authentication (small login box) */
function parseAuthenticationDataSmall(json) { 
	var authObj = Json.evaluate(json);
	var errorMessages = new Array();
	var errorMessage = null;
	/* look for failure */
	if(authObj.result == FAILED) {
		var errors = authObj.errors;
		var fields = authObj.fields;
		if(errors.length > 0) {
			authenticationFailed = true;
			var errorList = new Element('ul');
			for(var x = 0; x < errors.length; x++) {
				if(errors[x].length > 0) {
					errorMessage = new Element('li');
					errorMessage.setHTML(errors[x]);
					errorMessage.injectInside(errorList);
				}
			}
			
			/* remove any previous errors from the DOM */
			var smallLoginErrorBox = $('small_login_error');
			smallLoginErrorBox.empty();
			
			var errorHeader = new Element('div', { "style" : "text-align: center" });
			errorHeader.setHTML("<h2>Whoopsie!</h2>");
			errorHeader.injectInside(smallLoginErrorBox);		
			errorList.injectInside(smallLoginErrorBox);
			smallLoginErrorBox.addClass('small_login_error_box');
		}
	} // end failed
	
	/* look for success */
	if(authObj.result == SUCCESS) {
		
		window.location="home.do";
	}
}




/* register user */
function registerUser() {
	if($defined(processingRegistrationBox)) {
		
		var registerFormEmail = $('email');
		var registerFormPassword = $('password');
		var registerFormName = $('name');
		
		var registerFields = new Array(3);
		registerFields[0] = registerFormEmail;
		registerFields[1] = registerFormPassword;
		registerFields[2] = registerFormName;
		
		/* slide up any errors previously occured */
		if(registrationFailed) {
			/* clean out any style changes that previously occured */
			for(x = 0; x < registerFields.length; x++) {
				if(registerFields[x].hasClass(STYLE_INPUT_ERROR)) {
					registerFields[x].removeClass(STYLE_INPUT_ERROR);
					registerFields[x].addClass(STYLE_INPUT);
				}
			}
			processingRegistrationErrorBox.toggle();
			(function () { processingRegistrationBox.slideIn() }).delay(1000);
		} else {
			/* slide in reg box */
			processingRegistrationBox.slideIn();
		}
		
		/* send ajax form post */
		(function() {
					
			var accountForm = $('createAccountForm');
			
			/* add captcha stuff to form */
			$('captcha_challenge').value = Recaptcha.get_challenge();
			$('captcha_response').value = Recaptcha.get_response();
			
			accountForm.send({onComplete: function(data) { parseRegistrationData(data) } });
			
		}).delay(2000);
		
		
		
	}
}

/* forgot password */
function forgotPassword() {
	if($defined(processingPasswordBox)) {
		
		var passwordFormEmail = $('email');
		
		var passwordFields = new Array(1);
		passwordFields[0] = passwordFormEmail;
		
		/* slide up any errors previously occured */
		if(passwordFailed) {
			/* clean out any style changes that previously occured */
			for(x = 0; x < passwordFields.length; x++) {
				if(passwordFields[x].hasClass(STYLE_INPUT_ERROR)) {
					passwordFields[x].removeClass(STYLE_INPUT_ERROR);
					passwordFields[x].addClass(STYLE_INPUT);
				}
			}
			processingPasswordErrorBox.toggle();
			(function () { processingPasswordBox.slideIn() }).delay(1000);
		} else {
			/* slide in password box */
			processingPasswordBox.slideIn();
		}
		
		/* send ajax form post */
		(function() {
					
			var passwordForm = $('forgotPasswordForm');
			
			passwordForm.send({onComplete: function(data) { parsePasswordData(data) } });
			
		}).delay(2000);
	}
}


/* authenticate user */
function authenticateUser() {
	if($defined(processingLoginBox)) {
		
		var usernameFormEmail = $('username');
		var passwordFormEmail = $('loginpassword');
		
		var authFields = new Array(2);
		authFields[0] = usernameFormEmail;
		authFields[1] = passwordFormEmail;
		
		
		/* slide up any errors previously occured */
		if(authenticationFailed) {
			/* clean out any style changes that previously occured */
			for(x = 0; x < authFields.length; x++) {
				if(authFields[x].hasClass(STYLE_INPUT_ERROR)) {
					authFields[x].removeClass(STYLE_INPUT_ERROR);
					authFields[x].addClass(STYLE_INPUT);
				}
			}
			processingLoginErrorBox.toggle();
			(function () { processingLoginBox.slideIn() }).delay(1000);
		} else {
			/* slide in authentication box box */
			processingLoginBox.slideIn();
		}
		
		/* send ajax form post */
		(function() {
					
			var authenticateForm = $('authenticateForm');
			
			authenticateForm.send({onComplete: function(data) { parseAuthenticationData(data) } });
			
		}).delay(2000);
	}
}

/* authenticate user (small login box) */
function authenticateUserSmall() {
	var usernameFormEmail = $('username');
	var passwordFormEmail = $('loginpassword');
	
	
	var smallLoginErrorBox = $('small_login_error');
	smallLoginErrorBox.removeClass('small_login_error_box');
	smallLoginErrorBox.empty();
	var processingIcon = new Element("img", {
		"src" : "gfx/small_loginbox_loader.gif",
		"alt" : "thinking..",
		"align" : "middle"
	});
	processingIcon.injectInside(smallLoginErrorBox);
	(function() {
		var authenticateForm = $('small_login_form');			
		authenticateForm.send({onComplete: function(data) { parseAuthenticationDataSmall(data) } });
	}).delay(2000);
}
				
					
					
