
// init loader
var loader = new Loader();
loader.setScriptPath("/static/js/");
loader.addFile("lib/prototype.js");

//loader.addFile("src/scriptaculous.js");

//autocompleter search needs prototype, effects, builder, controls, slider
loader.addFile("src/effects.js");
loader.addFile("src/builder.js");
loader.addFile("src/controls.js");
loader.addFile("src/slider.js");

//loader.addFile("lightbox.js");

loader.addFile("lib/animator.js");
loader.addFile("lib/swfobject.js");
loader.addFile("lib/trimpath-template.js");
loader.addFile("lib/cookie.js");

loader.addFile("lib/lazyload.js");

loader.addClass("at.elements.calendar.init");

if(language == "de") {
	loader.addClass("at.elements.calendar.de");
}
else {
	loader.addClass("at.elements.calendar.en");
}

loader.addClass("at.elements.textreplace.image");


loader.addClass("at.salzburginfo.dropdowns.dropDown");

loader.addClass("at.salzburginfo.main_navigation.hover");
loader.addClass("at.salzburginfo.main_navigation.switchPicture");

loader.addClass("at.salzburginfo.gallery_slider.slider");

loader.addClass("at.salzburginfo.teaser_hover.teaserHover");
loader.addClass("at.salzburginfo.sliding_teaser.sliding_teaser");
loader.addClass("at.salzburginfo.sliding_events.sliding_events");

loader.addClass("at.salzburginfo.searchbox.toggleDetail");

loader.addClass("at.salzburginfo.tabbox.tabbing");

loader.addClass("at.salzburginfo.maps.map");

loader.addClass("at.elements.lightbox");
loader.addClass("at.salzburginfo.lightbox");
loader.addClass("at.salzburginfo.videolightbox");

loader.addClass("at.salzburginfo.vertical_slider.verticalslider");

loader.addClass("at.salzburginfo.watchlist.controller");

//loader.load();
loader.loadProxy("http://cms.salzburg.info/index.php/de/intern/script-proxy/");

var lightbox = null;
var videolightbox = null;
var slidingteaser = null;
var map = null;
var watchlist = null;
var tabbox;

