/*
 *   radio.js refurbishment 2009
 * 
 *    radio object:
 *    radio.content > Methoden und Eigenschaften für den Contentbereich
 *    radio.eventHandling > Methoden und Eigenschaften für Events
 *    radio.jsp > Serverseitige Variablen
 *    radio.init > initialisierung der Seite.
 *  radio.sidebar > Sidebar Elemente und Methoden.
 *  radio.content.gotoURL > document.location.href?
 *
 *    Für bereiche, die mit Ajax nachgeladen werden
 *  sollen scriptbereiche im Code ausgelesen werden
 *  und in den Headbereich angefügt werden.
 *    
 */

// Requirements for Dojo:
dojo.require("dojo.back");
dojo.require("dojo.parser");
dojo.require("dijit.layout.ContentPane");
dojo.require("dijit.layout.AccordionContainer");
dojo.require("dijit.form.ComboBox");
//dojo.require("dojo.data.ItemFileReadStore");



if(window.radio === undefined || window.radio===null) {
    window.radio = {};
}


function noErrorMessages (err, url, line) { 
    window.radio.init();  
    console.log("Error caught: "+err+", URL "+url+" in line "+line);
    return true;
}
window.onerror = noErrorMessages;

//IE fix:
if(dojo.IE7){
    //alert("IE7 found");
    dojo.connect(window, "onerror", this, "noErrorMessages");
}

/* 
 * DOJO Back / History Management
 * Application State
 * History Stack
 */

HistoryState = function(stateData,outputDivId,bookmarkValue){
    this.stateData = stateData;
    this.outputDivId = outputDivId;
    //if (radio.content.elementExists(outputDivId)===false){
    //    alert(radio.jsp.applicationStateAlert);
    // }
    this.changeUrl = bookmarkValue || true;
    console.log("stateData set, output: "+outputDivId+" / bookmarkValue: "+bookmarkValue);
};


dojo.extend(HistoryState, {
        back: function() {
            radio.sidebar.unload();
            this.showStateData();
            //radio.init();
            console.log("back.");
            window.radio.init();
        },
        forward: function(){
            radio.sidebar.unload();
            this.showStateData();
            console.log("forward.");
            window.radio.init();
        },
        showStateData:function(){
    //if (this.changeUrl != currentURL){
        if(radio.content.elementExists(this.outputDivId)===false){
            this.outputDivId = "content";
        }
        if(dijit.byId("community-Box")!== undefined && dijit.byId("community-Box")!==false){
            dijit.byId("community-Box").destroyRecursive();
            dijit.byId("community-top-ten_button").destroyRecursive();
            dijit.byId("sidebar-my-recommendations_button").destroyRecursive();
        }
        
        dojo.byId(this.outputDivId).innerHTML = this.stateData;
        //console.log("just before parsing in HistoryState.showStateData");
        
        // Check, ob Widgets bereits existieren - wenn ja : delete.
        //if(dijit.byId("community-Box")!== undefined && dijit.byId("community-Box")!==false){
        //    dijit.byId("community-Box").destroyRecursive();
        //    dijit.byId("community-top-ten_button").destroyRecursive();
        //    dijit.byId("sidebar-my-recommendations_button").destroyRecursive();
        //}
        dojo.parser.parse(dojo.byId(this.outputDivId));
        currentURL=this.changeUrl;
        if(this.outputDivId=="body" || this.outputDivId=="content") {
            window.scrollTo(0,0);
        }
        radioSetAccountId();
        // jscriptExec(this.outputDivId);
                 window.radio.cometd.updateRegistration();
    //}
        }
 });
 

window.radio.ApplicationState = {
    stateData:null,
    outputDivId:null,
    changeUrl:null,
    historyStack:[],

    addToHistory : function(newVal) {
            // removed radio.ApplicationState.historyStack.length == 0 || 
           if(radio.ApplicationState.historyStack[radio.ApplicationState.historyStack.length-1] != newVal) {
             radio.ApplicationState.historyStack.push(newVal);
             // console.log('Adding '+ newVal + ' to history');
           } 
        }, 

    retrieveFromHistory : function() { 
       var _popVal = radio.ApplicationState.historyStack.pop();
       _popVal = radio.ApplicationState.historyStack.pop();
       //console.log('Retrieved' + _popVal + ' from history');
       if (_popVal === undefined){
          // console.log("retrieveFromHistory returns "+radio.jsp.HomeURL);
          return radio.jsp.HomeURL; 
       } else {
           // console.log("retrieveFromHistory returns "+_popVal);
           return _popVal;
       }
    } 
};

if(window.radio.content === undefined || window.radio.content === null) {
    window.radio.content = {};
}


