var ye = YAHOO.util.Event;
var yc = YAHOO.util.Connect;
var yd = YAHOO.util.Dom;

var Promo = function() {
    
    var loader;
    var isSending = false;
    ye.addListener(window, "load", init);
    
    function init()
    {
        // Pre-loading images
        loader = new NB.ImagePreloader();
        loader.preload(PromoConfig.preload, "images/");            
        loader.onComplete = function(p) 
        {
            // load start page
            Promo.loadPage(PromoConfig.startPage);
        }
    }
    
    var that = {
        page: "loader",
        prevPage : "",
        back : function() {
          this.loadPage(this.prevPage);
        },
        checkForm: function(thankPageId, outputId)
        {
            var e = ye.getEvent();
            ye.stopEvent(e);
            
            var form = ye.getTarget(e);
            
            var outputElement = yd.get(outputId);
            if(outputElement)
            {
                outputElement.innerHTML = "";
            }
            
            // Getting form element
            while(form = form.parentNode)
            {
                if(form.tagName.toLowerCase() == "form")
                {
                    break;
                }
            }
            
            var formCheck = new FormCheck(PromoConfig.forms[form.formcheck.value]);
            var formVars = formCheck.GetFormVars(form);
            
            var dateFieldRe = /^(.*)(day|month|year)$/;
            
            for(var name in formVars)
            {
                var matches = dateFieldRe.exec(name);
                
                if(matches && !formVars.hasOwnProperty(matches[1] + "date"))
                {
                    var prefix = matches[1];
                    var dayExists = formVars.hasOwnProperty(prefix + "day");
                    var monthExists = formVars.hasOwnProperty(prefix + "month");
                    var yearExists = formVars.hasOwnProperty(prefix + "year");
                    if(yearExists && monthExists && dayExists)
                    {
                        formVars[prefix + "date"] = formVars[prefix + "year"] + "-" + formVars[prefix + "month"] + "-" + formVars[prefix + "day"];						
                    }
                }
            }
            
            var callback = {
                success : function(o) {
                    isSending = false;
                    try 
                    {
                        eval("var result=" + o.responseText);
                        if(result.success)
                        {
                            form.reset();
                            that.loadPage(thankPageId);
                        }
                        else
                        {
                            that.loadPage(that.prevPage);
                            that.outputErrors(result.errors, outputElement);
                        }
                    }
                    catch(e)
                    {
                        that.loadPage(thankPageId);
                    }
                    
                },
                failure : function(o)
                {
                    isSending = false;
                }
            };
            
            formCheck.Check(formVars);
            if (formCheck.HasErrors()) 
            {
                this.outputErrors(formCheck.GetErrorTextsAssoc(), outputElement);
                
            }
            else if(!isSending)
            {
                that.loadPage("loader");
                yc.setForm(form);
                isSending = true;
                yc.asyncRequest("post", "index.php?action=save", callback);				
            }
            
        },
        loadPage : function(page) {
            try
            {
                var e = ye.getEvent();
                ye.stopEvent(e);
            }
            catch(e)
            {
                
            }
            
            yd.setStyle(this.page, "display", "none");
            
            if(this.page != page)
            {
                 this.prevPage = this.page;
            }
            
            this.page = page;
            
            yd.setStyle(this.page, "display", "block");		
            
            if(typeof PromoConfig.scrollers[page] != "undefined")
            {
                PromoConfig.scrollers[page].init();
                PromoConfig.scrollers[page].refresh();
            }
            
            this.onPageLoad(page);
        },
        onPageLoad : function() {
            
        },
        outputErrors : function(errors, outputElement) {
            var errorTexts = [];
            for(var i in errors)
            {
                errorTexts.push(errors[i]);
            }
            
            if(outputElement)
            {
                outputElement.className = "error";
                outputElement.innerHTML = errorTexts[0];
            }
            else
            {
                alert(errorTexts.join("\n"));
            }
        },
        setCheckbox : function(val) {
            var e = ye.getEvent();
            ye.stopEvent(e);
            
            var t =ye.getTarget(e);
            
            var re = /^checkbox-([-a-z0-9_]+)/i;
            var name = re.exec(t.className)[1];
            
            
            var checkboxes = yd.getElementsByClassName("checkbox-" + name);
            if (checkboxes.length > 1) 
            {
                for (var i = 0; i < checkboxes.length; i++) 
                {
                    yd.removeClass(checkboxes[i], "checked");
                }
                
                yd.addClass(t, "checked");
                yd.get(name + "-value").value = val;
            }
            else
            {
                if(yd.hasClass(t, "checked"))
                {
                    yd.removeClass(t, "checked");
                    yd.get(name + "-value").value = "";
                }
                else
                {
                    yd.addClass(t, "checked");
                    yd.get(name + "-value").value = val;
                }
            }
        }
    };
    
    return that;	
}();