function onDocumentLoad ()
{
	
	watchlist = new at.salzburginfo.watchlist.controller(); 
	
	// lightbox
	try {
		lightbox = new at.salzburginfo.lightbox();
	} catch (e) {}
	
	// videolightbox
	try {
		videolightbox = new at.salzburginfo.videolightbox();
	} catch (e) {}
	
	try {
		new at.salzburginfo.main_navigation.hover( [ $$('#metanav li'), $$('#metanav li ul li') ] );
		new at.salzburginfo.main_navigation.switchPicture( [ $$('#metanav li.main') ] );
	} catch (e) {}
	
	try {
		if($('languages') != null)
		{
			new at.salzburginfo.dropdowns.dropDown($('languages'));
		}
		if($('interests') != null)
		{
			new at.salzburginfo.dropdowns.dropDown($('interests'), {
				onClick: function () {
					pageTracker._trackEvent("Dropdowns", "Klick", "Salzburg for");
				}
			});
		}
	} catch (e) {}
	
	
	//hover-teaser init if available	
	try {
		var hover_teasers = document.getElementsByClassName('img_text_teaser');
		if(hover_teasers.length > 0)
		{
			for( k=0; k<hover_teasers.length; k++ )
			{
				new at.salzburginfo.teaser_hover.teaserHover(hover_teasers[k]);
			}
		}
	} catch (e) {}
	
	//sliding teaser
	try {
		if($("sliding_container")) {
			slidingteaser = new at.salzburginfo.sliding_teaser.sliding_teaser();
		}
	} catch (e) {}
	
	//sliding events
	try {
		if($("sliding_events_container")) {
			slidingevents = new at.salzburginfo.sliding_events.sliding_events();
		}
	} catch (e) {}
	
	try {
		if($('searchbox') != null)
		{
			if($('search_detail_box') != null)
			{
				new at.salzburginfo.searchbox.toggleDetail($('searchbox'));
			}
			if($('eventsearch') != null)
			{
				//init Calendar
				new at.elements.calendar.init({
					button : 'startCal',
					output : "singleinput",
					singleInput: 'events.arrivalDate',
					updateFieldOnStartup : false
				});
				
				new at.elements.calendar.init({
					button : 'endCal',
					output : "singleinput",
					singleInput: 'events.departureDate',
					updateFieldOnStartup : false
				});	
			}
		}
	} catch (e) {}
	
	try {
		if($('ical_event') != null) {
			new at.elements.calendar.init({
				button : 'startCal',
				output : "singleinput",
				singleInput: 'events.startDate',
				updateFieldOnStartup : false
			});
		}	
	} catch (e) {}
	
	//Calender vacancy search box (sidebar)
	try {
		if($('vacancy_search') != null)
		{
			//init Calendar
			new at.elements.calendar.init({
				button : 'cal',
				output : "input",
				dayInput: 'vacancy.start.day',
				monthInput: 'vacancy.start.month',
				yearInput: 'vacancy.start.year',
				updateFieldOnStartup : true
			});
		}
		
		//Calender vacancy search (portal)
		if($('vacancybox') != null)
		{
			//init Calendar
			new at.elements.calendar.init({
				button : 'cal',
				output : "input",
				dayInput: 'vacancy.start.day',
				monthInput: 'vacancy.start.month',
				yearInput: 'vacancy.start.year',
				updateFieldOnStartup : true
			});
		}
		
	} catch (e) {}

	if($('location_detail') != null)
	{
		tabbox = new at.salzburginfo.tabbox.tabbing($('location_detail'));
	}
	
	try {
		//Location lists (Tabbing)
		
		
		//allowance (Tabbing)
		if($('allowance_detail') != null)
		{
			new at.salzburginfo.tabbox.tabbing($('allowance_detail'),false);
		}
		
		if($('portal_teasers') != null)
		{
			new at.salzburginfo.tabbox.tabbing($('portal_teasers'),true);
		}
		
		if($('vacancybox') != null)
		{
			new at.salzburginfo.tabbox.tabbing($('vacancybox'),false);
		}
		
		if($('vacancy_search') != null)
		{
			new at.salzburginfo.tabbox.tabbing($('vacancy_search'),false);
		}
				
		// gallery slider content area
		var gallery_slider = $('gallery_slider');
		if(gallery_slider != null)
		{
			//init sliderfunctions
			new at.salzburginfo.gallery_slider.slider(gallery_slider);
		}
		
		// vertical slider
		if($('vacancy_search') != null)
		{  
			requests = $('vacancy_search').getElementsByClassName('request_entry');
			new at.salzburginfo.vertical_slider.verticalslider(requests,30,164);
		}

	} catch (e) {}


    // initialize map system  
    try {        
        map = new at.salzburginfo.maps.map();
        map.setJsonEndpoint(jsonEndpoint);
        map.setDtaJsonEndpoint(dtaJsonEndpoint); 
        map.setTranslations(translations);
        
        mapSystem = true;
        setupMapCore();
    }
    catch(err)
    {
        mapSystem = false;
    }      
	 
	// replace text to images
	
	if (language == "de" || language == "en") {
		var imageReplacer = new at.elements.textreplace.image("/static/cache/headlines/",{appendFilename: true});	
		
		if (portal == "salzburginfo") {
			imageReplacer.add({
				elements: $$('#portal_teasers .tab_content h2'),
				options: {
				font: 'cg.ttf',
				width: '167',
				height: '',
				color: '505a64',
				size: '10.2',
				positionx: 0,
				positiony: 13,
				replaceElement: {
					tagName: "h2",
					className: "r_img"
				},
				modifyValue : function (vari)
				{
					return vari.toUpperCase();
				}
			}});
			
			imageReplacer.add({
				elements: $$('#portal_teasers .tab_content h3'),
				options: {
				font: 'cgb.ttf',
				width: '167',
				height: '',
				color: '990000',
				size: '10.2',
				positionx: 0,
				positiony: 13,
				replaceElement: {
					tagName: "h3",
					className: "r_img"
				},
				modifyValue : function (vari)
				{
					return vari.toUpperCase();
				}
			}});
		}
		
		if (portal == "congress") {
			imageReplacer.add({
				elements: $$('#portal_teasers_congress h3'),
				options: {
				font: 'cgb.ttf',
				width: '167',
				height: '',
				color: '003C78',
				size: '10.2',
				positionx: 0,
				positiony: 13,
				replaceElement: {
					tagName: "h3",
					className: "r_img"
				},
				modifyValue : function (vari)
				{
					return vari.toUpperCase();
				}
			}});

			imageReplacer.add({
				elements: $$('#portal_single_box .head_line h3'),
				options: {
				font: 'cgb.ttf',
				width: '170',
				height: '',
				color: '990000',
				size: '10.2',
				positionx: 0,
				positiony: 13,
				replaceElement: {
					tagName: "h3",
					className: "r_img"
				},
				modifyValue : function (vari)
				{
					return vari.toUpperCase();
				}
			}});
		}
	
		imageReplacer.start();
	}
	
	
	//initLightbox();
}