window.radio.content = {
        //used for storing registration information in between surfing by user to other pages and back
        registrationInfo : {
            login:"",
            email:"",
            agb:false,
            dataprotection:false,
            newsletter:false,
            newsletterHtml:true,
            newsletterText:false
        },
        debug : true,
        // used for storing key/value pairs in-between user browsing
        attributeArray : [], // new Array(); 
        
        saveRegistrationInfo : function() {
            // console.debug("saveRegistrationInfo");
            var regform = dojo.byId('updateform');
            if((regform !== null) && ( regform.tagName == 'FORM' || regform.tagName == 'form')) {
                var regformelems = regform.elements;
                if(regform.elements['login'] !== null) {
                    radio.content.registrationInfo.login = regform.elements['login'].value;}
                if(regform.elements['email'] !== null){
                    radio.content.registrationInfo.email = regform.elements['email'].value;}
                if(regform.elements['agb'] !== null){
                    radio.content.registrationInfo.agb = (regform.elements['agb'].checked === true);}
                if(regform.elements['dataprotection'] !== null){
                    radio.content.registrationInfo.dataprotection = (regform.elements['dataprotection'].checked === true);}
                if(regform.elements['newsletter'] !== null){
                    radio.content.registrationInfo.newsletter = (regform.elements['newsletter'].checked === true);}
                if(regform.elements['newsletterHtml'] !== null){
                    radio.content.registrationInfo.newsletterHtml = (regform.elements['newsletterHtml'].checked === true);}
                if(regform.elements['newsletterText'] !== null){
                    radio.content.registrationInfo.newsletterText = (regform.elements['newsletterText'].checked === true);}
            }
        },
        resetRegistrationInfo : function() {
            radio.content.registrationInfo.login = "";
            radio.content.registrationInfo.email = "";
            radio.content.registrationInfo.agb = false;
            radio.content.registrationInfo.dataprotection = false;
            radio.content.registrationInfo.newsletter = true;
            radio.content.registrationInfo.newsletterHtml = true;
            radio.content.registrationInfo.newsletterText = false;
        },
        isRegistrationInfoSet : function() {
            if((radio.content.registrationInfo.login === "") && 
               (radio.content.registrationInfo.email === "") && 
               !radio.content.registrationInfo.agb && 
               !radio.content.registrationInfo.dataprotection && 
               radio.content.registrationInfo.newsletter && 
               radio.content.registrationInfo.newsletterHtml && 
               !radio.content.registrationInfo.newsletterText
              )
                {return false;}
            else
                {return true;}
        },
        loadRegistrationInfo : function() {
            if(radio.content.registrationInfo !== null) {
                var regform = dojo.byId('updateform');
                if((regform !== null) && (regform.tagName == 'FORM' || regform.tagName == 'form')) {
                    var regformelems = regform.elements;
                    if(regform.elements['login'] !== null){
                        regform.elements['login'].value = radio.content.registrationInfo.login;}
                    if(regform.elements['email'] !== null){
                        regform.elements['email'].value = radio.content.registrationInfo.email;}
                    if(regform.elements['agb'] !== null){
                        regform.elements['agb'].checked = radio.content.registrationInfo.agb?'checked':'';}
                    if(regform.elements['dataprotection'] !== null){
                        regform.elements['dataprotection'].checked = radio.content.registrationInfo.dataprotection?'checked':'';}
                    if(regform.elements['newsletter'] !== null){
                        regform.elements['newsletter'].checked = radio.content.registrationInfo.newsletter?'checked':'';}
                    if(regform.elements['newsletterHtml'] !== null){
                        regform.elements['newsletterHtml'].checked = radio.content.registrationInfo.newsletterHtml?'checked':'';}
                    if(regform.elements['newsletterText'] !== null){
                        regform.elements['newsletterText'].checked = radio.content.registrationInfo.newsletterText?'checked':'';}
                    radio.content.resetRegistrationInfo();
                }
            }
        },
        saveAttribut : function(key,value){
            //This function can be used to store some key-value data within a page scope
            //e.g. saving some input fields for restoring it later when coming back via ZURUECK link
            radio.content.attributeArray[key] = value;
        },
        restoreAttribut : function(key){
            //This function can be used to restore some key-value data within a page scope
            //e.g. restoring the saved data
            if (radio.content.attributeArray[key]){ return radio.content.attributeArray[key];}
            else {return '';}
        },
        saveInputField : function(id) {
            //This function can be used to save input field data using the saveAttribut function
            if(radio.content.elementExists(id)) {
                radio.content.saveAttribut(id,dojo.byId(id).value); 
            }
        },
        restoreInputField : function(id) {
            //This function can be used to restore input field data using the restoreAttribut function
            if(radio.content.elementExists(id)) {
                if(radio.content.debug) console.log("restoring input field: "+id+ " with Value: "+radio.content.restoreAttribut(id));
                dojo.byId(id).value = radio.content.restoreAttribut(id); 
            }
        },
        saveRadioButton : function(chechkedID, uncheckedID) {
            //This function can be used to save radio button checked state using the saveAttribut function
            if(radio.content.elementExists(chechkedID)) {
                radio.content.saveAttribut(chechkedID,dojo.byId(chechkedID).checked); 
            }
            if(document.getElementById(uncheckedID)) {
                radio.content.saveAttribut(uncheckedID,dojo.byId(uncheckedID).checked); 
            }
        },
        restoreRadioButton : function(id) {
            //This function can be used to save radio button checked state using the saveAttribut function
            if((radio.content.elementExists(id)) && (radio.content.restoreAttribut(id) !== '')) {
                dojo.byId(id).checked = radio.content.restoreAttribut(id); 
            }
        },
        removeAttributValue : function(id) {
            //This function can be used to remove a specific attribute from array to prevent further restore
            if(radio.content.elementExists(id)) {
                radio.content.attributeArray[id] = ''; 
            }
        },
        removeAllAttributs : function() {
            //This function can be used to remove all attributes from array to prevent further restore
            radio.content.attributeArray = [];//new Array();
        },
        connectLinks: function(){
            //Initialisierung der Href Links:
            dojo.query('a.href-link').connect('onclick', radio.eventHandling.hrefLinkOnClick);
            //Initialisierung der JS Links:
            dojo.query('a.js-link').connect('onclick', radio.eventHandling.jsLinkOnClick);
            dojo.query('a.js-link-post').connect('onclick', radio.eventHandling.jsLinkPostOnClick);
            
            dojo.query('a.js-link-external').connect('onclick', radio.eventHandling.jsLinkExternalOnClick);
            dojo.query('a.js-link-external-popup').connect('onclick', radio.eventHandling.jsLinkExternalPopupOnClick);
            dojo.query('a.js-link-external-tab').connect('onclick', radio.eventHandling.jsLinkExternalTabOnClick);
            //Initialisierung der Back Links:
            dojo.query('a.back-link').connect('onclick', radio.eventHandling.backLinkOnClick);
            
            
            // initialisiere content-list :
            dojo.query('div.content-list-row a').connect('mouseenter', radio.eventHandling.listRowMouseOver);
            dojo.query('div.content-list-row a').connect('mouseleave', radio.eventHandling.listRowMouseOut);
            
            dojo.query('div.content-list-row-first a').connect('mouseenter', radio.eventHandling.listRowMouseOver);
            dojo.query('div.content-list-row-first a').connect('mouseleave', radio.eventHandling.listRowMouseOut);
            
            // Search Button in Tab Navigation:
            dojo.query('.search-button').connect('onclick', radio.content.searchSubmit);
            // Search Element Home:
            dojo.query('#searchbutton').connect('onclick', radio.content.searchSubmit);
            
            dojo.query('#username').connect('onkeypress', radio.eventHandling.loginOnEnter);
            dojo.query('#password').connect('onkeypress', radio.eventHandling.loginOnEnter);
            
            dojo.query('.search-field').connect('onkeypress', radio.eventHandling.searchOnEnter);
            dojo.query('#searchinput').connect('onkeypress', radio.eventHandling.searchOnEnter);
            
            dojo.query('.insert-text-box-registration').connect('onkeypress', radio.eventHandling.noSendOnEnter);
            dojo.query('.insert-text-box-recommend').connect('onkeypress', radio.eventHandling.noSendOnEnter);
            dojo.query('.insert-text-box-forgot-password').connect('onkeypress', radio.eventHandling.noSendOnEnter);
            dojo.query('.insert-text-box-changepassword').connect('onkeypress', radio.eventHandling.noSendOnEnter);
            dojo.query('.newsletter-input-text').connect('onkeypress', radio.eventHandling.noSendOnEnter);
            dojo.query('.insert-text-box-suggest-bcast').connect('onkeypress', radio.eventHandling.noSendOnEnter);
            dojo.query('.text-activateAccount').connect('onkeypress', radio.eventHandling.noSendOnEnter);
            
    },
    activateAccount: function(){
        var _updateFormElements = dojo.byId("activateAccountForm").elements;
        var _url = radio.jsp.create_account_optional;
        radio.content.xhrPost(_url,{ 'service':'/info/account/activate', 'formData':_updateFormElements,'ack':true});
    },    
    registerUser: function(){
        var _updateFormElements = dojo.byId("updateform").elements;
        var _url = radio.jsp.create_account_optional;
        radio.content.xhrPost(_url,{ 'service':'/info/account/createaccountoptin', 'formData':_updateFormElements,'ack':true});
    },
    registerUserOptOut : function() {
        var _updateFormElements = dojo.byId("updateform").elements;
        var _url = radio.jsp.webcontext;
        radio.content.xhrPost(_url,{ 'service':"/info/account/createaccountoptout",'formData':_updateFormElements,'ack':true});
    },
    registerUserOptionalData : function() {
        var _updateFormElements = dojo.byId("updateform").elements;
        var genres = "";
        var topics = "";
        var inputName;
        for(i=1;i<12;i++)
        {
            inputName="genre"+i;
            if(dojo.byId(inputName).checked && genres==null)
            {
                genres = dojo.byId(inputName).value;
            }
            else if(dojo.byId(inputName).checked){
                genres += "," + dojo.byId(inputName).value;
            }
        }
        
        for(i=1;i<6;i++)
        {
            inputName="topic"+i;
            if(dojo.byId(inputName).checked && topics==null)
            {
                topics = dojo.byId(inputName).value;
            }
            else if(dojo.byId(inputName).checked){
                topics += "," + dojo.byId(inputName).value;
            }
        }
        
        if(dojo.byId("genres").value == null){
            dojo.byId("genres").value = genres;
        }
        else{
            dojo.byId("genres").value = dojo.byId("genres").value + "," + genres;    
        }
        
        if(dojo.byId("topics").value == null){
            dojo.byId("topics").value = topics;
        }
        else{
            dojo.byId("topics").value = dojo.byId("topics").value + "," + topics;    
        }
        
        var _url = radio.jsp.create_account_feedback;
        radio.content.xhrPost(_url,{ 'service':"/info/account/saveoptionaldata",'formData':_updateFormElements,'ack':true});
    },
    registerUserWithoutOptionalData : function() {
        var _updateFormElements = {}; // nothing to save!
        var _url = radio.jsp.create_account_feedback;
        radio.content.xhrPost(_url,{ 'service':"/info/account/saveoptionaldata",'formData':_updateFormElements,'ack':true});
    },
    acceptNewTac : function() {
        var _updateFormElements = dojo.byId("acceptnewtacform").elements;
        //var url = "${webcontext}/";
        var _url = radio.jsp.webcontext;
        radio.content.xhrPost(_url,{'service':'/info/account/acceptnewtermsandconditions','formData':_updateFormElements,'ack':true});
    },
    updateProfile : function() {
        var _updateFormElements = dojo.byId("updateform").elements;
        var _url = "/"+radio.jsp.changeAccount;
        _url = dojo.string.trim(_url);
        _url = _url+"?part=content";
        if(radio.content.debug) console.log("Profile Update called. URL: "+_url);
        radio.content.xhrPost(_url,{ 'service':"/info/account/changealldata",'formData':_updateFormElements,'ack':true});
    },
    deleteProfile : function(reconfirm) {
        var _check = confirm(reconfirm);
        var _updateFormElements = dojo.byId("deleteform").elements;
        var _pageId = dojo.byId("p").value;
        if(_pageId == undefined || _pageId == "" && radio.content.debug){
            console.log("PageID is not defined but needed for "+radio.jsp.deleteAccount+": "+dojo.byId("p").value);
        }
        var _url = radio.jsp.webcontext+radio.jsp.deleteAccount+"?p="+_pageId;
        // console.log("URL: "+_url+" und PageId: "+_pageId);
        radio.content.xhrPost(_url,{ 'service':"/account/delete",'formData':_updateFormElements,'ack':_check});
    },
    deleteProfileOptOut : function(reconfirm) {
        var _check = confirm(reconfirm);
        var _updateFormElements = dojo.byId("deleteform").elements;
        var _url = "/"+radio.jsp.deleteAccount+"?part=content";
        radio.content.xhrPost(_url,{ 'service':"/info/account/deleteaccountoptout",'formData':_updateFormElements,'ack':_check});
    },
    suggestBroadcast : function() {
        var paramsForContent = dojo.byId("updateform").elements;
        var url = "/"+radio.jsp.suggestBroadcast+"?part=content";
        //console.info("paramsForContent "+paramsForContent);
        //console.info("URL "+url);
        radio.content.xhrPost(url, {'service':'/info/email/sendbroadcastsuggestemail','formData':paramsForContent,'ack':true});
    },
    registerNewsletter : function() {
        var _newsletterformElements = dojo.byId("newsletterform").elements;
        var _url = "/"+radio.jsp.subscribeNewsletter+"?part=content";
        radio.content.xhrPost(_url,{ 'service':"/info/email/newsletter",'formData':_newsletterformElements,'ack':true});
    },
    setSuggestionMode : function() {
        var _suggestionFormElements = dojo.byId("suggestionform").elements;
        var _url = "/"+radio.jsp.changeAccountOptional+"?part=content";
        radio.content.xhrPost(_url,{ 'service':"/info/account/setsuggestionmode",'formData':_suggestionFormElements,'ack':true});
    },
    setSuggestionModeValue : function(value) {
          var hiddenField = dojo.byId('suggestion_mode');
          hiddenField.value = value;
          radio.content.setSuggestionMode();
    },
    setGenreAndTopics : function() {
        var _updateFormElements = dojo.byId("updateform").elements;
        var genres = "";
        var topics = "";
        var inputName;
        for(i=1;i<12;i++)
        {
            inputName="genre"+i;
            if(dojo.byId(inputName).checked && genres==null)
            {
                genres = dojo.byId(inputName).value;
            }
            else if(dojo.byId(inputName).checked){
                genres += "," + dojo.byId(inputName).value;
            }
        }
        
        for(i=1;i<6;i++)
        {
            inputName="topic"+i;
            if(dojo.byId(inputName).checked && topics==null)
            {
                topics = dojo.byId(inputName).value;
            }
            else if(dojo.byId(inputName).checked){
                topics += "," + dojo.byId(inputName).value;
            }
        }
        
        if(dojo.byId("addGenres").value == null || !dojo.byId("otherGenres").checked){
            dojo.byId("genres").value = genres;
        }
        else{
            dojo.byId("genres").value = dojo.byId("addGenres").value + "," + genres;    
        }
        
        if(dojo.byId("addTopics").value == null || !dojo.byId("otherTopics").checked){
            dojo.byId("topics").value = topics;
        }
        else{
            dojo.byId("topics").value = dojo.byId("addTopics").value + "," + topics;    
        }
        
        var _url = "/"+radio.jsp.changeAccountOptional+"?part=content";
        radio.content.xhrPost(_url,{ 'service':"/info/account/setgenresandtopics",'formData':_updateFormElements,'ack':true});
    },
    requestPasswordChange : function() {
        var _updateFormElements = dojo.byId("passwordForgottenForm").elements;
        var _url = "/"+radio.jsp.forgot_password_success;
        radio.content.xhrPost(_url,{ 'service':"/account/requestPasswordForgottenMail",'formData':_updateFormElements,'ack':true});
    },
    overwritePassword : function() {
        console.log("Passwort wird geaendert ...");
        var _updateFormElements = dojo.byId("overwritePasswordForm").elements;
        var _url = "/"+radio.jsp.HomeURL;
        radio.content.xhrPost(_url,{ 'service':"/account/overwritePassword",'formData':_updateFormElements,'ack':true});
    },
    submitSendAFriendForm: function(){
        var _updateFormElements = dojo.byId("sendAFriendForm").elements;
        var _url = "/"+radio.jsp.recommendBroadcastService;

        if(radio.content.debug){
            console.log("Send Recommendation URL : "+_url);
            console.debug(_updateFormElements);
        }
        radio.content.xhrPost(_url,{ 'formData':_updateFormElements,'ack':true});

        // getContentPost(url,radio.jsp.action,updateFormElements,true);

    },
    changeEditingStatus : function(id) {
        var elem = dojo.byId(id);
        elem.disabled = !elem.disabled;
    },
    changeCheckboxStatus: function(id){
        var elem = dojo.byId(id);
        // fix for "if I enter this input field, checkbox = active
        elem.checked = true;//!elem.checked;
    },
    checkCheckboxStatus: function(id, checkbox){
        var _checkbox = dojo.byId(checkbox);
        var _inputfield = dojo.byId(id);
        if(_inputfield.value == ''){
            _checkbox.checked = false;
        }
    },
    parseFieldIntoArray : function(field) {
        var retVal =[];// new Array();
        if (field !== null) {
          var element = document.getElementById(field);
          if (element !== null && element.value !== null) {
            var start = 0;
            var i;
            for (i = 0; i < element.value.length; i++) {
              if (element.value.charAt(i) == ',') {
                retVal.push(element.value.slice(start, i));
                start = i + 1;
              }
              else if (i + 1 == element.value.length) {
                retVal.push(element.value.slice(start, element.value.length));
              }
            }
          }
        }
        return retVal;
    },
    parseTextIntoArray : function(text) {
        var retVal = [];//new Array();
        if (text !== null) {
          var start = 0;
          var i;
          for (i = 0; i < text.length; i++) {
            if (text.charAt(i) == ',') {
              retVal.push(text.slice(start, i));
              start = i + 1;
            }
            else if (i + 1 == text.length) {
              retVal.push(text.slice(start, text.length));
            }
          }
        }
        return retVal;
    },
    arrayContains : function(addGenres, genre) {
        var j = 0;
        for (j in addGenres) {
          if (addGenres[j] == genre) {
            return j;
          }
        }
        return -1;
    },
    collectGenres : function() {
        userGenres = "";
        var first = true;
        var addArray = radio.content.parseFieldIntoArray("addGenres");
        var i = 0;
        for (i in radio.jsp.genres) {
          var inArray = radio.content.arrayContains(addArray, genres[i]);
          if (inArray >= 0) {
            addArray.splice(inArray, 1);
          }
          var element = dojo.byId(radio.jsp.genres[i]);
          if (element !== null) {
            if ((element.checked) || (inArray >= 0)) {
              if (first) {
                userGenres = radio.jsp.genres[i];
                first = false;
              }
              else {
                userGenres += "," + radio.jsp.genres[i];
              }
            }
          }
        }
        for (i in addArray) {
          if (userGenres === "") {
            userGenres = addArray[i];
          }
          else {
            userGenres += "," + addArray[i];
          }
        }
        var output = dojo.byId('genres');
        if (output !== null) {
          output.value = userGenres;
        }
      },
      collectGenreCheckbox : function(checkboxId){
          if(checkboxId != null){
            
          }
      },
      collectTopicCheckbox : function(checkboxId){
          if(checkboxId != null){
             
          }
      },
      collectTopics : function() {
        userTopics = "";
        var first = true;
        var addArray = radio.content.parseFieldIntoArray("addTopics");
        var i = 0;
        for (i in radio.jsp.topics) {
          var inArray = radio.content.arrayContains(addArray, topics[i]);
          if (inArray >= 0) {
            addArray.splice(inArray, 1);
          }
          var element = dojo.byId(radio.jsp.topics[i]);
          if (element !== null) {
            if ((element.checked) || (inArray >= 0)) {
              if (first) {
                userTopics = radio.jsp.topics[i];
                first = false;
              }
              else {
                userTopics += "," + radio.jsp.topics[i];
              }
            }
          }
        }
        for (i in addArray) {
          if (userTopics === "") {
            userTopics = addArray[i];
          }
          else {
            userTopics += "," + addArray[i];
          }
        }
        var output = dojo.byId('topics');
        if (output !== null) {
          output.value = userTopics;
        }
      },
      checkGenres : function(_genres) {
        var userGenres = "";
        var first = true;
        var addArray = radio.content.parseTextIntoArray(_genres);
        var i = 0;
        for (i in genres) {
          var inArray = radio.content.arrayContains(addArray, genres[i]);
          if (inArray >= 0) {
            addArray.splice(inArray, 1);
            var element = dojo.byId(radio.jsp.genres[i]);
            if (element !== null) {
              element.checked = true; 
            }
          }
        }
        for (i in addArray) {
          if (userGenres === "") {
            userGenres = addArray[i];
          }
          else {
            userGenres += "," + addArray[i];
          }
        }
        var output = dojo.byId('addGenres');
        if (output !== null) {
          output.value = userGenres;
        }
      },
      checkTopics : function(_topics) {
        var userTopics = "";
        var first = true;
        var addArray = radio.content.parseTextIntoArray(_topics);
        var i = 0;
        for (i in topics) {
          var inArray = radio.content.arrayContains(addArray, topics[i]);
          if (inArray >= 0) {
            addArray.splice(inArray, 1);
            var element = dojo.byId(radio.jsp.topics[i]);
            if (element !== null) {
              element.checked = true; 
            }
          }
        }
        for (i in addArray) {
          if (userTopics === "") {
            userTopics = addArray[i];
          }
          else {
            userTopics += "," + addArray[i];
          }
        }
        var output = dojo.byId('addTopics');
        if (output !== null) {
          output.value = userTopics;
        }
      },
    contact: function(user,host){
         if(!user){
             user = "kontakt";
         }
         if(!host){
             host = "radio.de";
         }
         window.location.href = "mailto:" + user + "@" + host;
    },
    jscriptExec: function(id){
        /* jscriptExec is NOT USED anymore. */
        if(!id){ id='content';}
        var queryid = '#'+id+' script';
        // console.debug("jscriptExec: "+queryid);
        if(dojo.query(queryid).length) {
            for (var i = 0; i < dojo.query(queryid).length; i++){
                
                var src = dojo.query(queryid)[i].getAttribute("src");
                    
                if(src) {
                    dojo.xhrGet ({
                            url: src,
                            sync: true,
                            preventCache:  (this.preventCache || this.refreshOnShow),
                            handle: function (response, ioArgs){
                                    if(response instanceof Error){
                                            self._onError.call (self, 'Download', response);
                                    } else {
                                            eval (response);
                                    }
                            }
                    });
                    
                }
                else {
                    if(radio.content.debug) console.log("Trying to eval HTML.");
                    eval(dojo.query(queryid)[i].innerHTML);
                }
                    
            }
        }
    },
    xhrGet : function(dataURL, _params) {
        /*  Usage:
        <a href="file.jsp#anchor" onclick="radio.content.xhrGet(this.getAttribute('href',0), {param:'value'}));return false">link</a>
        #anchor = Element-ID
        */
        
        if(dataURL === undefined || dataURL === ""){
            if(radio.content.debug){
                console.log("xhrGet call without dataURL.");
            }
            return false;
        }
        var _urlString = dataURL.split("#");
        var _anchor = (_urlString[1] === undefined) ? null : _urlString[1];
        dataURL = _urlString[0];
        //alert('URL: ' + dataURL + "\nAnchor: "+ _anchor);
        /*
         * radio.content.xhrGet();
         * 
            init parameters:
            targetId > HTML Component ID
            scroll > true/false
            callAfterLoad > function to call after content is loaded.
            loadingIndicator > ID of HTML-Element that contains the loading animation.
            loadingIndicatorIndex > Index of _loadingIndicators array.
         */
        if(_params === undefined || _params === null) 
        {
            _params = {};
        }
        // set params if undefined:
        if(_params.targetId === undefined || _params.targetId === null || _params.targetId === '') 
        {    
            _params.targetId = 'content';
        }
        if(_params.scroll === undefined || _params.scroll === null) 
        {
            _params.scroll = true;
        }
        if(_params.loadingIndicator === undefined || _params.loadingIndicator === null) {
            _params.loadingIndicator = "tab-loading-indicator";
        }
        
        // history workaround
        radio.ApplicationState.addToHistory(dataURL);
        
        var _newURL = dataURL + ((dataURL.indexOf("?")>-1)?"&":"?")+"part=content";
        
        // show the loading Indicator:
            radio.content.toggleLoadingIndicator(_params.loadingIndicator);
        
            
        //console.log("Parameter: newURL "+_newURL+", Params: "+_params.targetId + " und Data URL '"+dataURL+"', Anker "+_anchor);
            
        // _anchor = "content";
        // no Redirect:
        if(dataURL.indexOf("redirect")<0){
            console.log("xhrGet meldet: No redirect, URL "+_newURL);
            dojo.xhrGet({
                url :         _newURL,
                sc :          _params.targetId,
                method :      "GET",
                
                preventCache: true,
                bookmark:     radio.content.deriveBookmark(dataURL), 
                appState:     null,
                anchor:       _anchor,
                params:          _params, 
                load:         function(data, io) {
                    // content loaded
                    io.args.appState = new HistoryState(data, io.args.sc, dataURL);
                    //Remove Widgets:
                    radio.sidebar.unload();
                    
                    io.args.appState.showStateData();
                    
                    // Testing again:
                    // radio.content.jscriptExec();
                    dojo.back.addToHistory(io.args.appState);
                    //console.debug(io);
                    //console.debug("xhrGet - Part I");
                    
                    window.radio.cometd.updateRegistration();
                    
                    if(io.args.anchor !== null){
                        /* Falls win anchor gesetzt ist, springt die Seite zum angegebenen element mit der id */
                        // console.log("scrolling to anchor : "+_anchor);
                        window.scrollTo(0, radio.content.totalOffset(dojo.byId(io.args.anchor)) - 10);
                    }
                    // run after loading the data into DOM:
                        //console.log("Inhalte ausgewechselt.");
    
                    if(io.args.params.callAfterLoad !== undefined && io.args.params.callAfterLoad !== null) {
                        dojo.eval(io.args.params.callAfterLoad);
                    }
                    // hide the Loading Indicator:
                    dojo.byId(io.args.params.loadingIndicator).innerHTML = '';
                    
                    // track pageview
                    radio.track.trackPageview({url:dataURL});
                    
                    radio.init();
                    
                    if(dojo.query('#flash_movie.nrj-flash-movie').length > 0){
                        swfobject.embedSWF("/inc/page/nrj/video/sender/de.radio.swf", "flash_movie", "559", "156", "9.0.115", false, flashvars, params, attributes);
                    }
                  },
                error :       function(error, ioArgs) {
                      console.log('Ein Fehler in xhrGet: ' + error.message);
                      console.error("HTTP status code: ", ioArgs.xhr.status);
                      // hide the Loading Indicator:
                    dojo.byId(io.args.params.loadingIndicator).innerHTML = '';
                      if(error.status === 404 || error.status === '404'){
                          // TODO: Messagebundle:
                          alert('Seite kann nicht gefunden werden');
                      }
                  }
              });
          } else {
             // Redirect:
               //console.log("xhrGet with Redirect.");
              dojo.xhrGet({
                  url:    dataURL,
                sc:     component,
                method: "GET",
                preventCache: true,
                bodyCls: bodyclass,
                anchor: _anchor,
                load:   function(data, io) {
                      
                            // dojo.body().className = io.args.bodyCls;
                            // //console.debug( io.args.bodyCls );
                            
                            // io.args.appState.checkForHome();
                            //console.debug("back1");
    
                            
                            dojo.byId(io.args.sc).innerHTML=data;
                            if(io.args.sc=="body") {
                                window.scrollTo(0,0);
                            }
                            radioSetAccountId();
    
                            window.radio.cometd.updateRegistration();
                            if(io.args.anchor){
                                window.scrollTo(0, radio.content.totalOffset(dojo.byId(io.args.anchor)) - 10);
                               }
                            //console.info("Redirext in xhrGet");
                            radio.init();
                          }
              });
          }
        
        
        // TODO: Analytics tracker:
        // localTracker._trackPageview(dataURL);
    },
    xhrPost : function(dataURL, params) {
        // //console.debug('start of radio.content.xhrPost()');
        // //console.debug('dataURL: ' + dataURL);
        /*

            Usage:
            radio.content.xhrPost('file.jsp', { 'param1':'param1value', 'param2':'param2Value' })
            
            Params:
            service,
            formData,
            ack,
            id
            
         */
        if(dataURL === undefined || dataURL === ""){
            if(radio.content.debug){
                console.log("xhrPost call without dataURL.");
            }
            console.log("xhrPost call without dataURL.");
            return false;
        }
        
        // console.log("XhrPost called.");
        
        var _urlString = dataURL.split("#");
        var _anchor = (_urlString[1] === undefined) ? null : _urlString[1];
        dataURL = _urlString[0];
        
        if(params === undefined || params === null)
        {
            params = {};
        }
        
        if(params.targetId === undefined || params.targetId === null || params.id === undefined || params.id === null)
        {
            params.targetId = 'content';
        }
        var _formdata = params.formData;
        // console.debug(_formdata);
        //Set document.title: 
        // document.title = origBrowserTitle;
        
        try{
            var _newURL = dataURL + ((dataURL.indexOf("?")>-1)?"&":"?")+"part=content";
            // console.log("xhrPost called. dataURL "+dataURL+" newUrl: "+_newURL);
        }
        catch(exception)
        {
            console.debug(exception);
        }
        
        try{
            var _request={"url":_newURL};
            if (params.ack !== null) { _request["js_confirm"]=params.ack;}
            
            for (var i = 0; i < _formdata.length; i++){
                // //console.debug(_formdata[i].name+": "+_formdata[i].value);
                if (_formdata[i].type=="checkbox"){
                    if (_formdata[i].checked){
                        _request[_formdata[i].name]=true;
                        // //console.debug(_request[_formdata[i].name]+" is true.");
                    } else{
                        _request[_formdata[i].name]=false;
                        // //console.debug(_request[_formdata[i].name]+" is false.");
                    }
                } else if( _formdata[i].type=="radio" ){
                    if (_formdata[i].checked){
                        _request[_formdata[i].name]=_formdata[i].value;
                    }
                } else {
                    _request[_formdata[i].name]=_formdata[i].value;
                }
            }
            // REMOVED removeDoubleSlashes QUICKLY: 
            var serviceWithPath = params.service;
            
            console.log("NewUrl: "+_newURL+" und service: "+serviceWithPath);
            if(_newURL !== null){
                
                // if no service is given, set serviceWithPath to newUrl (needed for send-a-friend) 
                if(serviceWithPath == undefined || serviceWithPath==""){
                    serviceWithPath = _newURL;
                }
                
                _request["redirect"]=_newURL;
                dojo.xhrPost({
                    url:        serviceWithPath,
                    content:     _request,
                    sc:            params.targetId,
                    method:     "POST",
//                    bookmark:deriveBookmark(dataURL),
//                    appState: null,
                    preventCache: true,
                    load:    function(data, io) {
                /*        io.args.appState = new HistoryState(data, io.args.sc, dataURL);
                        io.args.appState.showStateData();
                        dojo.back.addToHistory(io.args.appState);*/
                        try{
                            // Nach dem Post js neu einbinden
                            // aktuelle Seite übergeben, damit radio.jsp.pageRequestUrl
                            // nicht an "js.jsp" gebunden wird
                            var pageUrl = radio.jsp.pageRequestUrl;
                            radio.jsp = null;
                            radio.content.appendScript('/js.jsp?thePage='+pageUrl, '');
                            
                            radio.sidebar.unload();
                            
                            dojo.byId(io.args.sc).innerHTML=data;
                            
                            // Testing again:
                            // radio.content.jscriptExec();
                            if(io.args.sc=="content") {
                                window.scrollTo(0,0);
                                
                                // track pageview
                                radio.track.trackPageview({url:dataURL});
                                
                            }
                            radioSetAccountId();
                            // radio.content.jscriptExec(io.args.sc);
                            window.radio.cometd.updateRegistration();
                            if(dojo.query('#flash_movie.nrj-flash-movie').length > 0){
                                swfobject.embedSWF("/inc/page/nrj/video/sender/de.radio.swf", "flash_movie", "559", "156", "9.0.115", false, flashvars, params, attributes);
                            }
                        } catch(exc){
                            console.debug(exc);
                        }
                        radio.init();
                    },
                    error : function(error) {
                        console.debug('Error in xhrPost : '+error);
                    }
                });
            } else {
                dojo.xhrPost({
                    url:            serviceWithPath,
                    sc:             params.targetId,
                    preventCache:     true,
                    method:         "POST",
                    load:   function(data, io) {
                        try{
                            // Nach dem Post js neu einbinden
                            // aktuelle Seite übergeben, damit radio.jsp.pageRequestUrl
                            // nicht an "js.jsp" gebunden wird
                            var pageUrl = radio.jsp.pageRequestUrl;
                            radio.jsp = null;
                            radio.content.appendScript('/js.jsp?thePage='+pageUrl, '');
                            
                            if(io.args.sc=="content") {
                                radio.sidebar.unload();
                            }
                            
                            dojo.byId(io.args.sc).innerHTML=data;
                            if(io.args.sc=="content") {
                                window.scrollTo(0,0);
                            }
                            radioSetAccountId();
                            // radio.content.jscriptExec(io.args.sc);
                            window.radio.cometd.updateRegistration();
                        }catch(exc){
                            console.debug(exc);
                        }
                        radio.init();
                    }
                });
            }
        }
        catch(OtherException)
        {
            //console.debug(OtherException);
        }
        try{
            // localTracker._trackPageview(dataURL);
        }
        catch(ThirdException)
        {
            //console.debug(ThirdException);
        }
    // End of xhrPost():
    },
    refreshPage : function() {
        // This function is called "by the player"
        // after favorite is set from within the player
        var url=radio.jsp.pageRequestUrl;
        radio.content.xhrGet(url, null);
    },
    checkForFormData: function(){
        // Restoring input fields on CREATE ACCOUNT
        if(radio.content.elementExists("registerUser")){
            radio.content.restoreInputField('email');
            radio.content.restoreInputField('login');
            radio.content.restoreRadioButton('newsletterHtml');
            radio.content.restoreRadioButton('newsletterText');
            radio.content.restoreRadioButton('newsletterhtml');
        }
        
        // Delete registration information on successfull completion
        if(radio.content.elementExists('create_account_feedback')){
            radio.content.saveAttribut('email', '');
            radio.content.saveAttribut('login', '');
        }
        
        // Restoring input values on Newsletter.
        if(radio.content.elementExists("newsletter1")){
            radio.content.restoreInputField('newsletter-email');
            radio.content.restoreRadioButton('newsletterHtml');
            radio.content.restoreRadioButton('newsletterText');
            radio.content.restoreRadioButton('newsletterhtml');
        }
        
        // Restoring input values on Login
        if(radio.content.elementExists("loginform")){
            dojo.byId('username').focus();
            radio.content.restoreInputField('username');
        }
        
    },
    showTopGenreInit : function(){
        if(dojo.query('#top_genres_element').length > 0){
            dojo.query('.radio_top_genres_hoertipp a').connect('onmouseenter',function(e){
                dojo.query('.radio_top_genres_hoertipp').addClass('linkHighlighting');
            });
            dojo.query('.radio_top_genres_hoertipp a').connect('onmouseleave',function(e){
                dojo.query('.radio_top_genres_hoertipp').removeClass('linkHighlighting');
            });
        }
    },
    showTopGenre : function( slotNumber, tagValue, systemTag, teaserDomain, teaserBroadcast, actLink ) {
        //Links in der Übersicht hervorheben:
        var actGenreLink = null;
        
        if(actGenreLink){
            actGenreLink.className = ''; 
        }else{
            dojo.query('.highlighted').removeClass('highlighted');
            if(slotNumber != 1) { 
                if(radio.content.elementExists('firstGenrePickerButton')){
                    dojo.byId('firstGenrePickerButton').className = ''; 
                    } else {
                        dojo.query('slot_1::first-child').className = ''; 
                    }
                }
        }
        
        radio.content.toggleLoadingIndicator('top_genres_element_loading_div',true);
        
        actGenreLink = actLink;
        actLink.className = 'highlighted';
        
        var _top_genres_url = "/cms/top_genres_broadcast.jsp?tagValue="+tagValue+"&systemTag="+systemTag+"&teaserDomain="+teaserDomain+"&slotNumber="+slotNumber+"&teaserBroadcast="+teaserBroadcast;
        //radio.content.xhrGet(_top_genres_url, { 'loadingIndicator':'top_genres_element_loading_div',targetId:'top_genre_element_broadcast'});
        dojo.xhrGet({
            url :             _top_genres_url,
            method :          "GET",
            preventCache:     true,
            handleAs:        'text',
            headers: {
                "Content-Type": "text/plain",
                "Content-Encoding": "UTF-8"
            },
            loadingIndicator:    'top_genres_element_loading_div',
            load:             function(data, io) {
                dojo.byId('top_genre_element_broadcast').innerHTML = data;
                radio.content.toggleLoadingIndicator(io.args.loadingIndicator);
                radio.content.showTopGenreInit();
                radio.content.connectLinks();
                
                // track pageview
                radio.track.trackPageview({url:''});
                
              },
            error :           function(error) {
                  console.log('Fehler in radio.js (showTopGenre()):');
                  console.debug(error);
              }
          });
    },
    searchSubmit : function(evt,htmlElement){
        dojo.stopEvent(evt);
        if(htmlElement === undefined) htmlElement = this;
        console.debug("Element ID: "+ htmlElement.id);
        
        var _searchURL = radio.jsp.searchUrl;
        var _searchstring = false;
        
        if(htmlElement.id == "content-tab-search-button" || htmlElement.id == "content-tab-search-field")
        {
            var _searchstring = dojo.byId("content-tab-search-field").value;
        }
        else if (this.id == "content-search-button-top" || htmlElement.id == "content-search-field-top")
        {
            // Oberes Search Field auf Suchergebnisseite
            var _searchstring = dojo.byId("content-search-field-top").value;
        }
        else if (this.id == "content-search-button-bottom" || htmlElement.id == "content-search-field-bottom")
        {
            // Unteres Search Field auf Suchergebnisseite
            var _searchstring = dojo.byId("content-search-field-bottom").value;
        }
        else if (this.id == "searchbutton" || htmlElement.id == "searchinput")
        {
            // Search Element Startseite:
            var _searchstring = dojo.byId("searchinput").value;
        }
        else
        {
            // Alle anderen Bereiche
            var _searchstring = dojo.byId("content-search-field").value;
        }
        
        if(!_searchstring){
         
             if(radio.jsp.broadcastlist == "" || radio.jsp.broadcastlist === undefined){
                 console.log("menuUrl is empty: "+radio.jsp.broadcastlist);
             } else { 
                 radio.content.xhrGet(radio.jsp.broadcastlist); 
             }
             
        } else {
         var _sucheString = (_searchstring).replace('/#/', '%23');
         console.debug("Suche nach "+_sucheString+" wird aufgerufen.");
         // track event
         radio.track.trackEvent('tabs/search','navigate',_sucheString);
         radio.content.xhrGet(_searchURL+'?q='+_sucheString+'&u='+dojo.byId('searchtypeuser').value+radio.jsp.getLastSearchSetting);
        }
        return false;
    },
    totalOffset : function(element) {
        var result = 0;
        while (element) {
            result += element.offsetTop;
            element = element.offsetParent;
        }
        return result;
    },
    deriveBookmark : function(dataUrl){
        var s = dataUrl;
            var u = new dojo._Url(dataUrl);
                var path = u.path;
                if (path) {
                        if(path.indexOf("/./") === 0){
                        path=path.substring(3);
                    }
                        if(path.indexOf("/") === 0){
                        path=path.substring(1);
                    }                                
                }
                return escape(path);
    },
    
    loadingIndicators : {
        tabLoadingIndicator : '<img src="/inc/img/loading_tabs.gif" />',
        contentLoadingIndicator : '',
        whiteboxLoadingIndicator : '<img src="/inc/img/loader-content-transparent.gif" />'
    },
    getLoadingIndicator : function(idOfIndicatorElement) {
        
        if(dojo.query('.whitebox-body #'+idOfIndicatorElement).length > 0){
            //LoadingIndicator mit Weißem Hintergrund:
            return radio.content.loadingIndicators.whiteboxLoadingIndicator;
        } else if(dojo.query('.content-body-main #'+idOfIndicatorElement).length > 0){
            //Loading Indicator mit hell braunem Hintergrund:
            return radio.content.loadingIndicators.contentLoadingIndicator;
            
        } else if(dojo.query('#content-tab #'+idOfIndicatorElement).length > 0){
            //Loading Indicator mit dunkel braunem Hintergrund:
            return radio.content.loadingIndicators.tabLoadingIndicator;
        } else {
            //Default Loading Indicator:
            return radio.content.loadingIndicators.whiteboxLoadingIndicator;
        }
    },
    toggleLoadingIndicator : function(idOfIndicatorElement, showLoadingIndicator){
        
        var _loadingIndicatorString = '';
        
        if(radio.content.elementExists(idOfIndicatorElement) === true){
            
            var _currentInnerHtml = dojo.trim(dojo.byId(idOfIndicatorElement).innerHTML);
            
            //Abfrage für den LoadingIndicator:
            if(_currentInnerHtml === '' || showLoadingIndicator === true) {
                _loadingIndicatorString = radio.content.getLoadingIndicator(idOfIndicatorElement);
                
            } else {
                _loadingIndicatorString = '';
            }
            if(showLoadingIndicator === false){
                _loadingIndicatorString = '';
            }
            //LoadingIndicator in den DOM setzen:
            dojo.byId(idOfIndicatorElement).innerHTML = _loadingIndicatorString;
        }
    },
    appendScript : function(strJavascriptFile, doAfterLoad) {
        // Function um Scripte nachzuladen:
        if(strJavascriptFile !== ''){
            
            // Holen der Javascript datei:
            dojo.xhrGet({
                url: strJavascriptFile,
                handleAs: 'javascript',
                sync:true,
                load:function(data,io){
                    if(doAfterLoad !== ''){
                        dojo.eval(doAfterLoad);
                    }
                }
            });
        }
    },
    elementExists : function(elementId) {
        /* Prüft, ob ein Element vorhanden ist
           gibt true oder false zurück. */
        if(dojo.byId(elementId) !== null && dojo.byId(elementId) !== undefined){
            return true;
        } else {
            return false;
        }
    },
    notLoggedInRedirect : function() {
        
        var _activeTab = dojo.query('.content-tab-navigation a.active');
        var _tabIndex = dojo.attr(_activeTab[0],'index');
        
        var urlToReturnTo = "/";
        
        console.info("Tab index: "+_tabIndex);
        
        switch(Number(_tabIndex)){
            case 1:
                urlToReturnTo = '/home.jsp';
                break;
            case 2:
                urlToReturnTo = '/broadcast-list.jsp';
                break;
            case 3:
                urlToReturnTo = 'siehoeren';
                break;
            case 4:
                var _searchterm = dojo.attr(_activeTab[0],'searchterm');
                urlToReturnTo = '/broadcast_search.jsp?q='+_searchterm;
                break;
            case 5:
                urlToReturnTo = '/my_radio.jsp';
                break;
        }
        //console.info("URL TO GO TO: "+urlToReturnTo);
        
        radio.content.xhrGet("/"+radio.jsp.loginURL+"?forwardToPage="+urlToReturnTo);
    },
    loginUser: function(){
        //console.debug('use: radio.content.loginUser');
        var _updateFormElements = dojo.byId("loginform").elements;
        //console.log("UpdateForm elements: "+_updateFormElements);
        var _url = radio.jsp.webcontext;
        //console.log("URL for Login: "+_url);
        // //console.debug('radio.jsp.webcontext:'+radio.jsp.webcontext);
        radio.content.xhrPost(_url, { 'service':'/account/login', 'formData':_updateFormElements,'ack':true});
        radioSetAccountId();
    },
    getLinkHref : function(linkNode){
        var _strHref = dojo.attr(linkNode,'href');
        if(_strHref == ''){
            return '';
        } else {
            return _strHref;
        }
    },
    moveContentIfAdsPresent : function(){
        if(dojo.isIE) {
			setTimeout(function (){ //jw: (experimental) need to wait for all elements to be ready
				dojo.style(dojo.byId('ads'),'display','block');
				dojo.addOnLoad(function(){
					if(radio.content.elementExists('superbanner')){
						var _height = dojo.coords('superbanner').h;
						dojo.style(dojo.byId('content-wrapper'),'top',_height+'px');
						dojo.style(dojo.byId('player'),'top',(Number(_height)+45)+'px');    
					}
					dojo.style(dojo.byId('ads'),'visibility','visible');
				});
			},2000);
		} else {
			dojo.style(dojo.byId('ads'),'display','block');
			dojo.addOnLoad(function(){
				if(radio.content.elementExists('superbanner')){
					var _height = dojo.coords('superbanner').h;
					dojo.style(dojo.byId('content-wrapper'),'top',_height+'px');
					dojo.style(dojo.byId('player'),'top',(Number(_height)+45)+'px');    
				}
				dojo.style(dojo.byId('ads'),'visibility','visible');
			});
		}

    }
};

