//
if (!FLSmidth) var FLSmidth = {};
if (!FLSmidth.Tracking) FLSmidth.Tracking = {};

FLSmidth.Accordion = function(id)
{
    this.Accordion = function()
    {
        // accordion effect on frontpage navigation
        var subs = jQuery(id).find('li h2');
        
        // open slideOut div when ShowSlideOut link is clicked.
        var slideOutTrigger = subs.closest("li").find(".showSlideOut");
        slideOutTrigger.click(function()
        {
            var slideOut = jQuery('.slideOut');
            
            if (!slideOut.is(":visible"))
            {
                if (jQuery.browser.msie && jQuery.browser.version.substr(0, 1) < 7)
                {
                    slideOut.fadeIn(500);
                }
                else
                {
                    slideOut.show("slide", { direction: 'left' }, 500);
                }
            }   
            return false;
        });
        
        
        subs.bind('click', function(e)
        {
            if (subs.closest("li").is(":animated") || jQuery(".slideOut").is(":animated"))
                return false;
                
            var currentSub = jQuery(e.target).closest('li');

            if (!currentSub.children('.sub').is(':visible'))
            {
                for (var i = 0; i < subs.length; i++)
                {
                    var sub = jQuery(subs[i]).closest("li").find(".sub");

                    if (currentSub != sub)
                    {
                        if (sub.is(':visible'))
                        {
                            sub
                                .slideUp("faster")
                                .closest("li")
                                .removeClass("open")
                                .addClass("closed");
                            
                            break;
                        }
                    }
                }

                currentSub.children('.sub').slideDown('faster');
                currentSub.removeClass('closed');
                currentSub.addClass('open');

                // slide out selection (fx. industries)
                var slideOut = jQuery('.slideOut');
                if (currentSub.hasClass('showSlideOut'))
                {
                    if (jQuery.browser.msie && jQuery.browser.version.substr(0, 1) < 7)
                    {
                        // use standard show in IE6
                        slideOut.fadeIn(500);
                    }
                    else
                    {
                        // use slide anim in all other browsers
                        slideOut.show("slide", { direction: 'left' }, 500);
                    }
                }
                else if (slideOut.is(':visible'))
                {
                    if (jQuery.browser.msie && jQuery.browser.version.substr(0, 1) < 7)
                    {
                        // use standard hide in IE6
                        slideOut.fadeOut(500);
                    }
                    else
                    {
                        // use slide anim in all other browsers
                        slideOut.hide("slide", { direction: 'left' }, 500);
                    }
                }
            }

            return false;
        });
        


    }

    this.Accordion();
}

FLSmidth.HandleDefaultText = function(id)
{
    this.HandleDefaultText = function()
    {
        var field = jQuery(id);
        var defaultText = field.val();
        var defaultColor = field.css('color');

        field.bind("focus", function(e)
        {
            if (e.target.value == defaultText)
            {
                e.target.value = "";
                e.target.style.color = "#000";
            }
        });

        field.bind("keydown", function(e)
        {
            if (e.target.value == defaultText)
            {
                e.target.value = "";
                e.target.style.color = "#000";
            }
        });

        field.bind("blur", function(e)
        {
            if (jQuery.trim(e.target.value) == "")
            {
                e.target.value = defaultText;
                e.target.style.color = defaultColor;
            }
        });
    }

    this.HandleDefaultText();
}


FLSmidth.MakeClickable = function(selector, nearestContainer)
{
	var anchors = jQuery(selector);
	this.hoverClass = "itemHover";	
	
	this.MakeClickable = function()
	{
		var that = this;
		
		// early out if not category page
		if (jQuery(selector).length == 0) 
		    return;
		
		// "expand" link on <h2> to the surrounding <li>
		jQuery(selector).each(function(i)
		{		
			var url = this.href;
			var target = this.target;
			var closestContainer = jQuery(this).closest(nearestContainer);
			closestContainer.bind('click', function(e)
			{
				if (target == "_blank")
				{
					window.open(url);
				}
				else
				{
					window.location.href = url;
				}
				return false;
			});
			closestContainer.bind('mouseover', function(e)
			{
				jQuery(this).addClass(that.hoverClass);
			});
			closestContainer.bind('mouseout', function(e)
			{
				jQuery(this).removeClass(that.hoverClass);
			});
		});
	}

	this.MakeClickable();
}

