/****************************
Global variables
****************************/
var trainingTypeRegex = /\b(White|Red|Blue|Yellow|Green)\b/;
var trainingTypeHoverRegex = /\b(White|Red|Blue|Yellow|Green)Hover\b/;
var sats = {}

/****************************
Startup script
****************************/

sats.startup = function() {

    //Hide submit button for js-enabled browsers
    $$('#searchForm .submit', '#quickScheduleLink .submit').each(
        function(item) {
            item.style.display = 'none';
        }
    );

    //Add event handler for quick schedule form
    $$('#quickScheduleLink select', '#CenterScheduleChooser select').addEvent('change', function(e) {
        this.form.submit();
    });

    //Add event handler for select language form
    $$('#languageChooser select').addEvent('change', function(e) {
        location.href = this.value;
    });

    //Add event handler for mouseover BigCallout - startpage
    if ($E('.callout .BigCallOut') != null) {
        var item = $E('.callout .BigCallOut');

        item.addEvent('click', function(e) {
            if (item.getElement('a') != null) document.location.href = item.getElement('a').href;
        });
        item.addEvent('mouseover', function(e) {
            item.addClass("calloutMouseOverPointer");
            item.addClass("calloutMouseOverBackground2");

        });
        item.addEvent('mouseout', function(e) {
            item.removeClass("calloutMouseOverPointer");
            item.removeClass("calloutMouseOverBackground2");
        });
    }

    //Add event handler for mouseover callout
    $$('.callout div .SmallCallOut').each(function(item) {
        item.addEvent('click', function(e) {
            if (item.getElement('a') != null) document.location.href = item.getElement('a').href;
        });
        item.addEvent('mouseover', function(e) {
            item.addClass("calloutMouseOverPointer");
            item.addClass("calloutMouseOverBackground1");
            item.getElement('h2').addClass("calloutMouseOverColor");
            item.getElement('a').addClass("calloutMouseOverColor");
        });
        item.addEvent('mouseout', function(e) {
            item.removeClass("calloutMouseOverPointer");
            item.removeClass("calloutMouseOverBackground1");
            item.getElement('h2').removeClass("calloutMouseOverColor");
            item.getElement('a').removeClass("calloutMouseOverColor");
        });
    });

    //Add logout-buttons
    var iframe1 = $E('#findAndBookClasses iframe');
    if ($defined(iframe1))
        sats.addLogoutButton(iframe1);
    var iframe2 = $E('.CenterSchedulePage iframe');
    if ($defined(iframe2))
        sats.addLogoutButton(iframe2);

    //Add event handler for mouseover callout
    if ($E('#calloutLeadGeneration') != null) {
        var item1 = $E('#calloutLeadGeneration');
        var sticker = item1.getElement('.sticker');

        sticker.addEvent('click', function(e) {
            document.location.href = item1.getElement('a').href;
        });

        sticker.addEvent('mouseover', function(e) {
            item1.addClass("calloutMouseOverPointer");
        });
        item1.addEvent('mouseout', function(e) {
            item1.removeClass("calloutMouseOverPointer");
        });
    }
    /*
    if ($E('#calloutWebSalesLeadGeneration') != null) {
    var item1 = $E('#calloutWebSalesLeadGeneration');
    var sticker = item1.getElement('.offerButton');

        sticker.addEvent('click', function(e) {
    document.location.href = item1.getElement('a').href;
    });

        sticker.addEvent('mouseover', function(e) {
    item1.addClass("calloutMouseOverPointer");
    });
    item1.addEvent('mouseout', function(e) {
    item1.removeClass("calloutMouseOverPointer");
    });
    }
    */

    $$('.clickable').each(function(item) {
        item.addEvent('click', function(e) {
            if (item.getElement('a') != null) document.location.href = item.getElement('a').href;
        });
    });

    //Add button behaviors
    $$('a.btnLook1', 'a.leadGeneration').each(sats.makeButton1);

    //Add accordion
    sats.addAccordion();

    //Add center start page "event accordion"
    sats.addEventAccordion();

    //Add schedule scripts
    sats.addScheduleScripts();

    //Add class item scripts
    //sats.addClassItemScripts();

    //Add login popup scripts
    sats.addLoginPopupScripts();

    //Add banner script
    sats.addBannerScript();

    sats.showRequired();
}

