var TwitterFeedAPI = (function() {
    var tweetsWrapper, tweets;

    var initialize = function() {
        tweetsWrapper = $("TweetsWrapper");
        tweets = $("Tweets");

        if (tweets) {
            new RequestTwitter({
                parameters: {screen_name: "symztecstudios", count: 4}
            }).addEvents({
                success: function(data) {
                    tweetsWrapper.getElement(".loader").dispose();
                    tweets.empty();
                    data.each(function(tweet, index) {
                        new Element("li", {id: tweet.id, "class": "tweet " + ((index > 0) ? "tweetBorderTop" : "")
                            ,html: tweet.text + "<div class=\"tweetTimeStamp\">" + " Tweeted " + Date.parse(tweet.created_at).timeDiffInWords(new Date()) + "</div>"
                        }).inject(tweets);
                    });

                    (function() {updateTweets();}).periodical(150000);
                }
            }).send();
        }
    };

    var updateTweets = function() {
        new RequestTwitter({
            parameters: {screen_name: "symztecstudios", count: 2}
        }).addEvents({
            success: function(data) {
                var tweetChildren = tweets.getChildren();

                if (tweetChildren[0].id != data[0].id) {
                    $(tweetChildren.getLast().id).addClass("hidden");

                    var newTweetObj = data[0]
                        ,newTweet = new Element("li", {"class": "tweet"
                            ,styles: {visibility: "hidden", opacity: 0}
                            ,html: newTweetObj.text + "<div class=\"tweetTimeStamp\">" + " Tweeted " + Date.parse(newTweetObj.created_at).timeDiffInWords(new Date()) + "</div>"
                        }).inject($(tweetChildren[0].id), "before");

                    (function(){newTweet.fade("in");}).delay(1000);
                }
            }
        }).send();
    };

    return {
        initialize: initialize
        ,updateTweets: updateTweets
    };
})();

var FormAPI = (function() {
    var securityEquation1, securityEquationOperator, securityEquation2, securityEquationAnswer;

    var initialize = function(formID) {
        var form = $(formID);
        contactFormSecurity(form);
    };

    var contactFormSecurity = function(form) {
        if (form) {
            securityEquation1 = Number.random(1, 10);
            securityEquationOperator = ["+", "-"].getRandom();
            securityEquation2 = Number.random(0, 10);
            securityEquationAnswer = eval(securityEquation1 + securityEquationOperator + securityEquation2);
            $("SecurityEquation").set("text", securityEquation1 + " " + securityEquationOperator + " " + securityEquation2);
        }
    };

    var contactFormSubmit = function(el) {
        var form = el.form, formErrorMsg = form.getElements(".errorMsg");

        formErrorMsg.addClass("hidden").empty();

        var formfields = form.getElements(".formElement")
            //,loader = form.getElements(".contactFormLoader")
            ,nameInput = form.getElement("input[name=inpName]")
            ,emailInput = form.getElement("input[name=inpEmail]")
            ,companyInput = form.getElement("input[name=inpCompany]")
            ,phoneInput = form.getElement("input[name=inpPhone]")
            ,websiteInput = form.getElement("input[name=inpWebsite]")
            ,messageInput = form.getElement("textarea[name=inpMessage]")
            ,securityInput = form.getElement("input[name=inpSecurityEquation]")
            ,allInputsValid = true;

        if (nameInput.value == "") {
            $("inpNameValidateError").set("html", "This field is required.").removeClass("hidden");
            allInputsValid = false;
        } else if (nameInput.value != "" && !validationAPI.validateName(nameInput.value)) {
            $("inpNameValidateError").set("html", "Please enter a valid name.").removeClass("hidden");
            allInputsValid = false;
        }

        if (emailInput.value == "") {
            $("inpEmailValidateError").set("html", "This field is required.").removeClass("hidden");
            allInputsValid = false;
        } else if (emailInput.value != "" && !validationAPI.validateEmail(emailInput.value)) {
            $("inpEmailValidateError").set("html", "Please enter a valid email.").removeClass("hidden");
            allInputsValid = false;
        }

        if (phoneInput.value != "" && !validationAPI.validatePhone(phoneInput.value)) {
            $("inpPhoneValidateError").set("html", "Please enter a valid phone number.").removeClass("hidden");
            allInputsValid = false;
        }

        if (messageInput.value == "") {
            $("inpMessageValidateError").set("html", "This field is required.").removeClass("hidden");
            allInputsValid = false;
        }

        if (securityInput.value == "") {
            $("inpSecurityEquationValidateError").set("html", "This field is required.").removeClass("hidden");
            allInputsValid = false;
        } else if (securityInput.value != securityEquationAnswer) {
            $("inpSecurityEquationValidateError").set("html", "The answer to this equation was wrong.").removeClass("hidden");
            //contactFormSecurity(form);
            allInputsValid = false;
        }

        if (allInputsValid) {
            var loader = Utils.loader({height: parseInt(form.parentNode.getSize().y), bgPosLeft: "50%", bgPosVertical: "50%"});
            loader.inject(form, "after");
            form.addClass("hidden");

            (function() {
                RequestAPI.request("json", {
                    method: "post"
                    ,url: "contactFormSubmit.php"
                    ,useSpinner: false
                    ,data: {
                        name: nameInput.value
                        ,email: emailInput.value
                        ,company: companyInput.value
                        ,phone: phoneInput.value
                        ,website: websiteInput.value
                        ,message: messageInput.value
                    }
                    ,onComplete: function(obj) {
                        if (obj.emailSent == "failed") {
                            alert("There was an error with your submission.  Please try again.");
                            loader.destroy();
                            form.removeClass("hidden");
                        } else {
                            var thankYouMsg = $("ContactFormThankYouMsg");
                            form.reset();
                            loader.destroy();
                            thankYouMsg.removeClass("hidden").set("text", "Thanks " + obj.senderName + " for your message.");

                            (function() {
                                thankYouMsg.addClass("hidden");
                                contactFormSecurity(form);
                                form.removeClass("hidden");
                            }).delay(10000);
                        }
                    }
                });
            }).delay(500);
        } else {
            return false;
        }
    };

    return {
        initialize: initialize
        ,contactFormSubmit: contactFormSubmit
    };

})();

