// 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';
        }
    });
});


// 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");

/* Contact Panel-Popup */
C4.contactPanel = function() {
    if(!C4.contactPanel.singleton) {
        C4.contactPanel.singleton = {};
        C4.contactPanel.singleton.panel = new YAHOO.widget.Panel("contactPanel", {
            width: "700px", 
            fixedcenter: true, 
            constraintoviewport: true, 
            underlay: "shadow", 
            close: true,
            visible: true,
            draggable: false,
            modal: true
        });
        C4.contactPanel.singleton.panel.setHeader("Please complete the fields below and we'll be sure to get back to you:");
        C4.contactPanel.singleton.panel.setBody('<iframe src="http://info.control4.com/forms/ContactUs" width="100%" height="500" frameborder="0" style="background-color: white;"></iframe>');
        C4.contactPanel.singleton.panel.render(document.body);
    }
    else {
        C4.contactPanel.singleton.panel.setBody('<iframe src="http://info.control4.com/forms/ContactUs" width="100%" height="500" frameborder="0" style="background-color: white;"></iframe>');
    }
    C4.contactPanel.singleton.panel.center();
    C4.contactPanel.singleton.panel.show();
}

/* Drivers Panel-Popup */
C4.driversPanel = function() {
    if(!C4.driversPanel.singleton) {
        C4.driversPanel.singleton = {};
        C4.driversPanel.singleton.panel = new YAHOO.widget.Panel("driversPanel", {
            width: "700px", 
            fixedcenter: true, 
            constraintoviewport: true, 
            underlay: "shadow", 
            close: true,
            visible: true,
            draggable: false,
            modal: true
        });
        C4.driversPanel.singleton.panel.setHeader("Search for drivers yo:");
        C4.driversPanel.singleton.panel.setBody('<iframe src="http://info.control4.com/forms/ContactUs" width="100%" height="500" frameborder="0" style="background-color: white;"></iframe>');
        C4.driversPanel.singleton.panel.render(document.body);
    }
    else {
        C4.driversPanel.singleton.panel.setBody('<iframe src="http://info.control4.com/forms/ContactUs" width="100%" height="500" frameborder="0" style="background-color: white;"></iframe>');
    }
    C4.driversPanel.singleton.panel.center();
    C4.driversPanel.singleton.panel.show();
}


/* 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) {

    YAHOO.widget.Carousel.prototype.STRINGS.NEXT_BUTTON_TEXT = "";
    YAHOO.widget.Carousel.prototype.STRINGS.PREVIOUS_BUTTON_TEXT = ""; 


    if(YL.isString(id)) {
        id = YD.get(id);
    }
    
    // create the UL
    
    var ol = document.createElement("ol");
    ol.id = 'carousel';
    
    for(var i in Products) {
    
        var li = document.createElement("li");
        YD.addClass(li,'item');
        
        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);
        ol.appendChild(li);
    }
    
    id.appendChild(ol);
    
    var carousel = new YAHOO.widget.Carousel(id, {
        animation: { speed: 0.5 },
        isCircular : true,
        numVisible: 4,
        revealAmount : 15
    });
    carousel.render(); // get ready for rendering the widget
    carousel.show();   // display the widget
    
};



/* 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 ol = document.createElement("ol");
    ol.id = 'carousel';
    
    for(var i in slides) {
    
        var li = document.createElement("li");
        YD.addClass(li,'item');
        
        var img = new Image();
        YD.addClass(img,'slides');
        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="'+slides[i].Thumb+'", sizingMethod="image")');
        }
        else {
            img.src = slides[i].Thumb;
        }
        li.appendChild(img);
        ol.appendChild(li);
    }
    id.appendChild(ol);
    
    /* preload big slides */
    for(var i in slides) {
        if(i != 0) {
            var preload = new Image();
            preload.src = slides[i].Main;
        }
    } 
    
    
    
    var carousel = new YAHOO.widget.Carousel(id, {
        animation: { speed: 0.5 },
        numVisible : 4,
        isVertical : true,
        autoPlayInterval: 2000,
        navigation : {
            prev : 'arrowUp',
            next : 'arrowDown'
        }
    });

    
    carousel.on("itemSelected", function(i) {
        var slideInfo = slides[i];
        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('slideshow').appendChild(mainImage);
        mainImage.src = slideInfo.Main;
    });
    
    
    // navigation stuff
    if(slides.length > 4) {
        YD.addClass('arrowDown','more');
    }
    carousel.on("afterScroll", function (obj,slides) {
        if(obj.first == 0) {
            YD.removeClass('arrowUp','more');
        }
        else {
            YD.addClass('arrowUp','more');
        }
        if(obj.last >= slides.length-1) {
            YD.removeClass('arrowDown','more');
        }
        else {
            YD.addClass('arrowDown','more');
        }
    },slides);
    

    carousel.render();
    carousel.show();
    
    // auto go through the slideshow
    var slideshowTimer = setInterval(function() {
        // awful hack
        var items = YD.getElementsByClassName('item', 'li', 'slideshow');
        if(YD.hasClass(items.pop(),'yui-carousel-item-selected')) {
            carousel.scrollTo(0);
            carousel.set("selectedItem", carousel._getSelectedItem(0));
        }
        else {
            carousel.selectNextItem();
        }
    },5000);
    var cancelTimerArray = YD.getElementsByClassName('slides', 'img', id);
    cancelTimerArray.push(YD.get('arrowUp'));
    cancelTimerArray.push(YD.get('arrowDown'));
    YE.on(cancelTimerArray,'click',function(e,slideshowTimer) {
        clearInterval(slideshowTimer);
    },slideshowTimer);
};