// Show all required stars on Shop step 3
sats.showRequired = function() {
    $$('span.required').each(function(value, key) {
        value.set({
            'styles': {
                'visibility': 'visible'
                }
            });
        });
    }

sats.addBannerScript = function() {
    if($defined($E('.startPageBanner'))) {
        var wrapper = $E('.startPageBanner');
        wrapper.setStyle('cursor', 'pointer');
        wrapper.addEvent('click', function() {
            if($defined(wrapper.getElement('a')))
                document.location.href = wrapper.getElement('a').href;
        });
    }
}

sats.addLoginPopupScripts = function() {
    var loginButton = $E('.loginButton');
    if($defined(loginButton)) {
        var wrapperEl = $E('.notLoggedIn');
        var closeButton = $E('.closeButton');
        if($defined(wrapperEl)) {
            loginButton.addEvent('click', function(e) {
                new Event(e).stop();
                wrapperEl.addClass('opened');
            });
            closeButton.addEvent('click', function(e) {
                wrapperEl.removeClass('opened');
            });
        }
    }
}
sats.itemIsExpanded = function(item, endWidth) {
    return item.getStyle('width').toInt()==endWidth;
}
sats.getTrainingTypeCssClass = function(item) {
    return trainingTypeRegex.exec(item.className)[0];
}
sats.getTrainingTypeHoverCssClass = function(item) {
    return sats.getTrainingTypeCssClass(item) + "Hover";
}
sats.addScheduleScripts = function() {
    var lastOpened;
    $ES('.schedule .scheduleItem').each(function(item) {
        var dialog = new sats.Dialog(item.id);
        var elementCoords = item.getCoordinates();
        item.addEvent('mouseenter', function(e) {
            item.addClass(sats.getTrainingTypeHoverCssClass(item));
            e = new Event(e);
            dialog.show({
                x: e.page.x,
                y: e.page.y
            });
        });
        item.addEvent('mouseleave', function() {
            item.removeClass(sats.getTrainingTypeHoverCssClass(item));
            dialog.hide();
        });
        item.addEvent('click', function() {
            window.location.href = mySatsLinkURL;
        })
        if(!window.ie6)
            item.addEvent('mousemove', function(e) {
                e = new Event(e);
                dialog.moveTo({
                    x: e.page.x,
                    y: e.page.y
                })
            });
    });
}

sats.addLogoutButton = function(frameVar) {
        var buttonEl = new Element('span');
        buttonEl.className = "logoutLink";
        buttonEl.setText(logoutText);
        buttonEl.addEvent('click', function(e) {
            frameVar.src = "http://booking.sats.com/eclub2-client-web/LogoutAction.do?countryid="+sats.getCurrentCountryCode();
            buttonEl.remove();
            buttonEl2.remove();
        });
        var buttonEl2 = buttonEl.clone();
        if(frameVar.id == 'schedule') {
			buttonEl.addClass('logoutLink3');
			buttonEl2.addClass('logoutLink2');
		}
        buttonEl2.cloneEvents(buttonEl);
        buttonEl.injectBefore(frameVar);
        buttonEl2.injectAfter(frameVar);
}

/**
Write style to submit button
*/
sats.cssStyle = function() {
	var str = "";
	str = "<style type=\"text/css\">";
	str += "#searchForm .submit {"
	str += "display: none;"
	str += "}"
	str += "#CenterScheduleChooser .submit {"
	str += "display: none;"
	str += "}"
	str += "</style>"
	document.write(str);
}
sats.cssStyle();

