bttnClass = '.weblinksBttn';
redirectContainer = "#redirect";

function List() {
    this.elements = [];
    for(var i in arguments) {
        this.push(arguments[i]);
    }
}
List.RETURN_NOW = 0;
List.RETURN_AFTER = 1;
List.prototype.each = function() {
    if(arguments[0]) {
        var callback = arguments[0];
        var rtrn = false;
        for(var i=0; i<this.elements.length; i++) {
            rtrn = callback(this.elements[i], i, rtrn);
            if (rtrn instanceof Array && rtrn.length==2) {
                var typeOfReturn = rtrn[0];
                var value = rtrn[1];
                if(typeOfReturn==List.RETURN_NOW) {
                    return value;
                } else if (typeOfReturn==List.RETURN_AFTER) {
                    rtrn = value;
                }
                typeOfReturn = null;
                value = null;
            }
        }
        return rtrn;
    }
    return false;
}
List.prototype.push = function() {
    for(var i=0; i<arguments.length; i++) {
        this.elements.push(arguments[i]);
    }
}


FormElements = {
    formId: '#weblinksForm',
    submitBttnId: '#weblinksSubmit',
    fields: new List(),
    clickedLink: null,

    addField: function(name) {
        this.fields.push(new FormElement(name));
    },

    showForm: function() {
        $(this.formId).css('display', 'block');
    },

    setAction: function(action) {
        $(this.formId).attr('action', action);
    },
    
    setUp: function() {

        $(bttnClass).click(function(e) {
            e.preventDefault();
            FormElements.clickedLink = { href: $(this).attr('href'), id: $(this).attr('id') };
            FormElements.showForm();
        });

        $(this.submitBttnId).click(function(e) {
            var redirect = FormElements.clickedLink.href;
            var referralId = FormElements.clickedLink.id;
            if(FormElements.fieldsValid()) {
                FormElements.setAction(pageToGoTo+"?url="+redirect+"&referralID="+referralId);
            } else {
                e.preventDefault();
            }
        });
    },

    fieldsValid: function() {
        return this.fields.each(function(field) {
            if(field.isFilledOut()) {
                return [ List.RETURN_AFTER, true ];
            } else {
                return [ List.RETURN_NOW, false ];
            }
        });
    }


}

function FormElement(name) {
    this.name = name;
}
FormElement.prototype.isFilledOut = function() {
    return $("[name='"+this.name+"']").val();
}


$(document).ready(function() {

    FormElements.addField('firstname');
    FormElements.addField('lastname');
    FormElements.addField('email');
    FormElements.setUp();

});
