Element.implement({
    hidden: function(){
        try {
            var hidden = this.getStyle('display') == 'none' || this.getStyle('visibility') == 'hidden' || this.getStyle('opacity') == 0 || this.hasClass('hide');
        } 
        catch (e) {
            return true;
        }
        return hidden;
    },
    toggle: function(){
        return this[this.hidden() ? 'show' : 'hide']();
    },
    hide: function(display){
        return this.addClass('hide');
    },
    show: function(display){
        return this.removeClass('hide');
    }
});

var domtree = $('wrapper');

var scj = {
    clickElement: function(elementId){
        var id = elementId;

        //$(id).fireEvent('click');
        /*if (navigator.userAgent.indexOf('Firefox') != -1 && navigator.appVersion.indexOf('Mac') != -1)
         $(id).fireEvent('clickOV', $(id), 0);  //without the two parameters it triggers a C is undefined error in
         else */
        //$(id).fireEvent('click');
        $(id).clicker();
        //$('media_close').clicker();
    },
    parseHashInURL: function(){
        var hashvalue = location.hash;
        return hashvalue;
    },
    closeEffectDiv: function(){
        $('media_close').clicker();
    },
    getQueryString: function(parameter){
        var queryString = window.location.search.substring(1);
        var sections = queryString.split("&");
        var store = new Array();
        for (var i = 0; i < sections.length; i++) {
            var pieces = sections[i].split("=");
            if (pieces.length > 1) {
                store[pieces[0]] = pieces[1];
            }
            else {
                store[pieces[0]] = null;
            }
        }
        if (parameter == null) {
            return store;
        }
        if (typeof store[parameter] != undefined) {
            return store[parameter];
        }
        return null;
    },
    getHashQueryString: function(parameter){
        var queryString = window.location.hash;
        var sections = queryString.split("&");
        var store = new Array();
        for (var i = 0; i < sections.length; i++) {
            var pieces = sections[i].split("=");
            if (pieces.length > 1) {
                store[pieces[0]] = pieces[1];
            }
            else {
                store[pieces[0]] = null;
            }
        }
        if (parameter == null) {
            return store;
        }
        if (typeof store[parameter] != undefined) {
            return store[parameter];
        }
        return null;
    },
    toggleContent: function(scope, options){
        if (!scope.getElements('div[class=' + options.togglerClass + ']')) 
            return;
        
        var togglers = scope.getElements('.' + options.togglerClass);
        togglers.each(function(toggler){
            var togglerParent = toggler.getParents('.togParent')[0];
            var target = toggler.getProperty('href') ? toggler.getProperty('href').replace('#', '') : toggler.getElement('a').getProperty('href').replace('#', '');
            var toShow = togglerParent.getElement('div[' + options.toggledAttribute + '=' + target + ']');
            var toHide = togglerParent.getElement('.question a'); //question triggers
            var wrapper = $('wrapper');
            var currentToggler = null;
            toggler.addEvent('click', function(e){
                e = new Event(e).stop();
                
                if (options.single) {
                    closeOthers(toShow, scope.getElements('div[class^=' + options.toggledClass + ']'), toHide, scope.getElements('.question a'));
                }

                toShow.toggle();
                toHide.toggle();

                if (toShow == togglerParent.getLast()) {
                    togglerParent.scrollTop += 50;
                }
                location.hash = target;
                
                if (wrapper.hasClass('definition') || wrapper.hasClass('faq')) {
                    if (wrapper.hasClass('definition')) {
                        currentToggler = scj.getHashQueryString('definition');
                        scj.omniture.trackLink({
                            prop2: 'definition_' + currentToggler,
                            linkType: "o",
                            linkName: 'definition_link_' + currentToggler
                        });
                    }
                    else {
                        currentToggler = scj.getHashQueryString('faq');
                        scj.omniture.trackLink({
                            prop2: 'faq_' + scj.getHashQueryString('faq'),
                            linkType: "o",
                            linkName: 'faq_link_' + currentToggler
                        });
                    }
                }
                
                if (options.onClick)  {
                    options.onClick();
                }
            });
        });
        
        function closeOthers(activeAnswer, answers, activeQuestion, questions){
            answers.each(function(toggled){
                if (toggled !== activeAnswer) {
                    toggled.hide();
                }
            });
            
            questions.each(function(toggled){
                if (toggled !== activeQuestion) {
                    toggled.show();
                }
            });
        }
    }
};