var PortfolioAPI = (function(){
    var portfolio, myWork = [];

    var initialize = function() {
        portfolio = $("Portfolio");
        myWork.all = portfolio.getElements("div.myWork");
        myWork.original = myWork.all.clone();

        ["apps", "branding", "plugins", "print", "web"].each(function(category) {
           myWork[category] = portfolio.getElements("div[category~=" + category + "])");
        });

        myWork.all.addEvents({
            mouseover: function() {
                this.addClass("myWorkLinkSelected");
            }
            ,mouseout: function() {
                this.removeClass("myWorkLinkSelected");
            }
        });
    };

    var showWork = function(el, workName) {
        Utils.createModal({ "background-color": "#000000", opacity: "0.8" });

        var logoCoords = $("Logo").getStyles("top", "left")
            ,workImageCoords = el.parentNode.getCoordinates()
            ,workImage = el.getElement(".workImage").clone(true, true).setStyles({ position: "absolute", top: workImageCoords.top, left: workImageCoords.left }).addClass("floatLeft");

        new Element("div", { id: "WorkShow"
            ,styles: { background: "#FFFFFF", width: 980, padding: 5, position: "absolute", top: 50, left: workImageCoords.left, border: "1px solid red", zIndex: 70000 }
        }).adopt(workImage).inject($(document.body));

        new Fx.Scroll(window).toTop();
        new Fx.Morph(workImage, {duration: 'short', transition: Fx.Transitions.Sine.easeOut}).start({top: logoCoords.top, left: logoCoords.left});
        (function(){ workImage.setStyle("position", ""); }).delay(250);

        RequestAPI.request("json", {
            method: "get"
            ,url: "getWorkInfo.php"
            ,useSpinner: false
            ,data: {workName: workName}
            ,onComplete: function(obj) {
                console.log(obj);
            }
        });
    };

    var showWorkCategory = function(el) {
        var selectedCategory = el.innerHTML.toLowerCase();
        myWork.all.addClass("notInSelectedCategory").fade(0);

        if (selectedCategory == "all") {
            (function() {
                portfolio.empty().adopt(myWork.original);
                myWork.original.each(function(item) {
                    item.removeClass("notInSelectedCategory").fade(1);
                });
            }).delay(1000);
        } else {
            (function() {
                myWork[selectedCategory].removeClass("notInSelectedCategory");
                portfolio.getElements(".notInSelectedCategory").inject(portfolio);
                myWork[selectedCategory].fade(1);
            }).delay(1000);
        }
    };

    return {
        initialize: initialize
        ,showWork: showWork
        ,showWorkCategory: showWorkCategory
    };

})();

