
function deserialize(json){
	// sys deserialization
	// determine array or single object
	// deserialize dates
	// apply favorites
	// apply prototype methods
}

function deserializeDatesArray(objectArray){
	for(var i=0; i < objectArray.length; i++)
		deserializeDates(objectArray[i]);
	return objectArray;
}

function deserializeDates(obj){
	if(!obj){
		return null;
	}
	/* Possible timestamp strings on generic objects
	ts-objectCreated
	ts-objectLastModified
	ts-createdDate
	ts-lastModifiedDate
	*/
	try{
		if(obj.ts)
			obj.timeStamp = new Date( Number(obj.ts) );
		if(obj.tsObjectCreated)
			obj.objectCreated = new Date( Number(obj.tsObjectCreated) );
		if(obj.tsObjectLastModified)
			obj.objectLastModified = new Date( Number(obj.tsObjectLastModified) );
		if(obj.tsCreatedDate)
			obj.createdDate = new Date( Number(obj.tsCreatedDate) );
		if(obj.tsLastModifiedDate)
			obj.lastModifiedDate = new Date( Number(obj.tsLastModifiedDate) );
		if(obj.tsClosedDate)
			obj.closedDate = new Date( Number(obj.tsClosedDate) );
	}
	catch(err){
		alert(' deserializeDates: ' + err.message);
	}
	finally{
		return obj;
	}
}

function initializeFavoritesArray(currentUser, objectArray){
	for(var i=0; i < objectArray.length; i++){
		objectArray[i].isFavorite = false;
		for(var x=0; x < currentUser.Favorites.length; x++){
			if(objectArray[i].oid == currentUser.Favorites[x].objectid){
				objectArray[i].isFavorite = true;
				break;
			}
		}
	}
}

function initializeFavorites(currentUser, object){
	object.isFavorite = false;
	for(var x=0; x < currentUser.Favorites.length; x++){
		if(object.oid == currentUser.Favorites[x].objectid){
			object.isFavorite = true;
			return;
		}
	}
}

function getFormattedDate(date){
	if(date === null || date === undefined)
		return '';
	
	var m_names = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
	//var m_names = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
	
	var curr_date = date.getDate();
	var curr_month = date.getMonth();
	var curr_year = date.getFullYear();
	return m_names[curr_month] + " " + curr_date + ", " + curr_year;
}

function getFormattedDateTime(date){
	if(date === null || date === undefined)
		return '';
	
	var m_names = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
	
	var curr_date = date.getDate();
	var curr_month = date.getMonth();
	var curr_year = date.getFullYear();
	
	
	var a_p = "";
	var curr_hour = date.getHours();
	if (curr_hour < 12)
	   {
	   a_p = "AM";
	   }
	else
	   {
	   a_p = "PM";
	   }
	if (curr_hour == 0)
	   {
	   curr_hour = 12;
	   }
	if (curr_hour > 12)
	   {
	   curr_hour = curr_hour - 12;
	   }

	var curr_min = date.getMinutes();

	curr_min = curr_min + "";

	if (curr_min.length == 1)
	   {
	   curr_min = "0" + curr_min;
	   }
	
	return m_names[curr_month] + " " + curr_date + ", " + curr_year + " " + curr_hour + ":" + curr_min + " " + a_p;
}

function sortByTimeStamp(a,b)
{
	return Number(b.ts) - Number(a.ts);
}

function sortByObjectCreated(a,b)
{
	return b.objectCreated > a.objectCreated;
}

function sortByObjectLastModified(a,b)
{
	return b.objectLastModified > a.objectLastModified;
}

function sortByCreatedDate(a,b)
{
	return b.createdDate > a.createdDate;
}

function sortByViewCount(a,b)
{
	return b.ViewCount - a.ViewCount;
}

function sortByTotalComment(a,b)
{
	return b.TotalComments - a.TotalComments;
}

function sortByRating(a,b)
{
	return b.Rating - a.Rating;
}