/**
 * @author ZiJuà
 */
/**
 * NAMESPACES DEFINITIONS
 * Add here the namespace you want to use
 */
var WCore = WCore || {};
var WPlayer = WPlayer || {};
var WGeo = WGeo || {};
var WGallery = WGallery || {};
var WData = WData || {};

/**
 * Config object
 */
WCore.Config = {
	baseURL : "http://www.vallesole.it/media/js/WCore/"
};

/**
 * Util object
 */
WCore.Util = {
	/**
	 * Include a script in the head of the page. 
	 * @param jfFile the URL of the file you want to include
	 * @param callback the callback function called when the scripts is loaded
	 * @return void 
	 */
	includeScript : function(jsFile, callback, external)
	{
		external = external || false;
		var headID = document.getElementsByTagName("head")[0];         
		var newScript = document.createElement('script');
		newScript.type = 'text/javascript';
		if(external){
			newScript.src = "http://" + jsFile + ".js?" + Math.floor(Math.random()*99999);
		}
		else{
			newScript.src = WCore.Config.baseURL + jsFile + ".js?" + Math.floor(Math.random()*99999);
		}
		/* IE */
		newScript.onreadystatechange = function () {
			if (newScript.readyState == 'loaded' || newScript.readyState == 'complete') {
				callback();
			}
        }
        /* Others */
		newScript.onload = callback;
		headID.appendChild(newScript);
	},
	includeCss : function(cssFile, callback)
	{
		var headID = document.getElementsByTagName("head")[0];
		var newCss = document.createElement("link");
		newCss.setAttribute("rel", "stylesheet");
		newCss.setAttribute("type", "text/css");
		newCss.setAttribute("href", cssFile + "?" + Math.floor(Math.random()*99999));
		/* IE */
		newCss.onreadystatechange = function () {
			if (newCss.readyState == 'loaded' || newCss.readyState == 'complete') {
				callback();
			}
        }
        /* Others */
		newCss.onload = callback;
		
		headID.appendChild(newCss);
	}
};

/**
 * Request object (AJAX)
 */
WCore.Request = (function(){
	var request = {};
	var i, xhr, activeXCurrentId = "Microsoft.XMLHTTP", activeXids = ["MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
	
	request.xhr = {};
	
	var createStandardXHR = function() {
		try {
			return new window.XMLHttpRequest();
		} catch( e ) {}
	};
	
	var createActiveXHR = function() {
		try {
			return new window.ActiveXObject( activeXCurrentId );
		} catch( e ) {}
	};
	
	request.open = function(p){
		reqXhr = request.xhr();
		reqXhr.onreadystatechange = function(){
			if(reqXhr.readyState !== 4){
				return false;
			}
			if(reqXhr.status !== 200){
				p.error(reqXhr.status);
				return false;
			}
			//alert(reqXhr.responseText);
			(p.type == "xml") ? p.success(reqXhr.responseXml) : p.success(reqXhr.responseText); 
		}
		reqXhr.open(p.method, p.url, p.async);
		reqXhr.send("");
	};
	
	/**
	 * init-time branching
	 */
	(function(){
		if(typeof XMLHttpRequest === "function"){
			// tutti i browser
			//xhr = new XMLHttpRequest();
			request.xhr = createStandardXHR;
		}
		else{
			for(var i = 0; i < activeXids.length; i++){
				try{
					//xhr = new ActiveXObject(activeXids[i]);
					activeXCurrentId = activeXids[i];
					request.xhr = createActiveXHR;
					break;
				}
				catch(e){}
			}
		}
	})();
	return request;
})();

/**
 * Event object
 */
WCore.Event = (function(){
	var evnt = {};
	
	evnt.addEventListener = {};
	evnt.removeEventListener = {};
	
	/**
	 * init-time branching
	 */
	(function(){
		if(typeof window.addEventListener === "function"){
			evnt.addEventListener = function(el, type, fn){
				el.addEventListener(type, fn, false);
			}
		}
		else if(typeof document.attachEvent === "function"){
			evnt.addEventListener = function(el, type, fn){
				el.attachEvent("on" + type, fn, false);
			}
		}
		else{
			evnt.addEventListener = function(el, type, fn){
				el['on' + type] = fn;
			}
		}
		
		if(typeof window.removeEventListener === "function"){
			evnt.removeEventListener = function(el, type, fn){
				el.removeEventListener(type, fn, false);
			}
		}
		else if(typeof document.attachEvent === "function"){
			evnt.removeEventListener = function(el, type, fn){
				el.detachEvent("on" + type, fn);
			}
		}
		else{
			evnt.removeEventListener = function(el, type, fn){
				el["on" + type] = null;
			}
		}
	})();
	return evnt;
})();
