(function() {

var prodSpeed = 10;
var prodDelay = 5000;
var quoteDelay = 8000;
var logoDelay = 3000;

var products;
var productPos;
var prodOffset = 0;
var prodMove;
var prodDir = -1;
var currentProd = 0;

var eventDetails;
var prodScrolling = false;
var quotes;
var currentQuote = 0;
var clients;
var currentClient = 0;

this.openTestimonial = function (id) {
    var url = "http://proedgroup.com/testimonial.aspx?id=" + id;
    window.open(url, "Testimonials", "width=640,height=480,scrollbars=yes,toolbar=no,menubar=no");
};

/* Initialization */
this.init = function (e) {
    setupProducts();
    setupMonthButtons();
    setupContentButtons();
    setupCalendarEvents();
    setupClients();
    setupQuotes();
    
    if (typeof(isIE6) !== "undefined" && isIE6 == true) {
        setupIE6();
    }
    
    for (var i = 0; i < products.length; i++) {
        products[i].style.visibility = "visible";
    }
};

/* ************************************************* */
/* Setup */

function setupProducts() {
    products = getElementsByClass("product", document.getElementById("contentCenter"), "div");
    productPos = [];
    
    if (products.length == 0) {
        return;
    }
    
    var imgWidth = products[0].clientWidth;
    var imgWidth2 = imgWidth / 2;
    var divWidth = document.getElementById("contentCenter").clientWidth;
    var divWidth2 = divWidth / 2;
    var spacing = (divWidth - imgWidth) / 4;
    
    prodMove = spacing + imgWidth;
    
    var x = divWidth2 - imgWidth2;
    for (var i = 0; i < products.length; i++) {
        products[i].style.left = x + "px";
        productPos[i] = x;
        x += spacing + imgWidth;
    }
    
    if (products.length > 1) {
        //setInterval(onProductTick, prodDelay);
    }
}

function setupMonthButtons() {
    document.getElementById("monthBtn1").onclick = function() { onClickMonthBtn(1); return false; };
    document.getElementById("monthBtn2").onclick = function() { onClickMonthBtn(2); return false; };
    document.getElementById("monthBtn3").onclick = function() { onClickMonthBtn(3); return false; };
}

function setupContentButtons() {
    document.getElementById("mainContentBtn1").onclick = function() { onClickContentBtn(1); return false; };
    document.getElementById("mainContentBtn2").onclick = function() { onClickContentBtn(2); return false; };
    document.getElementById("mainContentBtn3").onclick = function() { onClickContentBtn(3); return false; };
    document.getElementById("mainContentBtn4").onclick = function() { onClickContentBtn(4); return false; };
    
    document.getElementById("rightContentBtn1").onclick = function() { onClickRightContentBtn(1); return false; };
    document.getElementById("rightContentBtn2").onclick = function() { onClickRightContentBtn(2); return false; };
}

function setupCalendarEvents() {
    var events = getElementsByClass("event", document.getElementById("contentLeft"), "td");
    eventDetails = getElementsByClass("event-detail", document.getElementById("eventDetails"), "div");
    
    for (var i = 0; i < events.length; i++) {
        events[i].onmouseover = function(e) { onEventMouseOver(this, e); };
        events[i].onmouseout = function(e) { onEventMouseOut(this, e); };
    }
}

function setupClients() {
    clients = getElementsByClass("content-client", document.getElementById("clientContainer"), "div");
    setInterval(onLogoTick, logoDelay);
}

function setupQuotes() {
    quotes = getElementsByClass("content-quote", document.getElementById("shareContainer"), "div");
    setInterval(onQuoteTick, quoteDelay);
    
    if (quotes.length > 1) {
        setInterval(onQuoteTick, quoteDelay);
    }
}

function setupIE6() {
    // Handle mouseovers.
    var li = getElementsByClass("parentmenu", document.getElementById("nav"), "li");
    
    for (var i = 0; i < li.length; i++) {
        li[i].onmouseover = function() { onParentMenuMouseOver(this); };
        li[i].onmouseout = function() { onParentMenuMouseOut(this); };
    }
}

/* ************************************************* */
/*  Event Handling */

function onClickMonthBtn(num) {
    var dateList = "dateList" + num;
    var monthBtn = "monthBtn" + num;
    
    if (num != 1) {
        document.getElementById("dateList1").style.display = "none";
        removeClass("monthBtn1", "month-active");
    }
    
    if (num != 2) {
        document.getElementById("dateList2").style.display = "none";
        removeClass("monthBtn2", "month-active");
    }
    
    if (num != 3) {
        document.getElementById("dateList3").style.display = "none";
        removeClass("monthBtn3", "month-active");
    }
    
    document.getElementById(dateList).style.display = "inline";
    addClass(monthBtn, "month-active");
}

function onClickContentBtn(num) {
    var btn = "mainContentBtn" + num;
    var content;
    
    if (num == 1) {
        content = "contentFaculty";
    } else if (num == 2) {
        content = "contentReprints";
    } else if (num == 3) {
        content = "contentCatalog";
    } else  if (num == 4) {
        content = "contentOffers";
    }
    
    if (num != 1) {
        document.getElementById("contentFaculty").style.display = "none";
        removeClass("mainContentBtn1", "content-button-active");
    }
    
    if (num != 2) {
        document.getElementById("contentReprints").style.display = "none";
        removeClass("mainContentBtn2", "content-button-active");
    }
    
    if (num != 3) {
        document.getElementById("contentCatalog").style.display = "none";
        removeClass("mainContentBtn3", "content-button-active");
    }
    
    
    if (num != 4) {
        document.getElementById("contentOffers").style.display = "none";
        removeClass("mainContentBtn4", "content-button-active");
    }
    
    
    document.getElementById(content).style.display = "";
    addClass(btn, "content-button-active");
}

function onClickRightContentBtn(num) {
    var btn = "rightContentBtn" + num;
    var content;
    
    if (num == 1) {
        content = "contentShare";
    } else if (num == 2) {
        content = "contentClients";
    }
    
    if (num != 1) {
        document.getElementById("contentShare").style.display = "none";
        removeClass("rightContentBtn1", "content-button-active");
    }
    
    if (num != 2) {
        document.getElementById("contentClients").style.display = "none";
        removeClass("rightContentBtn2", "content-button-active");
    }
    
    document.getElementById(content).style.display = "";
    addClass(btn, "content-button-active");
}

this.scrollProductsLeft = function() {
    if (prodScrolling || currentProd == products.length - 1)
        return;
        
    prodScrolling = true;
    prodOffset = prodMove;
    prodDir = -1;
    setTimeout(onProductAnimate, 33);
}

this.scrollProductsRight = function() {
    if (prodScrolling || currentProd == 0)
        return;
    
    prodScrolling = true;
    prodOffset = prodMove;
    prodDir = 1;
    setTimeout(onProductAnimate, 33);
}

function onProductTick() {
    prodOffset = prodMove;
    setTimeout(onProductAnimate, 33);
}

function onProductAnimate() {
    
    for (var i = 0; i < products.length; i++) {
        productPos[i] += (prodSpeed * prodDir);
    }
    
    for (var i = 0; i < products.length; i++) {
        products[i].style.left = productPos[i] + "px";
    }
    
    prodOffset -= prodSpeed;
    
    if (prodOffset <= 0) {
        prodOffset = 0;
        currentProd += -prodDir;
        prodScrolling = false;
        
        if (currentProd >= products.length - 1) {
            document.getElementById("productScrollRightImg").style.display = "none";
        } else if (currentProd <= 0) {
            document.getElementById("productScrollLeftImg").style.display = "none";
        } else {
            document.getElementById("productScrollRightImg").style.display = "inline";
            document.getElementById("productScrollLeftImg").style.display = "inline";
        }
        
        /*
        if (currentProd >= products.length - 1) {
            // Scrolling right
            currentProd = products.length - 1;
            prodDir = 1;
        } else if (currentProd <= 0) {
            // Scrolling left
            currentProd = 0;
            prodDir = -1;
        }
        */
        
    } else {
        setTimeout(onProductAnimate, 33);
    }
}

function onEventMouseOver(sender, e) {
    var id = "event" + sender.id;
    
    for (var i = 0; i < eventDetails.length; i++) {
        if (eventDetails[i].id === id) {
            removeClass(eventDetails[i], "hide");
        } else {
            if (!hasClass(eventDetails[i], "hide")) {
                addClass(eventDetails[i], "hide");
            }
        }
    }
}

function onEventMouseOut(id) {
    for (var i = 0; i < eventDetails.length; i++) {
        if (!hasClass(eventDetails[i], "hide")) {
            addClass(eventDetails[i], "hide");
        }
    }
}

function onQuoteTick() {
    if (!hasClass(quotes[currentQuote], "hide")) {
        addClass(quotes[currentQuote], "hide");
    }
    
    currentQuote++;
    if (currentQuote >= quotes.length) {
        currentQuote = 0;
    }
    
    removeClass(quotes[currentQuote], "hide");
}

function onLogoTick() {
    if (clients.length > 1) {
        if (!hasClass(clients[currentClient], "hide")) {
            addClass(clients[currentClient], "hide");
        }
        
        currentClient++;
        if (currentClient >= clients.length) {
            currentClient = 0;
        }
        
        removeClass(clients[currentClient], "hide");
    }
}

function onParentMenuMouseOver(menu) {
    var submenu = getElementsByClass("submenu", menu, "ul");
    
    if (submenu.length == 0) {
        submenu = getElementsByClass("submenu", menu, "div");
    }
    
    if (submenu.length > 0) {
        submenu[0].style.display = "block";
    }
}

function onParentMenuMouseOut(menu) {
    var submenu = getElementsByClass("submenu", menu, "ul");
    
    if (submenu.length == 0) {
        submenu = getElementsByClass("submenu", menu, "div");
    }
    
    if (submenu.length > 0) {
        submenu[0].style.display = "none";
    }
}

/* ************************************************* */
/* Utils */

// From http://www.dustindiaz.com/getelementsbyclass/
function getElementsByClass(searchClass,node,tag) {
    var classElements = new Array();
    
    if (node == null) {
        node = document;
    }
    
    if (tag == null) {
        tag = '*';
    }
    
    var els = node.getElementsByTagName(tag);
    var elsLen = els.length;
    var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
    
    for (i = 0, j = 0; i < elsLen; i++) {
        if ( pattern.test(els[i].className) ) {
            classElements[j] = els[i];
            j++;
        }
    }
    
    return classElements;
}

function hasClass(element, cls) {
    var regex = new RegExp("(\\s|^)" + cls + "(\\s|$)");
    
    if (element.className.match(regex)) {
        return true;
    } else {
        return false;
    }
}

function addClass(element, newClass) {
    if (typeof(element) === "string") {
        document.getElementById(element).className += " " + newClass;
    } else if (typeof(element) === "object") {
        if (typeof(element.className !== "undefined")) {
            element.className += " " + newClass;
        }
    }
}

function removeClass(element, remClass) {
    var regex = new RegExp("(\\s|^)" + remClass + "(\\s|$)");
    
    if (typeof(element) === "string") {
        document.getElementById(element).className = document.getElementById(element).className.replace(regex, " ");
    } else if (typeof(element) === "object") {
        if (typeof(element.className !== "undefined")) {
            element.className = element.className.replace(regex, " ");
        }
    }
}

}());
