
var bSTAFValid = false;

String.prototype.trim = function() {
	return this.replace(/(^ *)|( *$)/g, "");
}

// minimum 2 character, allows only alphabetic
function validateName(jq) {
	var strName = jq.val().trim();
	var reName = /^[a-zA-Z \.\']{2,}$/;
	return reName.test(strName);
}

function validateEmail(jq) {
	var strEmail = jq.val().trim();
    //Same as validation on SP IS
	var reEmail = /^[&\'*+\/=?^_{}~a-z0-9.-]+@([a-z0-9-]+\.)+[a-z0-9]+$/i;

	return reEmail.test(strEmail);
}

function validatePhone(jq) {
	var strPhone = jq.val().trim();
    //Same as validation on SP IS
	var rePhone = /^[&\'*+\/=?^_{}~0-9.-]+@([0-9-]+\.)+[0-9]+$/i;

	return rePhone.test(strPhone);
}

function validateRequired(jq) {
	if (jq.selectedIndex != undefined) {
		return (jq.val() != "null");
	}else
		return jq.val();
}


// First argument is the validation function
// The other arguments are the jquery objects to be validated
function validateInputs(/*...*/) {
	var isValid = true;
	var validFunc = arguments[0];
	for (i = 0; i < arguments[1].length; i++) {
		var el = $(arguments[1][i]);
		var eLabel = el.parent();
		if (!validFunc(el)) {
			eLabel.addClass("Error");
			isValid = false;
		}
	}
	return isValid;
}

// First argument is the validation function
// The other arguments are the jquery objects to be validated
function validateAlternate(/*...*/) {
	var isValid = true;
	var validFunc = arguments[0];
	var oForm = arguments[2];
	var errorMessagesTo = oForm.find(".errorSetTo span");
	for (i = 0; i < arguments[1].length; i++) {
		var el = $(arguments[1][i]);
		var eLabel = el.parent();
		var eLabelNext = el.parent().next();
		var elTo = el.parent().next().find("#to");

        //Name but no email
        if( (validFunc(el) && !validateName(el)) && !validateEmail(eLabelNext.find("#to")) ) {
            eLabel.addClass("Error");
            eLabelNext.addClass("Error");
            errorMessagesTo.eq(2).css("display", "block");
            errorMessagesTo.eq(3).css("display", "block");
            isValid = false;
        }

        if( validateName(el) && (!validateEmail(eLabelNext.find("#to"))) ) {
            eLabelNext.addClass("Error");
            errorMessagesTo.eq(3).css("display", "block");
            isValid = false;
        }

        //Email but no name
        if( (validFunc(elTo) && !validateEmail(elTo)) && !validateName(el) ) {
            eLabel.addClass("Error");
            eLabelNext.addClass("Error");
            errorMessagesTo.eq(2).css("display", "block");
            errorMessagesTo.eq(3).css("display", "block");
            isValid = false;
        }

        if( validateEmail(elTo) && !validateName(el) ) {
            eLabel.addClass("Error");
            errorMessagesTo.eq(2).css("display", "block");
            isValid = false;
        }
	}

	return isValid;
}


function resetErrorIndicators(popup) {
	popup.find("label, .MandantoryNotice, .RequiredNotice").removeClass("Error");
	popup.find(".errorSetFrom span, .errorSetTo span").css("display", "none");
}

function validateEcard(form,bP) {
	var isValid = true;

	var errorMessagesFrom = form.find(".errorSetFrom span");
	var errorMessagesTo = form.find(".errorSetTo span");
	resetErrorIndicators(form);

    
	var errorRequired = form.find(".reqNotice");
	var reqTo= form.find("#to");
	var reqToName = form.find("#toname");
	var reqFrom = form.find("#from");
	var reqFromName = form.find("#fromname");
	var reqBaby = form.find("#yourBabysName");

	var aReqAlt = form.find(".reqNameAlt");

	if (!validateInputs(validateName, reqToName)) {
		errorMessagesTo.eq(0).css("display", "block");
		isValid = false;
	}
	if (!validateInputs(validateEmail, reqTo)) {
		errorMessagesTo.eq(1).css("display", "block");
		isValid = false;
	}
	if (!validateInputs(validateName, reqFromName)) {
		errorMessagesFrom.eq(0).css("display", "block");
		isValid = false;
	}
	if (!validateInputs(validateEmail, reqFrom)) {
		errorMessagesFrom.eq(1).css("display", "block");
		isValid = false;
	}
	if (!validateInputs(validateName, reqBaby)) {
		errorMessagesFrom.eq(2).css("display", "block");
		isValid = false;
	}

	if (!validateAlternate(validateRequired, aReqAlt, form)) { isValid = false; }

    //Remove extra empty to,toname to prevent errors
    if(isValid && !bP)
        $('.reqNameAlt,.reqEmailAlt').each(function() { if(!$(this).val()) $(this).removeAttr('id').removeAttr('name'); });

    bSTAFValid = isValid;
	return isValid;
}

function urlencode( str ) {
    var ret = str;
    ret = ret.toString();
    ret = encodeURIComponent(ret);
    ret = ret.replace(/%20/g, '+');
    return ret;
}

var oPreview = {
    init:function() {
        var o = this;
        $('#previewButton').bind('click',function(){o.preview();});
        $('.previewCardBtn').show();
    },

    preview:function() {
        var bValid = validateEcard($('#sendToAFriend'),1);

        if(bValid) {
            var sFormData = $('form').serialize();
            previewPage('ecard_preview.cfm?'+sFormData,'Preview');
        }
    }
}

$(document).ready(function() {
    //Move extra recipients to form to work with mailer script
    $('fieldset.recipients').append($('#extraRecipients').html());
    $('#extraRecipients').remove();

    //Get refering url from cookie, less hack than if as param in url
    if(readCookie('referurl') != urlencode(window.location)) {
        $('.formContainerstaf').find('#referurl').val(readCookie('referurl'));
    } else {
        //$('.formContainerstaf').find('#referurl').val(urlencode('http://www.doitforyourbaby.com'));
        $('.formContainerstaf').find('#referurl').val('http://www.doitforyourbaby.com');
    }


    //Preview
    oPreview.init();
});