// --- [ functions for eventHandling ] ---:
window.radio.eventHandling = {
    searchOnEnter : function(e){
        if (e.keyCode == dojo.keys.ENTER){
            dojo.stopEvent(e);
            radio.content.searchSubmit(e,this);
        }
    },
    loginOnEnter: function(e){
        if (e.keyCode == dojo.keys.ENTER){
            e.preventDefault();
            radio.content.loginUser();
        }
    },
    noSendOnEnter: function(e){
        if (e.keyCode == dojo.keys.ENTER){
            dojo.stopEvent(e);   
        }
    },
    listRowMouseOver : function(e){
        var _rowId = dojo.attr(this,'rowId');
        dojo.query('#'+_rowId).addClass('content-list-hover');
    },
    
    listRowMouseOut : function(e){
        var _rowId = dojo.attr(this,'rowId');
        dojo.query('#'+_rowId).removeClass('content-list-hover');
    },
    hrefLinkOnClick : function(e){
        //Handling for href-link onclick (<a href="..." class="href-link">:
        dojo.stopEvent(e);
        e.stopPropagation();

        var _linkObject = null;
        if(dojo.hasAttr(this,'linkobject')===true){
            _linkObject = dojo.fromJson(dojo.attr(this,'linkobject'));
        }
        var _strHref = radio.content.getLinkHref(this);
        
        // Prüfung auf andere Subdomain um dann nicht per xhrGet, sondern per window.location.href weiterzuleiten?
        
        if(_strHref !== ''){
            radio.content.xhrGet(_strHref,_linkObject);
        }
    },
    jsLinkOnClick : function(e){
        dojo.stopEvent(e);
        var _linkObject = dojo.fromJson(dojo.attr(this,"linkobject"));
        
        if(_linkObject.url !== null){
            // Prüfen, ob es eine andere Domain / Subdomain ist
            if(_linkObject.url.substring(0,1)!="/"){
                if(radio.content.debug){
                    console.log("redirect, because url substring 0,1 eq /");
                }
                window.location.href = _linkObject.url;
            } else {
                // console.debug(_linkObject);
                radio.content.xhrGet(_linkObject.url, _linkObject);
            }
        }
        // track event
        if(_linkObject.event !== null){
            radio.track.trackEvent.apply(this,_linkObject.event);
        }
        
    },
    jsLinkPostOnClick : function(e){
        dojo.stopEvent(e);
        var _linkObject = dojo.fromJson(dojo.attr(this,"linkobject"));
        
        if(_linkObject.url !== null){
            // Prüfen, ob es eine andere Domain / Subdomain ist
            if(_linkObject.url.substring(0,1)!="/"){
                window.location.href = _linkObject.url;
            } else {
                radio.content.xhrPost(_linkObject.url);
            }
        }
        // track event
        if(_linkObject.event !== null){
            radio.track.trackEvent.apply(this,_linkObject.event);
        }
        
    },
    jsLinkExternalOnClick : function(e){
        dojo.stopEvent(e);
        var _linkObject = dojo.fromJson(dojo.attr(this,"linkobject"));
        
        if(_linkObject.url !== null){
            //window.open(_linkObject.url, "radio_popup", "width=645,height=400,scrollbars=yes");
            window.open(_linkObject.url, "_blank");
        }
        // track event
        if(_linkObject.event !== null){
            radio.track.trackEvent.apply(this,_linkObject.event);
        }
    },
    jsLinkExternalPopupOnClick : function(e){
        dojo.stopEvent(e);
        var _linkObject = dojo.fromJson(dojo.attr(this,"linkobject"));
        
        if(_linkObject.url !== null){
            window.open(_linkObject.url, "radio_popup", "width=645,height=400,scrollbars=yes");
            //window.open(_linkObject.url, "_blank");
        }
        // track event
        if(_linkObject.event !== null){
            radio.track.trackEvent.apply(this,_linkObject.event);
        }
    },
    jsLinkExternalTabOnClick : function(e){
        dojo.stopEvent(e);
        var _linkObject = dojo.fromJson(dojo.attr(this,"linkobject"));
        
        if(_linkObject.url !== null){
            window.open(_linkObject.url);
        }
        // track event
        if(_linkObject.event !== null){
            radio.track.trackEvent.apply(this,_linkObject.event);
        }
    },
    backLinkOnClick : function(e){
        console.debug('BACK onclick ')
        dojo.stopEvent(e);
        var _backURL = radio.ApplicationState.retrieveFromHistory();
        //console.log("Backlink from History: "+_backURL);
        radio.content.xhrGet(_backURL);
        //console.log('BACK onclick: ')
    }
};

