//-------------------------- //...JS File by DLR RNH 2014 //...UTF-8 Format //-------------------------- //...XMLHTTPRequest var READY_STATE_LOADING = 1; var READY_STATE_COMPLETE = 4; //...HTTP Server Response var HTTP_STATE_OK = 200; var HTTP_STATE_UNAUTHORIZED = 401; var HTTP_STATE_FORBIDDEN = 403; var HTTP_STATE_FILE_NOT_FOUND = 404; var HTTP_STATE_REQUEST_TIMEOUT = 408; var HTTP_INTERNAL_SERVER_ERROR = 500; var AM_RESULT_OK=0; //...Messages var aErrMsg={ de:["Unzureichende/fehlerhafte Argumente oder fehlende Daten! Eine Anzeige ist nicht möglich...", "Ihr Browser bietet leider keine Unterstützung für die Anzeige der Daten...", "Die Anfrage konnte vom Server nicht bearbeitet werden..."], en:["Invalid/missing arguments or data! Displaying the requested data is impossible...", "Your browser does'nt support the needed functionality to display the data...", "Your request unfortunately could not be processed by the server..."], fr:["Insuffisance/incorrecte des arguments ou données manquantes! Un affichage n'est pas possible...", "Votre navigateur ne supporte pas l'affichage des données...", "La demande n'a pas pu être traitée par le serveur..."] }; //...CONST var cZOOMDEFAULT = '2'; //...Control var nLocIdx = 0; //------------- //...Entry-Point //-------------- function myUpdateView(){ var nErr; var sParams = ""; var sSvcUrl=""; var amreq = null; var title = document.getElementById("title"); var lpanel = document.getElementById("lpanel"); var rpanel = document.getElementById("rpanel"); var loader = document.getElementById("loader"); var z=null; var i; var lang; //------------------- //...Helper functions //------------------- //...Create Request Object function myGetHTTPReqObject(){ var httpRequest=null; try{ // Mozilla, Safari, ... httpRequest = new XMLHttpRequest(); if (httpRequest.overrideMimeType) { httpRequest.overrideMimeType('text/xml'); } } catch(e){ //IE try { httpRequest = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e){ try { httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e){ httpRequest = null; } } } return httpRequest; } //...HandleCallback function myHandleCallback(req,title,lpanel,rpanel){ try { //...request has to be complete if (req.readyState == READY_STATE_COMPLETE){ loader.src = "../img/ajax-loaderoff.gif"; //...server status must be OK if (req.status == HTTP_STATE_OK){ var status; var values=''; var i; var xmlDoc = req.responseXML; var xmlcontent = xmlDoc.documentElement.getElementsByTagName("content"); if (xmlcontent) { status = parseInt(xmlcontent[0].getAttribute("status")); if (status == AM_RESULT_OK){ //...update title title.innerHTML = xmlcontent[0].getAttribute("title"); //...update panel lpanel.innerHTML = xmlcontent[0].getAttribute("lpanel"); values = xmlcontent[0].getAttribute("rpanel"); if (values != '') {rpanel.innerHTML = xmlcontent[0].getAttribute("rpanel")}; //...update js values = xmlcontent[0].getAttribute("values"); aMeasures=null; aMeasures = values.split(","); for (i=0;i<=4;i++){ values = xmlcontent[0].getAttribute("pvalues"+i); aProgValues[i]=[]; if (values && values != '')aProgValues[i]= values.split(","); } } //...else: ACHTUNG: im Fehlerfall (status != 0) bleibt die Anzeige unverändert } else { //...no valid data title.innerHTML = aErrMsg[lang][2]; } } //...else HTTP_STATE_FILE_NOT_FOUND, HTTP_STATE_REQUEST_TIMEOUT, HTTP_INTERNAL_SERVER_ERROR //...->Anzeige bleibt unverändert } //...gaming :-) else if (req.readyState == READY_STATE_LOADING){ loader.src = "../img/ajax-loaderon.gif"; } } //...try catch(e){ title.innerHTML = aErrMsg[lang][2]; } } //------- //...Body //------- //...check lang if (! document.frmInput.lang){ lang='de' } else { lang = String(document.frmInput.lang.value).substr(0,2); lang = lang.replace(/[^a-z]/g,""); //...known langs only if (!lang || !aErrMsg[lang]){lang='de'} } //...check vars if (!aLocations || !aMeasures || !aProgValues){return}; //...check display if (! title || ! lpanel || ! rpanel || ! loader ){return;} //...check form status if (! document.frmInput.c || ! document.frmInput.par || ! document.frmInput.ppar || ! document.frmInput.z) { title.innerHTML = aErrMsg[lang][0]; return; } //...get zoomfactor z = document.frmInput.z.value; if (!z){z=cZOOMDEFAULT}; //...init params sParams = 'c='+ document.frmInput.c.value; sParams = sParams + '&sid='+ aLocations[nLocIdx]; sParams = sParams + '&par='+ document.frmInput.par.value; sParams = sParams + '&ppar='+ document.frmInput.ppar.value; sParams = sParams + '&z='+ z; sParams = sParams + '&lang='+ lang; if(!sParams){ title.innerHTML = aErrMsg[lang][0]; return; } //...set locidx nLocIdx++; if (nLocIdx == aLocations.length){nLocIdx=0}; //...get data amreq = myGetHTTPReqObject(); if (! amreq){ title.innerHTML = aErrMsg[1]; return; } sSvcUrl = "wettercombipanelxml.pl?" + sParams; try{ amreq.onreadystatechange = function(){myHandleCallback(amreq,title,lpanel,rpanel);}; amreq.open("GET", sSvcUrl, true); amreq.setRequestHeader("Pragma", "no-cache"); amreq.setRequestHeader("Cache-Control", "must-revalidate"); amreq.setRequestHeader("If-Modified-Since", document.lastModified); amreq.send(null); } catch(e){ title.innerHTML = aErrMsg[lang][1]; } } //--------------- //...Zoom display //--------------- function myZoomView(nFactor,bFlag){ var nZoom = parseInt(nFactor); var aFontSize = [['2em','1.8em','1.4em'],['2em','1.8em','1.4em']]; var aDigiPanSizeL = new Array("110px","210px","370px"); var aDigiPanSizeR = new Array("85px","160px","280px"); var aRules; var sPath='../img/wetterpanel/'; var sFile=''; var sExt='.gif'; var cChar='', cImgChar=''; var sSelector='' var i=0; var n=0; var k=0; if (nZoom < 0 || nZoom > 1){nZoom = 0}; //...Beschriftung if (document.styleSheets[0].cssRules){ aRules = document.styleSheets[0].cssRules; } else { if (document.styleSheets[0].rules) { aRules = document.styleSheets[0].rules; } } if (aRules){ for (i=0;aRules[i];i++){ sSelector=aRules[i].selectorText.toLowerCase(); if (sSelector == 'td.hleft'){ aRules[i].style.fontSize = aFontSize[nZoom][0]; } if (sSelector == 'td.pantitlel' || sSelector == 'td.pantitler'){ aRules[i].style.fontSize = aFontSize[nZoom][1]; } if (sSelector == 'td.rowtitle' || sSelector == 'td.coltitle'){ aRules[i].style.fontSize = aFontSize[nZoom][2]; } if (sSelector == 'div#lpanel div.digit'){ aRules[i].style.width = aDigiPanSizeL[nZoom]; } if (sSelector == 'div#rpanel div.digit'){ aRules[i].style.width = aDigiPanSizeR[nZoom]; } } } //...Digiziffern if (bFlag == true && aMeasures && aImgSizes){ //...Panel mit akt. Daten for(i=0; i < aMeasures.length;i++){ for (n=0; n < aMeasures[i].length;n++){ cChar = aMeasures[i].charAt(n); //if (cChar == '.'){ // cChar='dot'; //} switch (cChar){ case ".": cChar = "dot"; break; case "-": cChar = "minus"; break; } sFile = sPath + aImgSizes[nZoom] + '/' + aImgSizes[nZoom] + '_' + cChar + sExt; document.getElementById(String(i)+String(n)).src = sFile; } } //...Panel mit Prognosedaten for (k=0; k < aProgValues.length; k++){ for(i=0; i < aProgValues[k].length;i++){ for(n=0; n < aProgValues[k][i].length;n++){ cChar = aProgValues[k][i].charAt(n); switch (cChar){ case ".": cChar = "dot"; break; case "-": cChar = "minus"; break; } sFile = sPath + aImgSizes[nZoom] + '/' + aImgSizes[nZoom] + '_' + cChar + sExt; //alert(sFile); document.getElementById(String(k)+String(i)+String(n)).src = sPath + aImgSizes[nZoom] + '/' + aImgSizes[nZoom] + '_' + cChar + sExt; } } } } } //...Alles OK var bFOK = true;