1 /*global window, document, BytePushers, XMLHttpRequest, ActiveXObject*/
  2 /**
  3  * Created with IntelliJ IDEA.
  4  * User: pouncilt
  5  * Date: 4/30/13
  6  * Time: 8:14 AM
  7  * To change this template use File | Settings | File Templates.
  8  */
  9 (function (window, document, BytePushers) {
 10     'use strict';
 11     BytePushers = BytePushers || {};
 12     BytePushers.ResourceLoader = BytePushers.namespace("software.bytepushers.utils.ResourceLoader");
 13     BytePushers.ResourceLoader = function () {
 14         function isResourceNotLoaded() {/*fileName*/
 15             return;
 16         }
 17         this.loadResource = function (fileName, fileType) {
 18             if (isResourceNotLoaded(fileName)) {
 19                 var fileref;
 20 
 21                 if (fileType === "js") { //if filename is a external JavaScript file
 22                     fileref = document.createElement('script');
 23                     fileref.setAttribute("type", "text/javascript");
 24                     fileref.setAttribute("src", fileName);
 25                 } else if (fileType === "css") { //if filename is an external CSS file
 26                     fileref = document.createElement("link");
 27                     fileref.setAttribute("rel", "stylesheet");
 28                     fileref.setAttribute("type", "text/css");
 29                     fileref.setAttribute("href", fileName);
 30                 }
 31                 if (fileref !== undefined) {
 32                     document.getElementsByTagName("head")[0].appendChild(fileref);
 33                 }
 34             }
 35         };
 36         this.createResource = function (filename, filetype) {
 37             var fileref = null;
 38             if (filetype === "js") { //if filename is a external JavaScript file
 39                 fileref = document.createElement('script');
 40                 fileref.setAttribute("type", "text/javascript");
 41                 fileref.setAttribute("src", filename);
 42             } else if (filetype === "css") { //if filename is an external CSS file
 43                 fileref = document.createElement("link");
 44                 fileref.setAttribute("rel", "stylesheet");
 45                 fileref.setAttribute("type", "text/css");
 46                 fileref.setAttribute("href", filename);
 47             }
 48             return fileref;
 49         };
 50         this.replaceResource = function (oldfilename, newfilename, filetype) {
 51             var targetelement = (filetype === "js") ? "script" : (filetype === "css") ? "link" : "none", //determine element type to create nodelist using
 52                 targetattr = (filetype === "js") ? "src" : (filetype === "css") ? "href" : "none", //determine corresponding attribute to test for
 53                 allsuspects = document.getElementsByTagName(targetelement),
 54                 i,
 55                 newelement;
 56             for (i = allsuspects.length; i >= 0; i = i - 1) { //search backwards within nodelist for matching elements to remove
 57                 if (allsuspects[i] && allsuspects[i].getAttribute(targetattr) !== null && allsuspects[i].getAttribute(targetattr).indexOf(oldfilename) !== -1) {
 58                     newelement = this.createResource(newfilename, filetype);
 59                     allsuspects[i].parentNode.replaceChild(newelement, allsuspects[i]);
 60                 }
 61             }
 62         };
 63         this.removeResource = function (oldfilename, filetype) {
 64             var targetelement = (filetype === "js") ? "script" : (filetype === "css") ? "link" : "none", //determine element type to create nodelist using
 65                 targetattr = (filetype === "js") ? "src" : (filetype === "css") ? "href" : "none", //determine corresponding attribute to test for
 66                 allsuspects = document.getElementsByTagName(targetelement),
 67                 i,
 68                 newelement;
 69             for (i = allsuspects.length; i >= 0; i = 1 - 1) { //search backwards within nodelist for matching elements to remove
 70                 if (allsuspects[i] && allsuspects[i].getAttribute(targetattr) !== null && allsuspects[i].getAttribute(targetattr).indexOf(oldfilename) !== -1) {
 71                     newelement = this.createResource("js/blank.js", filetype);
 72                     allsuspects[i].parentNode.replaceChild(newelement, allsuspects[i]);
 73                 }
 74             }
 75         };
 76         this.loadXMLDoc = function (theUrl) {
 77             var xmlHttp, xmlDoc;
 78             if (window.XMLHttpRequest) {
 79                 // code for IE7+, Firefox, Chrome, Opera, Safari
 80                 xmlHttp = new XMLHttpRequest();
 81             } else {
 82                 // code for IE6, IE5
 83                 xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
 84             }
 85 
 86             xmlHttp.onreadystatechange = function () {
 87                 if (xmlHttp.readyState === 4 && xmlHttp.status === 200) {
 88                     //callbackFunction(xmlhttp.responseText);
 89                     xmlDoc = xmlHttp.responseText;
 90                     return xmlDoc;
 91                 }
 92             };
 93             xmlHttp.open("GET", theUrl, false);
 94             xmlHttp.send();
 95             return xmlDoc;
 96         };
 97     };
 98     BytePushers.ResourceLoader.loadedResources = [];
 99 }(window, document, BytePushers));