/**
 *  WSM Javascript Bootstrap Library, version 1.0.0
 *  (c) 2006 Arturo La Monaca <artlam74@gmail.com>
 */
var wsm = {
	author:	"(c) 2006 GSSI srl <info@gssi.it> - All Rights Reserved",
	version: '1.0.0',
	disclaimer: "WSMJT - Web Site Manager Javascript Toolkit, version " +  this.version + "\n" + this.author,
	jsUrl: 'wsm.js',
	contextUrl: '',
	include: function(package) {
		var packWithoutExt = (package.split(".").slice(0, -1)).join('.');
		var ext = package.replace(packWithoutExt, "");
		var packPath = packWithoutExt.replace(/\./g, '/') + ext;
		if (ext.toLowerCase() == ".js" && !wsm_scriptIncluded(this.contextUrl + packPath)) {
			wsm_loadScript(this.contextUrl + packPath);
		}
		if (ext.toLowerCase() == ".css" && !wsm_cssIncluded(this.contextUrl + packPath)) {
			wsm_loadCss(this.contextUrl + packPath);
		}
	}
};

// Browser check
ua = navigator.userAgent;
wsm.isIE = (navigator.appName == "Microsoft Internet Explorer");
wsm.isIE5 = wsm.isIE && (ua.indexOf('MSIE 5') != -1);
wsm.isIE5_0 = wsm.isIE && (ua.indexOf('MSIE 5.0') != -1);
wsm.isIE7 = wsm.isIE && (ua.indexOf('MSIE 7') != -1);
wsm.isGecko = ua.indexOf('Gecko') != -1;
wsm.isSafari = ua.indexOf('Safari') != -1;
wsm.isOpera = ua.indexOf('Opera') != -1;
wsm.isMac = ua.indexOf('Mac') != -1;
wsm.isNS7 = ua.indexOf('Netscape/7') != -1;
wsm.isNS71 = ua.indexOf('Netscape/7.1') != -1;

wsm_getContextUrl();

/* Fix for "click to activate and use this control"  
if (wsm.isIE) {
	document.attachEvent("onreadystatechange", 
		function() {
			if(document.readyState == "complete") {
				var wsm_objects = document.getElementsByTagName("object");
				for (var i = 0; i < wsm_objects.length; i++) {
					wsm_objects[i].outerHTML = wsm_objects[i].outerHTML;
				}	
			}	
		}
	);
} 
*/

function wsm_getContextUrl() {
	var scripts = document.getElementsByTagName("script");
	for(var i = 0; i < scripts.length; i++) {
		var src = scripts[i].getAttribute("src");
		if(!src) { continue; }
		var m = src.indexOf(wsm.jsUrl);
		if (m != -1) {
			wsm.contextUrl = src.substring(0, m);
			break;
		}
	}
};

function wsm_scriptIncluded(srcPath) {
	var scripts = document.getElementsByTagName("script");
	for(var i = 0; i < scripts.length; i++) {
		var src = scripts[i].getAttribute("src");
		if (!src)
			src = scripts[i].getAttribute("oldSrc");
		if(!src) { continue; }
		var m = src.indexOf(srcPath);
		if (m != -1) {
			return true;
		}
	}
	return false;
}; 

function wsm_cssIncluded(srcPath) {
	var sheets = document.getElementsByTagName("link");
	for(var i = 0; i < sheets.length; i++) {
		var href = sheets[i].getAttribute("href");
		if(!href) { continue; }
		var m = href.indexOf(srcPath);
		if (m != -1) {
			return true;
		}
	}
	return false;
};

function wsm_loadScript(url) {
   var e = document.createElement("script");
   e.src = url;
   e.type="text/javascript";
   var bodyElement = document.getElementsByTagName("body")[0];
   if (bodyElement) { 
   	document.getElementsByTagName("head")[0].appendChild(e); 
   } else {
   	document.write('<script src="', url, '" type="text/JavaScript"><\/script>');
   }
};

function wsm_loadCss(url) {
   var e = document.createElement("link");
   e.setAttribute("type", "text/css");
   e.setAttribute("rel", "stylesheet");
   e.setAttribute("href", url);
   var bodyElement = document.getElementsByTagName("body")[0];
   if (bodyElement) { 
   	document.getElementsByTagName("head")[0].appendChild(e); 
   } else {
   	document.write('<link rel="stylesheet" href="', url, '" type="text/css">');
   }
};


function $N() {
  var elements = new Array();
  for (var i = 0; i < arguments.length; i++) {
    var element = arguments[i];
    if (typeof element == 'string')
      element = document.getElementsByName(element);
    if (arguments.length == 1)
      return element;
    elements.push(element);
  }
  return elements;
};

function getElementsByClassName(oElm, strTagName, strClassName) {
    var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\\-");
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for(var i=0; i<arrElements.length; i++){
        oElement = arrElements[i];      
        if(oRegExp.test(oElement.className)){
            arrReturnElements.push(oElement);
        }   
    }
    return (arrReturnElements)
}
	
function wsm_defined(o) {
	return (o!=null && typeof(o)!="undefined");
}; 

Object.extend = function(obj, source) {
  for (property in source) {
    obj[property] = source[property];
  }
};

Object.debug = function(obj, hideFunctContent) {
	if (obj) {
		var debug = "Discovering... \n";
		for (var i in obj) {
			debug += i + " -> " 
			if (typeof(obj[i])=="function" && hideFunctContent)
				debug += "[function]\n";
			else
				debug += obj[i] +"\n";
		}
		return debug;
	} else {
		return ("Object is: " + obj);
	}
};

Function.prototype.bindAsEventListener = function(object, params) {
  var __method = this;
  return function(event) {
    return __method.apply(object, [(event || window.event), params]);
  }
};

if (!String.prototype.trim) {
	String.prototype.trim = function() {
	  return this.replace(/^\s*(\b.*\b|)\s*$/, "$1");
	}
};

function getPageParam(parName) {
	if (document.URL) {
		var callingURL = document.URL;
		if (callingURL.indexOf('?') != -1) {
			callingURL = callingURL.substring(callingURL.indexOf('?')+1,callingURL.length);
			if (callingURL.indexOf("params=")!=-1) {
				start = callingURL.indexOf("params=")+7; 
				end = callingURL.length;
				var paramString = callingURL.substring(start,end);
				var params = paramString.split(",");
				for (var i=0; i<params.length; i++) {
					var par = params[i].split(":");
					if (par[0] == parName)
						return par[1];
				}
			}			
		}
	}
	return null;
};