FLSmidth.ContactMe = function(id)
{
	var element = jQuery(id);

	this.ContactMe = function()
	{
		// early out if no tabs are present
		if (element.length == 0) return;

		element.fancybox(
		{
			titlePosition: 'inside',
			titleShow: true,
			frameWidth: 450,
			frameHeight: 500,
			transitionIn: 'none',
			transitionOut: 'none',
            modal:true,
			hideOnContentClick: false,
            zindex: 3999
		});
	}

	this.submit = function()
	{
		// get values
		var name = jQuery("#fancy_div input.name").val();
		var phoneEmail = jQuery("#fancy_div input.phoneEmail").val();
		var subject = jQuery("#fancy_div textarea.subject").val();
		
		// checkboxes
		var selectedEmails = "";

		try
		{
			jQuery("#fancy_div input[type=hidden]").each(function(i)
			{
				var checkboxId = this.value.substr(0, this.value.indexOf(';'));
				if (jQuery("#fancy_div ." + checkboxId + " input")[0].checked)
				{
					selectedEmails += this.value.substr(this.value.indexOf(';') + 1) + ";";
				}
			});
		}
		catch (ex)
		{
		}

		// validate
		if (name == "") jQuery("#fancy_div div.errorName").slideDown(100);
		else jQuery("#fancy_div div.errorName").slideUp(100);
		if (phoneEmail == "") jQuery("#fancy_div div.errorPhoneEmail").slideDown(100);
		else jQuery("#fancy_div div.errorPhoneEmail").slideUp(100);
		if (subject == "") jQuery("#fancy_div div.errorSubject").slideDown(100);
		else jQuery("#fancy_div div.errorSubject").slideUp(100);
		if (selectedEmails == "") jQuery("#fancy_div div.errorChooseContact").slideDown(100);
		else jQuery("#fancy_div div.errorChooseContact").slideUp(100);

		// if any error then don't do postback
		if (name == "" || phoneEmail == "" || subject == "" || selectedEmails == "")
		{
			return false;
		}

		// copy values to hidden fields, before postback
		jQuery("input[id$=uiHdnName]").val(name);
		jQuery("input[id$=uiHdnPhoneEmail]").val(phoneEmail);
		jQuery("input[id$=uiHdnSubject]").val(subject);
		jQuery("input[id$=uiHdnSelectedEmails]").val(selectedEmails);

		//Track that the contact me form was submitted
		s = s_gi(s_account);
		s.linkTrackVars = 'events,prop14';    
		s.linkTrackEvents = 'event11';        
		s.events = "event11";
		s.prop14 = "Submitted";
		s.tl(this, 'o', 'Contact Me Submitted');

		this.thankYou();
	}

	this.thankYou = function()
	{
		jQuery('.contactMeForm .form').slideUp(300);
		jQuery('.contactMeForm .thankYou').slideDown(300);
	}

	this.close = function()
	{
		jQuery('.contactMeForm .thankYou').fadeOut(300);
		element.fancybox.close();
	}

	this.ContactMe();
}

FLSmidth.Tabs = function(id)
{
    var lis = jQuery(id + ' li');

    this.Tabs = function()
    {
        // early out if no tabs are present
        if (lis.length == 0) return;

        // activate tabs
        // takes the unique tab id from the class name on the tab itself
        // and shows correct tab accordingly
        lis.bind('mousedown', function(e)
        {
            var sel = jQuery(id + ' li.selected');
            sel.removeClass('selected');

            if (sel.length > 0)
            {
                var newTab = this.className;
                jQuery('#' + sel[0].className).hide(200);
                jQuery('#' + newTab).show(200)
            }

            jQuery(this).addClass('selected');

            return true;
        });

        lis.bind('mouseover', function(e)
        {
            this.style.color = "#e75113";
        });
        lis.bind('mouseout', function(e)
        {
            this.style.color = "";
        });
    }

    this.Tabs();
}