/**
*
*  URL encode / decode
*  http://www.webtoolkit.info/
*
**/
/*
window.radio.url = {
    // public method for url encoding
    encode : function (string) {
        return escape(this._utf8_encode(string));
    },
 
    // public method for url decoding
    decode : function (string) {
        return this._utf8_decode(unescape(string));
    }
 
    // private method for UTF-8 encoding
    _utf8_encode : function (string) {
        string = string.replace(/\r\n/g,"\n");
        var utftext = "";
 
        for (var n = 0; n < string.length; n++) {
 
            var c = string.charCodeAt(n);
 
            if (c < 128) {
                utftext += String.fromCharCode(c);
            }
            else if((c > 127) && (c < 2048)) {
                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128);
            }
            else {
                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128);
            }
 
        }
 
        return utftext;
    }
 
    // private method for UTF-8 decoding
    _utf8_decode : function (utftext) {
        var string = "";
        var i = 0;
        var c = c1 = c2 = 0;
 
        while ( i < utftext.length ) {
 
            c = utftext.charCodeAt(i);
 
            if (c < 128) {
                string += String.fromCharCode(c);
                i++;
            }
            else if((c > 191) && (c < 224)) {
                c2 = utftext.charCodeAt(i+1);
                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                i += 2;
            }
            else {
                c2 = utftext.charCodeAt(i+1);
                c3 = utftext.charCodeAt(i+2);
                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                i += 3;
            }
 
        }
 
        return string;
    }
 
}*/

