/* shortcut dom */
function _createElement(el,obj){
	var _el= document.createElement(el);
	for(var prop in obj){
		 _el.setAttribute(prop,obj[prop]);
	}
	return _el;
};
function _createTextNode(text){
	return document.createTextNode(text);
};
function _removeChild(parent,child){
	if(child != null){
		parent.removeChild(child);
	}
};
function console(obj){
	this.add = function(message) {
		obj.innerHTML = message;
	};
};
/* Events */
function addEvent(elm, evType, fn, useCapture){
	if (elm.addEventListener){
			elm.addEventListener(evType, fn, useCapture);
			return true;
	} else if (elm.attachEvent) {
		var r = elm.attachEvent('on' + evType, fn);
		return r;
	} else {
		elm['on' + evType] = fn;
	}
};
function getTarget( evt ){ 
	evt = evt || window.event || null; 
    return evt?(evt.target||evt.srcElement||null):null; 
}; 
function cancelClick(e){
	if (window.event){
		window.event.cancelBubble = true;
		window.event.returnValue = false;
		return;
	}
	if (e){
		e.stopPropagation();
		e.preventDefault();
	}
};
/* Utility */
function $(id){
	return	document.getElementById(id);
};
function trim(s) {
  while ((s.substring(0,1) == ' ') || (s.substring(0,1) == '\n') || (s.substring(0,1) == '\r')) {
    s = s.substring(1,s.length);
  }
  while ((s.substring(s.length-1,s.length) == ' ') || (s.substring(s.length-1,s.length) == '\n') || (s.substring(s.length-1,s.length) == '\r')) {
    s = s.substring(0,s.length-1);
  }
  return s;
};
function addNumberToString(str,num){           
	return str.concat(parseInt(num));
};
function lookForChecked(target){
	var inputList= target.getElementsByTagName('input');
	for(var i=0;i<inputList.length;i++){
		inputList.item(i).checked=false;
	}
		return inputList.item(0);
};
function json_decode(string,filter) {
	var data= string.parseJSON(filter);
	return data;
};
function json_encode(value) {
  var data= value.toJSONString();
  return data;
};
function swapClassName(target,child,c1,c2){
	var tree= target.getElementsByTagName(child);
	for(var i=0;i<tree.length;i++){
		var currentClass= (i%2)?c1:c2;
		tree.item(i).className=currentClass;
	}
}
/* Validation */
function isEmpty(val) {
   return !/\S/.test(val);
} 
function isValidEmail(str) {
	// http://www.devpro.it/php4_id_2.html
	return Boolean(str.match(/^([a-z0-9]+[\._\-]?){1,3}([a-z0-9])*\@([a-z0-9]+[\.\-]?){1,3}([a-z0-9])*\.[a-z]{2,6}$/i));
};
function isInt(val) {
   return /^[1-9]\d{0,9}$/.test(val);
};
function isUrl(url){
	return /^(\w{2,6}:\/\/|www[0-9]*\.)\w+\.\w{2,6}/.test(url);
};
function isEmptyV(id,errMsg){
	this.el= document.getElementById(id);
	this.isValid= function(){
		var isValid= true;
		if(isEmpty(this.el.value)){
			this.error= errMsg;
			isValid= false;
		}
		return isValid;
	}
};
function isValidEmailV(id,errMsg){
	this.el= document.getElementById(id);
	this.isValid= function(){
		var isValid= true;
		if(!isValidEmail(this.el.value)){
			this.error= errMsg;
			isValid= false;
		}
		return isValid;
	}
};
function isIntV(id,errMsg){
	this.el= document.getElementById(id);
	this.isValid= function(){
		var isValid= true;
		if(!isInt(this.el.value)){
			this.error= errMsg;
			isValid= false;
		}
		return isValid;
	}
};
function isUrlV(id,errMsg){
	this.el= document.getElementById(id);
	this.isValid= function(){
		var isValid= true;
		if(this.el.value!='http://'){
			if(!isUrl(this.el.value)){
				this.error= errMsg;
				isValid= false;
			}
		}
		return isValid;
	}
};
function Validator() {
 	var validators= [];
	this.errors= [];
	this.values= {};
	this.add= function(objV){
		validators.push(objV);
	}
	this.isValid= function(){
		var isValidFlag= true;
		for(var i=0, len= validators.length;i< len;i++){
			if(!validators[i].isValid()){
				this.errors.push({error:validators[i].error,el:validators[i].el});
				isValidFlag= false;
			}
			else{
				this.values[validators[i].el.id]=validators[i].el.value;
			}
		}
		return isValidFlag;
	}
}
function resetStyle(target,bCol,col){
	var inputList= target.getElementsByTagName('input');
	for(var i=0,len=inputList.length;i<len;i++){
		inputList.item(i).style.backgroundColor=bCol;
		inputList.item(i).style.color=col;
	}
	var textList= target.getElementsByTagName('textarea');
	for(var i=0,len = textList.length;i<len;i++){
		textList.item(i).style.backgroundColor=bCol;
		textList.item(i).style.color=col;
	}
};
function setOpacity(el,value) {
	var v= +value;
	el.style.opacity = v/10;
	el.style.filter = 'alpha(opacity=' + v*10 + ')';
}
function preloadImgs(args) {
	for(var n=0, len = arguments.length;n<len;n++) {
		preloadImg(arguments[n]);
	}	
	//funzione che precarica un immagine
	function preloadImg(percorso) {
		var temp=new Image();
		temp.src=percorso;
	}
}
/* Job */
function buildError(el,msg,_id){
	var showError= _createElement(el,{id:_id});
	showError.className='show-error';
	showError.appendChild(_createTextNode(msg));
	return showError;
}