FLSmidth.SmartSearch = function(id, onChange) {
	var element = jQuery(id);
	
	this.SmartSearch = function() {
		// early out if no smart search div is present
		if (element.length == 0) return;
		
		var field = jQuery(id).children('input');
		var selectVisible = jQuery(id).children('select.visible');
		var selectPossible = jQuery(id).children('select.possible');
		var svf = false;
        var lastSearch = "";
        
		selectVisible.bind("mousedown", function(e) {
			svf = true;
		});
		field.bind("blur", function(e) {
			if (!svf) {
				selectVisible.hide(200);
			}
		});

		selectVisible.bind("onchange", gotoUrl);
		selectVisible.bind("click", gotoUrl);
		field.bind("focus", update);

		var that = this;
		function gotoUrl(e) 
		{
			if (e.target.value) {
				selectVisible.hide(200);
				
				if (onChange)
					onChange(selectVisible.find("option:selected").text());
				
				window.location.href = e.target.value;
			}

			return false;
		}

		function update(e) 
		{
		    // if nothing has changed, just return.
		    if (field.val() == lastSearch)
		        return false;
		    else 
		        lastSearch = field.val();
		    
			if (selectVisible.children().length == 0) {
				selectVisible.append(selectPossible.children().remove());
			}
            
			pos = selectVisible[0].selectedIndex;

			var filter = field.val().toLowerCase();

			selectPossible.append(selectVisible.children().remove());
			selectPossible.children('option').each(function() 
			{
				if (this.innerHTML.toLowerCase().indexOf(filter) != -1) 
				{
					selectVisible.append(this);
				}
			});

			if (pos > selectVisible[0].options.length - 1) 
			{
				pos = selectVisible[0].options.length - 1
			}
			else 
			{
				selectVisible[0].selectedIndex = pos;
			}
            
			if (field.val().length >= 2 && selectVisible.children().length > 0 && !selectVisible.is(":visible") ) 
			{
				selectVisible.slideDown("fast");
			}
		}

		field.bind("keyup", update);
		field.bind("keydown", function(e) 
		{
			var pos = selectVisible[0].selectedIndex;

			switch (e.keyCode) {
				// up key pressed                                                             
				case 38:
					pos--;
					break;
				// down key pressed                                                               
				case 40:
					pos++;
					break;
				// page up key pressed                                                             
				case 33:
					pos -= 8;
					break;
				// page down key pressed                                                               
				case 34:
					pos += 8;
					break;
				// enter key pressed      
				case 13:
					if (pos >= 0) 
					{
						svf = true;
						selectVisible.hide();
						return gotoUrl({ target: { value: selectVisible[0].options[pos].value} });
					}
					return false;
					break;
			}

			if (pos < 0) pos = 0;
			else if (pos >= selectVisible[0].options.length - 1) pos = selectVisible[0].options.length - 1;

			selectVisible[0].selectedIndex = pos;
		});
	}

	this.OnChange = function() 
	{
	}

	this.SmartSearch();
}

FLSmidth.LeftNavigation = function(id) {
	var element = jQuery(id);
	var openSubMenu;

	this.LeftNavigation = function() {
		// early out
		if (element.length == 0) return;

		// slide
		element.find('li[class*=unfold]').children('div').children('a').bind("click", function(e) {
			var newOpenSubMenu = jQuery(e.target).closest('li').find('ul');

			if (!newOpenSubMenu.is(':visible')) {
				element.find('li[class*=unfold] ul').slideUp(300);

				openSubMenu = newOpenSubMenu;
				openSubMenu.slideDown(300);
			}

			return false; 
		});
	}

	this.LeftNavigation();
}


FLSmidth.FormHelper = function(selector)
{
    var forms = jQuery(selector);
    var errorClass = "error";
    
    this.FormHelper = function()
    {

    }
    
    this.BindInputEvents = function()
    {
        forms.find(":input:visible, textarea")
            .each(function()
            {
                // validate all fields on page load.
                if ( HasFieldError(jQuery(this)) )
                    jQuery(this).addClass(errorClass);
            })
            .blur(function()
            {
                // test if field validated when it loses focus.
                if ( HasFieldError(jQuery(this)) )
                    jQuery(this).addClass(errorClass);
                else
                    jQuery(this).removeClass(errorClass);
            });
    }
    
    this.BindEnterSubmit = function()
    {
        forms.find("input").keydown(function(e)
        {
            if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) 
            {
                forms.find(":submit").click();
                return false;
            }
        });
    }
    
    this.MoveRequiredFieldsLabel = function()
    {
        forms.find("span.scfRequired").each(function()
        {
            var requiredElement = jQuery(this);
            var label = jQuery(this).prevAll("label");
            
            requiredElement.appendTo(label).show();
        });
    }
    
    // Test if field has errors.
    var HasFieldError = function(field)
    {
        return jQuery(field).nextAll("span.scfValidator:visible").size() > 0;
    }
    
    
    this.FormHelper();
}

FLSmidth.AttachmentLink = function(selector)
{
    var attachments = jQuery(selector);
    
    this.AttachmentLink = function()
    {
        attachments.each(function()
        {
            var link = jQuery(this).find("td.thumb a:first");
            
            if (link.size()) 
            {
                var wrapAnchor = jQuery("<a/>").attr(
                {
                    href: link.attr("href"),
                    target: link.attr("target")
                });
                
                jQuery(this)
                    .find("h4").wrapInner(wrapAnchor)
                    .end()
                    .find("td").not(".thumb").wrapInner(wrapAnchor);
            }
        });
    }
    this.AttachmentLink();
}

FLSmidth.SearchBoxFix = function(inputSelector)
{
    var searchBox = jQuery(inputSelector);
    
    this.SearchBoxFix = function()
    {
        searchBox.each(function()
        {
            var btnSearch = jQuery(this).parents(".search").find("input.button");
            
            jQuery(this).keydown(function(e) 
            {
                if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) 
                {
                    e.preventDefault();
                    btnSearch.click();
                    
                    return false;
                }
            });
        });
    }
    
    this.SearchBoxFix()
}


