var sp = window.sp || {};
var jument = window.jument || {};

sp.ajax = {
	
	ajax: function(params) {
		this.responseData = '';
		this.params = {};
	
		this.params = params;
	
		if(this.params.options == undefined) this.params.options = {};
	
		this.request();
	},

	request: function() {
		this.showLoader();
	
		this.params.options.method = this.params.options.method ? this.params.options.method : 'post';
	
		if(this.params.form) {
			if(this.params.options.parameters == undefined) {
				this.params.options.parameters = $(this.params.form).serialize();
			} else {
				this.params.options.parameters = this.params.options.parameters.concat('&', $(this.params.form).serialize());
			}
		}
	
		if(!this.params.url) alert('AJAX: Requires URL');
	
		if(this.params.debug) console.log('url: %o \npars: %o', this.params.url, pars);
	
		// prep the onComplete function. Add on the hideLoader function
		var _this = this;
		if(!this.params.options.onComplete) {
			var onComplete = function(){ _this.hideLoader(); }
		} else if(this.params.onComplete instanceof Array) {
			var funtions = "";
			for(i=0; i < this.params.options.onComplete.length; i++) {
				functions += "this.params.options.onComplete["+i+"]();";
			}
			var onComplete = function(){ eval(functions); _this.hideLoader(); }
		} else {
			var func = this.params.options.onComplete;
			var onComplete = function(){ _this.hideLoader(); }
		}
	
		this.params.options.onComplete = onComplete;
		
		var userOnSuccess = this.params.options.onSuccess;
		var onSuccess = function(data, textStatus) {
			_this.response(data);
			if(userOnSuccess)
				userOnSuccess();
		}
		this.params.options.onSuccess = onSuccess;
		
		if(this.params.options.div) {
			this.params.options.parameters = '{'+(this.params.options.parameters.replace(/=/g, ': "')).replace(/&/g, '", ')+'"}'
			$(this.params.options.div).load(this.params.url, $.evalJSON(this.params.options.parameters), this.params.options.onComplete);
		} else {
			$.ajax({
				type: this.params.options.method,
				url: this.params.url,
				data: this.params.options.parameters,
				complete: this.params.options.onComplete,
				success: this.params.options.onSuccess
			});
		}
	},

	response: function(r) {
		if(r) {
			eval('this.responseData = '+r+';');
			
			if(this.responseData.debug) {
				console.log(this.responseData);
				console.log(this.responseData.javascript.replace(/;/, "\n"));
			}

			if(this.responseData.javascript)
				eval(this.responseData.javascript);
		}
	},

	showLoader: function() {
		var loader;
		if(loader = $('#'+this.params.loader))
			loader.show();
		document.body.style.cursor = "wait";
	},

	hideLoader: function() {
		var loader;
		if(loader = $('#'+this.params.loader))
			loader.hide();
		document.body.style.cursor = "default";
	}

};

sp.analytics = {
	
	/*
	 * Restrictive Wrapper for Google Analytics pageTracker._trackEvent()
	 *
	 * String   category The general event category (e.g. "Videos").
	 * String   action The action for the event (e.g. "Play").
	 * String   label An optional descriptor for the event.
	 * Int      value An optional value to be aggregated with 
	 */
	track: function(category, action, label, value) {
		if(typeof(pageTracker) == 'object')
			return pageTracker._trackEvent(category, action, label, value);
		
		return true;
	}
	
};

sp.cookie = {
	
	get: function(name) {
		return $.cookie(name);
	},
	
	set: function(name, value, days) {
		$.cookie(name, value, { expires: days, path: '/', domain: this.domain });
	}
	
};

sp.newsletter = {

	subscribe: function(parent) {
		var email = $(parent).find('input[name=email]').val();
	    sp.ajax.ajax({
	        url: '/ajax/email_subscription/subscribe',
	        options: { parameters: 'email=' + email + '&parent=' + parent }
	    });	
	}
	
};


jument.mediabar = function() {
	if(!$('#chmedia-links').length) {
		$('body').prepend('<iframe src="http://0.chstatic.cvcdn.com/chmediabar/index.html" scrolling="no" frameborder="0" id="chmedia-links"></iframe>');
	}
}
