﻿var Vevo = window.Vevo || {};

/** -------------------------
*/

Vevo.Util = {
	decodeHTMLEntity : function (text) {
		var div = document.createElement('div')
		if (text == null) text = '';
		div.innerHTML = '<textarea>' + text + '</textarea>';
		return div.firstChild.value.replace('&apos;', '\'');
	},

	/** -------------------------
	add or remove commas from number display
	*/
	formatNum: function(i, add) {
		if (add) {
			i += '';
			i = i.replace(/,/g, ''); // don't double format
			parts = i.split('.');
			whole = parts[0];
			dec = parts.length > 1 ? '.' + parts[1] : '';
			var rgx = /(\d+)(\d{3})/;
			while (rgx.test(whole)) {
				whole = whole.replace(rgx, '$1' + ',' + '$2');
			}
			return whole + dec;
		} else {
			return i.replace(/,/g, '');
		}
	}, // formatNum

	padNum: function(i, len) {
		var str = i.toString();
		while (str.length < len) {
			str = '0' + str;
		}
		return str;
	}, // padNum

	formatDate: function(epoch) {
		var month_names = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
		var day_names = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];

		var timeToConvert = new Date(epoch);

		var delta = timeToConvert - (new Date());
		var dayDelta = Math.floor(delta / 86400000);

		switch (dayDelta) {
			case 0: //same day
				{
					var roundedHours = Math.floor(delta / 3600000);
					var roundedMinutes = Math.floor(delta / 3600000);
					if (roundedHours == 0) {
						if (roundedMinutes == 0) {
							return (delta / 1000) + " seconds ago";
						}
						else {
							return roundedMinutes + " minutes ago";
						}

					}
					if (roundedMinutes >= 30) {
						roundedHours++;
					}
					return roundedHours.ToString() + " hours ago";
				}
			case 1: //yesterday
				{
					var hour = (timeToConvert.getHours() + 11) % 12 + 1;
					var min = Vevo.Util.padNum(timeToConvert.getMinutes(), 2);
					var ampm = (timeToConvert.getHours() < 12 ? "AM" : "PM");
					return "Yesterday at " + hour + ":" + min + " " + ampm;
				}

			default:
				{
					var min = Vevo.Util.padNum(timeToConvert.getMinutes(), 2);
					var hour = (timeToConvert.getHours() + 11) % 12 + 1;
					var ampm = (timeToConvert.getHours() < 12 ? "AM" : "PM");
					var day = timeToConvert.getDate();
					var mon = month_names[timeToConvert.getMonth()];
					var year = timeToConvert.getFullYear();
					return mon + " " + day + ", " + year + " at " + hour + ":" + min + " " + ampm;
				}
		}
	}, // formateDate


	/** -------------------------
	redirect function used when an action requires login
	*/
	loginRedirect: function(options) {
		self.location = '/login?returnUrl=' + encodeURIComponent(options.redirectUrl.pathname);
	} // loginRedirect

}; // Vevo.Util


/** -------------------------
cookie functionality
*/
Vevo.Cookie = function() {

	return {

		/** -------------------------
		set the playlist cookie
		*/
		setCookie: function(name, data, params) {
			if (!params) {
				params = { path: '/' };
			}
			$.cookie(name, data, params);
		},

		/** -------------------------
		set the playlist cookie
		*/
		setMultipartCookie: function(name, data, params) {
			if (!params) {
				params = { path: '/' };
			}
			var i = 1;
			var copy = (typeof data == "string") ? data : JSON.stringify(data);
			while (copy.length > 0) {
				$.cookie((name + i), copy.substring(0, 2028), params);
				copy = copy.substring(2028);
				i++;
			}

			if ($.cookie(name + i)) {
				while ($.cookie(name + i)) {
					$.cookie(name + i, null, { path: '/', expires: -1 })
					i++;
				}
			}
		},

		/** -------------------------
		get the cookie value and return it as js object
		*/
		getMultipartCookie: function(name) {
			var i = 1, data = '';
			while ($.cookie(name + i)) {
				data += $.cookie(name + i);
				i++;
			}
			//console.log(data.length);
			return $.evalJSON(data);
		},

		hasMultipartCookie: function(name) {
			if ($.cookie(name + 1)) {
				return true;
			} else {
				return false;
			}
		},

		/** -------------------------
		get the cookie value and return it as js object
		*/
		eatMultipartCookie: function(name) {
			var i = 1;
			while ($.cookie(name + i)) {
				$.cookie(name + i, null, { path: '/', expires: -1 })
				i++;
			}
		},

		/** -------------------------
		get the cookie value and return it as js object
		*/
		getCookie: function(name) {
			var data = $.cookie(name); 
			if (data==null) { return null; }
			else { return $.evalJSON(data); }
		},

		/** -------------------------
		get rid of cookie NOM NOM NOM
		*/
		delCookie: function(name) {
			$.cookie(name, null, { path: '/', expires: -1 }); /* delete cookie */
		},

		/** -------------------------
		know cookie existence
		*/
		hasCookie: function(name) {
			if ($.cookie(name)) {
				return true;
			} else {
				return false;
			}
		},

		init: function() {
			// does nothing
		}
	}; // returning
} (); // Vevo.cookie

Vevo.QueryString = function () {
	var QueryStringClass = function (/*string or QueryStringClass*/input) {
		this.collection = {};
		if (typeof input == 'string') {
			var queryStringArray = input.replace("?", "").split("&");
			for (var i = 0; i < queryStringArray.length; i ++) {
				var bits = queryStringArray[i].split("=");
				if (bits.length == 2 && bits[0].length > 0)
				{
					this.collection[bits[0]] = bits[1];
				}
			}
		}
		else if (input instanceof QueryStringClass) {
			for (var key in input.collection) {
				this.collection[key] = input.collection[key];
			}
		}
		return this;
	};
	QueryStringClass.prototype.addValue = function (/*string*/keyName, /*string*/value) {
		this.setValue(keyName, value);
	}
	QueryStringClass.prototype.setValue = function (/*string*/keyName, /*string*/value) {
		this.collection[keyName.toString()] = value.toString();
	}
	QueryStringClass.prototype.hasValue = function (/*string*/keyName) {
		return this.collection[keyName.toString()] != null;
	}
	QueryStringClass.prototype.getValue = function (/*string*/keyName) {
		return this.collection[keyName.toString()];
	}
	QueryStringClass.prototype.delValue = function(/*string*/keyName) {
		delete this.collection[keyName.toString()];
	}
	/**
	 * transforms the collection back to query string
	 *
	 * @param collection
	 * @return string
	 */
	QueryStringClass.prototype.toString = function(){
		var queryString = [];
		if (this.collection.length == 0)
			return ""
		for (key in this.collection) {
			queryString.push(key + "=" + this.collection[key]);
		}
		return "?" + queryString.join('&');
	}
	return {
		/**
		 * returns key value pairs of query string objects
		 *
		 * @param string queryString
		 * @return collection
		 */
		parse : function (/*String*/ queryString) {
			return new QueryStringClass(queryString);
		}
	};
} (); // Vevo.QueryString


$(document).ready(function() {
	Vevo.Cookie.init();
	//$.each($('.number'), function() { $(this).text(Vevo.Util.formatNum($(this).text(), true)); });
});
