|
Viele Mobilfunknetze unterstützen Datenkomprimierung nach dem ITU-T-Standard V.42bis.
Dadurch kann bei Datenverbindungen die zu übertragende Datenmenge reduziert
und somit der Datendurchsatz erhöht werden. Dies gilt für das Senden und
Empfangen von unkomprimierten Daten.
Dieser Artikel beschreibt nicht den ITU-T-Standard V.42bis !
Der Artikel bezeichnet als "Datenkomprimierung" die Veränderung des HTML-Quelltextes und die Dateigrößenreduzierung von Bildern. Dieser Ausdruck wurde gewählt, da er oft in verschiedenen Foren verwendung findet.
Verschiedene Anbieter von Internet über UMTS komprimieren die übertragenen
Bilder, um Transfervolumen zu sparen. Leider wird dies nicht nur auf die
Bilder angewendet. Teilweise werden externe Java Script und CSS-Dateien in die
Webseite eingebettet. Dadurch entstehen oft Fehler in der Darstellung
oder es treten Java Script-Fehler auf.
Bei der "Datenkomprimierung" handelt es sich um einen Zusatz, den der Mobilfunkprovider absichtlich in den Datenverkehr schleust.
Die meisten Provider – darunter alle deutschen – nutzen ein Verfahren, das Anwendern beim Surfen nicht die Originalbilder schickt,
sondern stärker komprimierte. Dadurch wollen sie Übertragungskapazitäten sparen.
Der gesamte Datentransfer wird über einen transparenten Proxy beim Provider umgeleitet, der an jede HTML-Datei
eine JavaScript-Datei anhängt – die Technik stammt von ByteMobile Inc. (ByteMobile bei Wikipedia), daher der Name "bmi.js".
In den meisten Fällen bekommt man von dem transparenten Proxy nicht viel mit.
Ein Blick in den Quelltext macht aber sichtbar, dass die Daten über einen Proxyserver
laufen. An den Bildern bemerkt man, dass sie z.B. von der IP 1.1.1.3 stammen.
Man sieht dann z.B folgendes:
<img src="http://1.1.1.4/bmi/www.joomla-office.net/umts/smily.jpg"
alt="Smily" align="left" />
Es gibt verschiedene IP Adressen, doch die fangen meistens mit 1.1.1.* an.
Verbindungen über das HTTPS-Protokoll sind von dem Proxyserver nicht betroffen, da hier die Daten
in verschlüsselter Form übertragen werden.
Ein Abfangen der Daten würde einem Man-In-The-Middle Angriff gleichkommen, was
für den Proxybetreiber rechtliche Konsequenzen bedeuten würde.
Es gibt eine einfache Möglichkeit die Komprimierung zu umgehen. Durch das Drücken
von STRG + F5 wird die Seite ohne Komprimierung neu geladen.
Dies hat aber einen großen Nachteil.
Nach dem ersten Aufruf muss die Seite erneut geladen werden.
Dadurch entsteht doppeltes Datenvolumen.
Der Grund für die Datenkomprimierung ist Transfervolumen zu sparen.
Die "Datenkomprimierung" bewirkt aber eher das Gegenteil.
Bei einigen Anbietern kann man die Komprimierung über die mitgelieferte Software
oder über eine Weboberfläche deaktivieren.
Bei T-Mobile Austria kann man sie über die Adresse "1.2.3.4" deaktivieren.
Leider werden zur Zeit Wartungsarbeiten durchgeführt,
weshalb auf dieser Seite nur eine Information findet.
Deaktivierung über die Software unter MS Windows
Bei einigen Programmen ist es möglich über die Software selbst Einstellungen vorzunehmen, die das Komprimieren verhindern.
Die hier vorgestellte Methode bezieht sich auf T-Mobile Austria und den web'n'walk Manager 1.6.
Erstellen Sie ein neues Profil, in dem Sie die APN auf "statisch" setzen und als Wert "noproxy" eintragen.
Danach definieren Sie dieses Profil als Standard.
Die Profile findet man beim web'n'walk Manager 1.6 unter:
Einstellungen - Optionen... - Profilmanagement
Ebenfalls Abhilfe schafft ein Tool von ByteMobile, das eine genauere Konfiguration der Komprimierung erlaubt. Beim Hersteller selbst ist es nicht erhältlich, aber einige Mobilfunkprovider stellen es zum Download bereit, beispielsweise Vodafone als „HighPerformance Client“.
Dieser Client erlaubt nicht nur die feinere Einstellung der Komprimierung – beispielsweise getrennt für JPG- und GIF-Dateien –, sondern bietet auch die Möglichkeit, einzelne IP-Adressen oder ganze IP-Bereiche von den Modifikationen auszunehmen.
Webentwickler können beispielsweise dabei ihren Hosting-Provider eintragen oder Anwender ihre Lieblings-Fotoportale.
Unter Umständen hilft auch die Freeware MWConn. Diese Zugangssoftware ersetzt die Einwahlsoftware des Mobilfunkproviders
komplett und hat eine Option (MOD=G), um die Komprimierung komplett auszuschalten.
Allerdings unterstützt sie nicht alle Mobilfunkkarten und Handys.
Deaktivierung unter Linux mit Vodafone Mobile Connect
Es gibt ein Programm von Vodafone, das man ebenfalls für andere Anbieter verwenden kann.
Das Programm "Vodafone Mobile Connect" steht unter der GPL und kann von folgender Seite gedownloadet werden: https://forge.betavine.net/frs/?group_id=12
Auf dieser Seite gibt es Pakete für die verschiedensten Distributionen.
Ebenfalls ist dort eine Liste mit den unterstützen Geräten zu finden.
Sollte Ihr Modem nicht in der Liste aufscheinen probieren Sie es einfach aus.
Wenn das Modem von dem Programm unterstützt wird, sollte es automatisch erkannt werden und Sie können ein Profil erstellen.
Geben Sie beim Punkt "APN Host" einfach wieder "noproxy" ein.
Einstellungen im Profil:
Profilname: beliebig
Benutzername: t-mobile
Passwort: tm oder t-mobile
Bevorzugte Verbindung: 3G bevorzugt
Authentifizierungsmodus: CHAP
APN Host: noproxy
DNS: keine Einstellungen notwendig.
Technischer Hintergrund
Durch das Drücken von "STRG + F5" wird die Seite neu aufgerufen, und es wird der Header
"Cache-Control" mit dem Wert "no-cache" dem HTTP-Header angehängt.
Dadurch weiß der Proxy, dass die Seite unkomprimiert übertragen werden soll.
Über diesen Proxy werden die Bilder komprimiert, damit sie schneller übertragen werden.
Weiters werden bei HTML Seiten die externen Java Script und CSS-Dateien in die Seite integriert.
Leider können dadurch Darstellungs- und Java Script-Fehler entstehen.
Der Proxy Server überprüft die Browserkennung, damit nur bestimmte Browser komprimierte Daten erhalten.
Durch die Datei "bmi.js" können komprimierte Bilder nachgeladen werden, die dann in Originalqualität angezeigt werden.
Um Probleme mit dieser Datei zu vermeiden wird hierbei die Browserkennung überprüft.
Die Komprimierung hängt einzig von der Browserkennung ab. Wird der Browser nicht erkannt, gilt er als nicht unterstützt und es werden die Originaldateien gesendet.
Das Ändern der Browserkennung hat aber einen großen Nachteil. Es sind davon alle Webseiten betroffen.
Java Script und Browserweichen funktionieren nicht mehr richtig. Desshalb ist von der Änderung der Kennung abzuraten.
Betroffene Betriebssysteme
Von der Datenkomprimierung sind alle Betriebssysteme betroffen.
Bei meinen Tests verwendete ich Windows XP und Linux (Kubuntu Feisty, openSUSE 10.2) mit KDE.
Bei allen Betriebssystemen traten die gleichen Probleme auf.
Bei den Tests wurde jedes Betriebssystem auf einem eigenen Computer ohne Netzwerkverbindung installiert.
Es wurden 2 Modems getestet:
- PCMCIA Karte: Option Modell: GT 3G+ EMEA
- USB Modem: Huawei Modell: E220
Unter Linux wurde das Programm "UMTSmon" verwendet um die Verbindung herzustellen und es wurde nur die PCMCIA Karte getestet.
Bei Windows XP kamen beide Modems zum Einsatz.
Für die PCMCIA Karte wurden das Programm von Option und die mitgelieferte Software von T-Mobile getestet.
Das USB Modem wurde nur unter Windows mit der Software "web'n'walk Manager" von T-Mobile getestet.
Details zu den Browsern
Mozilla Firefox (Linux und Windows)
Die Lösung des Problems ist sehr einfach. Durch Hinzufügen des Header
"Cache-Control = no-cache" bei jedem Seitenaufruf wird jede Seite unkomprimiert übertragen.
Bei Mozilla Firefox gibt es eine Erweiterung, mit der man die Header bearbeiten kann.
Die Erweiterung heißt "Modify Headers" und kann von folgender Seite gedownloaded werden:
https://addons.mozilla.org/en-US/firefox/addon/967
In dem "Modify Headers"-Plugin erstellen sie folgende Regel:
- Als Typ wählen Sie "Modify" aus
- In das erste Eingabefeld schreiben Sie: "Cache-Control"
- In das zweite Feld schreiben Sie: "no-cache"
- Speichern Sie die Regel, und wechseln Sie auf die Seite "Configuration"
- Aktivieren Sie "Always On: Enable Modify Headers when this window is closed"
Danach werden alle Seiten unkomprimiert übertragen.
Eine weitere, wenn auch nicht ganz so gute Lösung ist das Verwenden der Erweiterung "User Agent Switcher".
Mit dieser Erweiterung kann man auf einfache Weise die Browserkennung ändern. Mozilla Firefox kann sich dann z.B. als IE oder Opera ausgeben.
Diesen Effekt kann man nützen, um die Komprimierung zu umgehen, indem man einen Browser (z.B. Opera) auswählt, bei dem keine Daten komprimiert werden.
Der Nachteil dabei ist aber, dass dann Webseiten aufgrund der falschen Browserkennung falsch dargestellt werden. Browserweichen und Java Script funktionieren dann nicht mehr richtig.
Internet Explorer (Windows)
Leider gibt es diese Erweiterung "Modify Headers" nur für Mozilla Firefox.
Die einzige Möglichkeit, die mir bekannt ist, ist der Umweg über einen lokal installierten
Proxy Server.
Diesen Proxy Server konfiguriert man so, dass er jedesmal den Header "Cache-Control = no-cache"
mitsendet.
Diese Lösung ist aber nur für versierte Anwender zu empfehlen, die mit dem IE Webseiten testenmüssen.
Für den normalen Gebrauch ist diese Möglichkeit nicht praktikabel.
Opera (Linux und Windows)
getestet wurde Opera 9. Es waren keine Änderungen oder Modifikationen notwendig.
Ältere Versionen wurden nicht getestet.
Die HTML-Seiten werden unkomprimiert übertragen. Bei den Bildern fiel mir auch nicht auf,
dass sie über einen Proxy komprimiert wurden.
Konqueror (Linux)
Beim Konqueror sind ebenfalls keine Änderungen oder Modifikationen notwendig.
Die Komprimierung fügt die meisten externen Dateien in die Webseite ein.
Leider können dadurch unangenehme Effekte auftreten. So kann es z.B. zu Problemen mit Editoren in
Joomla oder anderen CMS kommen.
Beispiel anhand einer einfachen Seite:
Originalquelltext
<html>
<head>
<title>Beispielseite</title>
<link rel="stylesheet" type="text/css" href="sample.css">
</head>
<body>
<h1>
Beispielseite
</h1>
<img src="smily.jpg" align="left" alt="Smily" />
<p>
Diese Beispielseite wurde erstellt,
um den Effekt der Komprimierung anzuzeigen.
Es wurde ein externes Stylesheet eingebunden,
das den Hintergrund farblich formatiert.
</p>
</body>
</html>
Original CSS-Datei
body {
background-color:#00AEFF;
}
Das Beispiel können sie auf folgender Seite betrachten:
http://www.joomla-office.net/umts
Veränderter Quelltext
<html><head><title>Beispielseite</title> <style type="text/css">body {
background-color:#00AEFF;
}
</style>
</head><body><h1>Beispielseite</h1><img src="http://1.2.3.12/bmi/www.joomla-
office.net/umts/smily.jpg" align="left" alt="Smily" /><p>Diese Beispielseite
wurde erstellt, um den Effekt der Komprimierung anzuzeigen.
Es wurde ein
externes Stylesheet eingebunden, das den Hintergrund farblich formatiert.
</p></body></html>
Wie Sie sehen wurde die Stylesheet-Datei in die Seite eingefügt und alle Zeilenumbrüche
bis auf die des Stylesheets entfernt.
Wenn dies mit Java Script Dateien passiert, kann man leider nicht vorhersagen, was dabei passiert.
Probleme mit Joomla 1.0.x
- Alle Editoren bis auf den einfachen Texteditor funktionieren nicht
- Die Tooltips, die mit Javascript erstellt wurden werden nicht angezeigt
- Je nach verwendetem Template können Darstellungsfehler auftreten.
Bei anderen CMS und Blogs treten ähnliche Effekte auf, weil viele Systeme
die gleichen Editoren (z.B.: HTMLArea oder FCKeditor) verwenden.
Anmerkungen
Es ist zu hoffen, dass die Mobilfunkanbieter die Komprimierung generell deaktivieren
oder zumindest eine Funktion anbieten, die es dem Benutzer ermöglicht zu entscheiden,
welche Daten komprimiert werden.
Das Komprimieren der Bilder hat in Gebieten mit schlechter Infrastruktur Vorteile,
weil dadurch die Downloadzeit wesentlich verkürzt wird.
Das Einbinden externer Dateien bringt keine Einsparung an Transfervolumen.
Der Quelltext der Startseite von Joomla-Office ist in "komprimierter" Form
91.208 Bytes groß.
Die unkomprimierte Größe (Originaldatei) beträgt: 17.187 Bytes.
An diesem Beispiel sieht man deutlich, dass sogar ds Transfervolumen erhöht wird,
da bei jedem Seitenaufruf alle externen Dateien erneut eingefügt und übertragen werden.
Normalerweise werden externe Dateien erstellt, damit sie nur einmal vom Server geladen
werden müssen.
Alle aktuellen Browser kommen mit externen Dateien zurecht.
Mobile Browser wie z.B. der Pocket Internet Explorer unterstützen je nach Version Java Script
und CSS nicht oder nur eingeschränkt.
Viele "Webanwendungen" sind ausserdem für den Einsatz auf Mobilen Geräten nicht ausgelegt.
Desshalb bleibt die Frage offen, für wen das Einbinden der externen Dateien einen Vorteil bringt.
Die IP-Adresse 213.162.65.1
Der Computer greift in bestimmten Abständen auf die Adressen mail1.t-mobile.at
oder dns1.t-mobile.at (213.162.65.1) zu.
Über diese Adresse werden DNS Abfragen abgewickelt. Es gibt noch zwei weitere
Adressen mail2.t-mobile.at und dns2.t-mobile.at (213.162.65.2),
die aber zur Zeit nicht verwendet werden.
Ein paar Firewalls, wie z.B. ZoneAlarm blockieren den Zugriff auf diese Adressen.
Dennoch wird problemlos eine Verbindung mit dem Internet hergestellt,
und es kann normal gesurft werden.
Benutzername und Passwort werden beim Zugriff auf Bilder vom Proxyserver abgefragt
Vorsicht ist bei Passwortgeschützten Verzeichnissen geboten.
Viele Benutzer schützen z.B. phpMyAdmin (Datenbankverwaltungstool) mit einer .htaccess-Datei.
Es wird dabei eine HTTP-Authentifizierung durchgeführt. Normalerweise muss man dabei das Passwort nur einmal eingeben
und man hat Zugriff auf alle Dateien, die sich in diesem Verzeichnis befinden.
Da aber Bilder über den Proxyserver geladen werden, führt der Proxyserver ebenfalls eine Passwortabfrage durch, die dann an den eigentlichen Server weitergeleitet wird.
Seltsamerweise werden aber nicht alle Bilder vom Proxy geladen.
Der Grund dafür ist, dass manchmal Seiten nicht verändert werden.
Ein Muster wieso bestimmte Seiten verändert werden und manche nicht lässt sich dabei aber nicht erkennen.
Auf der Testseite wurden Frames verwendet, da phpMyAdmin ebenfalls Frames verwendet.
Manchmal wurde eine Seite verändert, das nächste mal dann wieder nicht.
Dies geschah auf der Testseite bei beiden Seiten / Bildern.
Die Testseite finden Sie unter folgender Adresse:
http://www.joomla-office.net/umts/password
Benutzername: username
Passwort: password
Bei meinen Tests mit der Testseite und phpMyadmin konnte ich die Passwortabfrage des Proxyservers abbrechen.
Die Seite wurde dennoch angezeigt. Leider fehlen dann die Bilder die vom Proxyserver geladen werden.
Bei der Verwendung von phpMyAdmin wurde insgesamt 5 mal nach Benuternamen
und Passwort gefragt, die nur den Proxy Server betroffen haben.
Achtung:
Geben Sie Ihre Passwörter nicht aus der Hand. Selbst so eine Abfrage des Proxy Servers kann schon ein Risiko darstellen.
Die Datei "bmi.js" kann vom Proxy gedownloaded werden.
Bei T-Mobile Austria kann sie z.B über folgende Adresse heruntergeladen werden:
http://1.1.1.2/bmi-int-js/bmi.js
Es gibt verschiedene Adressen. Die üblichen Adressen sind aber 1.1.1.1 -
1.1.1.5.
Der Adressbereich kann aber bis 1.1.1.255 reichen.
Ebenso ist es möglich über 1.1.2.1 die Datei herunterzuladen.
Derzeit wird bei T-Mobile, aufgrund von Wartungsarbeiten, die Datei "bmi.js" nicht verwendet.
Die Bilder werden solange in Originalqualität übertragen. Dennoch wird der Proxy Server dazwischengeschaltet.
Die Datei "bmi.js" ist für das Nachladen von unkomprimierten Bildern bei
eingeschalteter Komprimierung notwendig.
Nachfolgend sehen Sie den Quelltext der Datei.
var bmi_htmlEdit=0;
var bmi_ie;
var bmi_ns;
var bmi_imageObjSelected;
var bmi_ffx_op_toolTip="SHIFT+R zeigt das Bild im Original.
STRG+F5 zeigt alle Bilder im Original.";
var bmi_toolTip="SHIFT+R zeigt das Bild im Original.
STRG+F5 zeigt alle Bilder im Original.";
var bmi_ns_tooltip="Shift+Reload reloads the whole page.";
var bmi_toolTipSeperator=" ... ";
var bmi_concatStr="bmi_orig_img";
var bmi_frameNotAllowed;
var agt=navigator.userAgent.toLowerCase();
var is_major=parseInt(navigator.appVersion);
var is_minor=parseFloat(navigator.appVersion);
var bmi_ns=((agt.indexOf('mozilla')!=-1)&&
(agt.indexOf('spoofer')==-1)&&
(agt.indexOf('compatible')==-1)&&
(agt.indexOf('opera')==-1)&&
(agt.indexOf('webtv')==-1)&&
(agt.indexOf('hotjava')==-1));
var bmi_ns2=(bmi_ns&&(is_major==2));
var bmi_ns3=(bmi_ns&&(is_major==3));
var bmi_ns4=(bmi_ns&&(is_major==4));
var bmi_ns4up=(bmi_ns&&(is_major>=4));
var bmi_nsonly=(bmi_ns&&((agt.indexOf(";nav")!=-1)
||(agt.indexOf("; nav")!=-1)
||(agt.indexOf("Netscape")!=-1)
||(agt.indexOf("netscape")!=-1)));
var bmi_ns6=(bmi_ns&&(is_major==5));
var bmi_ns6up=(bmi_ns&&(is_major>=5));
var is_gecko=(agt.indexOf('gecko')!=-1);
var bmi_firefox=(agt.indexOf('firefox')!=-1);
var bmi_ie=((agt.indexOf("msie")!=-1)&&(agt.indexOf("opera")==-1));
var bmi_ie3=(bmi_ie&&(is_major<4));
var bmi_ie4=(bmi_ie&&(is_major==4)&&(agt.indexOf("msie 4")!=-1));
var bmi_ie4up=(bmi_ie&&(is_major>=4));
var bmi_ie5=(bmi_ie&&(is_major==4)&&(agt.indexOf("msie 5.0")!=-1));
var bmi_ie5_5=(bmi_ie&&(is_major==4)&&(agt.indexOf("msie 5.5")!=-1));
var bmi_ie5up=(bmi_ie&&!bmi_ie3&&!bmi_ie4);
var bmi_ie5_5up=(bmi_ie&&!bmi_ie3&&!bmi_ie4&&!bmi_ie5);
var bmi_ie6=(bmi_ie&&(is_major==4)&&(agt.indexOf("msie 6.")!=-1));
var bmi_ie6up=(bmi_ie&&!bmi_ie3&&!bmi_ie4&&!bmi_ie5&&!bmi_ie5_5);
var bmi_opera=(agt.indexOf("opera")!=-1);
var bmi_opera2=(agt.indexOf("opera 2")!=-1||agt.indexOf("opera/2")!=-1);
var bmi_opera3=(agt.indexOf("opera 3")!=-1||agt.indexOf("opera/3")!=-1);
var bmi_opera4=(agt.indexOf("opera 4")!=-1||agt.indexOf("opera/4")!=-1);
var bmi_opera5=(agt.indexOf("opera 5")!=-1||agt.indexOf("opera/5")!=-1);
var bmi_opera5up=(bmi_opera&&!bmi_opera2&&!bmi_opera3&&!bmi_opera4);
function bmi_checkAccess(win){
bmi_frameNotAllowed=0;window.bmioldOnError=window.onerror;window.onerror=null;
try{
var l=win.location.href;
} catch(e) {
bmi_frameNotAllowed=1;
}
if(bmi_frameNotAllowed==1){
window.onerror=window.bmioldOnError;
return false;
} else {
window.onerror=window.bmioldOnError;
return true;
}
}
function bmi_ImageElement(el){
if(!el) return 0;
var str=new String(el.tagName);
if(str.match("IMG")){
return 1;
}
if(str.match("INPUT")){
if(el.type&&bmi_checkInputType(el.type)){
return 1;
}
return 0;
}
if(str.match("OBJECT")){
if(el.type&&bmi_checkMIMEType(el.type)){
el.bmi_objTag=1;return 1;
}
}
if(str.match("EMBED")){
if(el.type&&bmi_checkMIMEType(el.type)){
return 1;
}
}
if(str.match("AREA")||str.match("A")){
var p=el.parentNode;
if(p&&(p.tagName=="MAP")&&(p.bmi_imgObj!=null)){
el.bmi_mapImage=p.bmi_imgObj;
p.bmi_imgObj.bmi_areaEl=el;
return 1;
}
}
return 0;
}
function bmi_resetTitle(el){
if(!el) return;
if(el.bmi_touched!=1) return;
el.title="";
if(el.bmi_oldTitle){
el.title=el.bmi_oldTitle;
if(el.bmi_oldAlt){
el.alt=el.bmi_oldAlt;
}
} else if(el.bmi_oldAlt){
el.alt=el.bmi_oldAlt;
if(bmi_ie)
el.title=el.alt;
}
if(el.bmi_gotOriginal){
if(el.bmi_orig_mouseout){
el.onmouseout=el.bmi_orig_mouseout;
}
}
}
function bmi_checkElement(el){
var pwindow=null;
if(el.bmi_gotOriginal) return;
if(el.bmi_mapImage){
if(el.bmi_mapImage.bmi_gotOriginal==1){
el.bmi_gotOriginal=1;
if(el.bmi_touched)
bmi_resetTitle(el);
return;
}
}
if(el.bmi_touched!=1){
bmi_setElementTitle(el);
if(el.onmouseout){
el.bmi_orig_mouseout=el.onmouseout;
el.onmouseout=bmi_safeMouseOutEvents;
} else {
el.onmouseout=bmi_safeMouseOutEvents;
}
} else {
el.title=el.bmi_title;el.alt=el.bmi_alt;
}
if(el.bmi_mapImage)
bmi_imageObjSelected=el.bmi_mapImage;
else
bmi_imageObjSelected=el;
if(bmi_ie||bmi_opera)
pwindow=document.parentWindow;
else if(bmi_nsonly||is_gecko)
pwindow=document.defaultView;
else
pwindow=null;
if(pwindow&&(pwindow!=pwindow.parent)){
pwindow.focus();
el.bmi_changedFocus=1;
}
return;
}
function bmi_setElementTitle(el){
var tmpAlt="";
if(el.alt){
tmpAlt=el.alt;
el.bmi_oldAlt=el.alt;
el.bmi_alt="";el.alt="";
}
if(el.title){
el.bmi_oldTitle=el.title;el.title="";
} else {
el.title=tmpAlt+"";
}
if(bmi_opera||bmi_firefox){
el.title=bmi_ffx_op_toolTip;
el.bmi_touched=1;
el.bmi_title=el.title;
} else {
el.title=el.title+bmi_toolTipSeperator+bmi_toolTip;
el.bmi_touched=1;
el.bmi_title=el.title;
}
return;
}
function bmi_checkInputType(type){
if(!type)
return 0;
if(type.match("image")||type.match("Image")){
return 1;
}
return 0;
}
function bmi_checkMIMEType(type){
var typeStr=new String(type);
var find=/image//gi;
if(typeStr.search(find)!=-1)
return 1;
return 0;
}
function bmi_mouseOver(e){
bmi_imageObjSelected=null;
var obj;
if(document.bmi_onmouseover_original!=null)
document.bmi_onmouseover_original(e);
if(bmi_ie||bmi_opera){
var e=window.event;obj=e.srcElement;
} else {
obj=e.target;
}
if(obj.bmi_gotOriginal)
return;
if(bmi_ImageElement(obj)){
bmi_checkElement(obj);
}
return;
}
function bmi_safeMouseOutEvents(e){
var obj;
if(bmi_ie||bmi_opera){
e=window.event;obj=e.srcElement;
} else{
obj=e.target;
}
bmi_resetTitle(obj);
if(obj.bmi_changedFocus==1){
var pwindow=null;
if(bmi_ie||bmi_opera)
pwindow=document.parentWindow;
else if(bmi_nsonly||is_gecko)
pwindow=document.defaultView;
else
pwindow=null;
if(pwindow){
pwindow.top.focus();
obj.bmi_changedFocus=0;
}
}
if(obj.bmi_orig_mouseout){
obj.bmi_orig_mouseout();
}
}
function bmi_updateImageSrc(src) {
var found=0;
var find=/?/g;
var editUrl;
var editIndex;
var editProto;
var bmiSignIndex;
var bmiSign;
srcString=new String(src);
if(srcString.search(find)!=-1) {
found=1;srcString=srcString.concat("&"+bmi_concatStr+"=1");
} else {
var i=srcString.lastIndexOf("/");
var newStr=srcString.substring(i+1);
srcString=srcString.concat("/"+bmi_concatStr+"/"+newStr);
}
if(bmi_htmlEdit){
editIndex=srcString.indexOf("://");
if(editIndex!=-1){
editProto=srcString.substring(0,editIndex+3);
editUrl=srcString.substring(editIndex+3);
editIndex=editUrl.indexOf("/");
if(editIndex!=-1){
editUrl=editUrl.substring(editIndex+1);
bmiSignIndex=editUrl.indexOf("/");
if(bmiSignIndex!=-1){
bmiSign=editUrl.substring(0,bmiSignIndex);
if(bmiSign=="bmi"){
editUrl=editUrl.substring(bmiSignIndex+1);
srcString=editProto+editUrl;
}
}
}
}
}
return(srcString);
}
function bmi_replaceImages(array){
if(!array)
return;
for(var i=0;i<array.length;i++){
if(array[i].bmi_gotOriginal){
continue;
}
if(array[i].bmi_objTag){
array[i].data=bmi_updateImageSrc(array[i].data);
} else {
array[i].src=bmi_updateImageSrc(array[i].src);
}
array[i].bmi_gotOriginal=1;
if(array[i].bmi_touched){
bmi_resetTitle(array[i]);
}
}
return;
}
function bmi_replaceInputImages(array){
if(!array)
return;
for(var i=0;i<array.length;i++){
if(array[i].bmi_gotOriginal){
continue;
}
if(array[i].type&&bmi_checkInputType(array[i].type)){
array[i].src=bmi_updateImageSrc(array[i].src);
array[i].bmi_gotOriginal=1;
if(array[i].bmi_touched){
bmi_resetTitle(array[i]);
}
}
}
return;
}
function bmi_NSlayers(){
if(document!=null){
if(!document.layers){
bmi_replaceImages(document.tags.IMG);
bmi_replaceInputImages(document.tags.INPUT);
return;
}
for(var i=0;i<document.layers.length;i++){
bmi_NSlayers(document.layers[i].document);
bmi_replaceImages(document.layers[i].document.tags.IMG);
bmi_replaceInputImages(document.layers[i].document.tags.INPUT);
}
}
return;
}
function bmi_downloadAllHandler(){
if((true==bmi_checkAccess(parent))&&
(parent.location.href!=self.location.href)){
var newparent=parent;
do{
newparent=newparent.parent;
if((false==bmi_checkAccess(newparent.parent))||
(newparent.parent.location.href ==newparent.location.href)){
break;
}
} while(newparent);
var numFrames=newparent.frames.length;
var index=0;
var frame;
for(;index<newparent.frames.length;index++){
frame=newparent.frames[index];
if(false==bmi_checkAccess(frame.window)){
continue;
}
if(frame.window.bmi_reDownloadAllImages){
frame.window.bmi_reDownloadAllImages();
}
}
return;
}
bmi_reDownloadAllImages();
}
function bmi_reDownloadAllImages(){
var imgArray;
var inputArray;
var backgroundArray;
var numFrames=window.frames.length;
var index=0;
var frame;
for(;index<numFrames;index++){
frame=window.frames[index];
if(false==bmi_checkAccess(frame.window)){
continue;
}
if(frame.window.bmi_reDownloadAllImages){
frame.window.bmi_reDownloadAllImages();
}
}
if((bmi_ie5up||bmi_ns6up||bmi_opera5up||bmi_firefox)){
imgArray=document.getElementsByTagName("IMG");
inputArray=document.getElementsByTagName("INPUT");
bmi_replaceImages(imgArray);
bmi_replaceInputImages(inputArray);
} else if(bmi_ns&&(bmi_ns4||bmi_ns3)){
var imgArray;
var docLayers;docLayers=document.layers;
if(docLayers&&docLayers.length){
for(var layi=0;layi<0;layi++){
imgArray=docLayers[layi].document.images;
bmi_replaceImages(imgArray);
}
} else{
imgArray=document.images;
bmi_replaceImages(imgArray);
}
} else {
imgArray=document.images;
bmi_replaceImages(imgArray);
}
return;
}
function bmi_reDownloadSelectedImage(img){
if(img.bmi_gotOriginal){
return;
}
if(img&&!img.bmi_gotOriginal){
if(img.bmi_objTag){
img.data=bmi_updateImageSrc(img.data);
} else{
img.src=bmi_updateImageSrc(img.src);
}
img.bmi_gotOriginal=1;
if(img.bmi_touched){
bmi_resetTitle(img);
}
if(img.bmi_areaEl&&(img.bmi_areaEl.bmi_touched)){
bmi_resetTitle(img.bmi_areaEl);
img.bmi_areaEl.bmi_gotOriginal=1;
}
}
return;
}
function bmi_keypress(e){
var reloadSingle=0;
var reloadAll=0;
var obj;
if(bmi_ns){
if(bmi_ns6up){
if((String.fromCharCode(e.charCode)=='r')
||(String.fromCharCode(e.charCode)=='R'))
reloadSingle=1;
else{
if((String.fromCharCode(e.charCode)=='A'))
reloadAll=1;
}
obj=e.target;
var str=new String(obj.tagName);
if(str.match("INPUT")&&(bmi_checkInputType(obj.type)!=1)){
if(bmi_imageObjSelected==obj)
reloadAll=reloadSingle=0;
}
} else {
if((String.fromCharCode(e.which)=='R')&&
(e.modifiers==Event.SHIFT_MASK))
reloadSingle=1;
else {
if((String.fromCharCode(e.which)=='A')&&
(e.modifiers==Event.SHIFT_MASK))
reloadAll=1;
}
}
}
if(bmi_ie||bmi_opera){
if((String.fromCharCode(window.event.keyCode)=='R')&&
(window.event.shiftKey))
reloadSingle=1;
else if(bmi_opera){
if((String.fromCharCode(window.event.keyCode)=='A')&&
(window.event.shiftKey))
reloadAll=1;
}
var e=window.event;
obj=e.srcElement;
var str=new String(obj.tagName);
if(str.match("INPUT")&&(bmi_checkInputType(obj.type)!=1)){
if(bmi_imageObjSelected==obj)
reloadSingle=reloadAll=0;
}
}
if(reloadSingle==1){
if(bmi_ns){
if(bmi_ns4||bmi_ns3||bmi_ns2){
return;
}
}
if(bmi_imageObjSelected)
bmi_reDownloadSelectedImage(bmi_imageObjSelected);
} else {
if(reloadAll==1){
bmi_downloadAllHandler();
}
}
if((document.bmi_onkeypress_original!=null)&&
(document.bmi_onkeypress_original!=bmi_keypress)){
return(document.bmi_onkeypress_original(e));
}
return;
}
function bmi_linkMapImages(maps,objs){
var linked=0;
for(var i=0;i<objs.length;i++){
if(linked>=maps.length){
return linked;
}
if(objs[i].useMap){
var newStr=new String(objs[i].useMap);
var mapName=newStr.substring(newStr.lastIndexOf("#")+1);
if(bmi_ImageElement(objs[i])!=1)
continue;
for(var j=0;j<maps.length;j++){
if(maps[j].name==mapName){
maps[j].bmi_imgObj=objs[i];linked++;
}
}
}
}
return linked;
}
function bmi_load(){
if(bmi_orig_onLoad){
bmi_orig_onLoad();
}
if(bmi_ns2||bmi_ns3||bmi_ns4){
window.defaultStatus=bmi_ns_tooltip;
return;
}
if(document.onmouseover){
if(document.onmouseover!=bmi_mouseOver){
document.bmi_onmouseover_original=document.onmouseover;
}
}
document.onmouseover=bmi_mouseOver;
if(document.onkeypress){
if(document.onkeypress!=bmi_keypress){
document.bmi_onkeypress_original=document.onkeypress;
}
} else {
document.bmi_onkeypress_original=null;
}
document.onkeypress=bmi_keypress;
var maps=document.getElementsByTagName("MAP");
if((maps==null)||(maps.length==0)){
return;
}
var objs=null;
if(bmi_ie||bmi_opera){
objs=document.all;
if(objs){
bmi_linkMapImages(maps,objs);
}
}
if(bmi_ns||is_gecko){
var num=0;
objs=document.getElementsByTagName("IMG");
if(objs){
num=num+bmi_linkMapImages(maps,objs);
}
if(num>=maps.length){
return;
}
objs=null;
objs=document.getElementsByTagName("INPUT");
if(objs){
num+=bmi_linkMapImages(maps,objs);
}
if(num>=maps.length){
return;
}
objs=null;
objs=document.getElementsByTagName("OBJECT");
if(objs){
num+=bmi_linkMapImages(maps,objs);
}
}
return;
}
var bmi_orig_onLoad;
function bmi_SafeAddOnload(f,urlStr,htmlEdit){
if(urlStr){
bmi_concatStr=urlStr;
}
if(htmlEdit){
bmi_htmlEdit=htmlEdit;
}
if(bmi_ie4){
window.onload=f;
} else if(window.onload){
if(window.onload!=f){
bmi_orig_onLoad=window.onload;window.onload=f;
}
} else {
window.onload=f;
}
}
|