// Force IE to cache everything
try {document.execCommand('BackgroundImageCache', false, true);} catch(err) {}

// In case any console.logs are left in the code
this.console || (console={log:function(){}});

// Shorthand
var YD = YAHOO.util.Dom;
var YE = YAHOO.util.Event;
var YA = YAHOO.util.Anim;
var YL = YAHOO.lang;

// header search form
YE.onAvailable('inputSearch',function() {
    if(this.value == '') {
        this.value = "Search";
    }
    YE.on(this,'focus',function() {
        if(this.value == "Search") {
            this.value = '';
        }
    });
    YE.on(this,'blur',function() {
        if(this.value == "") {
            this.value = 'Search';
        }
    });
});

// footer contact form
YE.onAvailable('inputContact',function() {
    if(this.value == '') {
        YD.addClass(this,'action');
        this.value = "Sign Up Now";
    }
    YE.on(this,'focus',function() {
        if(this.value == "Sign Up Now") {
            YD.removeClass(this,'action');
            this.value = '';
        }
    });
    YE.on(this,'blur',function() {
        if(this.value == "") {
            YD.addClass(this,'action');
            this.value = 'Sign Up Now';
        }
    });
    
    // Popup panel
    
    YE.on(this,'focus',function() {
        this.blur();
        var contactPanel = new YAHOO.widget.Panel("contactPanel", {
            width: "700px", 
            fixedcenter: true, 
            constraintoviewport: true, 
            underlay: "shadow", 
            close: true,
            visible: true,
            draggable: false,
            modal: true
        });
        contactPanel.setHeader("Give us your email!!!");
        contactPanel.setBody('<iframe src="http://info.control4.com/forms/ContactUs" width="100%" height="500" frameborder="0" style="background-color: white;"></iframe>');
        contactPanel.render(document.body);
        contactPanel.show();
    });
    
});

// header submenu 
YE.onAvailable('hd',function() {
    if(!YAHOO.env.ua.ie || YAHOO.env.ua.ie > 7) {
        var li = YD.getElementsByClassName('hasMenu','li','hd');
        YE.on(li,'mouseover',function(e) {
            var subMenu = YD.getElementsByClassName('subMenu','div',this);
            YD.setStyle(subMenu,'display','block');
        });
        
        YE.on(li,'mouseleave',function(e) {
            var subMenu = YD.getElementsByClassName('subMenu','div',this);
            YD.setStyle(subMenu,'display','none');
        });
    }
});

// Namespace manager
if (typeof Namespace == 'undefined') var Namespace = {};
if (!Namespace.Manager) Namespace.Manager = {};
Namespace.Manager = {
    Register : function(namespace) {
        namespace = namespace.split('.');
        
        if(!window[namespace[0]]) window[namespace[0]] = {};
        
        var strFullNamespace = namespace[0];
        for(var i = 1; i < namespace.length; i++) {
            strFullNamespace += "." + namespace[i];
            eval("if(!window." + strFullNamespace + ")window." + strFullNamespace + "={};");
        }
    }
};


Namespace.Manager.Register("Utility.Class"); 


Utility.Class.trim = function(str) {
    return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
};

Utility.Class.removeNode = function(el) {
    if(typeof el == "string") {
        el = YD.get(el);
    }
    YE.purgeElement(el);
    el.parentNode.removeChild(el);
};

Utility.Class.getCloneDimensions = function(el, forceWidth, forceHeight) {
    el = YD.get(el);

    if (!el) {
        return;
    }

    var clone = el.cloneNode(true);
    clone.style.visibility = 'hidden';
    clone.style.width = forceWidth || 'auto';
    clone.style.height = forceHeight || 'auto';
    clone.style.position = 'absolute';
    clone.style.display = 'block';
    
    var cloneParent = el.parentNode;
    cloneParent.appendChild(clone);
    
    var dimensions = YAHOO.util.Region.getRegion(clone);
    dimensions.width = clone.offsetWidth;
    dimensions.height = clone.offsetHeight;
    
    cloneParent.removeChild(clone);
    
    return dimensions;
};


Namespace.Manager.Register("C4");