var NewsAPI = (function(){
    var initialize = function() {
        //if ($("RecentNews")) newsScroll();
    };

    var newsScroll = function(duration) {
        var list = $("Tweets")
            ,items = list.getElements("li")
            ,showDuration = duration || 3000
            ,scrollDuration = 500
            ,index = 0
            ,height = items[0].getSize().y;

        (function() {
            list.set('tween',{
              duration: scrollDuration,
              onComplete: function() {
                if (index == items.length - 1) {
                  index = 0 - 1;
                  list.scrollTo(0,0);
                }
              }
            }).tween("top", 0 - (++index * height));
        }).periodical(showDuration);
    };

    return {
        initialize: initialize
    }
})();

/*
var PageIndicatorAPI = (function() {
    var pageIndicator, bodyID, pageLink, pageLinkCoords, pageLinks, currentLink, pageIndicatorClone;

    var initialize = function() {
        pageIndicator = $("PageIndicator");
        pageIndicatorClone = $("PageIndicatorClone");
        bodyID = document.body.id;
        pageLink = $(bodyID.ucFirst());
        pageLinkCoords = (pageLink) ? pageLink.getCoordinates() : "";
        currentLink = (pageLink) ? pageLink : "";
        pageLinks = $("Menu").getElements("li");

        if (currentLink) {
            pageIndicator.setStyles({top: pageLinkCoords.bottom + 2, left: pageLinkCoords.left + ((pageLinkCoords.width / 2) - 35)});
            pageIndicatorClone.setStyles({top: pageLinkCoords.bottom + 2, left: pageLinkCoords.left + ((pageLinkCoords.width / 2) - 35), zIndex: 5});
        } else {
            var linkCoords = pageLinks[0].getCoordinates();
            pageIndicator.setStyles({top: linkCoords.bottom + 2, left: linkCoords.left + ((linkCoords.width / 2) - 35)});
            pageIndicatorClone.setStyles({top: linkCoords.bottom + 2, left: linkCoords.left + ((linkCoords.width / 2) - 35), zIndex: 5});
        }

        pageLinks.each(function(link) {
            link.addEvents({
               mouseenter: function(e) {
                   e.stop();
                   moveIndicator(this);
               }
               ,mouseleave: function(e) {
                   e.stop();
                   resetIndicator();
               }
            });
        });

        showIndicator();
    };

    var moveIndicator = function(link) {
        var linkCoords = link.getCoordinates()
            ,indicatorLeft = linkCoords.left + ((linkCoords.width / 2) - 35);

        if (!pageIndicator.hasClass("hidden") && bodyID != "index3") {
                pageIndicatorClone.removeClass("hidden").tween("left", indicatorLeft);
        } else {
            if (link.id != bodyID && link.id != currentLink.id) {
                pageIndicator.removeClass("hidden").tween("left", indicatorLeft);
            }
        }
    };

    var resetIndicator = function() {
        if (!pageIndicator.hasClass("hidden") && bodyID != "index3") {
            pageIndicatorClone.tween("left", pageLinkCoords.left + ((pageLinkCoords.width / 2) - 35));
        } else {
            if (pageLink) {
                pageIndicator.tween("left", pageLinkCoords.left + ((pageLinkCoords.width / 2) - 35));
            } else {
                pageIndicator.addClass("hidden");
            }
        }
    };

    var showIndicator = function() {
        pageLinks.setStyle("color", "#3F3F3F");

        if (pageLink) {
            var indicatorTop = pageLinkCoords.bottom + 2
                ,indicatorLeft = pageLinkCoords.left + ((pageLinkCoords.width / 2) - 35);

            pageLink.setStyle("color", "#663399");
            pageIndicator.setStyles({top: indicatorTop, left: indicatorLeft}).removeClass("hidden");
        }
    };

    return {
      initialize: initialize
      ,moveIndicator: moveIndicator
      ,showIndicator: showIndicator
    }
})();
*/

