jQuery.fn.exists = function(){return jQuery(this).length>0;}

var Templates = function(){
	this.self = this;
	this.objects = new Array();
	this.libsLoading = new Object();
	this.libsLoaded = new Object();
	this.filesToLoad = new Array();
};

Templates.prototype.addTemplate = function(template){
		this.objects.push(template);
};
Templates.prototype.loadFile = function(file){
	var format = file.substr(file.indexOf('.')+1, file.length-file.indexOf('.'));
	if (format == 'js'){
		var jsNode = document.createElement("script");
		jsNode.type = "text/javascript";
		jsNode.src = file;	
		document.getElementsByTagName("head")[0].appendChild(jsNode);
	}
	else if (format == 'css'){
		var cssNode = document.createElement('link');
		cssNode.rel = 'stylesheet';
		cssNode.type = 'text/css';
		cssNode.href = file;
		document.getElementsByTagName("head")[0].appendChild(cssNode);
	}
};
Templates.prototype.parseTemplates = function(){
	for (var i=0;i<this.objects.length;i++){
		var object = this.objects[i];
		if ($(object.element).exists()){
			var files = object.files;
			var libs = object.libs;
			// check if already loaded
			if (object.libsObjects != null){
				var numObjectsLoaded = 0;
				
				for (var b = 0; b < object.libsObjects.length; b++){
					var libAlreadyLoaded = jQuery.isFunction($(object.element)[object.libsObjects[b]]);
					if (libAlreadyLoaded) {
						numObjectsLoaded++;
					}
				}
				if (numObjectsLoaded == object.libsObjects.length){
					libs = null;	
				}	
			}
			if (libs == null){
				for (var a = 0; a < files.length; a++){
					var file = files[a];
					this.loadFile(file);	
				}
			}
			else {
				var elname = object.element;
				this.libsLoading[elname] = new Array();	
				this.libsLoaded[elname] = new Array();	
				this.filesToLoad[elname] = files;	
				
				for (var a = 0; a < libs.length; a++){
					var lib = libs[a];
					for (var el in this.libsLoading){
						if (jQuery.inArray( lib, this.libsLoading[el] ) == true){
							continue;	
						}			
					}
					
					var libname = lib.substring(lib.lastIndexOf('/')+1, lib.indexOf('.js'));
					
					
					this.libsLoading[elname].push(libname);
					var self = this;
					$.getScript(lib, function(data) {
					  var libname = data.substring(data.indexOf('<name>')+6, data.indexOf('</name>'));
					  if (libname.substring(0,3) == '/**'){
							console.log('Any lib loaded is within error for HiperPortal CMS 3.0 // Line 71');
							console.log('You must include it\'s name as <name>LibName</name>');
							console.log(data);
							return;
					  }
					  
					  var elName;
					  for (var el in self.libsLoading){
						if (self.libsLoading[el].join(',').indexOf(libname) != -1){
							elName = el;
						}			
					  }
					  
					  files = self.filesToLoad[elName];	  
					  self.libsLoaded[elName].push(1);
					  if (self.libsLoaded[elName].length >= self.libsLoading[elName].length){
						for (var a = 0; a < files.length; a++){
							var file = files[a];
							self.loadFile(file);	
						}  
					  }
					});		
				}
				
			}
		}
	}
		
};


