﻿var sofPort = {}
//sofPort.unload = function() {
//    if($defined(GUnload)) {
//        GUnload();
//    }
//}
sofPort.writeJSEnabledCSS = function() {
    document.write('<style type="text/css">');
    document.write('.numberCriteriaDropDown {');
    document.write('    display: none;');
    document.write('}');
    document.write('</style>')
}(); //Invoke immideately
sofPort.startup = function() {

    if ($$('.xForm').length==0 && $$('.marketing').length==0) FancyForm.start();
    sofPort.initializeClickableBoxes();
    sofPort.initializeMapScripts();
    if ($$('.faq').length>0) sofPort.initializeFaqScripts();
    if ($('searchForm')) sofPort.initializeSearchScripts();
    if ($('compareForm')) sofPort.initializeCompareScripts();
}
sofPort.initializeSearchScripts = function() {
    $('searchForm').addClass('jsSearchForm');
    var indicator = sofPort.createIndicator();
    var sfSearchHelper = new SFSearchHelper($('searchForm'), {
        onSearchStart: indicator.enable.bind(indicator),
        onSearchComplete: function(numberOfmatchingOffers) {
            $('numberOfMatchingOffers').set('text', numberOfmatchingOffers);
            indicator.disable();
        },
        searchInit: searchInit
    });
    sofPort.createSearchMultipleOpenAccordion();
}
sofPort.initializeCompareScripts = function() {
    $$('#compareForm .infoPlate').each(function(item) {
        var contents = item.getElement('.infoContents');
        if(contents==null) return;
        var dialog = new SFDialog(item, {
            content: contents.get('html')
        });
        item.addEvent('mouseenter', dialog.show.bind(dialog));
        item.addEvent('mouseleave', dialog.close.bind(dialog));
        item.addEvent('mousemove', function(e) {
            e = new Event(e);
            dialog.moveTo({
                top: e.page.y,
                left: e.page.x
            });
        });
    });
    $$('.serviceCompare').each(function(headerEl) { headerEl.addClass('serviceToggler') });
    new MultipleOpenAccordion({
        togglers: $$('.serviceCompare'),
        elements: $$('.serviceCompareProps'),
        firstElementsOpen: [],
        onActive: function(toggler) {
            toggler.addClass('serviceActive');
        },
        onBackground: function(toggler) {
            toggler.removeClass('serviceActive');
        }
    });
}
sofPort.createSearchMultipleOpenAccordion = function() {
    var firstElementsOpenIndexes = [];
    $$('.serviceCriteria label').each(function(labelEl, index) {
        if (labelEl.hasClass("checked")) firstElementsOpenIndexes.push(index);
    });
    new MultipleOpenAccordion({
        togglers: $$('.hasProps label'),
        elements: $$('.servicePropertyCriterias'),
        firstElementsOpen: firstElementsOpenIndexes
    });
}
sofPort.createIndicator = function() {
    return new SFIndicator(new Element('img', {
        'src': '/images/loader2.gif',
        'styles': {
            'opacity': 0,
            'margin-right': '2px'
        }
    }).inject($('numberOfMatchingOffers'), 'before'), {
        animateOnEnable: false,
        animateOnDisable: false
    });
}

sofPort.initializeMapScripts = function() {
    if ($defined($('map')) && $defined(GBrowserIsCompatible) && GBrowserIsCompatible()) {

        var indicator = new SFIndicator($$('.indicator')[0], null, {
            animateOnEnable: false
        });
        indicator.enable();
        var mapManager = new SFMapManager({
            onMarkersLoaded: function() {indicator.disable()},
            onBeginAssignAddress: function() {indicator.enable()},
            onAssignAddressComplete: function() {indicator.disable()},
            clusterMarkers: true
        });
        mapManager.loadMarkers();
        sofPort.mapManager = mapManager;
    
        var searchField = $$('.addressSearch .textField')[0];
        var autoCompleter = new Autocompleter.Ajax.Json(searchField, '/ajaxProxies/queryAddresses.ashx?x='+new Date().getTime(), {
            'postVar': 'search',
            indicator: 'indicator',
            postData: {'areaCode': areaCode },
            ajaxOptions: {method: 'get'},
            fxOptions: {delay: 200},
            width: 'inherit',
            maxChoices: 12,
            onRequest: function() {
                indicator.enable('Laddar data...');
            },
            onComplete: function() {
                indicator.disable();
            },
            injectChoice: function(token) {
                var choice;
                if(!$defined(token.ID)) 
		            choice = new Element('li', {
    			        'html': 'Inga träffar för adressen \''+searchField.value+'\'',
			            'class': 'noResult'
			        });
                else {
		            choice = new Element('li', {
                        'id': token.ID,
    			        'html': token.Address,
			            'class': token.ClassName,
				        events: {
				            'click': function() {
				                mapManager.activateMarker(token.ID);
				            }
				        }
			        });
                    choice.inputValue = token.Address;
                    autoCompleter.addChoiceEvents(choice);
                }
			    choice.inject(autoCompleter.choices);
            },
            onHide: function() {
                //self.populateApartmentNumbers(searchField.value);
            }

        });

    }
}

sofPort.writeBackBtn = function(cssClass) {
    if (!$defined(cssClass)) cssClass = "button buttonBack";
    document.write('<a href="JavaScript:history.back(-1)" class="' + cssClass + '"><span>Bakåt</span></a>');
}

sofPort.initializeClickableBoxes = function(elements) {

    var clickArray = $defined(elements) ?
        elements :
        $$('.linkBox', '.banner', '.entrancePageBanner', '.bottomBanner', '.supportBubble');

    if(!$defined(clickArray)) return;

    clickArray.each(function(item) {
        if($defined(item.getElement('a'))) {
            item.addClass('clickable');
            item.addEvent('click', function() {
                document.location.href = item.getElement('a').href;
            })
        }
    });
}

sofPort.initializeFaqScripts = function() {
    new Accordion($$('.toggler1'), $$('.content1'), {
        display: -1,
        onActive: function(toggler, element) {
            toggler.addClass('toggler1_active');
        },
        onBackground: function(toggler, element) {
            toggler.removeClass('toggler1_active');
        }
    });
}

window.addEvent('domready', sofPort.startup);
//$$('body').addEvent('unload', sofPort.unload);