/**
 * canongate.js
 *
 * @author      Alexandru Margineanu (alex.margineanu@redboxdigital.com)
 * @copyright   Redbox Digital
 */

document.observe("dom:loaded", function () {
    canongate.init();
});

var canongate = function () {

    var baseUrl = null;
    var skinUrl = null;
    var logo = null;
    var overlay = null;
    var url = null;
    var functionList = null;

    return {
        init: init,
        setBaseUrl: function(url){
            this.baseUrl = url;
            this.functionList = [];
            this.url = location.href;
            this.logo = url + 'images/logo-footer.gif';
        },
        setSkinUrl: function(url){
            this.skinUrl = url;
        },
        hide: function (e) {
            if ($(e)) $(e).style.display = 'none';
        },
        bringBack: function (e) {
            if ($(e)) $(e).style.left = 0;
        },
        move: function (e) {
            if ($(e)) $(e).style.left = '-999999px';
        },
        bindThumbnails: function () {
            $$(".more-views img").each(this.zoom);
        },
        isActive: function (e) {
            if ($(e) && $(e).hasClassName('active')) {
                return true;
            } else {
                return false;
            }
        },
        activeMenu: activeMenu,
	menuDropdown: menuDropdown,
        selectedDropdown: selectedDropdown,
        zoom: zoom,
        addHomeLink: addHomeLink,
        catalogCategoryView: rollover,
        catalogProductView: catalogProductView,
        checkoutCartIndex: rollover,
        rollover: rollover,
        categoryAuthors: categoryAuthors,
        coverflowLetterFilter: coverflowLetterFilter,
        coverflowLetterSort: coverflowLetterSort,
        coverflowReleasedateSort: coverflowReleasedateSort,
        coverflowReset: coverflowReset,
        changeHeader: changeHeader,
        changeBgheader: changeBgheader,
        identifyModule: identifyModule,
        toCamelCase: toCamelCase,
        isFunction: isFunction,
        showPopup: showPopup,
        hidePopup: hidePopup,
        setImageForDownload: setImageForDownload
    };




        function init() {
            this.overlay = $('overlay');
            this.addHomeLink();
            this.menuDropdown();
            canongate.identifyModule();
        }


        /**
         * Displays specified container
         * and overlay
         */
        function showPopup(container){
            var _w = $(container).getWidth();
            var _left = (getWindowWidth() - _w) / 2 + 'px';

            if($(container).style.display == "none") {
                $(container).style.left = _left;
                $(container).style.display = "block";
                this.overlay.style.display = "block";
            } else {
                $(container).style.display = "none";
                this.overlay.style.display = "none";
            }
        }



        /**
         * Hides single or multiple containers
         * and overlay
         */
       function hidePopup(container){
           if(is_array(container)){
               for(i=0; i<container.length; i++){
                   $(container[i]).style.display = "none";
               }
           } else {
                $(container).style.display = "none";
           }
            this.overlay.style.display = "none";
        }




        /**
        * Init() the authors page functionality
        */
        function categoryAuthors(){
            $$('.accordion_headings').each(function (h) {
                    var original = $(h).readAttribute('rel');
                    h.hover(
                    function () {
                        if(!h.hasClassName('header_highlight')) h.update('Click to expand');
                    },
                    function () {
                        h.update(original);
                    });
            });
        }
        

        function addHomeLink(){
            $('home-link').observe("click", function () {
                $(this).setAttribute('title', 'Home Page');
                setLocation(canongate.baseUrl);
            });
        }


		/**
		 * When hovering over a parent menu item,
		* show the dropdown corresponding to that item
		 */

		function menuDropdown() {
                        var closeMenu = false;
			$$('#nav .drop').each(function (menu) {
                        var cid = 'subnav-' + $(menu).readAttribute('rel');
                        menu.hover(
				function () {
                                        if(closeMenu) clearTimeout(closeMenu);
					$$('.subnav').invoke('setStyle', {
						'left': '-9999999px'
					});
                                        var l = 0;
					if ($(cid)) {
						$(cid).style.left = l + 'px';
					}
				},
				function () {                                 
                                        closeMenu = setTimeout(function(){
                                            canongate.move(cid);
                                        },500);
				});
			});
                        $$('.nav-container .subnav').each(function (subnav) {
				subnav.hover(
                                    function () {
                                            if(closeMenu) clearTimeout(closeMenu);
                                    },
                                    function(){
                                            closeMenu = setTimeout(function(){
                                                canongate.move(subnav);
                                            }, 500);

                                    }
                                );
			});
		}		




        /**
        * Show hidden container on
        * rollover
        */
        function rollover() {
            setTimeout(function(){
                $$('#store-grid li.previewcart').each(function(e) {
                    var id = $(e).readAttribute('rel');
                    var cid = $($(e).readAttribute('rel'));
                    e.hover(
                        function() {
                            if (cid) cid.style.left = '-12px';
                            canongate.move($('heading-' + id));
                        },
                        function() {
                            canongate.move(cid);
                            canongate.bringBack($('heading-' + id));
                        }
                    );
                });
            }, 100);
        }


        /**
         * Finds the active menu based on the
         * current URL and marks it as active
         */
        function activeMenu(cssSelector){
                var flagged = 0;                
                $$(cssSelector).each(function(e){
                    var url = e.readAttribute('href');
                    var container = e.up('li');
                    if(canongate.url == url) {
                        container.addClassName('active');
                        flagged = 1;
                    }
            });
            if(flagged == 0 && !string(canongate.url).contains('/customer/')) {
                $('nav-home-link').addClassName('active');
            }
        }


        function string(subject){
            return {
                contains: function (val){
                    if(subject.indexOf(val) !== -1) {
                        return true;
                    } else {
                        return false;
                    }
                }
            };
        }



        /**
         * Marks a dropdown as selected based
         * on the current URL 
         */
        function selectedDropdown(cssSelector){
                $$(cssSelector).each(function(e){
                    var url = e.readAttribute('value');
                    if(canongate.url == url) {
                        e.setAttribute('selected', 'selected');
                    }
            });
        }


        function changeHeader(img) {
            $('wrapper-inside').setStyle({
                backgroundImage: 'url('+ img +')'
            });
        }
        
        function changeBgheader(img) {
            $('wrapper').setStyle({
                backgroundImage: 'url('+ img +')'
            });
        }


        function catalogProductView() {
            canongate.rollover();
            $$('.block-related-icons li').each(function (icon) {
                    var path = $(icon).readAttribute('rel');
                    icon.hover(
                        function () {
                                $(icon).down('a img').setAttribute("src", path);
                        },
                        function(){                                
                                $(icon).down('a img').setAttribute("src", str_replace('_over', '', path));
                        }
                    );
            });
        }



    /**
     * Zoom the image by changing its source
     * with the large version
     */

    function zoom(element) {
        var path = $(element).readAttribute('rel');
        element.observe("click", function () {
            $("image").setAttribute("src", path);
        });
    }


    function coverflowReleasedateSort(){
            var reset = $('releasedate');
             if(!$('alphabetical').checked) {
                 reset.writeAttribute("checked", "checked");
             }
            reset.observe('click', function () {
                $('coverflow-frame').src = $('coverflow-frame').readAttribute('rel');
            });
    }

    function coverflowLetterSort(){
            var initurl = null;
            var abc = $('alphabetical');
            abc.observe('click', function () {
                initurl = $('coverflow-frame').readAttribute('src');
                if(initurl.indexOf('?') !== -1) {
                    initurl += '&sort=abc';
                } else {
                    initurl += '?sort=abc';
                }
                console.log(initurl);
                $('coverflow-frame').src = initurl;
            });
    }


    function coverflowLetterFilter(){
            var coverflowFrame = $('coverflow-frame');
            var url = null;
            $$('.sort-letters a').each(function(element){
              $(element).setStyle({ fontSize: '12px' });
              element.observe('click', function () {
              		$('showall').setStyle({ display: 'inline' });
                    var letter = $(element).readAttribute('rel');
            		$$('.sort-letters a').each(function(subelement){
              			$(subelement).setStyle({ fontSize: '12px' });
              		});
                    $(element).setStyle({ fontSize: '14px' });
                    if($('alphabetical').checked) {
                        url = coverflowFrame.readAttribute('rel') + '?letter=' + letter;
                    } else {
                        url = coverflowFrame.readAttribute('rel') + '?letter=' + letter + '&sort=abc';
                    }
                    coverflowFrame.src = url;
                });
        });
    }

    function coverflowReset(){
    	$('showall').setStyle({ display: 'none' });
         $('coverflow-frame').src = $('coverflow-frame').readAttribute('rel');
    }

	function isFunction(f) {
		return (typeof(canongate[f]) == typeof(Function));
	}

	function identifyModule(){
		var classes = $w($('body').className);
		classes.each(function(f) {
			canongate.toCamelCase(f);
		});
                this.functionList.each(function(f){
			if(canongate.isFunction(f)){
				canongate[f](); //execute function if found
			 }
		});
	}


	function toCamelCase(data){
                var pos = data.indexOf('-');
		if(pos !== -1) {
                        if(data[pos+1] !== undefined) {
                            var temp_string = str_replace('-' + data[pos+1], data[pos+1].toUpperCase(), data);
                            canongate.toCamelCase(temp_string); //reiterate
                        }
		} else {
			this.functionList.push(data);
		}
	}



        function setImageForDownload(file) {
            Recaptcha.reload();
            Mage.Cookies.set('highres_image',  this.baseUrl + 'media/catalog/product/' + file);
        }

}();