// dojo connect:
window.radio.init = function() {
    
    var logMessage = "";
    /* 
     * TODO Es werden noch alle Skripte auf allen Seiten eingebunden und/oder initialisiert
     */
    // Javascripte nachladen:
    if(radio.favorites === undefined){
        radio.content.appendScript('/inc/js/favorites.js', 'radio.favorites.init()');
    } else {
        radio.favorites.init();
    }
    if(radio.sidebar === undefined){
        logMessage += "sidebar.js\n";
        radio.content.appendScript('/inc/js/sidebar.js', 'radio.sidebar.init()');
    } else {
        if(radio.content.elementExists("content-body-sidebar")){
            radio.sidebar.init();
        }
    }
    if(radio.tagging === undefined){
        logMessage += "tagging.js\n";
        radio.content.appendScript('/inc/js/tagging.js', 'radio.tagging.init()');
    }  else {
        if(radio.content.elementExists("all-tags-division") || radio.content.elementExists("my-radio-navigation") || radio.content.elementExists("broadcast-list")){
            radio.tagging.init();
        }
    }
    
    if(radio.rating === undefined){
        if(dojo.query('#rating-stars').length > 0){
            radio.content.appendScript('/inc/js/rating-stars.js', 'radio.rating.init()');
        }
    } else {
        if(radio.content.elementExists("rating-stars")){
            radio.rating.init();
        }
    }    
    if(radio.broadcastsearch === undefined){
        if(dojo.query('#broadcast-search').length > 0){
            radio.content.appendScript('/inc/js/broadcast-search.js', 'radio.broadcastsearch.init()');
        }
    } else {
        if(radio.content.elementExists("broadcast-search")){
            radio.broadcastsearch.init();
        }
    }    
    if(radio.nowplaying === undefined){
        radio.content.appendScript('/inc/js/now-playing.js', 'radio.nowplaying.init()');
    } else {
        // console.log("now playing already loaded, now init.");
        if(radio.content.elementExists("now-playing-list")){ 
            radio.nowplaying.init();
        }
    }
    if(radio.similarBroadcastsElement === undefined){
        radio.content.appendScript('/inc/js/similar-broadcasts-element.js', 'radio.similarBroadcastsElement.init();radio.currentlyPlayed.init();');
    } else {
        if(radio.content.elementExists("similar-broadcasts-element-slider1")){
            radio.similarBroadcastsElement.init();
        } else {
            radio.similarBroadcastsElement.unLoad();
        }
        radio.currentlyPlayed.init();
    }
    if(radio.broadcastfamily === undefined){
        logMessage += "broadcast-family.js\n";
        radio.content.appendScript('/inc/js/broadcast-family.js', 'radio.broadcastfamily.init()');
    } else {
        if(radio.content.elementExists("broadcast-info-broadcast-family")){
            radio.broadcastfamily.init();
        }
    }
    if(radio.broadcastlist === undefined){
        logMessage += "broadcast-list.js\n";
        radio.content.appendScript('/inc/js/broadcast-list.js', 'radio.broadcastlist.init()');
    } else {
        if(radio.content.elementExists("broadcast-list")){
            radio.broadcastlist.init();
        }
    }
    if(radio.myradio === undefined){
        logMessage += "my-radio.js\n";
        radio.content.appendScript('/inc/js/my-radio.js', 'radio.myradio.init()');
    } else {
        if(radio.content.elementExists("my-radio-navigation")){
            radio.myradio.init();
        }
    }
    if(radio.highlights === undefined){
        if(dojo.query('#home_highlights_wrapper').length > 0){
            radio.content.appendScript('/inc/js/highlights.js', 'radio.highlights.init()');
        }
    } else {
        if(radio.content.elementExists("home_highlights_wrapper")){
            radio.highlights.init();
        }
    }    
    if(window.radio.content.swfobject === undefined){
        logMessage += "swfobject.js\n";
        radio.content.appendScript('/inc/js/swfobject.js', 'window.radio.content.swfobject.init()');
    } else {
        window.radio.content.swfobject.init();
    }

    if(window.radio.xpress != undefined && radio.content.elementExists("video-hits")){
        radio.xpress.init();
    }
    
    if(window.radio.xpress === undefined && radio.content.elementExists("video-hits")){
        radio.content.appendScript('/inc/js/l-tabs/xpress/xpress-tv-tool.js', 'radio.xpress.init()');
    } 
    
    //init the Top Genres:
    radio.content.showTopGenreInit();
    radio.content.connectLinks();
    radio.content.checkForFormData();
    
    if (radio.content.elementExists("adresponse")){
        
        dojo.addOnLoad(function(){
                setTimeout(function(){
                    dojo.require("dojo.fx");
                    dojo.fx.wipeIn({node: "adresponse",duration: 1000}).play();
                }, 2000);
        });
        
    }
    
    if (radio.content.elementExists("playeradresponse")){
        
        dojo.addOnLoad(function(){
                setTimeout(function(){
                    dojo.require("dojo.fx");
                    
                    if (!radio.content.elementExists("videoadplayer")){
                        dojo.fx.wipeIn({node: "playeradresponse",duration: 1000}).play();
                    }

                    // only play videoad if not already done
                    if(radio.videoadplay === undefined || radio.videoadplay === null) {
                    	
                    	dojo.fx.wipeIn({node: "playeradresponse",duration: 1000}).play();
                    	// TODO: dojo.fx.wipeIn({onEnd:foo}); -> New in Dojo 1.4!
                    
	                    // add videoad script to head
	                    if (radio.content.elementExists("videoadplayer")){
	                    
	                    	if (radio.content.elementExists("flowplayerscript")){
	                    		dojo.destroy("flowplayerscript");
	                    	}
	                        	
		                    	var videoad_script = dojo.create("script", {
		                    	    "src":"http://"+radio.jsp.pageConfigServerSite+"/inc/videoads/flowplayer-3.1.4.min.js",
		                    	    "type":"text/javascript",
		                    	    "id":"flowplayerscript"
		                    	});
		                    	dojo.query("head").addContent(videoad_script);
		                    	
		                    	dojo.addOnLoad(function(){
		                    		
		                    		if (radio.content.elementExists("videoadscript")){
		                    			dojo.destroy("videoadscript");
		                    		}
		                            	
	    	                    	var videoad_script = dojo.create("script", {
	    	                    	    "src":"http://"+radio.jsp.pageConfigServerSite+"/inc/js/videoads.js",
	    	                    	    "type":"text/javascript",
	    	                    	    "id":"videoadscript"
	    	                    	});
	    	                    	dojo.query("head").addContent(videoad_script);
		                        	
		                    	});
	                    	
	                    	
	                    	
	                    }
                    }
                                   
                }, 0); // time to wait before opening playeradresponse
        });
        
    }
    
    if (radio.content.elementExists("browserupgrade")){
        
        dojo.addOnLoad(function(){
                setTimeout(function(){
                    dojo.require("dojo.fx");
                    dojo.fx.wipeIn({node: "browserupgrade",duration: 1000}).play();
                }, 3500);
        });
        
    }
    
    console.info("radio.init line 1718 / radio.js");
};

//Add on load:
dojo.addOnLoad(window.radio.init);
dojo.addOnLoad(function(){
    var stateData = dojo.byId("content").innerHTML;
    // if(radio.jsp.requestGetRequestURL==null) radio.jsp.requestGetRequestURL = "http://80er.radiolabs.de/broadcast-list.jsp";
     var appState = new HistoryState(stateData,"content", radio.jsp.relativeRequestUrl);
        dojo.back.setInitialState(appState);
        // Add current page to history:
        radio.ApplicationState.addToHistory(location.href);
        //console.debug("Hier sind wir: "+location.href + ", requetstURL: "+radio.jsp.requestGetRequestURL);
        // window.setInterval("localTracker._trackEvent('Player','Play','"+radio.jsp.pageSubdomain+"');", 180000); // send heartbeat
        // localTracker._setVar(radio.jsp.localTracker_setVar);        

         var link = unescape(new dojo._Url(document.URL).fragment || "");
    if (link !== undefined && link !== "") {
            console.debug("Zurück: "+location.href + ", link: "+link);
                window.radio.content.xhrGet(link, null);
      
        }
     
});
dojo.addOnLoad(function(){window.radio.content.moveContentIfAdsPresent();});