/* MUNSIE MVC */
var base_url = $("base").attr("href");

window.munsieMVC = Backbone.Model.extend({

/**
 * Load Efx (Short and simple access to vendors)
 *
 * @param json request
 * @return void
 */ 		
	load_vendors: function(vendors, callback){
		var url = "";
		var _this = this;
		var vendor;
		if(vendors.length == 0){
			callback.apply(this);
		}else{
			vendor = vendors[0];
			switch(vendor){
				case "tinymce":
					this.import_scripts(["vendors/js/tinymce/jscripts/tiny_mce/jquery.tinymce.js"], function(){
						vendors.splice(0,1);
						_this.load_vendors(vendors, callback);
					});
					break;
				case "fileuploader":
					this.load_css(["vendors/js/fileuploader/fileuploader.css"]);
					this.import_scripts(["vendors/js/fileuploader/fileuploader.js"], function(){
						vendors.splice(0,1);
						_this.load_vendors(vendors, callback);
					});
					break;	
				case "waypoints":
					this.import_scripts["vendors/js/waypoints/waypoints.min.js"], function(){
						vendors.splice(0,1);
						_this.load_vendors(vendors, callback);
					}
					break;
				case "nivoslider":
					this.import_scripts(["vendors/js/nivoslider/jquery.nivo.slider.js"], function(){
						vendors.splice(0,1);
						_this.load_vendors(vendors, callback);
					});
					break;
				case "fancybox":
					this.import_scripts(["vendors/js/fancybox/jquery.fancybox-1.3.4.pack.js"], function(){
						vendors.splice(0,1);
						_this.load_vendors(vendors, callback);
					});
					break;
				case "jqueryui":
					this.import_scripts(["vendors/js/jquery_ui/jquery-ui-1.8.14.custom.min.js"], function(){
						vendors.splice(0,1);
						_this.load_vendors(vendors, callback);
					});
					break;
				case "formvalidation":
					this.import_scripts(["vendors/js/form-validation/jquery.js"], function(){
						vendors.splice(0,1);
						_this.load_vendors(vendors, callback);
					});
					break;	
				case "placeholder":
					this.import_scripts(["vendors/js/placeholder/placeholder.js"], function(){
						vendors.splice(0,1);
						_this.load_vendors(vendors, callback);
					});
					break;
				case "supersized":
					this.load_css(["vendors/js/supersized/css/supersized.css"]);
					this.import_scripts(["vendors/js/supersized/js/supersized.3.2.4.min.js"], function(){
						vendors.splice(0,1);
						_this.load_vendors(vendors, callback);
					});
					break;
				case "jqcycle":
					this.import_scripts(["vendors/js/jqcycle/jquery.cycle.all.min.js"], function(){
						vendors.splice(0,1);
						_this.load_vendors(vendors, callback);
					});
					break;	
				case "paginate":
					this.load_css(["vendors/js/paginate/css/style.css"]);
					this.import_scripts(["vendors/js/paginate/jquery.paginate.js"], function(){
						vendors.splice(0,1);
						_this.load_vendors(vendors, callback);
					});
					break;
				case "spritely":
					this.import_scripts(["vendors/js/spritely/spritely.js"], function(){
						vendors.splice(0,1);
						_this.load_vendors(vendors, callback);
					});
					break;	
				case "twitterfeed":
					this.import_scripts(["vendors/js/twitterfeed/twitterfeed.js"], function(){
						vendors.splice(0,1);
						_this.load_vendors(vendors, callback);
					});
					break;
				case "rollbox":
					this.import_scripts(["vendors/js/rollbox/rollbox.js"], function(){
						vendors.splice(0,1);
						_this.load_vendors(vendors, callback);
					});
					break;	
				case "easing":
					this.import_scripts(["vendors/js/easing.js"], function(){
						vendors.splice(0,1);
						_this.load_vendors(vendors, callback);
					});
					break;
				case "datatables":
					this.import_scripts(["vendors/js/datatables/datatables.min.js"], function(){
						vendors.splice(0,1);
						_this.load_vendors(vendors, callback);
					});
					break;
			}
		}
	},
	
/**
 * Load a css file
 *
 * @param str js
 * @return boolean
 */ 		
	load_css: function(css, used_for){
		var _this = this;
		var link;
		if(css.length > 0){
			$.each(css, function(index, value){
				if(!_this.check_css_loaded(value)){
					link = document.createElement("link");
					link.setAttribute("rel", "stylesheet");
					link.setAttribute("type", "text/css");
					link.setAttribute("href", value);
					if(used_for){
						link.setAttribute("data-for", used_for);
					}
					document.getElementsByTagName("head")[0].appendChild(link);
				}
			});
		}
	},	
	
/**
 * Check if a css file is already loaded
 *
 * @param str js
 * @return boolean
 */ 		
	check_css_loaded: function(css){
		var found = false;
		$("link[rel='stylesheet']").each(function(){
			if($(this).attr("href") != null){
				if($(this).attr("href").toString().indexOf(css) > -1){
					found = true;
					return false;
				}
			}
		});	
		return found;
	},	

/**
 * Display a message to the user
 *
 * @param str message
 * @return void
 */ 	
	flash_message: function(message, position){
		if($("#flash").attr("id")){ $("#flash").html(message); }
		else{ $("body").append("<div id=\"flash\">" + message + "</div>"); }
		$('#flash').delay(1000).slideDown('fast').delay(5000).slideUp('fast');
	},
		
/**
 * Import Scripts
 *
 * @param array scripts
 * @param function callback
 * @return void
 */ 	
	import_scripts: function(scripts, callback){
		var _this = this;
		if(scripts == null){ return false; }
		scripts = scripts.reverse();
		require(scripts, function(){
			callback.apply(this);
		});
	},
	
/**
 * Get URL variables
 * Thanks to: http://jquery-howto.blogspot.com/2009/09/get-url-parameters-values-with-jquery.html
 *
 * @param str name
 * @return str
 */ 		
	request_url_var: function(name){
		var vars = [], hash;
		var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
		for(var i = 0; i < hashes.length; i++){
			hash = hashes[i].split('=');
			vars.push(hash[0]);
			vars[hash[0]] = hash[1];
		}
		return vars[name];
	},
	
/**
 * Retrieve Data
 *
 * @return void
 */ 	
	post: function(action, data, callback){
		$.ajax({  
			type: "post",  
			url: "?api="+action,
			data: data,
			datatype: "json",
			success: function(response){
				if(callback){	
					callback.call(this, response);
				}
			}
		});
	},

/**
 * Retrieve Data
 *
 * @return void
 */ 	
	get: function(action, data, callback){
		$.ajax({  
			type: "get",  
			url: "?api="+action,
			data: data,
			datatype: "json",
			success: function(response){
				if(callback){	
					callback.call(this, response);
				}
			}
		});	
	}
});

var munstro = new window.munsieMVC;
$('#flash').delay(1000).slideDown('fast').delay(5000).slideUp('fast');	