scj.utility = {
    bgWidth: function(){
        var topcontent = $$('.wrapper')[0];
        
        if (screen.width > 1024) {
            topcontent.setStyle('width', 1254);
        }
        else {
            topcontent.setStyle('width', 1003);
        }
    },
    rmAndReplaceElementWithEmptyDIV: function(id){
        var el = $(id);
        if (el) {
            var div = document.createElement("div");
            el.parentNode.insertBefore(div, el);
            el.dispose();
            div.setAttribute("id", id);
        }
    },
    rmAndReplaceSwfWithEmptyDIV: function(id){
        var el = $(id);
        if (el) {
            var div = document.createElement("div");
            el.parentNode.insertBefore(div, el);
            swfobject.removeSWF(id);
            div.setAttribute("id", id);
        }
    },
    currentElement: {
        elementType: null,
        currentVidObj: null,
        currentImgObj: null,
        currentTip: null,
        currentNumListItem: null,
        currentI: null,
        currentJ: null
    },
    loadVideo: function(_id, _swfObj, wmodeoverride){
        /* _id - placeholder div where the swfobject will be created */
        var wmode;
        if (wmodeoverride || arguments.callee.caller.toString().indexOf('this.iframe') !== -1) {
            wmode = 'transparent';
        }
        else {
            wmode = "window";
        }
        if (scj.utility.currentElement.elementType == 'image') {
            scj.utility.rmAndReplaceElementWithEmptyDIV(_id);
        }
        else {
        }
        swfobject.embedSWF("/swf/" + _swfObj.playerName, _id, "426", "295", "9", null, _swfObj.flashvarsObj, {
            wmode: wmode,
            quality: "best",
            allowScriptAccess: "sameDomain",
            allowFullScreen: 'true',
            menu: 'false'
        }, {
            style: "z-index: 990; visibility: visible;"
        });
        scj.utility.currentElement.currentImgObj = null;
        scj.utility.currentElement.currentVidObj = _swfObj;
        scj.utility.currentElement.elementType = 'video';
    },
    loadSpotlightImg: function(_imgObj){
        /* {id: 'video', src: 'i/tips/tipstricks_image_towel1.png'} */
        if (scj.utility.currentElement.elementType == 'image') {
            scj.utility.rmAndReplaceElementWithEmptyDIV(_imgObj.id);
        }
        else {
            scj.utility.currentElement.elementType == 'video';
            scj.utility.rmAndReplaceSwfWithEmptyDIV(_imgObj.id);
        }
        var newImg = new Element('img', {
            id: _imgObj.id,
            src: _imgObj.src,
            style: 'visibility:visible;'
        });
        newImg.replaces(_imgObj.id);
        scj.utility.currentElement.currentImgObj = _imgObj;
        scj.utility.currentElement.currentVidObj = null;
        scj.utility.currentElement.elementType = 'image';
				scj.utility.loadMediaDescription(scj.utility.currentElement.lastClicked);
        scj.utility.currentElement.lastClicked = scj.utility.currentElement.currentTip;
    },
    loadTipImg: function(_imgObj){
        /* used on Tips and Tricks page */
        var el = $(_imgObj.id);
        scj.utility.currentElement.currentImgObj = _imgObj;
        scj.utility.currentElement.currentVidObj = null;
        scj.utility.currentElement.elementType = 'image';
        el.set({
            'id': _imgObj.id,
            'class': 'fleft',
            'src': _imgObj.src
        });

        scj.utility.loadMediaDescription(scj.utility.currentElement.lastClicked);
        scj.utility.currentElement.lastClicked = scj.utility.currentElement.currentTip;
    },
    loadMediaDescription: function(index){
        var allMediaDescriptions = $$('div.mediaDescription');
        allMediaDescriptions.each(function(el){
            el.set('styles', {
                'display': 'none'
            })
        });
        allMediaDescriptions[index].set('styles', {'display': 'block'});
    },
    rollOverState: function(imgElement){
        var imgSrc = imgElement.getProperty('src');

        if (!imgSrc.contains('_over.'))
            imgElement.set('src', imgSrc.replace(/.gif/g, '_over.gif'));
        
    },
    rollOutState: function(imgElement){
        var imgSrc = imgElement.getProperty('src');
        if (imgSrc.contains('_over.')) 
            imgElement.set('src', imgSrc.replace('_over.gif', '.gif'));
    },
    activeState: function(imgElment){
        var imgSrc = imgElement.get('src');
        imgSrc = imgSrc ? imgSrc.replace('_over.', '.') : imgSrc.replace('.', '_over.');
    },
	imgStateBegin: function(){
			scj.utility.currentElement.allStatesImg = $$('.img-states');
			scj.utility.currentElement.allStatesImg.each(function(element, i){
				element.addEvents({
					'mouseenter': rollOverState(element),
					'mouseleave': rollOutState(element)						
				})
			});
	}	
};