FLSmidth.Tracking = function (enabled) {
    this.Enabled = enabled || false;

    this.Mailto = function (selector) {
        var anchors = jQuery(selector);

        anchors.mousedown(function () {
            s = s_gi(s_account);
            s.linkTrackVars = 'events';
            s.linkTrackEvents = 'event4,event5';
            s.events = 'event4,event5';
            s.tl(this, 'o', 'Mailto Link');
        });
    }

    this.ContactMeOpen = function (selector) {
        var anchor = jQuery(selector);

        anchor.mousedown(function () {
            s = s_gi(s_account);
            s.linkTrackVars = 'events,prop14';    
            s.linkTrackEvents = 'event10';        
            s.events = 'event10';
            s.prop14 = "Start";
            s.tl(this, 'o', 'Contact Me Open');
        });
    }

    this.TrackFrontPage = function (selector) {
        var anchors = jQuery(selector);

        anchors.mousedown(function () {
            s = s_gi(s_account);
            s.linkTrackVars = 'prop12,eVar7';
            s.prop12 = jQuery(this).text();
            s.eVar7 = s.prop12;

            var target = this;
            if (jQuery(this).attr("href") == "#")
                target = true;

            s.tl(target, 'o', jQuery(this).text());
        });
    }

    this.DownloadTracking = function (selector) {
        var anchors = jQuery(selector);

        anchors.mousedown(function () {
            var href = jQuery(this).attr("href");

            /*The extensions to look for*/
            var extensions = [".ashx", ".pdf", ".ppt", ".doc", ".xls"]
            var isDocument = false;

            jQuery.each(extensions, function (index, value) {
                if (href.indexOf(value))
                    isDocument = true;
            });

            if (isDocument) {
                var docTitle = "DEFAULT";

                if (jQuery(this).attr("title") != '')
                    docTitle = jQuery(this).attr("title");
                else
                    docTitle = jQuery(this).text();

                var docName = href.substring(href.lastIndexOf('/') + 1, href.length);
                var docCombo = docTitle + "(" + docName + ")";

                //make the docCombo available for the s_code script through the variable s_dlTrackVar 
                s_dlTrackVar = docCombo;
            }
        });
    }
}

jQuery(document).ready(function () {
    var formHelper = new FLSmidth.FormHelper(".scfForm");
    formHelper.MoveRequiredFieldsLabel();
    formHelper.BindInputEvents();
    formHelper.BindEnterSubmit();

    /*---SiteCatalyst tracking---*/
    var tracking = new FLSmidth.Tracking(trackingEnabled);

    if (tracking.Enabled) {
        /*Hugin reports list page download tracking*/
        tracking.DownloadTracking('.contentPage .report li .text a, .contentPage .report li .date a');
        /*Search result download tracking*/
        tracking.DownloadTracking('.content .resultList h2 a');
        /*Announcement download tracking*/
        tracking.DownloadTracking('.content .listPage .list .report a');
        /*Download tracking of snippets*/
        tracking.DownloadTracking('.attachment a');
        /*Accordion box tracking*/
        tracking.TrackFrontPage('.frontPage .accordionMenu a, .frontPage .slideOut a');
        /*mailto tracking*/
        tracking.Mailto('.aside .contacts address a');

        /*Contact me open*/
        tracking.ContactMeOpen('.aside .contactMe');

        /*Contact me close/submit script is embedded in FLSmidth.ContactMe.Submit */
    }
    /*---End SiteCatalyst Tracking---*/
    new FLSmidth.HandleDefaultText('.search .field input');

    new FLSmidth.Accordion('.frontPage .navigation .accordionMenu');

    /*Make thumbnails clickable on the category pages*/
    new FLSmidth.MakeClickable('.categoryPage .productSelector a', 'li');

    new FLSmidth.MakeClickable('.landingPage .productSelector a', 'li');

    /*Make teasers clickable on the frontPage*/
    new FLSmidth.MakeClickable('.frontPage .teasers ul li a', 'li');

    new FLSmidth.Tabs('.productPage .content .tabs');

    new FLSmidth.HandleDefaultText('.smartSearch input');
    var smartSearch = new FLSmidth.SmartSearch('.smartSearch', function (productName) {
        trackProduct(productName);
    });

    //new FLSmidth.LeftNavigation('.mainNavigation');

    FLSmidth.contactMe = new FLSmidth.ContactMe('.contactMe');

    new FLSmidth.AttachmentLink("table.attachment");

    new FLSmidth.SearchBoxFix(".search input.field");

});
