/***************************/
//@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 LMCM Management: Alex Baskov, 2009
/***************************/

//SETTING UP OUR POPUP
//0 means disabled; 1 means enabled;
var popupStatus = 0;
var stage = 0;
var validator=null;

//loading popup with jQuery magic!
function loadPopup()
{
	//loads popup only if it is disabled
	if(popupStatus == 0)
	{
		$("#popupRequestBackground").css({
			"opacity": "0.8"
		});
		$("#popupRequestBackground").fadeIn("slow");
		$("#popupRequest").fadeIn("slow");
		popupStatus = 1;
	}
	
	/*
	$('div.talent_shortlist_inner div.ts_item').each(
		function(){
			var img = $(this).find('div.ts_item_image').clone();
			img.css("float","left");
			img.css("border","none");
			img.css("margin-right","3px");
			img.appendTo($("div.ts_images"));
		}
	);
	*/
	
	var num = $("div.ts_images .ts_item_image").size();
	//set number of talents selected
	$(".list_title").text($(".list_title").text().replace(/[0-9]+/,num));	
	if (num <= 6)
		$("div.popupRequestTalents div.ts_arrows").hide();
	else
		$("div.popupRequestTalents div.ts_arrows").show();
		
	//change to plural if we have selected more than 1 talent
	if (num != 1) 
		$(".list_title").text($(".list_title").text().replace("talent ","talents "));
	else 
		$(".list_title").text($(".list_title").text().replace("talents ","talent "));
		
	$("div.ts_images div.ts_item_image").quickpaginate({ perpage: 6, showcounter: false, pager : $("div.popupRequestTalents div.ts_arrows") });
	if (num == 0) {
		$(".popupRequestForm .message").hide();
		$(".popupRequestForm .message.error").show();
		$(".popupRequestForm .message.error").text("There are no artist in shortlist to send request for. Please add artists to shortlist");
		$(".popupRequestForm #button_next").attr("id","button_next_disabled");
		$(".popupRequestForm .field [class^='input_text']").attr("disabled","true");
	}
	else {
		$(".popupRequestForm #button_next_disabled").attr("id","button_next");
		$(".popupRequestForm .field [class^='input_text']").removeAttr("disabled");
	}	
	
	$("#button_request_submit").removeAttr("disabled");
	$(".popupRequestForm .field_error").hide();
	/*
	$.validator.addMethod("customRequired", function(value, element) { 
			return (element.value == "") 
			else return true; 
	  	}, 
	  "Please input something." 
	);
	*/
	$.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('customHoursDates', function(value, element) {
			//if (element.value == element.title) return true; 
			if (element.value == '') return true;
			return this.optional(element) || /^[12][0-9]{3}-(([0]{0,1}[1-9])|(1[0-2]))-(([012]{0,1}[0-9])|([3][012]))$/i.test(element.value);
		},"Valid date format is yyyy-mm-dd"
	);
	$.validator.addMethod('phoneSymbols', function(value, element) {
			var stripped = value.replace(/[\s()+-]|ext\.?/gi, "");
			return ((/\d{7,}/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"
	);
	
	pr_validator = $("#form_submit_request").validate({
		errorElement: "div",
		ignore: ".ignore",
		rules: {
			job_title: "required",
			start_date: "customHoursDates",
			end_date: "customHoursDates",
			sender_name: "required",
			sender_email: {
				required: true,
				customEmail: true
			},
			sender_telephone: {
				required: true,
				phoneSymbols: true
			}
		},
		messages: {
			job_title: {
				required: "Missing job title",
				minlength: jQuery.format("Enter at least {0} characters"),
				maxlength: jQuery.format("Enter less than {0} characters")
			},
			job_type: {
				minlength: jQuery.format("Enter at least {0} characters"),
				maxlength: jQuery.format("Enter less than {0} characters")
			},
			start_date: {
				customHoursDates: "Start Date format is yyyy-mm-dd"
			},
			end_date: {
				customHoursDates: "End Date format is yyyy-mm-dd"
			},
			details: {
				maxlength: jQuery.format("Enter less than {0} symbols")
			},
			sender_name: {
				required: "Missing name",
				minlength: jQuery.format("Enter at least {0} characters"),
				maxlength: jQuery.format("Enter less than {0} characters")
			},
			sender_company: {
				minlength: jQuery.format("Enter at least {0} characters"),
				maxlength: jQuery.format("Enter less than {0} characters")
			},
			sender_email: {
				required: "Missing email",
				email: "Enter a valid email",
				customEmail: "Enter a valid email",
				maxlength: jQuery.format("Enter less than {0} characters")
			},
			sender_telephone: {
				required: "Missing phone number",
				minlength: jQuery.format("Enter at least {0} characters"),
				phone: "Enter valid phone number",
				phoneSymbols: "Enter at least 7 digits"
			}
		},
		errorPlacement: function(error, element) {
			if (element.attr("name") == "start_date")
				$("#error_start_date").html(error);
			else if (element.attr("name") == "end_date" )
				$("#error_end_date").html(error);
			else if (element.attr("name") == "hours" )
			{
				//do nothing
			}	
			else
				element.next().append(error);
		},

		// set this class to error-labels to indicate valid fields
		success: function(label) {
			$(".popupRequestForm #hours").addClass("ignore").addClass("valid");
			// set &nbsp; as text for IE
			label.html("&nbsp;").addClass("checked");
			label.parent().hide();
		},
		highlight: function(element, errorClass) {
			if ($(element).attr("name") == "start_date")
				$("#error_start_date").show();
			else if ($(element).attr("name") == "end_date" )
				$("#error_end_date").show();
			else if ($(element).attr("name") == "hours" )
			{
				//do nothing
			}
			else
				$(element).next(".field_error").show();
		},
		invalidHandler: function() {
			//$(".popupRequestForm #hours").addClass("ignore").addClass("valid");
			//$("#form_submit_request .field_error").show();
		}
	});
	
	$("input[class^='input_text_rhp']").keypress(function(){
		pr_validator.element("#" + $(this).attr('id'));
	})
	.blur(function(){
		$(this).val($.trim($(this).val()));
		pr_validator.element("#" + $(this).attr('id'));
	});
	$("input[class^='input_text_rhp_small']").keypress(function(){
		pr_validator.element("#" + $(this).attr('id'));
	});
}

//disabling popup with jQuery magic!
function disablePopup()
{
	//disables popup only if it is enabled
	if(popupStatus == 1)
	{
		$("#popupRequestBackground").fadeOut("slow");
		$("#popupRequest").fadeOut("slow");
		popupStatus = 0;
		
		//restore input fields styles
		$(".popupRequestForm .field_error").hide();
	
		$(".popupRequestForm .field input").removeClass("valid");
		$(".popupRequestForm input, .popupRequestForm textarea").val("");
		goStep1();
		showForm();
	}
}

//centering popup
function centerPopup()
{
	//request data for centering
	var windowWidth = document.documentElement.clientWidth;
	var windowHeight = document.documentElement.clientHeight;
	var popupHeight = $("#popupRequest").height();
	var popupWidth = $("#popupRequest").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...
	var topScrollerPosition = document.documentElement.scrollTop;


	//centering
	$("#popupRequest").css({
		"position": "fixed",
		"top": windowHeight/2-popupHeight/2,
		//"top": parseInt((windowHeight-popupHeight)/2) + topScrollerPosition + 100,
		//"top": topScrollerPosition + 50,
		"left": windowWidth/2-popupWidth/2
	});

	//only need force for IE6
	
	$("#popupRequestBackground").css({
		"height": windowHeight
	});
}

function goStep2()
{
		if (pr_validator.form()) {
			
			stage = 1;
			$(".popupRequestForm .stage").html("Stage 2");
			$(".popupRequestForm .field").hide();
			$(".popupRequestForm .label").hide();
			$(".popupRequestForm .float_left_delim").hide();
			$(".popupRequestForm .field").slice(6).show();
			$(".popupRequestForm .label").slice(6).show();
			$(".popupRequestForm .field input").slice(5).removeClass("ignore");
			$(".popupRequestForm .field input").slice(0,5).addClass("ignore");
			$(".popupRequestForm .field_error").hide();
			$(".popupRequestForm #button_next").parent().hide();
			$(".popupRequestForm #button_request_submit").parent().show();
		}
}

function goStep1()
{	
		stage = 0;
		$(".popupRequestForm .stage").html("Stage 1");
		$(".popupRequestForm .label").hide();
		$(".popupRequestForm .field").hide();
		$(".popupRequestForm .float_left_delim").show();
		$(".popupRequestForm .field").slice(0,6).show();
		$(".popupRequestForm .label").slice(0,6).show();
		$(".popupRequestForm .field input").slice(0,5).removeClass("ignore");
		$(".popupRequestForm .field input").slice(5).addClass("ignore");
		$(".popupRequestForm #button_request_submit").parent().hide();
		$(".popupRequestForm #button_next").parent().show();
}

function showSuccess() {
	$(".popupRequestForm .message").hide();
	$(".popupRequestForm .message.success").show();
	$(".popupRequestForm #button_back2").hide();
	$(".popupRequestForm #button_request_ok").parent().show();
}

function showErrors() {
	$(".popupRequestForm .message").hide();
	$(".popupRequestForm .message.error").show();
	$(".popupRequestForm #button_request_ok").parent().show();
}

function showProgress() {
	$(".popupRequestForm .message").hide();
	$(".popupRequestForm .message.in_process").show();
	$(".popupRequestForm .field").hide();
	$(".popupRequestForm .label").hide();
	$(".popupRequestForm #popupRequestClose").hide();
	$(".popupRequestForm #button_request_submit").parent().hide();
}

function showForm() {
	$(".popupRequestForm .message").hide();
	$(".popupRequestForm .message.desc").show();
	$(".popupRequestForm #button_request_ok").parent().hide();
	$(".popupRequestForm #popupRequestClose").show();
}

function sendEmail(button) {
        if (!(pr_validator.form())) {
			$(".valid").next().hide();
			return false;
		}
		showProgress();
		 var data = "job_title=" + escape(realValueOf("#job_title")) +
                   "&job_type=" + escape(realValueOf("#job_type")) +
                   "&hours=" + escape(realValueOf("#hours")) +
                   "&start_date=" + escape(realValueOf("#start_date")) +
                   "&end_date=" + escape(realValueOf("#end_date")) +
                   "&details=" + escape(realValueOf("#details")) + 
				   "&name=" + escape(realValueOf("#sender_name")) +
                   "&company=" + escape(realValueOf("#sender_company")) +
                   "&email=" + escape(realValueOf("#sender_email")) +
                   "&telephone=" + escape(realValueOf("#sender_telephone")) + 
				   "&shortlistType=" + escape($("#shortlistType").val()); 
        $(button).attr("disabled", "true");
        $.ajax({
            type: "POST",
            url: "/external/requestTalentEmail",
            data: data,
            success: function(msg) {
                $(button).removeAttr("disabled");
                if (msg.indexOf("success:") != -1) {
                   showSuccess();
                }
                else if (msg.indexOf("error:") != -1) {
					$(".popupRequestForm #button_back2").show();
                    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>";
						else 
							message += "<li>" + key +": " +value +"</li>";
					}
					if (message == "")
						message = "Error during sending request.";
					$(".popupRequestForm .message.error").html(message);
					showErrors();
                }
            }
        });
		return false;
    }

//CONTROLLING EVENTS IN jQuery
$(document).ready(function() {

	//LOADING POPUP
	//Click the button event!
	
	$("#buttonRequestPopup").live('click', function() {
		//centering with css
		centerPopup();
		//load popup
		loadPopup();
	});
				
	//CLOSING POPUP
	//Click the x event!
	$("#popupRequestClose").live('click', function() {
		disablePopup();
	});

	//NEXT STAGE
	$("#button_next").live('click', function() {
		goStep2();
	});

	//STAGE 2
	$("#button_back2").live('click', function() {
		showForm();
		goStep2();
	});
	
	//PREVIOUS STAGE
	$("#button_back").live('click', function() {
		goStep1();
	});

	
	//Click out event!
	$("#popupRequestBackground").live('click', function() {
		disablePopup();
	});
	
	//Press Escape event!
	$(document).keypress(function(e) {
		if(e.keyCode == 27 && popupStatus == 1) {
			disablePopup();
		}
	});

});