var preval = "preval";
var compareval = "compareval";
var somevalue = "8";
// the DOMAIN of wherever the age validation is done
// NOTE, dont put the complete address, just domain.

var goodurl  = "http://library.kelloggs.com/qvam/";
var rejecturl = "http://library.kelloggs.com/qvam/default.aspx";

var returnurl = "";
var cbkhere = "";

function drawForm() {
    location.replace(rejecturl + "?rnum=" + somevalue + "&refurl=" + cbkhere + "&referred=" + encode64(escape(returnurl)));
}

function removeChilds(elemName) {
    var el = document.getElementById(elemName);
    while (el.hasChildNodes()) {
        el.removeChild(el.firstChild);
    }
}

function makeRandom() {
    somevalue = Math.round((Math.random() * 10000));
}

// checks the referrer,
// if referrer okay, sets a cookie
// if referrer not okay, redirect user to age validation URL
function checkRefer() {
    var qsval = displayItem('qvn');
    var ckval = getCookieValue(compareval);
    var checkvala = getCookieValue(preval);
    if (checkvala == false) { checkvala = true; }
    if (qsval == checkvala) {
        writeSessionCookie(compareval, qsval);
    } else if (ckval == checkvala) {
        // we're good, no more checking.
    } else {
        makeRandom();
        writeSessionCookie(preval, somevalue);
        drawForm();
    }
}

function goSomewhere(gohere) {
    location.replace(gohere);
}

function checkValidated() {
    returnurl = "" + window.location;
    cbkhere = returnurl;
    var quest = returnurl.indexOf("?");
    if (quest > 0) {
        cbkhere = returnurl.substring(0, quest);
    }
    var checkvala = getCookieValue(preval);
    var checkvalb = getCookieValue(compareval);
    if (checkvala == false) { checkvala = true; }
    if ((checkvala.length < 3) || (checkvala != checkvalb)) {
        checkRefer();
    } else {
        // its good
    }
}

function readCookie() {
    var val = getCookieValue(somename)
    // alert(val);
}

function writeSessionCookie(cookieName, cookieValue) {
    if (testval()) {
        document.cookie = escape(cookieName) + "=" + escape(cookieValue) + "; path=/";
        return true;
    } else {
        return false;
    }
}

function getCookieValue(cookieName) {
    var exp = new RegExp(escape(cookieName) + "=([^;]+)");
    if (exp.test(document.cookie + ";")) {
        exp.exec(document.cookie + ";");
        return unescape(RegExp.$1);
    } else {
        return false;
    }
}

function testval() {
    document.cookie = "testval=Enabled";
    if (getCookieValue("testval") == "Enabled") {
        return true
    } else {
        return false;
    }
}

function PageQuery(q) {
    if (q.length > 1) {
        this.q = q.substring(1, q.length);
    } else {
        this.q = null;
    }
    this.keyValuePairs = new Array();
    if (q) {
        for (var i = 0; i < this.q.split("&").length; i++) {
            this.keyValuePairs[i] = this.q.split("&")[i];
        }
    }
    this.getKeyValuePairs = function() { return this.keyValuePairs; }
    this.getValue = function(s) {
        for (var j = 0; j < this.keyValuePairs.length; j++) {
            if (this.keyValuePairs[j].split("=")[0] == s) {
                return this.keyValuePairs[j].split("=")[1];
            }
        }
        return false;
    }
    this.getParameters = function() {
        var a = new Array(this.getLength());
        for (var j = 0; j < this.keyValuePairs.length; j++) {
            a[j] = this.keyValuePairs[j].split("=")[0];
        }
        return a;
    }
    this.getLength = function() { return this.keyValuePairs.length; }
}

function queryString(key) {
    var page = new PageQuery(window.location.search);
    return unescape(page.getValue(key));
}

function displayItem(key) {
    if (queryString(key) != 'false') {
        return queryString(key);
    } else {
        return false;
    }
}

function grabvalues() {
    referingURL = displayItem('refer');
    referingNum = displayItem('qvn');
}

var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

function encode64(input) {
    var output = "";
    var chr1, chr2, chr3;
    var enc1, enc2, enc3, enc4;
    var i = 0;

    do {
        chr1 = input.charCodeAt(i++);
        chr2 = input.charCodeAt(i++);
        chr3 = input.charCodeAt(i++);

        enc1 = chr1 >> 2;
        enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
        enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
        enc4 = chr3 & 63;

        if (isNaN(chr2)) {
            enc3 = enc4 = 64;
        } else if (isNaN(chr3)) {
            enc4 = 64;
        }
        output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) +
      keyStr.charAt(enc3) + keyStr.charAt(enc4);
    } while (i < input.length);
    return output;
}

function decode64(input) {
    var output = "";
    var chr1, chr2, chr3;
    var enc1, enc2, enc3, enc4;
    var i = 0;

    // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
    input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

    do {
        enc1 = keyStr.indexOf(input.charAt(i++));
        enc2 = keyStr.indexOf(input.charAt(i++));
        enc3 = keyStr.indexOf(input.charAt(i++));
        enc4 = keyStr.indexOf(input.charAt(i++));

        chr1 = (enc1 << 2) | (enc2 >> 4);
        chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
        chr3 = ((enc3 & 3) << 6) | enc4;

        output = output + String.fromCharCode(chr1);

        if (enc3 != 64) {
            output = output + String.fromCharCode(chr2);
        }
        if (enc4 != 64) {
            output = output + String.fromCharCode(chr3);
        }
    } while (i < input.length);
    return output;
}

checkValidated();
