$(function() { 
    var options = { 
        beforeSubmit:  AjaxFormAction.onSubmit,  // pre-submit callback 
        success: AjaxFormAction.processXml,  	  // post-submit callback
        dataType: "xml" 
 	}; 
    $('.ajax_form').ajaxForm(options); 
    var rich_options = {
    	beforeSubmit:  AjaxFormAction.onSubmit2,  // pre-submit callback 
        success: AjaxFormAction.processXml,  	  // post-submit callback
        dataType: "xml" 
 	};
 	
 	$('#account_create_form').submit(FormCheck.checkAccountCreate); 
 	$('#account_info_form').submit(FormCheck.checkAccountUpdate1);
 	$('#stay_in_touch_form').submit(FormCheck.checkStayInTouch);
 	$('#sdk_form').submit(FormCheck.checkSDK);
 	
 	
}); 

var AjaxFormAction = {
	
	onSubmit : function (formData, jqForm, options){
		$('.message').html('').removeClass('message');
	},
	
	onSubmit2 : function (formData , jqForm , options){
		AjaxFormAction.onSubmit(formData, jqForm, options);
		for (var i=0; i < formData.length; i++) { 
        	if (formData[i].name == "page_content"){
               	var ed = tinyMCE.get('page_content');
               	formData[i].value = ed.getContent();
            }
        } 
    	return AjaxFormAction.onSubmit(formData, jqForm, options); 	
	},

	onSuccess: function (responseText, statusText){	},

	processJson: function (data) {
		$('.errField').removeClass('errField');
		if (data.action == "redirect"){
			window.location = data.url;
		}
		else if (data.action == "success"){
			$("#" + data.id).html(data.message).addClass("message");
			$('#' + data.form_name).clearForm();
			for (var next = 0 ; next < data.params.length ; next ++){
				var _id = "#" + data.params[next].id;
				if ($(_id).is("input")){
					$(_id).val(data.params[next].value);
				}
				else {
					$(_id).html(data.params[next].value);	
				}
			}
		}
		else {
			var msg = "<ul>";
			for (var next = 0 ; next < data.errors.length ; next ++){
				msg = msg + "<li>" + data.errors[next].message + "</li>";
				$("#" + data.errors[next].id).addClass("errField");
			}
			msg = msg + "</ul>";
			$("#" + data.id).html(msg).addClass("message");
		}
	},
	
	processXml: function (xml) {
		var data = $(xml).children('rst');
		var action = data.children("action").text();
		if (action == "redirect"){
			var url = data.children("url").text();
			window.location = url;
		}
		else if (action == "failure"){
			var message = data.children('message').text();
			alert(message);
		}
		else if (action == "success"){
			var message = data.children('message').text();
			alert(message);
		}
		else if (action == "refresh"){
			window.location.reload();
		}
	}
}

var FormCheck = {
	version: "1.0.0",
	
	options: { 
		beforeSubmit:  AjaxFormAction.onSubmit,  // pre-submit callback 
        success: AjaxFormAction.processXml,  	  // post-submit callback
        dataType: "xml" 
 	},
	
	checkEmpty: function(tag , message){
		if (jQuery.trim(tag.value) == ""){
			alert(message);
			tag.focus();
			return false;
		}
		return true;
	},
	
	checkSelect: function(tag , message){
		if (!tag.checked){
			alert(message);
			tag.focus();
			return false;
		}
		return true;
	},
	
	checkValue: function (tag , value, message){
		if (tag.value == value){
			alert(message);
			tag.focus();
			return false;
		}
		return true;
	},
	
	checkEqual: function (tag1 , tag2, message){
		if (tag1.value != tag2.value){
			alert(message);
			tag2.focus();
			return false;
		}
		return true;
	},
	
	checkValidEmail: function (tag , message){
		var str = tag.value;
		
		if (!str.match(/^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}$/i)){
			alert(message);
			tag.focus();
			return false;
		}
		return true;
	},
	
	checkAccountCreate: function (){
		if (!FormCheck.checkEmpty(this.username, 'Please enter your account name.')){
			return false;
		}
		if (!FormCheck.checkEmpty(this.character_username, 'Please enter your screen name.')){
			return false;
		}  
		if (!FormCheck.checkEmpty(this.encrypted_password, 'Please enter your password.')){
			return false;
		}
		if(!FormCheck.checkEqual(this.encrypted_password, this.encrypted_password2, 'Please confirm your repeat password.')){
			return false;
		}
		if (!FormCheck.checkEmpty(this.email_address, 'Please enter your email address.')){
			return false;
		}
		if (!FormCheck.checkEqual(this.email_address, this.email_address2, 'Please confirm your repeat email address.')){
			return false;
		}
		if (!FormCheck.checkValidEmail(this.email_address, 'Invalid email address.')){
			return false;
		}
		if(!FormCheck.checkValue(this.receive_email_yn, -1, 'Please choose your mail list options.')){
			return false;
		}
		$(this).ajaxSubmit(FormCheck.options);
		return false;
		//return true;
	},
	
	checkAccountUpdate1: function (){
		if (!FormCheck.checkEmpty(this.username, 'Please enter your account name.')){
			return false;
		}
		if (!FormCheck.checkEmpty(this.email_address, 'Please enter your email address.')){
			return false;
		}
		if (!FormCheck.checkValidEmail(this.email_address, 'Invalid email address.')){
			return false;
		}
		$(this).ajaxSubmit(FormCheck.options);
		return false;
	},
	
	checkStayInTouch: function (){
		if (!FormCheck.checkEmpty(this.username, 'Please enter your name.')){
			return false;
		}
		if (!FormCheck.checkEmpty(this.email, 'Please enter your email address.')){
			return false;
		}
		if (!FormCheck.checkValidEmail(this.email, 'Invalid email address.')){
			return false;
		}
		$(this).ajaxSubmit(FormCheck.options);
		return false;
	},
	
	checkSDK: function (){
		if(!FormCheck.checkSelect(this.accept , "Please tick the checkbox to confirm that you have read and accept our 'terms and conditions'.")){
			return false;
		}
		if (!FormCheck.checkEmpty(this.username, 'Please enter your name.')){
			return false;
		}
		if (!FormCheck.checkEmpty(this.email, 'Please enter your email address.')){
			return false;
		}
		if (!FormCheck.checkValidEmail(this.email, 'Invalid email address.')){
			return false;
		}
		$(this).ajaxSubmit(FormCheck.options);
		return false;
	}
	
	
}