(function() {
    var formcount = 0;
    var done = function() {};
    var frames = [];
    var baseurl = "";
    
    function loader() {
        try {
            var IE4 = (navigator.appVersion.indexOf("MSIE 4.") == -1) ? false : true;
            var IE5 = (navigator.appVersion.indexOf("MSIE 5.") == -1) ? false : true;
            var IE6 = (navigator.appVersion.indexOf("MSIE 6.") == -1) ? false : true;
            var IE7 = (navigator.appVersion.indexOf("MSIE 7.") == -1) ? false : true;
            
            if (IE4 || IE5 || IE6 || IE7) return;
            
        } catch (e) {
        }
        
        $("body").append("<div id=\"subscribe_dimmer\"></div>");
        $("body").append("<div id=\"subscribe_timer\">Please wait, loading...<br><img src=\"" + baseurl + "/loader.gif\"></div>");
        $("#subscribe_dimmer").css({
            "position": "fixed",
            "top": "0px",
            "left": "0px",
            "width": "100%",
            "height": "100%",
            "background": "url(" + baseurl + "/bg.gif)"
        });
        $("#subscribe_timer").css({
            "position": "fixed",
            "top": "50%",
            "left": "50%",
            "width": "300px",
            "height": "30px",
            "padding": "20px",
            "margin-top": "-45px",
            "margin-left": "-160px",
            "border": "1px solid black",
            "background": "#effbff",
            "border-radius": "8px",
            "z-index": "100000",
            "font-family": "helvetica, arial, sans-serif",
            "text-align": "center",
            "font-weight": "bold"
            
        });
    }
    
    function validate_email(email) { 
        var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
        return re.test(email);
    } 
    
    function validate_name(name) {
        var re = /^[A-Za-z0-9 _\-.']*$/;
        return re.test(name);
    }
    
    function optin_hideloader() {
        $("#subscribe_dimmer").remove();
        $("#subscribe_timer").remove();
    }

    function optin_init(theBaseurl, forms) {
        baseurl = theBaseurl;
        
        $(function() {
            $("body").append("<img style=\"display:none;position:absolute;top:-1000px;left:-1000px;width:1px;height:1px;\" src=\"" + baseurl + "/bg.gif\">");
            $("body").append("<img style=\"display:none;position:absolute;top:-1000px;left:-1000px;width:1px;height:1px;\" src=\"" + baseurl + "/loader.gif\">");            
        
            for (var i = 0; i < forms.length; i++) {
                var form = forms[i];
                var url = baseurl + "/" + form;
                url = url.replace("//", "/");
                
                var id = "optin_form_" + formcount;
                frames.push(id);
                
                $("body").append("<iframe id=\"" + id + "\" style=\"display:none;position:absolute;top:-1000px;left:-1000px;width:1px;height:1px;\" src=\"" + url + "\"></iframe>");
                formcount++;
            }
        });
    }
    
    function call_done() {
        var f = done;
        done = function() { };
        f();
    }
    
    function optin_go(name, email, callback, timeout) {
        done = callback;
        setTimeout(call_done, timeout);
        
        loader();
        
        if (!validate_email(email) || !validate_name(name)) {
            call_done();
            return;
        }
        
        var names = name.split(" ");
        var firstname = names[0];
        var lastname = names[1];
        
        // validate
        
        for (frame in frames) {
            frame = frames[frame];
            $("#" + frame).contents().find(".optin_name").val(name);
            $("#" + frame).contents().find(".optin_firstname").val(firstname);
            $("#" + frame).contents().find(".optin_lastname").val(lastname);
            $("#" + frame).contents().find(".optin_email").val(email);
            $("#" + frame).contents().find(".optin_submit").click();
        }
    }
    
    function optin_complete() {
        formcount--;
        if (formcount == 0) {
            call_done();
        }
    }
    
    window.optin_init = optin_init;
    window.optin_go = optin_go;
    window.optin_complete = optin_complete;
    window.optin_hideloader = optin_hideloader;
})();