/* FAQ style pages */
C4.faqs = function(linksEl,sectionsEl) {
    var sectionLiAnchors = YD.getElementsBy(function(node) {
        return true;
    },'a',linksEl);
    
    var sectionAnchors = YD.getElementsBy(function(node) {
        return true;
    },'a',sectionsEl);
    
    var namedSections = {};
    for(var i in sectionAnchors) {
        if(sectionAnchors[i].name != '') {
            namedSections[sectionAnchors[i].name] = YD.getNextSibling(sectionAnchors[i]);
            Utility.Class.removeNode(sectionAnchors[i]);
        }
    }
    
    var sections = [];
    var anchorNames = [];
    for(var i in sectionLiAnchors) {
        var named = sectionLiAnchors[i].href.split('#')[1];
        if(named && namedSections[named]) {
            sections.push(namedSections[named]);
            YD.setStyle(namedSections[named],'display','none');
            YE.on(sectionLiAnchors[i],'click',function(e,section) {
                YD.removeClass(sectionLiAnchors,'pageOn');
                YD.addClass(this,'pageOn');
                YD.setStyle(sections,'display','none');
                YD.setStyle(section,'display','block');
            },namedSections[named]);
        }
    }
    
    // show first faq or whatever they came to find
    var showSection = location.href.split('#')[1];
    if(!showSection || !namedSections[showSection]) {
        showSection = sectionLiAnchors[0].href.split('#')[1];
    }
    else {
        // valid section - scroll them back to the top of the page
        window.scrollTo(0, 0);
    }
    
    for(var i in sectionLiAnchors) {
        var named = sectionLiAnchors[i].href.split('#')[1];
        if(named == showSection) {
            YD.addClass(sectionLiAnchors[i],'pageOn');
            YD.setStyle(namedSections[showSection],'display','block');
        }
    }
};

C4.moreLinks = function(id) {
    var moreInfo = YD.getElementsByClassName('moreInfo', 'p', id);
    for(var i in moreInfo) {
        var hiddenInfo = YD.getNextSibling(moreInfo[i]);
        if(YD.hasClass(hiddenInfo,'hiddenInfo')) {
            YE.on(moreInfo[i],'click',function(e,hiddenInfo) {
                if(YD.getStyle(hiddenInfo,'display') == "block") {
                    YD.getFirstChild(this).innerHTML = "+";
                    YD.setStyle(hiddenInfo,'display','none');
                }
                else {
                    YD.getFirstChild(this).innerHTML = "-";
                    YD.setStyle(hiddenInfo,'display','block');
                }
            },hiddenInfo);
        }
    }
    
}