function trackEventGotoLink (htmlElement, gaParams) {
	
	try {
		pageTracker._trackEvent(gaParams.category, gaParams.action, gaParams.label);
	} catch (e) {}
	
	gotoLink(htmlElement);
}


function gotoLink (htmlElement) {
	
	var destinationURL = "";
	var target = "";
	
	if(htmlElement.href) {
		destinationURL = htmlElement.href;
		target = htmlElement.getAttribute("target");
	}
	else {
		if(htmlElement.childNodes) {
			if(htmlElement.getElementsByTagName("a")) {
				destinationURL = htmlElement.getElementsByTagName("a")[0].href;
				target = htmlElement.getElementsByTagName("a")[0].getAttribute("target");
			}
		}
	}
	
	if(target == "_blank") {
		window.open(destinationURL);
	}
	else {
		location.href = destinationURL;
	}
}



///////////////////////////////////////////////////////////////////
// MAP SPECIFIC FUNCTIONS
///////////////////////////////////////////////////////////////////
           
function loadLayers()
{
    map.showLegend();
    if (mapMode == "multiPOI")
    {
        map.activateCurrentListingHighlight();    
    }
    
    var baseLayer = map.addLayer('test','test');
      
	geoTagLength = 0;
	
	try 
	{
		geoTagLength = geoTag.length;
	}
	catch(arrayErr)
	{
		geoTagLength = 0
	}    
    
    if (geoTagLength > 1)
    {
   		object = null;
   		map.addMarker(geoTag[1], geoTag[0], baseLayer, object, "current");
    } 
    else    	
    {    	
        geoObjects['values'].each(function(object, index) {                    
            map.addMarker(object.longitude, object.latitude, baseLayer, object, veIcon);
        });    	
    }
                
    map.setClusterMode(baseLayer);                                                            

    map.zoomToMarkerBoundaries();
    
    if (listingToMapMode == true)
    {
        map.showMarkerById(listingToMapId);
        listingToMapMode = false;
    }  
    map.showScroller();    
    map.showZoomer();                   
}

function showMapFrame()
{
    $('headerimage').setStyle({display:'none'});    
    $('imc_map').setStyle({display:'block'});    
    $('img_map_container').setStyle({height:'431px'});
    $('showVeMap').innerHTML = translations.karte_verbergen; 
    mapDisplayed = true;               
}

function hideMapFrame()
{
    $('headerimage').setStyle({display:'block'});    
    $('imc_map').setStyle({display:'none'});    
    $('img_map_container').setStyle({height:'230px'});      
    $('showVeMap').innerHTML = translations.karte_anzeigen;          
    mapDisplayed = false;  
}
   
function startMap()
{
    if (mapDisplayed == false && mapSystem == true)
    {
        showMapFrame();                    
        map.startMap();                    
        map.setMode("integrated");                
        mapLoaded = true;        
        if (dataMode == "dta")
        {
            map.getDtaContent();
            setTimeout("loadLayers()",2000);
        }
        else
        {
            setTimeout("loadLayers()",500);                    
        }       
    }    
    else if(mapSystem == true)
    {
        hideMapFrame();        
    }                    
}

function listingToMap(id)
{
    scroll(0,0);
    listingToMapId = id;
    listingToMapMode = true;
    if (mapDisplayed == false)
    {
        if (mapLoaded != true)
            loadControl("startMap");
        else
            showMapFrame();
    }
    else
    {
        map.showMarkerById(listingToMapId);
    }
}  

function loadMapsHuge()
{
    map.startMap();
    
    map.setMode("full");
    map.showScroller();    
    map.showZoomer();
    
    var baseLayer = map.addLayer('test','test');

    map.setClusterMode(baseLayer);                                
    
    map.showLegend();
    $('veSelector').setStyle({left:'789px'});
    map.showSelector(); 
}         
    
var loaded = false;
var veReady = false;

function loadControl(functionCall)
{     
    var functionCall = functionCall;
    if (functionCall == "loadMapsHuge")
    {
    	loadMapsHuge();        
    }
    else
    {
    	$('showVeMap').innerHTML = '<img src="/static/img/map/selector/progress.gif" width="16" height="16" align="top">&nbsp;&nbsp;' + translations.karte_ladet;
    	LazyLoad.load('http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.2', lazyLoadMap, this, true);
    	/* OLD CODE
    	var script = document.createElement("script");    
        script.setAttribute("src", "http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.2");
        script.setAttribute("type", "text/javascript");               
        script.onload = script.onreadystatechange = function() 
        {
            if (this.readyState && this.readyState!='complete')
            {
            	return;
            }
            
            if (loaded) return;
            loaded = true;
            document.body.removeChild(script);

            veReady = setInterval ( "isVeReady()", 500 );
                
        }.bind(functionCall);    
        document.body.appendChild(script);
        */
    }  
}

