/***************************/
//@Author: Adrian "yEnS" Mato Gondelle
//@website: www.yensdesign.com
//@email: yensamg@gmail.com
//@license: Feel free to use it, but keep this credits please!					
//
//@implementing and optimizing for Talent Banque: Alex Baskov, 2009
/***************************/

//SETTING UP OUR POPUP
//0 means disabled; 1 means enabled;
var popupStatusRegister = 0;


//loading popup with jQuery magic!
function loadPopupRegister()
{
	//loads popup only if it is disabled
	if(popupStatusRegister == 0)
	{
		if ($.browser.msie && $.browser.version <= 7)
			{
				$("#popupRegisterBackground").css({ "z-index": "1000"});
				$("#popupRegister").css({ "z-index": "1001"});
			}
		
		
		$("#popupRegisterBackground").css({
			"opacity": "0.5" // set to zero, if you don't want to have a background
		});
		$("#popupRegisterBackground").fadeIn("slow");
		$("#popupRegister").fadeIn("slow");
		popupStatusRegister = 1;
	}
	$.validator.addMethod('customEmail', function(value, element) {
		return this.optional(element) || /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(element.value);
		},"Enter a valid email"
	);
	$.validator.addMethod('phoneSymbols', 
			function(value, element) {
				var stripped = value.replace(/[\s()+-]|ext\.?/gi, "");
				return ((/\d{7,20}/i).test(stripped));
			},"Enter a valid phone number"
	);
	$.validator.addMethod('phone', 
		function(value, element) {
			if ((value == null) || !(/^[0-9-+()\s]+$/i.test(value))) {
				return false;
			}
			else return true;
		},"Enter a valid phone number"
	);
	register_validator = $("#form_register").validate({
			errorElement: "div",
			rules: {
				register_company: {
					minlength: 2,
					maxlength: 200
				},
				register_name: {
					required: true,
					minlength: 2,
					maxlength: 200
				},
				register_job: {
					minlength: 2,
					maxlength: 200
				},
				register_phone: {
					required: true,
					phone: true,
					phoneSymbols: true
				},
				register_email: {
					customEmail: true,
					required: true,
					minlength: 5,
					maxlength: 200
				},
				register_address: {
					minlength: 2,
					maxlength: 200
				},
				register_project: {
					minlength: 2,
					maxlength: 20
				},
				register_comments: {
					maxlength: 4000
				}
			},
			messages: {
				register_company: {
					minlength: jQuery.format("Enter at least {0} characters"),
					maxlength: jQuery.format("Enter less than {0} characters")
				},
				register_name: {
					required: "Missing full name",
					minlength: jQuery.format("Enter at least {0} characters"),
					maxlength: jQuery.format("Enter less than {0} characters")
				},
				register_job: {
					minlength: jQuery.format("Enter at least {0} characters"),
					maxlength: jQuery.format("Enter less than {0} characters")
				},
				register_phone: {
					required: "Missing phone number",
					phone: "Enter valid phone number",
					phoneSymbols: "Enter between 7 - 20 digits"
				},
				register_email: {
					email: "Enter a valid email",
					customEmail: "Enter a valid email",
					required: "Missing email",
					minlength: jQuery.format("Enter at least {0} characters"),
					maxlength: jQuery.format("Enter less than {0} characters")
				},
				register_address: {
					minlength: jQuery.format("Enter at least {0} characters"),
					maxlength: jQuery.format("Enter less than {0} characters")
				},
				register_project: {
					minlength: jQuery.format("Enter at least {0} characters"),
					maxlength: jQuery.format("Enter less than {0} characters")
				},
				register_comments: {
					maxlength: jQuery.format("Enter less than {0} symbols")
				}
			},
			errorPlacement: function(error, element) {
				$(element).next().append(error);
			},
			// set this class to error-labels to indicate valid fields
			success: function(label) {
				// set &nbsp; as text for IE
				label.html("&nbsp;").addClass("checked");
				label.parent().hide();
			},
			highlight: function(element, errorClass) {
				$(element).next().show();
			},
			invalidHandler: function() {
				//$("#popupRegister .field_error").show();
			}
		});
		$("#popupRegister .popup_field input, #popupRegister .popup_field textarea").keypress(function(){
			register_validator.element("#" + $(this).attr('id'));
		});
}

//disabling popup with jQuery magic!
function disablePopupRegister()
{
	//disables popup only if it is enabled
	if(popupStatusRegister == 1)
	{
		$("#popupRegisterBackground").fadeOut("slow");
		$("#popupRegister").fadeOut("slow");
		popupStatusRegister = 0;
	}
	$("#popupRegister input, #popupRegister textarea").val("");
	$("#popupRegister .field_error").hide();
	if (Recaptcha) Recaptcha.reload(); //refresh security code.
}

//centering popup
function centerPopupRegister()
{
	//request data for centering
	var windowWidth = document.documentElement.clientWidth;
	var windowHeight = document.documentElement.clientHeight;
	var popupHeight = $("#popupRegister").height();
	var popupWidth = $("#popupRegister").width();

	//
	// we need here to emulate fixed position... so we use offsetHeight and offsetWidth instead
	// (c) Alex Baskov
	//
	var topScrollerPosition = 0;
	
	// we may just scroll to top and see nice popup
	//scroll(0,0);

	// center vertically in the visible area...
	if ($.browser.msie) {
		topScrollerPosition = document.body.scrollTop;
	}
	else {
		topScrollerPosition = window.pageYOffset;
	}

	//centering
	$("#popupRegister").css({
		"position": "fixed",
		"top": windowHeight/2-popupHeight/2,
		//"top": parseInt((windowHeight-popupHeight)/2) + topScrollerPosition,
		//"top": topScrollerPosition + 60,
		"left": windowWidth/2-popupWidth/2
	});
	//only need force for IE6
	
	$("#popupRegisterBackground").css({
		"height": windowHeight
	});
	
}