var SlideshowAPI = (function() {
    var slideshow, slideshowImages, slideshowImagesCount, slideshowImagesHeight, slideshowArrowControls, slideShowNumberControls, slideshowNumberControlsArr, slideshowFunc, slideshowTimer, nextArrow, previousArrow;

    var initialize = function(options) {
        if (options.slideshow != null) {
            slideshow = options.slideshow;
            slideshowImagesHeight = options.slideshowImagesHeight || 300;
            slideshowImages = slideshow.getElements("img.slideShowImage");
            slideshowImagesCount = 0;
            slideshowArrowControls = options.slideshowArrowControls;
            slideShowNumberControls = options.slideShowNumberControls;
            previousArrow = options.previousArrow;
            nextArrow = options.nextArrow;

            slideshowFunc = function() {
                ++slideshowImagesCount;
                if (slideshowImagesCount < slideshowImages.length) {
                    slideshowImages[slideshowImagesCount - 1].fade("out");
                    slideshowNumberControlsArr[slideshowImagesCount - 1].removeClass("active");

                    (function() {
                        slideshowImages[slideshowImagesCount].fade("in");
                        slideshowNumberControlsArr[slideshowImagesCount].addClass("active");
                    }).delay(300);
                } else {
                    slideshowImages[slideshowImagesCount - 1].fade("out");
                    slideshowNumberControlsArr[slideshowImagesCount - 1].removeClass("active");

                    (function() {
                        slideshowImages[0].fade("in");
                        slideshowNumberControlsArr[0].addClass("active");
                        slideshow.setProperty("slideShowNum", 0);
                        slideshowImagesCount = 0;
                    }).delay(300);
                }
            }

            addControls();
            startShow();
        }
    };

    var addControls = function() {
        //previousArrow.addEvent("click", function() { previousSlide(); });
        //nextArrow.addEvent("click", function() { nextSlide(); });
        //slideshowArrowControls.setStyles({ top: eval("-" + (slideshowImages.length * slideshowImagesHeight - (slideshowImagesHeight / 2) + 25)) });
        slideShowNumberControls.setStyles({top: eval("-" + ((slideshowImages.length - 1) * slideshowImagesHeight) - 20)});

        slideshowImages.each(function(slideshowImg, index){
           new Element("li", {
               "class": "slideshowNumber clickable " + ((index == 0) ? "active" : "inactive")
               ,html: index + 1
               ,events: {click: function() {
                    goToSlide(slideshowImg.getProperty("slideshowImgNum").toInt());
               }}
           }).inject(slideShowNumberControls);
        });

        slideshowNumberControlsArr = slideShowNumberControls.getElements("li");
    };

    var goToSlide = function(slideshowImgNum) {
        clearInterval(slideshowTimer);
        slideshowImages.fade("out");
        slideshowNumberControlsArr.removeClass("active");

        (function() {
            slideshowImages[slideshowImgNum - 1].fade("in");
            slideshowNumberControlsArr[slideshowImgNum - 1].addClass("active");
            slideshowImagesCount = slideshowImgNum;
            slideshowTimer = slideshowFunc.periodical(8000);
        }).delay(300);
    };

    var startShow = function() {
        slideshowImages.each(function(slideshowImage, index) {
            slideshowImage.setStyles({
                position: "relative"
                ,top: eval("-" + (index * slideshowImagesHeight))
                ,left: 0
                ,visibility: "hidden"
                ,opacity: (index == 0) ? 1 : 0
            });
        });

        slideshowTimer = slideshowFunc.periodical(8000);
    };

    var nextSlide = function() {
        clearInterval(slideshowTimer);
        slideshowImages[slideshowImagesCount].fade("out");
        slideshowNumberControlsArr[slideshowImagesCount].removeClass("active");

        (function() {
            slideshowImages[slideshowImagesCount + 1].fade("in");
            slideshowNumberControlsArr[slideshowImagesCount + 1].addClass("active");
            slideshowImagesCount = slideshowImagesCount + 1;
            slideshowTimer = slideshowFunc.periodical(8000);
        }).delay(300);
    };

    var previousSlide = function() {
        clearInterval(slideshowTimer);
        slideshowImages[slideshowImagesCount].fade("out");
        slideshowNumberControlsArr[slideshowImagesCount].removeClass("active");

        (function() {
            var fadeInImageCount = slideshowImagesCount - 1
                ,newImageCount = (fadeInImageCount < 0) ? slideshowImages.length - 1 : fadeInImageCount;

            slideshowImages[newImageCount].fade("in");
            slideshowNumberControlsArr[slideshowImagesCount - 1].addClass("active");
            slideshowImagesCount = newImageCount;
            slideshowTimer = slideshowFunc.periodical(8000);
        }).delay(300);
    };

    return {
        initialize: initialize
        ,nextSlide: nextSlide
        ,previousSlide: previousSlide
    }
})();

var ClientLoginAPI = (function() {
    var showClientLoginForm = function() {
        var clientLoginWrapper = $("ClientLogin"), form = $(".ClientLoginForm");
    };

    return {
        showClientLoginForm: showClientLoginForm
    }
})();

window.addEvent("domready", function() {
  SlideshowAPI.initialize({
      slideshow: $("SlideShow")
      ,slideshowArrowControls: $("SlideShowArrowControls")
      ,slideShowNumberControls: $("SlideShowNumberControls")
      //,previousArrow: $("PreviousArrow")
      //,nextArrow: $("NextArrow")
  });

  TwitterFeedAPI.initialize();
  //PageIndicatorAPI.initialize();
});

