var gpx = function () {
	// on init stuff
	var root = document.location.protocol + '//' + document.location.hostname + (document.location.port.length > 1 ? ':' + document.location.port : '');
	var section = document.location.toString().split('/')[3];
	var js = [];
	var css = [];
	var head = document.getElementsByTagName("head")[0];
	jsTags = document.getElementsByTagName("script");
	cssTags = document.getElementsByTagName("link");
	for(var i = 0; i < jsTags.length; i++) {
		if(jsTags[i].type == 'text/javascript' && jsTags[i].src.length > 1) {
			js.push(jsTags[i].src);
		}
	}
	for(var i = 0; i < cssTags.length; i++) {
		if(cssTags[i].type == 'text/css' && cssTags[i].href.length > 1) {
			css.push(cssTags[i].href);
		}
	}
	var sleep = function(d) {
		var s = new Date().getTime();
		while (new Date().getTime() < s + d);
	}
	return {
		section: section,
		loadedFiles: {
			js: js,
			css: css
		},
		loadJs: function(url, c) {
			var urlTmp = url.split('/');
			var scriptId = urlTmp[(urlTmp.length - 1)].replace('.js', '');
			/*if(self[scriptId]) {
				return true;
			}*/
			var paths = gpx.loadedFiles.js;
			var callback = c || false;
			for(var i = 0; i < paths.length; i++) {
				if(paths[i] == url) {
					return false;
				}
			}
			var script = document.createElement('script');
			script.id = scriptId;
			script.src = url;
			script.onreadystatechange = function(e) {
				if(this.readyState == 'loaded' || this.readyState == 'complete') {
					if(!callback) {
						return false;
					}
					callback();
					callback = false;	
				}
			}
			script.onload = function(e) {
				if(!callback) {
					return false;
				}
				callback();
				callback = false;
			}
			script.type = 'text/javascript';
			head.appendChild(script);
			//head.insertBefore( script, head.firstChild );
			var script = null;
			return true;
		},
		lazyLoadJs: function(url, c) {
			var callback = c || false;
			var script = document.createElement('script');
			script.src = url;
			script.onreadystatechange = function(e) {
				if(this.readyState == 'loaded' || this.readyState == 'complete') {
					if(!callback) {
						return false;
					}
					callback();
					callback = false;	
				}
			}
			script.onload = function(e) {
				if(!callback) {
					return;
				}
				else {
					callback();
					callback = false;
					return;
				}
			}
			script.type = 'text/javascript';
			document.getElementsByTagName('body')[0].appendChild(script);
			var script = null;
			return true;
		},
		loadCss: function(url) {
			var paths = gpx.loadedFiles.css;
			for(var i = 0; i < paths.length; i++) {
				if(paths[i] == url) {
					return false;
				}
			}
			var link = document.createElement('link');
			link.href = url;
			link.type = 'text/css';
			link.rel = 'stylesheet';
			head.appendChild(link);
			return true;
		}
	};
}();


