// common debug function
var log = function () {
	var a = [].slice.apply(arguments);
	if (typeof(trace) !== 'undefined') {
		trace.apply(window, a);
	} else if (typeof(console) !== 'undefined' && typeof(console.log) !== 'undefined') {
		console.log.apply(console, a);
	}
};

// get evaluated string helper
var getEvaluated = function(val){
	var result;
	try{
		result = {
			success: true,
			data: eval('(function(){return ('+val+');})();')
		}
	}catch(e){
		result = {
			success: false,
			data: val,
			message: e.message
		};
		log(result);
	}
	return result;
};

// get live javascript code from json_attr template helper
var getJsonAttr = function(encodedValue){
	return getEvaluated(decodeURIComponent(encodedValue).replace(/%25/g, '%'));
};

// Javascriot Object & Array cloning helpers (javascript objects and arrays are asigned as references, not as clones)
Object.clone = function(obj1){
	var obj2;
	if(Object.prototype.toString.apply(obj1)==='[object Array]'){
		obj2 = Array.clone(obj1)
	}else{
		if(typeof(obj1) == 'object'){
			if(!obj1){
				obj2 = null
			}else{
				obj2 = {};
				for(var i in obj1){
					var val = obj1[i];
					if(typeof(val) == 'object'){
						obj2[i] = Object.clone(val)
					}else{
						obj2[i] = val
					}
				}
			}
		}else{
			obj2 = obj1
		}
	}
	return obj2
};
Array.clone = function(obj1){
	var obj2;
	if(Object.prototype.toString.apply(obj1)==='[object Object]'){
		obj2 = Object.clone(obj1)
	}else{
		if(typeof(obj1) == 'object'){
			obj2 = [];
			for(var i in obj1){
				var val = obj1[i];
				if(typeof(val) == 'object'){
					if(!val){
						obj2[i] = null
					}else{
						obj2[i] = Array.clone(val)
					}
				}else{
					obj2[i] = val
				}
			}
		}else{
			obj2 = obj1
		}
	}
	return obj2
};

// metatag getter
var getMetaTag = function(name){
	var result = false;
	var nameTags = document.getElementsByTagName('meta');
	for (var t in nameTags) {
		if (typeof(nameTags[t].name) == 'string') {
			if (nameTags[t].name == name) {
				result = nameTags[t].content;
				break
			}
		}
	};
	return result
};