function showRegisterSuccess() {
	$("#popupRegister .message").hide();
	$("#popupRegister .message.success").show();
	$("#popupRegister #button_register_request_back").parent().hide();
	$("#popupRegister #button_register_request_ok").parent().show();
}

function showRegisterErrors() {
	$("#popupRegister .message").hide();
	$("#popupRegister .message.error").show();
	$("#popupRegister #button_register_request_back").parent().show();
	$("#popupRegister #button_register_request_ok").parent().show();
}

function showRegisterProgress() {
	$("#popupRegister .message").hide();
	$("#popupRegister .message.in_process").show();
	$("#popupRegister .popup_label").hide();
	$("#popupRegister .buttons").show();
	$("#popupRegister .popup_field").hide();
	$("#popupRegister #register_security").hide();
	$("#popupRegister #popupRegisterClose").parent().hide();
	$("#popupRegister #button_register_request_back").parent().hide();
	$("#popupRegister #register_button_submit").parent().hide();
}

function showRegisterForm() {
	$("#popupRegister .message.error").hide();
	$("#popupRegister .message.in_process").hide();
	$("#popupRegister .message.success").hide();
	$("#popupRegister .message.desc").show();
	$("#popupRegister .popup_label").show();
	$("#popupRegister .popup_field").show();
	$("#popupRegister #register_security").show();
	$("#popupRegister #popupRegisterClose").parent().show();
	$("#popupRegister #register_button_submit").parent().show();	
	$("#popupRegister #button_register_request_back").parent().hide();
	$("#popupRegister #button_register_request_ok").parent().hide();
}

function sendRegistrationRequest() {
	if (!(register_validator.form())) {
		return false;
	}
	
	var data = "name=" + escape($("#register_name").val()) +
			   "&email=" + escape($("#register_email").val()) +
			   "&contactNumber=" + escape($("#register_phone").val()) +
			   "&company=" + escape($("#register_company").val()) +
			   "&address=" + escape($("#register_address").val()) +
			   "&project=" + escape($("#register_project").val()) +
			   "&jobClassification=" + escape($("#register_job").val()) +
			   "&accessReason=" + escape($("#register_comments").val()) +
			   "&recaptcha_challenge_field=" + escape($("#recaptcha_challenge_field").val()) +
			   "&recaptcha_response_field=" + escape($("#recaptcha_response_field").val());

	$.ajax({
	    type: "POST",
	    url: "auth_code.php",
	    data: data,
	    success: function(msg) {
	        if (msg.indexOf("Incorrect") != -1) {
	            $("#error_register_Security").show();
	        }
	        else {
	            $("#error_register_Security").hide();
	            showRegisterProgress();
	            $.ajax({
	                type: "POST",
	                url: "/external/user/register",
	                data: data,
	                success: function(msg) {
	                    if (msg.indexOf("success:") != -1) {
	                        showRegisterSuccess();
	                    }
	                    else if (msg.indexOf("error:") != -1) {
	                        var errors = msg.substring(msg.indexOf("error:") + "error:".length);
	                        var errorsList = errors.split(";");
	                        var message = "";
	                        for (var i = 0; errorsList.length; i++) {
	                            var errorInfo = errorsList[i];
	                            if (errorInfo == undefined || errorInfo == "") {
	                                break;
	                            }
	                            var splitted = errorInfo.split("=");
	                            var key = splitted[0];
	                            var value = splitted[1];
	                            if (key == "Global") {
	                                message += "<li>" + value + "</li>";
	                                continue;
	                            }
	                            else if (key == "name")
	                                key = "Full Name";
	                            else if (key == "email")
	                                key = "Email";
	                            else if (key == "contactNumber")
	                                key = "Contact Number";
	                            else if (key == "company")
	                                key = "Company";
	                            else if (key == "address")
	                                key = "Address";
	                            else if (key == "project")
	                                key = "Profile";
	                            else if (key == "jobClassification")
	                                key = "Job Classification";
	                            else if (key == "accessReason")
	                                key = "Reason for Access";

	                            message += "<li>" + key + ": " + value + "</li>";
	                        }
	                        if (message == "") message = "Error during sending request.";
	                        $("#popupRegister .message.error .msg").html("<ul>" + message + "</ul>");
	                        showRegisterErrors();
	                    }
	                }
	            });
	        }
	    }
	});
	return false;
}

//CONTROLLING EVENTS IN jQuery
$(document).ready(function() {

	//LOADING POPUP
	//Click the button event!
	
	$("#button_password_app, #button_password_app_sitemap, #button_request_access, #loginButtonRegister").click(function() {
		disablePopupLogin();
		
		showRegisterForm();
		
		//centering with css
		centerPopupRegister();
		//load popup
		loadPopupRegister();
	});
				
	//CLOSING POPUP
	$("#popupRegisterClose, #button_register_request_ok").click(function() {
		disablePopupRegister();
	});
	
	//Click out event!
	$("#popupRegisterBackground").click(function() {
		disablePopupRegister();
	});
	
	// BACK 
	$("#button_register_request_back").click(function() {
		showRegisterForm();
		return false;
	});

	
	//Press Escape event!
	$(document).keypress(function(e) {
		if(e.keyCode == 27 && popupStatusRegister == 1) {
			disablePopupRegister();
		}
	});

});