/* Product Filmstrip */
C4.filmStrip = function(id,Products) {
    
    if(YL.isString(id)) {
        id = YD.get(id);
    }
    
    // create the UL
    
    var ul = document.createElement("ul");
    YD.addClass(ul,'filmstrip');
    
    for(var i in Products) {
    
        var li = document.createElement("li");
        
        var anchor = document.createElement("a");
        anchor.href = Products[i].Href;
        
        var img = new Image();
        
        if(YAHOO.env.ua.ie > 0 && YAHOO.env.ua.ie < 7) {
            img.src = '/img/spacer.gif';
            YD.setStyle(img,'filter','progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+Products[i].ImgSrc+'", sizingMethod="image")');
        }
        else {
            img.src = Products[i].ImgSrc;
        }
        
        var tagline = document.createElement("h4");
        tagline.innerHTML = Products[i].Name;
        
        anchor.appendChild(img);
        anchor.appendChild(tagline);
        li.appendChild(anchor);
        ul.appendChild(li);
        
        YE.on(ul,'mouseover',function(e,obj) {
            //console.log(obj);
        },Products[i]);
        
        if(i == 0) {
            var firstLi = li;
        }
    }
    
    
    id.appendChild(ul);
    
    YD.setStyle(ul,'width',Products.length*firstLi.offsetWidth+"px");
    
    if(ul.parentNode.offsetWidth < ul.offsetWidth) {
    
        YD.addClass(ul.parentNode,'hasScroll');
    
        var scrollLeft = document.createElement("div");
        YD.addClass(scrollLeft,'scrollLeft');
        id.appendChild(scrollLeft);
        
        var scrollRight = document.createElement("div");
        YD.addClass(scrollRight,'scrollRight');
        id.appendChild(scrollRight);
        
        
        var sliderContainer = document.createElement("div");
        YD.addClass(sliderContainer,'sliderContainer');
        
        var slider = document.createElement("div");
        YD.addClass(slider,'slider');
        
        sliderContainer.appendChild(slider);
        id.appendChild(sliderContainer);
        
        var ySlider = YAHOO.widget.Slider.getHorizSlider(sliderContainer, slider, 0, sliderContainer.offsetWidth);
        ySlider.backgroundEnabled = false;
        ySlider.setValue(sliderContainer.offsetWidth/2,true,true,true);
        
        
        var scrolling = {
            'scroll' : false,
            'checkForScroll' : function() {    
                if(this.scroll) {
                
                    var currentX = parseInt(YD.getStyle(ul,'marginLeft'));
                    
                    var slideX = parseInt(YD.getStyle(slider,'left'));
                    
                    var half = sliderContainer.offsetWidth/2;
                    
                    var moveBy = 0;
                    if(slideX < half/3) {
                        moveBy = 45;
                    }
                    else if(slideX < half*(2/3)) {
                        moveBy = 30;  
                    }
                    else if(slideX < half) {
                        moveBy = 5;
                    }
                    else if(slideX < half+(half/3)) {
                        moveBy = -5;
                    }
                    else if(slideX < half+(half*(2/3))) {
                        moveBy = -30;
                    }
                    else{
                        moveBy = -45;
                    }
                    
                    if(currentX+moveBy < 0 && currentX+moveBy > -1*(Products.length*firstLi.offsetWidth)+ul.parentNode.offsetWidth-20) {
                        YD.setStyle(ul,'marginLeft',currentX+moveBy+"px"); 
                    }  
                }
            }
        };
        YL.later(100,scrolling,'checkForScroll',null,true);
        
        
        ySlider.subscribe('slideStart',function() {
            scrolling.scroll = true;
        });
        
        ySlider.subscribe('slideEnd',function() {
            scrolling.scroll = false;
            var putBack = new YAHOO.util.Anim(slider, {
                left: {
                    to: sliderContainer.offsetWidth/2 
                } 
            },.15);
            putBack.animate();
        });
    }
};



/* Highlights Box */
C4.highlightBox = function(id,highlights) {

    // OLD IE 
    if(YAHOO.env.ua.ie > 0 && YAHOO.env.ua.ie < 8) {
        var miniHighlightsList = document.createElement("ul");
        var oldList = YD.get('miniHighlightsList');
        miniHighlightsList.id = 'miniHighlightsList';
        oldList.parentElement.insertBefore(miniHighlightsList,oldList);
        Utility.Class.removeNode(oldList);
    }
           
    for(var i in highlights) {
        var li = document.createElement("li");
        li.innerHTML = '<a href="'+highlights[i].Href+'">'+highlights[i].HTML+'</a>';
        YD.setStyle(li,'background-position','0 '+(i*-50)+'px');
        YE.on(li,'mouseover',function(e,array) {
            var highlight = array[0];
            var count = array[1];
            YD.removeClass(YD.getElementsByClassName('hover', 'li', 'miniHighlightsList'),'hover');
            YD.addClass(this,'hover');
            YD.get('miniHighlightDisplay').innerHTML = highlight.Box;
        },[highlights[i],i]);
        YD.get('miniHighlightsList').appendChild(li);
        
        if(i == 0) {
            YD.addClass(li,'hover');
            YD.get('miniHighlightDisplay').innerHTML = highlights[i].Box;
        }
    }
};



/* Slideshow */
C4.slideshow = function(id,slides) {

    if(YL.isString(id)) {
        id = YD.get(id);
    }
    
    
    var perGroup = 4;
    var showGroup = 1;
    
    function drawThumbs() {
        
        YD.get('thumbs').innerHTML = '';
        var thumbs = slides.slice((showGroup-1)*perGroup,showGroup*perGroup);
        
        /* wire up the thumbs */
        for(var i in thumbs) {
            var thumb = new Image();
            thumb.src = thumbs[i].Thumb;
            YE.on(thumb,'click',function(e,slideInfo) {
                YD.removeClass(YD.getElementsByClassName('selected', 'img', 'thumbs'),'selected');
                YD.addClass(this,'selected');
                
                var mainImage = new Image();
                if(slideInfo.Href) {
                    YD.setStyle(mainImage,'cursor','pointer');
                    YE.on(mainImage,'click',function(e,href) {
                        location.href = href;
                    },slideInfo.Href);
                }
                YD.setStyle(mainImage,'opacity',0);
                YD.addClass(mainImage,'mainImage');
                YE.on(mainImage,'load',function(e,passAlong) {
                    var fadeIn = new YAHOO.util.Anim(this, {
                        opacity: {
                            to: 1
                        } 
                    },.5);
                    fadeIn.onComplete.subscribe(function(status,details,oldMainImage) {
                        Utility.Class.removeNode(oldMainImage);
                    },passAlong);
                    fadeIn.animate();
                },YD.getElementsByClassName('mainImage', 'img', id)[0]);
                YD.get(id).appendChild(mainImage);
                mainImage.src = slideInfo.Main;
                
            },thumbs[i]);
            YD.get('thumbs').appendChild(thumb);
            
            if(i == 0) {
                YD.addClass(thumb,'selected');
                var mainImage = YD.getElementsByClassName('mainImage', 'img', id)[0];
                mainImage.src = thumbs[i].Main;
                if(thumbs[i].Href) {
                    YD.setStyle(mainImage,'cursor','pointer');
                    YE.on(mainImage,'click',function(e,href) {
                        location.href = href;
                    },thumbs[i].Href);
                }
            }
        }
        
        /* preload big slides */
        for(var i in thumbs) {
            if(i != 0) {
                var preload = new Image();
                preload.src = thumbs[i].Main;
            }
        }  
                
        
        /* change some classnames */
        if(showGroup != 1) {
            YD.addClass('arrowUp','more');
        }
        else {
            YD.removeClass('arrowUp','more');
        }
        
        if(showGroup*perGroup < slides.length) {
            YD.addClass('arrowDown','more');
        }
        else {
            YD.removeClass('arrowDown','more');
        }
    }
    
    YE.on('arrowUp','click',function() {
        if(YD.hasClass(this,'more')) {
            showGroup--;
            drawThumbs();
        }
    });
    
    YE.on('arrowDown','click',function() {
        if(YD.hasClass(this,'more')) {
            showGroup++;
            drawThumbs();
        }
    });
    
    drawThumbs();
};

