var JsAjaxHandler = Class.create({ /* * Parameter, die von den erbenden Klassen gesetzt werden muessen */ /* Die verfuegbaren 'actions' */ availableActions: new Object(), /* Diese sollen in der Methode "initActions" gesetzt werden */ initActions: function() {}, /* Die Basis-URL fuer die Requests, *inklusive* ? bzw. & also z.B. "ajax.php?" oder "ajax.php?a=b&" */ baseRequestURL: '', /* * Initialisierung */ initialize: function() { /* Actions initialisieren */ this.initActions(); }, /* * Gibt ein XML-Http-Request-Objekt zurueck */ getXMLHttpObj: function() { var xmlHttp = null; // Mozilla, Opera, Safari sowie Internet Explorer 7 if (typeof XMLHttpRequest != 'undefined') { xmlHttp = new XMLHttpRequest(); } if (!xmlHttp) { // Internet Explorer 6 und aelter try { xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { xmlHttp = null; } } } if(!xmlHttp) return false; return xmlHttp; }, /* * Verarbeitet Antworten des Servers */ handleResponse: function(xmlHttp, Action, callbackFunction) { /* Der IE (Versionen 6 + 7 getestet) scheint mit manchen XML-Daten nicht zurechtzukommen. * Daher gibts hier ein haessliches Workaround :) */ if(navigator.userAgent.indexOf("MSIE") != -1) { var xmlRes = new ActiveXObject("Microsoft.XMLDOM"); xmlRes.loadXML(xmlHttp.responseText); callbackFunction(xmlRes); } else callbackFunction(xmlHttp.responseXML); }, /* * Fuehrt eine der verfuegbaren 'actions' durch */ doAction: function(actionIdent, paramValues, callbackFunction) { /* Ueberpruefen, ob die Action existiert */ if(!this.availableActions[actionIdent]) return false; /* Aktuelle Action speichern */ var currentAction = this.availableActions[actionIdent]; /* Request-URL zusammenbauen */ var url = this.baseRequestURL + "action=" + actionIdent; /* GET-Parameter anhaengen */ var i; for(i = 0; i < currentAction["params"].length; i++) { var paramName = currentAction["params"][i]; url += "&" + encodeURIComponent(paramName) + "=" + encodeURIComponent(paramValues[paramName]); } /* Eventuell POST-Parameter hinzufuegen */ if(currentAction["post_params"].length) { var postParamString = ""; for(i = 0; i < currentAction["post_params"].length; i++) { if(i > 0) postParamString += "&"; var paramName = currentAction["post_params"][i]; postParamString += encodeURIComponent(paramName) + "=" + encodeURIComponent(paramValues[paramName]); } method = "POST"; } else method = "GET"; /* XML-Http-Request-Objekt erstellen */ var xmlHttp = this.getXMLHttpObj(); /* MIME-Type erzwingen - im IE (Versionen 6 + 7 getestet) nicht moeglich */ if(currentAction["xml_output"] && navigator.userAgent.indexOf("MSIE") == -1) xmlHttp.overrideMimeType("text/xml"); /* URL laden */ xmlHttp.open(method, url, true); /* Da in einer neuen function() das 'this' nicht mehr zur Verfuegung steht */ handleResponse = this.handleResponse; xmlHttp.onreadystatechange = function() { if(xmlHttp.readyState != 4) return; handleResponse(xmlHttp, currentAction, callbackFunction); }; /* Bei POST die Parameter senden */ if(method == "POST") { xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xmlHttp.setRequestHeader("Content-length", postParamString.length); xmlHttp.setRequestHeader("Connection", "close"); xmlHttp.send(postParamString); } else { xmlHttp.send(null); } return true; } }); /* radio m AJAX-Klasse */ var RadioMAjaxHandler = Class.create(JsAjaxHandler, { baseRequestURL: '/ajax.php?', initActions: function() { this.availableActions = new Object(); this.availableActions["ManuskriptAnfordern"] = new Object(); this.availableActions["ManuskriptAnfordern"]["name"] = "ManuskriptAnfordern"; this.availableActions["ManuskriptAnfordern"]["params"] = new Array('podcast_id', 'stage', 'name', 'email', 'message', 'manuskript_captcha_id', 'manuskript_captcha'); this.availableActions["ManuskriptAnfordern"]["post_params"] = new Array(); this.availableActions["podcastEmpfehlen"] = new Object(); this.availableActions["podcastEmpfehlen"]["name"] = "podcastEmpfehlen"; this.availableActions["podcastEmpfehlen"]["params"] = new Array('recommend_id', 'stage', 'sender_name', 'sender_email', 'recipient_name', 'recipient_email'); this.availableActions["podcastEmpfehlen"]["post_params"] = new Array(); }, ManuskriptAnfordern: function(podcast_id, stage, name, email, message, manuskript_captcha_id, manuskript_captcha, callback) { var params = new Object(); params.podcast_id = podcast_id; params.stage = stage; params.name = name; params.email = email; params.message = message; params.manuskript_captcha_id = manuskript_captcha_id; params.manuskript_captcha = manuskript_captcha; return this.doAction('ManuskriptAnfordern', params, callback); }, podcastEmpfehlen: function(recommend_id, stage, sender_name, sender_email, recipient_name, recipient_email, callback) { var params = new Object(); params.recommend_id = recommend_id; params.stage = stage; params.sender_name = sender_name; params.sender_email = sender_email; params.recipient_name = recipient_name; params.recipient_email = recipient_email; return this.doAction('podcastEmpfehlen', params, callback); }, podcastEmpfehlenGetFormHTML: function(podcast_id, callback) { this.podcastEmpfehlen(podcast_id, 'request_form', '', '', '', '', function(XMLDoc) { var root = XMLDoc.documentElement; var formHTML = root.getElementsByTagName("formHTML")[0].firstChild.nodeValue; callback(formHTML); }); }, podcastEmpfehlenSend: function(podcast_id, sender_name, sender_email, recipient_name, recipient_email, callback) { this.podcastEmpfehlen(podcast_id, 'send', sender_name, sender_email, recipient_name, recipient_email, function(XMLDoc) { var root = XMLDoc.documentElement; var success = root.getElementsByTagName("success")[0].firstChild.nodeValue; var message = root.getElementsByTagName("message")[0].firstChild.nodeValue; callback(success, message); }); }, ManuskriptAnfordernGetFormHTML: function(podcast_id, callback) { this.ManuskriptAnfordern(podcast_id, 'request_form', '', '', '', '', '', function(XMLDoc) { var root = XMLDoc.documentElement; var formHTML = root.getElementsByTagName("formHTML")[0].firstChild.nodeValue; callback(formHTML); }); }, ManuskriptAnfordernSend: function(podcast_id, name, email, message, manuskript_captcha_id, manuskript_captcha, callback) { this.ManuskriptAnfordern(podcast_id, 'send', name, email, message, manuskript_captcha_id, manuskript_captcha, function(XMLDoc) { var root = XMLDoc.documentElement; var success = root.getElementsByTagName("success")[0].firstChild.nodeValue; var formHTML = null; if(!success || success == '0') formHTML = root.getElementsByTagName("formHTML")[0].firstChild.nodeValue; callback(success, formHTML); }); } }); /* Funktionen zum Erweitern/Ausfahren der Player-/Content-Box */ var PlayerboxAjaxContent = Class.create({ /* Der Bereich, in den aller Content geladen wird */ contentDiv: null, /* Ob der Bereich aktuell visible oder invisible ist */ visible: false, /* Ob der Lade-Bereich aktuell angezeigt wird */ loading: false, /* Welcher Content gerade geladen ist */ contentIdent: null, initialize: function() { this.contentDiv = $('playerbox_ajax_content'); if(!this.contentDiv) return; }, /* Zeigt einen Lade-Zustand an */ setLoading: function(inElem) { if(!inElem && this.loading) return; var loadingHTML = 'Lade...'; if(inElem) inElem.update(loadingHTML); else { var tmp = new Element('div', { id: 'playerbox_ajax_loading' } ); tmp.update(loadingHTML); this.contentDiv.parentNode.insertBefore(tmp, this.contentDiv); this.loading = true; } }, /* Blendet den Lade-Zustand aus */ setNotLoading: function(inElem) { if(inElem) { inElem.update(''); return; } if(!this.loading) return; $('playerbox_ajax_loading').parentNode.removeChild($('playerbox_ajax_loading')); this.loading = false; }, /* Content aendern */ changeContent: function(content) { /* Wenn der Content-Bereich schon sichtbar ist, wird zunaechst der alte Inhalt ausgeblendet */ if(this.visible) { var tmp = this.contentDiv; Effect.toggle('playerbox_ajax_content', 'slide', { duration: .5, afterFinish: function() { tmp.update('
'+content+'<\/div>'); Effect.toggle('playerbox_ajax_content', 'slide', { duration: 1 }); } }); return; } this.contentDiv.update('
'+content+'<\/div>'); Effect.toggle('playerbox_ajax_content', 'slide', { duration: 1 }); this.visible = true; }, /* Content setzen - ohne Uebergangsanimation! */ setContent: function(content) { this.contentDiv.update('
'+content+'<\/div>'); }, /* Content-Bereich ausblenden */ hide: function() { if(!this.visible) return; window.clearTimeout(this.hideTimeout); var tmp = this; Effect.toggle('playerbox_ajax_content', 'slide', { duration: 1, afterFinish: function() { tmp.visible = false; } }); }, /* Content-Bereich nach time ms wieder ausblenden */ hideIn: function(time) { /* FIXME: Haesslich, da this hier nicht verfuegbar ist */ this.hideTimeout = window.setTimeout('playerboxAjaxContentHandler.hide()', time); } }); /* Funktion zum Podcast-Empfehlen */ function podcastEmpfehlenStart(podcast_id) { /* Wenn schon geladen, ausblenden */ if(playerboxAjaxContentHandler.contentIdent == 'podcastEmpfehlen' && playerboxAjaxContentHandler.visible) { playerboxAjaxContentHandler.hide(); return; } /* Ident setzen */ playerboxAjaxContentHandler.contentIdent = 'podcastEmpfehlen'; /* Lade-Bereich anzeigen */ playerboxAjaxContentHandler.setLoading(); var handle = new RadioMAjaxHandler; handle.podcastEmpfehlenGetFormHTML(podcast_id, function(formHTML) { /* Formular anzeigen */ playerboxAjaxContentHandler.changeContent(formHTML); /* Lade-Bereich ausblenden */ playerboxAjaxContentHandler.setNotLoading(); }); } function podcastEmpfehlenSubmit(podcast_id, form) { /* Submit-Button ausblenden */ $(form.submit_button).hide(); /* Eventuelle alte Fehler ausblenden */ $('recommend_podcast_error').update(''); var handle = new RadioMAjaxHandler; handle.podcastEmpfehlenSend(podcast_id, $F(form.sender_name), $F(form.sender_email), $F(form.recipient_name), $F(form.recipient_email), function(success, message) { if(success == '0') { /* Fehlermeldung ausgeben */ $('recommend_podcast_error').update(message); /* Submit-Button wieder anzeigen */ form.submit_button.show(); } else { /* Erfolgsmeldung ausgeben */ playerboxAjaxContentHandler.setContent(message); playerboxAjaxContentHandler.hideIn(2000); } }); } /* Funktionen zum Manuskript-Anfordern */ function ManuskriptAnfordernStart(podcast_id) { /* Wenn schon geladen, ausblenden */ if(playerboxAjaxContentHandler.contentIdent == 'ManuskriptAnfordern' && playerboxAjaxContentHandler.visible) { playerboxAjaxContentHandler.hide(); return; } /* Ident setzen */ playerboxAjaxContentHandler.contentIdent = 'ManuskriptAnfordern'; /* Lade-Bereich anzeigen */ playerboxAjaxContentHandler.setLoading(); var handle = new RadioMAjaxHandler; handle.ManuskriptAnfordernGetFormHTML(podcast_id, function(formHTML) { /* Formular anzeigen */ playerboxAjaxContentHandler.changeContent(formHTML); /* Lade-Bereich ausblenden */ playerboxAjaxContentHandler.setNotLoading(); }); } function ManuskriptAnfordernSubmit(podcast_id, form) { /* Submit-Button ausblenden */ $(form.submit_button).hide(); /* Eventuelle alte Fehler ausblenden */ $('manuskript_anfordern_error').update(''); var handle = new RadioMAjaxHandler; handle.ManuskriptAnfordernSend(podcast_id, $F(form.name), $F(form.email), $F(form.message), $F(form.manuskript_captcha_id), $F(form.manuskript_captcha), function(success, formHTML) { if(success == '0') { playerboxAjaxContentHandler.setContent(formHTML); /* Fehlermeldung ausgeben */ //$('manuskript_anfordern_error').update(message); /* Submit-Button wieder anzeigen */ //form.submit_button.show(); } else { /* Erfolgsmeldung ausgeben */ playerboxAjaxContentHandler.setContent('

Ihre Anfrage wurde erfolgreich versandt. Sie erhalten in Kürze eine Rückmeldung von uns!

'); playerboxAjaxContentHandler.hideIn(2000); } }); } /* Initialisieren */ var playerboxAjaxContentHandler = null; Event.observe(window, 'load', function() { playerboxAjaxContentHandler = new PlayerboxAjaxContent; });