$(function(){
	
	$('img[src*="../"]').each(function(){
		$(this).attr('src', $(this).attr('src').replace('../', '/'));	
	});
		   
	$('p.hp-component-stripe').css('display','none');	   
		   
	var templatesobj = new Templates();
	templatesobj.addTemplate({
		element: ".accordion", files: ["/templatesScripts/accordionImplementation/accordionImplementation.js"]
	});
	
	templatesobj.addTemplate({
		element: ".divScroller > .conteudoScroller", files: ["/templatesScripts/conteudoScroller/conteudoScroller.js"]
	});
	templatesobj.addTemplate({
		element: "#slider", libsObjects:['easySlider'], libs: ["/templatesScripts/easySlider/easySlider1.5.js"], files: ["/templatesScripts/easySlider/easySliderImplementation.js"]
	});
	templatesobj.addTemplate({
		element: "a.fancyboxLink", libsObjects:['fancybox'], libs: ["/templatesScripts/fancybox/fancybox/jquery.fancybox-1.3.1.pack.js", "/templatesScripts/fancybox/fancybox/jquery.mousewheel-3.0.2.pack.js", "/templatesScripts/fancybox/fancybox/jquery.easing-1.3.pack.js"], files: ["/templatesScripts/fancybox/fancyboxImplementation.js"]
	});
	
	templatesobj.addTemplate({
		element: ".horizontalAccordionsContainer", files: ["/templatesScripts/horizontalaccordion/horizontalaccordion.js"]
	});
	
	templatesobj.addTemplate({
		element: "#equipeRightCol", libsObjects:['scrollTo'], libs: ["/templatesScripts/libs/jquery.scrollTo-min.js"], files: ["/templatesScripts/horizontalslider/horizontalslider.js"]
	});
	
	templatesobj.addTemplate({
		element: ".peKenBurns", libsObjects:['peKenburnsSlider'], libs: ["/templatesScripts/kenburnsslider/js/pe.kenburns/jquery.pixelentity.kenburnsSlider.min.js"], files: ["/templatesScripts/kenburnsslider/kenburnsslider.js"]
	});
	
	templatesobj.addTemplate({
		element: "a.lightBoxLink", libsObjects:['lightBox'], libs: ["/templatesScripts/lightbox/lightbox/js/jquery.lightbox-0.5.js"], files: ["/templatesScripts/lightbox/lightBoxImplementation.js"]
	});
	
	templatesobj.addTemplate({
		element: "div.tabs", files: ["/templatesScripts/multiabas/multiabas.js"]
	});
	
	templatesobj.addTemplate({
		element: "#sexyslider", libsObjects:['SexySlider'], libs: ["/templatesScripts/sexyslider/javascript/jquery.sexyslider.min.js"], files: ["/templatesScripts/sexyslider/sexyslider.js"]
	});
	
	templatesobj.addTemplate({
		element: "span.tooltipSpan", libs: ["/templatesScripts/tooltip/tooltip/jquery.tooltip.js"], files: ["/templatesScripts/tooltip/tooltipImplementation.js"]
	});
	
	templatesobj.addTemplate({
		element: ".conteudosVerticais", libsObjects:['scrollTo','tinyscrollbar'], libs: ["/templatesScripts/libs/jquery.scrollTo-min.js", "/templatesScripts/verticalcontentslider/jquery.tinyscroll.js"], files: ["/templatesScripts/verticalcontentslider/verticalcontentslider.js"]
	});
	
	
	templatesobj.addTemplate({
		element: ".menuSectionHiperPortal", libsObjects:['draggable'], libs: ["/templatesScripts/dragndroptabs/libs/jquery-ui-1.8.13.custom.min.js","/templatesScripts/dragndroptabs/libs/jquery.easing.compatibility.js","/templatesScripts/dragndroptabs/libs/jquery.easing.js"], files: ["/templatesScripts/dragndroptabs/dragndroptabs.js"]
	});
	
	templatesobj.addTemplate({
		element: ".carrosselComponente",libsObjects:['CloudCarousel'],libs:["/templatesScripts/cloudcarousel/cloudcarousel.js"], files: ["/templatesScripts/cloudcarousel/cloudcarousel_implementation.js"]
	});	
		
	templatesobj.addTemplate({
		element: ".carrosselComponentePqno",libsObjects:['CloudCarousel'],libs:["/templatesScripts/cloudcarouselPqno/cloudcarousel.js"], files: ["/templatesScripts/cloudcarouselPqno/cloudcarousel_implementation.js"]
	});	
	
	templatesobj.addTemplate({
		element: ".hpflipbook",libsObjects:['flipbook'] ,libs:["/templatesScripts/flippage/js/flipbook.js"], files:["/templatesScripts/flippage/js/flipbook_implementation.js"]
	});	
	
	templatesobj.addTemplate({
		element: ".sliderWN",libsObjects:['SexySlider'] ,libs:["/templatesScripts/sexysliderWN/javascript/jquery.sexyslider.min.js"], files:["/templatesScripts/sexysliderWN/sexyslider.js"]
	});	
	
	templatesobj.parseTemplates();
});