scj.dropdown = function(container){
    var sfEls = $(container).getElements('li[class^=top]');
    for (var i = 0; i < sfEls.length; i++) {
        sfEls[i].onmouseover = function(){
            this.className += " hover";
        }
        sfEls[i].onmouseout = function(){
            this.className = this.className.replace(new RegExp(" hover\\b"), "");
        }
    }
};

scj.windowGrid = new Class({
    Implements: [Options, Events],
    options: {
        snapToGrid: true,
        animate: false,
        dependId: 'footer',
        smallSizeClass: 'smallwindow',
        normalSizeClass: 'normalwindow',
        largeSizeClass: 'largewindow',
        minWidth: 1003,
        maxWidth: 1254
    },
    presets: {
        CONTAINER_ID: 'wrapper'
    },
    initialize: function(options){
        this.setOptions(options);
        this.resizeNode = $(this.presets.CONTAINER_ID);
        if (this.options.dependId) {
            this.dependNode = $(this.options.dependId);
            this.dependFX = new Fx.Morph(this.dependNode, {
                duration: 500
            });
        }
        this.widthFX = new Fx.Morph(this.resizeNode, {
            duration: 500
        });
        if (this.options.snapToGrid) {
            this.sizeTimer = this.setWindowSize.periodical(150, this);
        }
        else {
            this.setMaxWidth();
        }
    },
    setMaxWidth: function(){
        if (window.getSize().x < this.options.maxWidth) {
            this.resizeNode.setStyle('width', this.options.minWidth);
        }
        else {
            this.resizeNode.setStyle('width', this.options.maxWidth);
        }
    },
    setWindowSize: function(){
        if (window.getSize().x < this.options.maxWidth) {
            if (this.options.animate && this.resizeNode.getSize().x !== this.options.minWidth) {
                this.widthFX.start({
                    'width': this.options.minWidth
                });
                if (this.dependNode) 
                    this.dependFX.start({
                        'width': this.options.minWidth
                    });
            }
            this.resizeNode.addClass(this.options.normalSizeClass);
        }
        else {
            if (this.options.animate && this.resizeNode.getSize().x !== this.options.maxWidth) {
                this.widthFX.start({
                    'width': this.options.maxWidth
                });
                if (this.dependNode) 
                    this.dependFX.start({
                        'width': this.options.maxWidth
                    });
            }
            this.resizeNode.addClass(this.options.largeSizeClass);
        }
    }
});

scj.radwindow = {
    close: function(){
        var oWindow = null;
        if (window.radWindow) 
            oWindow = window.radWindow;
        else 
            if (window.frameElement.radWindow) 
                oWindow = window.frameElement.radWindow;
        oWindow.Close();
    }
}

scj.omniture = {
    cleartracking: function(){
        s = s_gi(s_account);
        s.events = '';
        s.products = '';
        s.pageName = '';
        s.linkTrackVars = '';
        s.linkTrackEvents = '';
        for (i = 1; i < 51; i++) {
            s['prop' + i.toString()] = '';
            s['eVar' + i.toString()] = '';
        }
        return true;
    },
    track: function(obj){
        scj.omniture.cleartracking();
        var obj = obj ? obj : {};
        for (key in obj) {
            s[key] = obj[key];
        }
        var s_code = s.t();
        if (s_code) 
            document.write(s_code);
    },
    trackLink: function(obj){
        //obj.linkType = o|d|e; 
        scj.omniture.cleartracking();
        for (key in obj) {
            s[key] = obj[key];
            s.linkTrackVars += key + ',';
        }
        if (obj.events) 
            s.linkTrackEvents = obj.events;
        s.tl(this, obj.linkType, obj.linkName);
    }
};