﻿var validToPost = true;
var Validate = {
    emailAddress: function(frm, name) {
        addValidation(frm, name, 'invalid', function(val) {
            return val == '' || (val.indexOf('@') > 0 && val.indexOf('.', val.indexOf('@')) > 0);
        });
    },
    required: function(frm, name, message) {
        addValidation(frm, name, message, function(val) {
            return !val.blank();
        });
    },
    maxLength: function(frm, name, max, message) {
        addValidation(frm, name, message, function(val) {
            return val.empty() || val.length <= max;
        });
    },
    enableValidation: function(frm, doValidation) {
        frm.dovalidate = doValidation;
    },
    custom: addValidation
};
function addValidation(frm, name, message, validation) {
    if (!frm.vFields) {
        Object.extend(frm, {
            vFields: new Object(),
            validations: $A(new Array()),
            isValid: function() {
                return this.validations.all(function(v) { return v.isValid(); });
            }
        });
    }
    if (!frm.vFields[name]) {
        frm.vFields[name] = {
            name: name,
            validations: new Array(),
            validate: function() {
                if (frm.dovalidate != false) {
                    for (var i = 0; i < frm.vFields[name].validations.length; i++) {
                        if (!frm.vFields[name].validations[i].isValid()) {
                            return false;
                        }
                    }
                }

                return true;
            }
        };
        Event.observe(frm, 'submit', function(e) {
            if (e.skipValidation)
                return;

            if (!frm.vFields[name].validate()) {
                validToPost = false;
                Event.stop(e);
            }
        });
    }
    var v = new Validation(frm, name, message, validation);
    frm.validations.push(v)
    frm.vFields[name].validations.push(v);
}


function isVisible(obj) {
    return $(obj).visible() && !$(obj).ancestors().any(function(a) { return !a.visible(); });
}

function Validation(frm, name, message, validation) {
    this.frm = frm;
    this.name = name;
    this.message = message;
    this.isValid = function() {
        var item;
        var val = '';
        var inputs = $(frm).getElements().findAll(function(field) { return field.name == name && isVisible(field); });
        if (inputs.length > 1) {
            item = inputs[0];
            inputs.each(function(itm) {
                if (itm.checked) {
                    item = itm;
                    val = itm.value;
                }
            });
        } else if (inputs.length == 1) {
            item = inputs[0];
            val = $F(inputs[0]);
        } else {
            return true;
        }
        span = item.up('span');
        if (!span)
            span = item.up().down('span'); //handle textareas
        if (item) span.select('.validation-error').each(function(itm) { itm.remove(); });
        if (!validation(val)) {
            span.star = document.createElement('strong');
            span.star.className = 'validation-error';
            span.star.title = message;
            span.star.appendChild(document.createTextNode(' ' + this.message));
            span.appendChild(span.star);
            return false;
        }
        return true;
    };
}

function showOverlay(title, content) {
    var attention = $('NB-Attention');
    if (!attention) {
        attention = $(document.createElement('div'));
        attention.id = 'NB-Attention';
        attention.hide();

        attention.dimmer = document.createElement('div');
        attention.dimmer.id = 'NB-Dimmer';
        attention.appendChild(attention.dimmer);

        attention.giveaway = $(document.createElement('div'));
        attention.giveaway.id = 'NB-Giveaway';
        attention.giveaway.innerHTML = '<p class="NB-Giveaway-Head"><a id="NB-GiveawayClose" href="#" onclick="return hideOverlay()">close</a></p><h1>' + title + '</h1><div id="popped-content">' + content + '</div>';
        attention.appendChild(attention.giveaway);

        document.body.insertBefore(attention, document.body.firstChild);
    }
    attention.giveaway.innerHTML = '<p class="NB-Giveaway-Head"><a id="NB-GiveawayClose" onclick="return hideOverlay()" href="#">close</a></p><h1>' + title + '</h1><div id="popped-content">' + content + '</div>';
    if (window.fixOverlayPosition) window.fixOverlayPosition();
    attention.show();
    var inputs = $$('#NB-Giveaway input[type=text]');
    if (inputs.length > 0) inputs[0].focus();
    return attention;
}


function hideOverlay() {
    $('NB-Attention').hide();
    return false;
}

function showGiveawayOverlay(e) {
    showOverlay('Enter the Giveaway!',
        '<form id="frmGiveaway" method="post" action="/giveaway.aspx"><input type="hidden" name="brandid" value="' + brandid + '" />' +
        '<div> <label> <span class="lbl">Name</span> <span> <input type="text" maxlength="100" name="name" class="text" /></span></label></div>' +
        '<div><label><span class="lbl">Phone Number (Only to let you know you\'ve won)</span> <span><input type="text" maxlength="100" name="phone" class="text" /></span></label></div>' +
        '<div><label><span class="lbl">Email</span><span><input type="text" maxlength="100" name="email" class="text" /></span></label></div>' +
        '<div id="frmActions"><span class="lbl"></span><span><input type="image" alt="Enter Giveaway" value="enter" name="action" src="/images/btn_EnterGiveaway.jpg" /></span></div>' +
        '<p id="giveaway-rules"><a href="/Rules/' + brandid + '.htm" target="new">Official Contest Rules</a></p>' +
        '</form>');
    if (e) Event.stop(e);
    var frm = $('frmGiveaway');

    Validate.required(frm, 'name', 'required');
    Validate.required(frm, 'name', 'required');
    Validate.maxLength(frm, 'name',75,'Too long');
    Validate.required(frm, 'phone', 'required');
    Validate.maxLength(frm, 'phone',20,'Too long');
    Validate.emailAddress(frm, 'email');
    Validate.maxLength(frm, 'email',75,'Too long');
    Validate.required(frm, 'email', 'required');
    Event.observe($$('#NB-Giveaway input[type=image]')[0], 'click', function() { validToPost = true; });
    Event.observe('frmGiveaway', 'submit', processGiveaway);
    Event.observe('giveaway-rules', 'click', function(e) { Event.stop(e); window.open('/Rules/' + brandid + '.htm', null, 'height=500,width=400,status=yes,toolbar=no,menubar=no,location=no,scrollbars=yes'); });
}

function processGiveaway(e) {
    if (validToPost) {
        var formPost = $('frmGiveaway');
        new Ajax.Request(formPost.action, {
            method: 'post',
            parameters: formPost.serialize(),
            onSuccess: function(transport) {
                $('NB-Giveaway').update(transport.responseText);
                $('NB-Giveaway').addClassName('ShortenThankYouBox');
            }
        });
    }
    Event.stop(e);
}