summaryrefslogtreecommitdiffstats
path: root/Website/delayedLoading.js
diff options
context:
space:
mode:
authorgsmselftest2011-11-09 16:41:00 +0100
committergsmselftest2011-11-09 16:41:00 +0100
commit1c009430af80260d67c47652783931414989c75d (patch)
tree204540af3ff3d8e23892986ad7585080900b7463 /Website/delayedLoading.js
parentReport relocating! (diff)
downloadgsm-selftest-1c009430af80260d67c47652783931414989c75d.tar.gz
gsm-selftest-1c009430af80260d67c47652783931414989c75d.tar.xz
gsm-selftest-1c009430af80260d67c47652783931414989c75d.zip
Final folder team project
Diffstat (limited to 'Website/delayedLoading.js')
-rw-r--r--Website/delayedLoading.js228
1 files changed, 228 insertions, 0 deletions
diff --git a/Website/delayedLoading.js b/Website/delayedLoading.js
new file mode 100644
index 0000000..b76bbe3
--- /dev/null
+++ b/Website/delayedLoading.js
@@ -0,0 +1,228 @@
+ /*
+ delayedLoader - JS to delay out of sight pictures rendering
+
+ Version : 2.0.2
+ Made by : Jean-Damien POGOLOTTI
+ Last Update : 10/12/10
+
+ This file can be distributed under the license you can find at :
+
+ http://www.pchart.net/license
+
+ You can find the whole class documentation on the pChart web site.
+ */
+
+ var PictureCache = new Array();
+ var PictureCount = 0;
+ var WaitPicture = "wait.gif";
+ var DivClassName = "pChart";
+ var DefaultWidth = 70;
+ var DefaultHeight = 230;
+ var DefaultAlt = "pChart rendered picture";
+
+
+ /* Do the DOM document processing */
+ function loaderInit()
+ {
+ WindowSize = getWindowSize();
+ WindowHeight = WindowSize[1];
+ Offset = getScrollXY();
+ HeightOffset = Offset[1];
+
+ /* Enumerate the tags */
+ Links = document.getElementsByTagName("a");
+ for (i = 0; i < Links.length; i++)
+ {
+ className = Links[i].className;
+
+ if ( className == DivClassName )
+ {
+ ObjectWidth = Links[i].getAttribute("data-pchart-width");
+ ObjectHeight = Links[i].getAttribute("data-pchart-height");
+ ObjectID = Links[i].id;
+ ObjectTop = Links[i].offsetTop;
+ ObjectURL = Links[i].href;
+ ObjectAlt = Links[i].getAttribute("data-pchart-alt");
+
+ if ( ObjectWidth == null ) { ObjectWidth = DefaultWidth; }
+ if ( ObjectHeight == null ) { ObjectHeight = DefaultHeight; }
+ if ( ObjectAlt == null ) { ObjectAlt = DefaultAlt; }
+
+ if (ObjectID == "") { ObjectID = "pChart-"+i; Links[i].id = ObjectID; }
+
+ PictureCache[PictureCount] = new Array();
+ PictureCache[PictureCount][0] = ObjectID;
+ PictureCache[PictureCount][1] = ObjectTop;
+ PictureCache[PictureCount][2] = ObjectURL;
+ PictureCache[PictureCount][3] = ObjectAlt;
+ PictureCache[PictureCount][4] = ObjectWidth;
+ PictureCache[PictureCount][5] = ObjectHeight;
+
+ PictureCount++;
+ }
+ }
+
+ /* Replace the <A> tags by <DIV> ones and attach the loader */
+ for(i=0;i<PictureCount;i++)
+ {
+ ATag = document.getElementById(PictureCache[i][0]);
+ DivTag = document.createElement("div");
+ DivID = "pChart-Div"+i; PictureCache[i][0] = DivID;
+
+ DivTag.setAttribute("id", DivID);
+ DivTag.style.width = PictureCache[i][4];
+ DivTag.style.height = PictureCache[i][5];
+ DivTag.style.backgroundColor = "#E0E0E0";
+
+ DivTag2 = ATag.parentNode.replaceChild(DivTag, ATag);
+
+ DivTop = DivTag.offsetTop;
+ PictureCache[i][1] = DivTop;
+
+ changeOpac(50, i);
+ changeContent("<img src='"+WaitPicture+"' width=24 height=24 alt=''/>",i);
+
+ if ( HeightOffset + WindowHeight > PictureCache[i][1] ) { triggerVisible(i); }
+ }
+ }
+
+ /* Replace the contents of the delayed loading DIV */
+ function changeContent(html, id)
+ { DivID = PictureCache[id][0]; document.getElementById(DivID).innerHTML = html; }
+
+ /* Trigger the picture rendering when the pChart DIV became visible */
+ function triggerVisible(PictureID)
+ {
+ if ( !PictureCache[PictureID][6] == true )
+ {
+ PictureCache[PictureID][6] = true;
+ ajaxRender(PictureCache[PictureID][2],PictureID);
+ }
+ }
+
+ /* Catch the navigator window scrolling event */
+ function scrollEvent()
+ {
+ WindowSize = getWindowSize();
+ WindowHeight = WindowSize[1];
+ Offset = getScrollXY();
+ HeightOffset = Offset[1];
+
+ for(i=0;i<=PictureCount-1;i++) { if ( HeightOffset + WindowHeight > PictureCache[i][1] ) { triggerVisible(i); } }
+ }
+
+ /* Cross browser X/Y window offset gatherer */
+ function getScrollXY()
+ {
+ var scrOfX = 0, scrOfY = 0;
+
+ if( typeof( window.pageYOffset ) == 'number' )
+ { scrOfY = window.pageYOffset; scrOfX = window.pageXOffset; }
+ else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) )
+ { scrOfY = document.body.scrollTop; scrOfX = document.body.scrollLeft; }
+ else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) )
+ { scrOfY = document.documentElement.scrollTop; scrOfX = document.documentElement.scrollLeft; }
+
+ return [ scrOfX, scrOfY ];
+ }
+
+ /* Cross browser X/Y window size gatherer */
+ function getWindowSize()
+ {
+ var myWidth = 0, myHeight = 0;
+
+ if( typeof( window.innerWidth ) == 'number' )
+ { myWidth = window.innerWidth; myHeight = window.innerHeight; }
+ else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) )
+ { myWidth = document.documentElement.clientWidth; myHeight = document.documentElement.clientHeight; }
+ else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) )
+ { myWidth = document.body.clientWidth; myHeight = document.body.clientHeight; }
+
+ return [ myWidth, myHeight ];
+ }
+
+ /* Cross browser alpha transparency changer */
+ function changeOpac(opacity, id)
+ {
+ DivID = PictureCache[id][0];
+
+ var object = document.getElementById(DivID).style;
+ object.opacity = (opacity / 100);
+ object.MozOpacity = (opacity / 100);
+ object.KhtmlOpacity = (opacity / 100);
+ object.filter = "alpha(opacity=" + opacity + ")";
+ }
+
+ /* Shade in-out function */
+ function opacity(id, opacStart, opacEnd, millisec)
+ {
+ var speed = Math.round(millisec / 100);
+ var timer = 0;
+
+ if(opacStart > opacEnd)
+ {
+ for(i = opacStart; i >= opacEnd; i--)
+ {
+ setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
+ timer++;
+ }
+ }
+ else if(opacStart < opacEnd)
+ {
+ for(i = opacStart; i <= opacEnd; i++)
+ {
+ setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
+ timer++;
+ }
+ }
+ }
+
+ /* Start the loader */
+ function StartFade(PictureID)
+ {
+ Loader = new Image();
+ URL = PictureCache[PictureID][2];
+ Loader.src = URL;
+ setTimeout("CheckLoadingStatus("+PictureID+")", 200);
+ }
+
+ /* check the picture loading status */
+ function CheckLoadingStatus(PictureID)
+ {
+ DivID = PictureCache[PictureID][0];
+ URL = PictureCache[PictureID][2];
+ Alt = PictureCache[PictureID][3];
+
+ if ( Loader.complete == true )
+ {
+ changeOpac(0, PictureID);
+ HTMLResult = "<center><img src='" + URL + "' alt='"+Alt+"'/></center>";
+ document.getElementById(DivID).innerHTML = HTMLResult;
+
+ opacity(PictureID,0,100,100);
+ }
+ else
+ setTimeout("CheckLoadingStatus("+PictureID+")", 200);
+ }
+
+ /* Compute the pChart picture in background */
+ function ajaxRender(URL,PictureID)
+ {
+ var xmlhttp=false;
+ /*@cc_on @*/
+ /*@if (@_jscript_version >= 5)
+ try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } }
+ @end @*/
+
+ if (!xmlhttp && typeof XMLHttpRequest!='undefined')
+ { try { xmlhttp = new XMLHttpRequest(); } catch (e) { xmlhttp=false; } }
+
+ if (!xmlhttp && window.createRequest)
+ { try { xmlhttp = window.createRequest(); } catch (e) { xmlhttp=false; } }
+
+ xmlhttp.open("GET", URL,true);
+
+ xmlhttp.onreadystatechange=function()
+ { if (xmlhttp.readyState==4) { StartFade(PictureID); } }
+ xmlhttp.send(null)
+ }