/*---------------------------------------------------------------------------
		File name ............ canvas/js/utils.core.js
		Author ............... Antoine Lemoine
		Creation date ........ 22.10.2008
		Modification date .... 24.10.2008
---------------------------------------------------------------------------*/

function print_r (array, return_val)
{
	// http://kevin.vanzonneveld.net
	// +   original by: Michael White (http://getsprink.com)
	// +   improved by: Ben Bryan
	// *     example 1: print_r(1, true);
	// *     returns 1: 1

	var output = "", pad_char = " ", pad_val = 4;
	
	var formatArray = function (obj, cur_depth, pad_val, pad_char)
	{
		if (cur_depth>0)
		{
			cur_depth++;
		}
		
		var base_pad = repeat_char(pad_val*cur_depth, pad_char);
		var thick_pad = repeat_char(pad_val*(cur_depth+1), pad_char);
		var str = "";
		
		if (obj instanceof Array || obj instanceof Object)
		{
			str += "Array\n" + base_pad + "(\n";
			for (var key in obj)
			{
				if (obj[key] instanceof Array)
				{
					str += thick_pad + "["+key+"] => "+formatArray(obj[key], cur_depth+1, pad_val, pad_char);
				}
				else
				{
					str += thick_pad + "["+key+"] => " + obj[key] + "\n";
				}
			}
			str += base_pad + ")\n";
		}
		else if (obj==null || obj==undefined)
		{
			str = '';
		}
		else
		{
			str = obj.toString();
		}
		
		return str;
	};
 
	var repeat_char = function (len, pad_char)
	{
		var str = "";
		for (var i=0; i < len; i++)
		{ 
			str += pad_char; 
		}
		return str;
	};
	
	output = formatArray(array,0,pad_val,pad_char);
 
	if (return_val!==true)
	{
		document.write("<pre>" + output + "</pre>");
		return true;
	}
	else
	{
		return output;
	}
}

function getXMLHttpObj()
{
	if (typeof(XMLHttpRequest)!='undefined')
	{
		return new XMLHttpRequest();
	}

	var axO=['Msxml2.XMLHTTP.6.0', 'Msxml2.XMLHTTP.4.0', 'Msxml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP', 'Microsoft.XMLHTTP'], i;
	for(i=0;i<axO.length;i++)
	{
		try
		{
			return new ActiveXObject(axO[i]);
		}
		catch (e) {}
	}
	return null;
}

function loadScript(url)
{
	var oXML = getXMLHttpObj();
	oXML.open('GET', url, false);
	oXML.send('');
	try
	{
		eval(oXML.responseText);
		return true;
	}
	catch (e)
	{
		document.write(oXML.responseText);
		return false;
	}
}

function include(url)
{
	var scripts = document.getElementsByTagName('script');
	var found = false;
	for (i=0; i<scripts.length; i++)
	{
		if (scripts[i].getAttribute('src')==url)
		{
			found = true;
			break;
		}
	}
	if (!found)
	{
		var script = document.createElement('script');
		script.setAttribute('src', url);
		script.setAttribute('type', 'text/javascript');
		document.getElementsByTagName('head')[0].appendChild(script);
		if (!loadScript(url))
		{
			alert("Impossible to load `"+url+"`");
		}
	}
}

function includeCSS(url)
{
	var style=document.createElement("link" ); /*feuille de style*/
	with (style)
	{
		type = "text/css";
		rel = "stylesheet";
		href = url;
	}
	document.getElementsByTagName("head" )[0].appendChild(style);
}

function buildPath(path1, path2)
{
	return path1+(path1[path1.length-1]!='/' ? '/' : '')+path2;
}

function isset() {
	// http://kevin.vanzonneveld.net
	// +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// +   improved by: FremyCompany
	// +   improved by: Onno Marsman
	// *     example 1: isset( undefined, true);
	// *     returns 1: false
	// *     example 2: isset( 'Kevin van Zonneveld' );
	// *     returns 2: true

	var a=arguments; var l=a.length; var i=0;

	if (l==0) { 
		throw new Error('Empty isset'); 
	}

	while (i!=l) {
		if (typeof(a[i])=='undefined' || a[i]===null) { 
			return false; 
		} else { 
			i++; 
		}
	}
	return true;
}