function lazyLoadMap()
{
	veReady = setInterval ( "isVeReady()", 500 );
}

function isVeReady(){
    try 
    {
    	startMap();        
    	clearInterval(veReady);   
    }
    catch(error){}
}
  
function setupMapCore()
{   
    if (mapSystem == true)
    {
        try { 
            // CONTENT POIs   
        	
        	geoTagLength = 0;
        	
        	try 
        	{
        		geoTagLength = geoTag.length;
        	}
        	catch(arrayErr)
        	{
        		geoTagLength = 0
        	}
        	
            if (mapValues == true || mapMode == "singlePOI" || dataMode == "dta" || geoTagLength > 1)            
            {
                if (dataMode == "dta" && currentListings.length < 1)
                {
                    return false;
                }
                
                    
                $('toggle_map').setStyle({display:'block'});
                $('showVeMap').observe('click', 
                    function (event) {
                        if (mapLoaded != true)
                        {
                            loadControl("startMap");               
                        }
                        else
                        {
                            if (mapDisplayed == false)
                            {
                                showMapFrame();
                            }
                            else
                            {
                                hideMapFrame();
                            }
                        }
                    }        
                );
            }
            // MAP VIEW
            else if (hugeMap == true)
            {
                loadControl("loadMapsHuge");
                mapDisplayed = true;                  
            }
        }
        catch(err)
        {
        
        }
    }
}








function base64_encode( data ) {
    // Encodes string using MIME base64 algorithm  
    // 
    // version: 905.2617
    // discuss at: http://phpjs.org/functions/base64_encode
    // +   original by: Tyler Akins (http://rumkin.com)
    // +   improved by: Bayron Guevara
    // +   improved by: Thunder.m
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Pellentesque Malesuada
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // -    depends on: utf8_encode
    // *     example 1: base64_encode('Kevin van Zonneveld');
    // *     returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA=='
    // mozilla has this native
    // - but breaks in 2.0.0.12!
    //if (typeof this.window['atob'] == 'function') {
    //    return atob(data);
    //}
        
    var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, enc="", tmp_arr = [];

    if (!data) {
        return data;
    }

    data = this.utf8_encode(data+'');
    
    do { // pack three octets into four hexets
        o1 = data.charCodeAt(i++);
        o2 = data.charCodeAt(i++);
        o3 = data.charCodeAt(i++);

        bits = o1<<16 | o2<<8 | o3;

        h1 = bits>>18 & 0x3f;
        h2 = bits>>12 & 0x3f;
        h3 = bits>>6 & 0x3f;
        h4 = bits & 0x3f;

        // use hexets to index into b64, and append result to encoded string
        tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
    } while (i < data.length);
    
    enc = tmp_arr.join('');
    
    switch( data.length % 3 ){
        case 1:
            enc = enc.slice(0, -2) + '==';
        break;
        case 2:
            enc = enc.slice(0, -1) + '=';
        break;
    }

    return enc;
}


function utf8_encode ( argString ) {
    // Encodes an ISO-8859-1 string to UTF-8  
    // 
    // version: 905.1217
    // discuss at: http://phpjs.org/functions/utf8_encode
    // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: sowberry
    // +    tweaked by: Jack
    // +   bugfixed by: Onno Marsman
    // +   improved by: Yves Sucaet
    // +   bugfixed by: Onno Marsman
    // *     example 1: utf8_encode('Kevin van Zonneveld');
    // *     returns 1: 'Kevin van Zonneveld'
    var string = (argString+'').replace(/\r\n/g, "\n").replace(/\r/g, "\n");

    var utftext = "";
    var start, end;
    var stringl = 0;

    start = end = 0;
    stringl = string.length;
    for (var n = 0; n < stringl; n++) {
        var c1 = string.charCodeAt(n);
        var enc = null;

        if (c1 < 128) {
            end++;
        } else if((c1 > 127) && (c1 < 2048)) {
            enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128);
        } else {
            enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128);
        }
        if (enc !== null) {
            if (end > start) {
                utftext += string.substring(start, end);
            }
            utftext += enc;
            start = end = n+1;
        }
    }

    if (end > start) {
        utftext += string.substring(start, string.length);
    }

    return utftext;
}