sats.getCurrentCountryCode = function() {
    var currentLocation = document.location.href;
    if(currentLocation.match(/\/se\//)) return 'SE';
    else if(currentLocation.match(/\/dk\//)) return 'DK';
    else return 'NO';
}

/**
Adds animations to a button of type 'btnLook1'
*/
sats.makeButton1 = function(item) {
        item.addEvent('mouseenter', function(e) {
            this.addClass('btnActive');
            this.effect('text-indent', {duration: 150}).start(10);
        });
        item.addEvent('mouseleave', function(e) {
            this.removeClass('btnActive');
            this.effect('text-indent', {duration: 150}).start(0);
        });
}




/**
Adds an accordion to center opening hours
*/
sats.addAccordion = function() {
	if($E('div#openHoursCenter') != null) {
        $ES('#openHoursCenter h2').each(function(item) {
            item.addClass('clickable');
        });
	    new Accordion('#openHoursCenter h2', '#openHoursCenter div', {
		    onActive: function(toggler, element) {
			    toggler.addClass('active');
		    },
		    onBackground: function(toggler, element) {
			    toggler.removeClass('active');
		    },
		    alwaysHide: false
	    });
    }
}
/**
Adds an accordion to pt-gallery and events-lists
*/
sats.addEventAccordion = function() {
	if($E('.list1') != null) {
        $ES('.list1 h3').each(function(item) {
            item.addClass('clickable');
        });
	    new Accordion('.list1 h3', '.list1 div.accWrap', {
		    onActive: function(toggler, element) {
			    toggler.addClass('active');
		    },
		    onBackground: function(toggler, element) {
			    toggler.removeClass('active');
		    },
		    alwaysHide: false
	    });
    }
}
sats.addClassItemScripts = function() {
    var classItems = $ES('.classItem');
    if($defined(classItems)) {
        classItems.each(function(item, index) {
            item.addClass('clickable');
            var videoPath = item.getElement('input.videoPath').value;
            var contentURL = "/proxies/Video.aspx?flv="+videoPath;
            var videoDialog = new sats.VideoDialog('video_'+index, contentURL);
            item.addEvent('click', function(e) {
                videoDialog.show();
            })
        });
    }
}

//Add startup (domready) handler
window.addEvent('domready', sats.startup);


/****************************
Classes
****************************/
sats.Dialog = new Class({
    initialize: function(scheduleItemId) {
        this.scheduleItemId = scheduleItemId;
        this.id = scheduleItemId + "_dialog";
        this.rootEl = new Element("div");
        this.rootEl.className = "shoutBox";
        this.rootEl.setHTML($(scheduleItemId).innerHTML);
        this.rootEl.getElement('h3').setStyle('width', 'auto');
        this.effect = this.rootEl.effect('opacity');
    },
    show: function(coords) {
        if(!this.isVisible()) {
            this.effect.set(0);
            this.moveTo(coords);
            $E("body").appendChild(this.rootEl);
            this.effect.start(1);
        }
    },
    moveTo: function(coords) {
            this.rootEl.setStyles({
                top: (coords.y.toInt()-180),
                left: (coords.x.toInt()-50)
            });
    },
    hide: function() {
        if(this.isVisible())
            this.effect.stop();
            this.rootEl.remove();
    },
    isVisible: function() {
        return $defined($(this.id));
    }
});

sats.VideoDialog = new Class({
    options: {
        width: 370,
        height: 330,
        draggable: true,
        className: 'dialog'
    },
    initialize: function(id, contentURL, options) {
        this.setOptions(options);
        this.id = id;
        this.rootEl = this.createRootDiv();
        this.contentURL = contentURL;
    },
    createRootDiv: function() {
        var rootEl = new Element('div');
        rootEl.id = this.id;
        rootEl.className = this.options.className;
        rootEl.setStyle('width', this.options.width);
        rootEl.setStyle('height', this.options.height);
        rootEl.setStyle('position', 'absolute');
        rootEl.setStyle('z-index', 100);
        rootEl.setHTML('<div class="closeButton"></div><div class="contentElement"></div>');  
        rootEl.setStyle('top', Math.round(window.getHeight() - this.options.height)/2);
        rootEl.setStyle('left', Math.round(window.getWidth() - this.options.width)/2);
        if(this.options.draggable) {
            rootEl.makeDraggable();        
        }

        var closeEl = rootEl.getElement("div.closeButton");
        var self = this;
        closeEl.addEvent('click', function() {
            self.close();
        });

        rootEl.appendChild(closeEl);
        return rootEl;
    },
    getContentElement: function() {
        return this.rootEl.getElement("div.contentElement");
    },
    show: function() {
        if(!this.isVisible()) {
            $E('body').appendChild(this.rootEl);
            var self = this;
            var ajax = new Ajax(this.contentURL, {method: 'get', onComplete: function() {
                self.getContentElement().setHTML(this.response.text);
            }}).request();
        }
    },
    close: function() {
        if(this.isVisible())
            this.rootEl.remove();    
    },
    isVisible: function() {
        return $defined($(this.id));
    }
});
sats.VideoDialog.implement(new Options());