var qm;
if(!qm){
    qm = {};
} else if (typeof qm !== 'object'){
    throw new Error('qm already exists and is not an object');
}

qm.use = (function(){
	var _list = [];
	var _tag = '';
	var _ctr = 0;
	var _injectScript = function(){		
		var tag	= document.createElement('script');
	    tag.type = 'text/javascript';
	    tag.src = _list[_ctr].script;
		tag.charset = 'utf-8';
	    tag.onload = tag.onreadystatechange = function(){				
	      if (!tag.readyState ||
	            tag.readyState === 'loaded' ||
	            tag.readyState === 'complete' ||
	            (tag.readyState === 4 && tag.status === 200)){				
			if(_list[_ctr].callback){
	        	_list[_ctr].callback.call();
			}
	        tag = null;
			if(_ctr < _list.length-1){
				_ctr = _ctr + 1;
				_injectScript();
			}
	      }
	    };
	    window.console && console.info('Loading ' + _list[_ctr].script);		
		if(_tag == null){
	    	document.getElementsByTagName('head')[0].appendChild(tag);
		}else{
			document.getElementsByTagName(_tag)[0].appendChild(tag);
		}		
	};
	return function(pkg){						
		var list = pkg.list;
		var scriptFound = false;
		_tag = pkg.tag;
		_list.length = 0;		
		for(var i=0; i<list.length; i++){							
			for(var j=0; j<_list.length; j++){				
				if(_list[j].script == list[i].script){
					scriptFound = true;
				}
			}
			if(scriptFound == false){
				_list.push(list[i]);
			}
		}		
		if(_list.length > 0){				
			_injectScript();
		}
  	};
})();
