function include(filename) { document.write('<' + 'script'); document.write(' language="javascript"'); document.write(' type="text/javascript"'); document.write(' src="' + filename + '">'); document.write(''); } function isdefined(variable) { return (typeof(window[variable]) == "undefined")? false: true; } function GetLanguage() { var userLang = (navigator.language) ? navigator.language : navigator.userLanguage; var s = userLang.split("-"); return s[0].toUpperCase(); } function GetOS() { var OSName="Not defined"; if (navigator.appVersion.indexOf("Win")!=-1) OSName="Windows"; if (navigator.appVersion.indexOf("Mac")!=-1) OSName="MacOS"; if (navigator.appVersion.indexOf("X11")!=-1) OSName="UNIX"; if (navigator.appVersion.indexOf("Linux")!=-1) OSName="Linux"; return OSName; } var BrowserDetect = { init: function () { this.browser = this.searchString(this.dataBrowser) || "An unknown browser"; this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "an unknown version"; this.OS = this.searchString(this.dataOS) || "an unknown OS"; }, searchString: function (data) { for (var i=0;i 3) { for (var i = 3; i < env.length; i++) { MyPath = MyPath + '/' + env[i]; } } } function AlterInputs() { var myInputArray = document.getElementsByTagName("INPUT"); for (var i=0; i 0) { coord += ';' + scroll[0] + ',' + scroll[1] + ',"k",' + XNow + ',' + this.name + ',' + String.fromCharCode(KeyID); } else { coord += scroll[0] + ',' + scroll[1] + ',"k",' + XNow + ',' + this.name + ',' + String.fromCharCode(KeyID); } }; } else { myInputArray[i].addEventListener("keyup", function(evt) { var KeyID = (window.event) ? event.keyCode : evt.keyCode; //alert(KeyID); var scroll = GetScroll(); if (scroll == false) { scroll = new Array(LastScrollX,LastScrollY); } posx = evt.pageX; posy = evt.pageY; //document.getElementById('scrollme').innerHTML += '[ ' + posx + ', ' + posy + ' ]'; //alert('Click: [ ' + posx + ', ' + posy + ' ]' + 'Scroll: [ ' + scroll[0] + ', ' + scroll[1] + ' ]'); var XNow = GetTime() - SessionStartTime; if (coord.length > 0) { coord += ';' + scroll[0] + ',' + scroll[1] + ',"k",' + XNow + ',' + this.name + ',' + String.fromCharCode(KeyID); } else { coord += scroll[0] + ',' + scroll[1] + ',"k",' + XNow + ',' + this.name + ',' + String.fromCharCode(KeyID); } }, false); } // we have a winner! // do something neato with myInputArray[i] } } } function LoadTracker() { BrowserDetect.init(); if (document.body == null) { return false; } // alert(MyCode); makeFrame('wspifr'); GlobalFrame = document.getElementById('wspifr'); GlobalFrame.setAttribute('name', 'wspifr'); GlobalFrame.setAttribute('id', 'wspifr'); //GlobalFrame.src = BaseURL + ''; //pausecomp(DefaultPause); // get some basic info about the visited page getHost(); // environment variables and page id, screen res, etc :D LoadEnv(); AlterInputs(); // get cookie - check if we're on a second page // regular events document.onmousemove = AddCoord; document.onclick = AddClick; // when we leave the page... bang :) window.onbeforeunload = function(event) { //GlobalFrame.src = BaseURL + "index.php/tracker/store/points" + coord; //GlobalFrame.src = BaseURL + 'store.php?MySSID=' + MySSID + '&MyPageId=' + MyPageId + '&shoot=' + coord; SaveData(BaseURL + 'track/lib/php/store.php?OFF=1&MySSID=' + MySSID + '&MyPageId=' + MyPageId + '&shoot=' + coord); // wait for a while to send data :) pausecomp(DefaultPause); } window.onscroll = function() { //getScrollXY(this); AddCoord(this); return true; } } function GetMyTime() { var d = new Date(); var year = d.getFullYear(); var month = d.getMonth() + 1; month = month.toString(); if (month.length == 1) { month = '0' + month; } var day = d.getDate(); day = day.toString(); if (day.length == 1) { day = '0' + day; } var hour = d.getHours(); hour = hour.toString(); if (hour.length == 1) { hour = '0' + hour; } var minute = d.getMinutes(); minute = minute.toString(); if (minute.length == 1) { minute = '0' + minute; } var second = d.getSeconds(); second = second.toString(); if (second.length == 1) { second = '0' + second; } var MyTime = '' + year + month + day + hour + minute + second; return MyTime; } function SaveData(url) { // add timestamp //alert(url); var myurl = url + '&MyTime=' + GetMyTime() + '&jsoncallback=?'; //alert(myurl); //document.getElementById('scrollme').innerHTML = myurl; //document.title += MyTime; $.getJSON(myurl, function(data){ //MyPageId = data.pgid; coord = ''; //alert(data.ok); } ); } function getScrollXY(evt) { var XNow = GetTime() - SessionStartTime; var scroll = GetScroll(); if (scroll == false) { } else { var XNow = GetTime() - SessionStartTime; if ((XNow - LNow) > DefaultStep) { if (coord.length > 0) { coord += ';' + scroll[0] + ',' + scroll[1] + ',"s",' + XNow; } else { coord += scroll[0] + ',' + scroll[1] + ',"s",' + XNow; } LNow = XNow; } if (coord.length > DefaultMaxSize) { // send to server :D //alert(coord); //alert(BaseURL + 'store.php?MySSID=' + MySSID + '&MyPageId=' + MyPageId + '&shoot=' + coord); //document.getElementById('scrollme').innerHTML = BaseURL + 'store.php?MySSID=' + MySSID + '&MyPageId=' + MyPageId + '&shoot=' + coord; //GlobalFrame.src = BaseURL + 'store.php?MySSID=' + MySSID + '&MyPageId=' + MyPageId + '&shoot=' + coord; SaveData(BaseURL + 'track/lib/php/store.php?MySSID=' + MySSID + '&MyPageId=' + MyPageId + '&shoot=' + coord); coord = ''; //pausecomp(DefaultPause); } //coord += ';' + scroll[0] + ',' + scroll[1] + ',"s",' + XNow; } } function GetScroll() { var scrOfX = 0, scrOfY = 0; if( typeof( window.pageYOffset ) == 'number' ) { //Netscape compliant scrOfY = window.pageYOffset; scrOfX = window.pageXOffset; } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) { //DOM compliant scrOfY = document.body.scrollTop; scrOfX = document.body.scrollLeft; } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) { //IE6 standards compliant mode scrOfY = document.documentElement.scrollTop; scrOfX = document.documentElement.scrollLeft; } //alert(scrOfY); //return [ scrOfX, scrOfY ]; if ((scrOfX == LastScrollX) && (scrOfY == LastScrollY)) { return false; } else { //alert('x'); //document.getElementById('scrollme').innerHTML += '[ ' + scrOfX + ', ' + scrOfY + ' ]'; LastScrollX = scrOfX; LastScrollY = scrOfY; return [ scrOfX, scrOfY ]; } } function AddCoord(evt) { var scroll = GetScroll(); if (scroll == false) { scroll = new Array(LastScrollX,LastScrollY); } if (isIE) { var e = window.event; if (e.pageX || e.pageY) { posx = e.pageX; posy = e.pageY; } else //alert('y'); if (e.clientX || e.clientY) { posx = e.clientX + scroll[0]; posy = e.clientY + scroll[1]; } } else { posx = evt.pageX; posy = evt.pageY; } var XNow = GetTime() - SessionStartTime; //document.getElementById('scrollme').innerHTML += '[ ' + posx + ', ' + posy + ' ]'; if ((XNow - LNow) > DefaultStep) { if (coord.length > 0) { coord += ';' + posx + ',' + posy + ',"m",' + XNow; } else { coord += posx + ',' + posy + ',"m",' + XNow; } LNow = XNow; } if (coord.length > DefaultMaxSize) { // send to server :D //alert(coord); //alert(BaseURL + 'store.php?MySSID=' + MySSID + '&MyPageId=' + MyPageId + '&shoot=' + coord); //document.getElementById('scrollme').innerHTML = BaseURL + 'store.php?MySSID=' + MySSID + '&MyPageId=' + MyPageId + '&shoot=' + coord; //GlobalFrame.src = BaseURL + 'store.php?MySSID=' + MySSID + '&MyPageId=' + MyPageId + '&shoot=' + coord; SaveData(BaseURL + 'track/lib/php/store.php?MySSID=' + MySSID + '&MyPageId=' + MyPageId + '&shoot=' + coord); coord = ''; //pausecomp(DefaultPause); } } function AddClick(evt) { var scroll = GetScroll(); if (scroll == false) { scroll = new Array(LastScrollX,LastScrollY); } if (isIE) { var e = window.event; if (e.pageX || e.pageY) { posx = e.pageX; posy = e.pageY; } else if (e.clientX || e.clientY) { posx = e.clientX + scroll[0]; posy = e.clientY + scroll[1]; } } else { posx = evt.pageX; posy = evt.pageY; } //document.getElementById('scrollme').innerHTML += '[ ' + posx + ', ' + posy + ' ]'; //alert('Click: [ ' + posx + ', ' + posy + ' ]' + 'Scroll: [ ' + scroll[0] + ', ' + scroll[1] + ' ]'); var XNow = GetTime() - SessionStartTime; if (coord.length > 0) { coord += ';' + posx + ',' + posy + ',"c",' + XNow; } else { coord += posx + ',' + posy + ',"c",' + XNow; } } function GetWindowSize() { var myWidth = 0, myHeight = 0; if( typeof( window.innerWidth ) == 'number' ) { //Non-IE myWidth = window.innerWidth; myHeight = window.innerHeight; } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) { //IE 6+ in 'standards compliant mode' myWidth = document.documentElement.clientWidth; myHeight = document.documentElement.clientHeight; } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) { //IE 4 compatible myWidth = document.body.clientWidth; myHeight = document.body.clientHeight; } return [ myWidth, myHeight ]; //window.alert( 'Width = ' + myWidth ); //window.alert( 'Height = ' + myHeight ); } var EnvLoaded = 0; function LoadEnv() { if (EnvLoaded == 1) { return 0; } // check if page id is there, if not, we request one ;) if (MyPageId == 0) { // check for the cookie var coc = GetCookie('VSP' + MyCode); var BeenHere = 0; if (coc) { BeenHere = 1; } // set the cookie anyway SetCookie('VSP' + MyCode, '1', 365, '/'); // get referer var referer = btoa(document.referrer); //alert(referer); // get time var d = new Date(); var MyTime = '' + d.getFullYear() + d.getMonth() + d.getDate() + d.getHours() + d.getMinutes() + d.getSeconds(); var sizes = GetWindowSize(); // os and language var myos = GetOS(); var mylang = GetLanguage(); var EnvUrl = BaseURL + 'track/lib/php/env.php?' + 'MyCode=' + MyCode + '&MySSID=' + MySSID + '&MyHost=' + btoa(MyHost) + '&MyPath=' + btoa(MyPath) + '&ScrW=' + screen.width + '&ScrH=' + screen.height + '&PgW=' + sizes[0] + '&PgH=' + sizes[1] + '&referer=' + referer + '&MyTime=' + GetMyTime() + '&BeenHere=' + BeenHere + '&MyLanguage=' + mylang + '&MyBrowser=' + BrowserDetect.browser + '&MyBrowserVersion=' + BrowserDetect.version + '&jsoncallback=?'; //document.title = EnvUrl; //alert(EnvUrl); $.getJSON(EnvUrl, function(data){ MyPageId = data.pgid; //alert(MyPageId); } ); ////////////////////////////////////////////////////////////// // experimental ... var TheContent; if (isIE) { TheContent = document.all[0].innerHTML; } else { TheContent = document.getElementsByTagName('html')[0].innerHTML; } TheContent = '' + TheContent + ''; // don't forget to get the path here... now just testing //document.title = thenewurl; ////////////////////////////////////////////////////////////// } else { // do nothing :) } EnvLoaded = 1; } if (typeof btoa == 'undefined') { function btoa(str) { var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; var encoded = []; var c = 0; while (c < str.length) { var b0 = str.charCodeAt(c++); var b1 = str.charCodeAt(c++); var b2 = str.charCodeAt(c++); var buf = (b0 << 16) + ((b1 || 0) << 8) + (b2 || 0); var i0 = (buf & (63 << 18)) >> 18; var i1 = (buf & (63 << 12)) >> 12; var i2 = isNaN(b1) ? 64 : (buf & (63 << 6)) >> 6; var i3 = isNaN(b2) ? 64 : (buf & 63); encoded[encoded.length] = chars.charAt(i0); encoded[encoded.length] = chars.charAt(i1); encoded[encoded.length] = chars.charAt(i2); encoded[encoded.length] = chars.charAt(i3); } return encoded.join(''); } } if (typeof atob == 'undefined') { function atob(str) { var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; var invalid = { strlen: (str.length % 4 != 0), chars: new RegExp('[^' + chars + ']').test(str), equals: (/=/.test(str) && (/=[^=]/.test(str) || /={3}/.test(str))) }; if (invalid.strlen || invalid.chars || invalid.equals) throw new Error('Invalid base64 data'); var decoded = []; var c = 0; while (c < str.length) { var i0 = chars.indexOf(str.charAt(c++)); var i1 = chars.indexOf(str.charAt(c++)); var i2 = chars.indexOf(str.charAt(c++)); var i3 = chars.indexOf(str.charAt(c++)); var buf = (i0 << 18) + (i1 << 12) + ((i2 & 63) << 6) + (i3 & 63); var b0 = (buf & (255 << 16)) >> 16; var b1 = (i2 == 64) ? -1 : (buf & (255 << 8)) >> 8; var b2 = (i3 == 64) ? -1 : (buf & 255); decoded[decoded.length] = String.fromCharCode(b0); if (b1 >= 0) decoded[decoded.length] = String.fromCharCode(b1); if (b2 >= 0) decoded[decoded.length] = String.fromCharCode(b2); } return decoded.join(''); } } function makeFrame(frid) { ifrm = document.createElement("IFRAME"); ifrm.setAttribute("src", BaseURL); ifrm.setAttribute("name", frid); ifrm.setAttribute("id", frid); ifrm.style.width = 0+"px"; ifrm.style.height = 0+"px"; ifrm.style.display = 'none'; document.body.appendChild(ifrm); } function pausecomp(millis) { var date = new Date(); var curDate = null; do { curDate = new Date(); } while(curDate-date < millis); } function SetCookie( name, value, expires, path, domain, secure ) { // set time, it's in milliseconds var today = new Date(); today.setTime( today.getTime() ); /* if the expires variable is set, make the correct expires time, the current script below will set it for x number of days, to make it for hours, delete * 24, for minutes, delete * 60 * 24 */ if ( expires ) { expires = expires * 1000 * 60 * 60 * 24; } var expires_date = new Date( today.getTime() + (expires) ); document.cookie = name + "=" +escape( value ) + ( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) + ( ( path ) ? ";path=" + path : "" ) + ( ( domain ) ? ";domain=" + domain : "" ) + ( ( secure ) ? ";secure" : "" ); } function GetCookie( check_name ) { // first we'll split this cookie up into name/value pairs // note: document.cookie only returns name=value, not the other components var a_all_cookies = document.cookie.split( ';' ); var a_temp_cookie = ''; var cookie_name = ''; var cookie_value = ''; var b_cookie_found = false; // set boolean t/f default f for ( i = 0; i < a_all_cookies.length; i++ ) { // now we'll split apart each name=value pair a_temp_cookie = a_all_cookies[i].split( '=' ); // and trim left/right whitespace while we're at it cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, ''); // if the extracted name matches passed check_name if ( cookie_name == check_name ) { b_cookie_found = true; // we need to handle case where cookie has no value but exists (no = sign, that is): if ( a_temp_cookie.length > 1 ) { cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') ); } // note that in cases where cookie is initialized but no value, null is returned return cookie_value; break; } a_temp_cookie = null; cookie_name = ''; } if ( !b_cookie_found ) { return null; } }