/**
 * @author Danil
 */

 /*# AVOID COLLISIONS #*/
if(jQuery) (function($){
/*# AVOID COLLISIONS #*/

jQuery.fn.sideTags = function(options) {	

	//private methods
	var getRandomInterval = function(interval) {
		var randNo = Math.random();
		randNo = randNo * interval;
		return Math.ceil(randNo);
	};
	
	var getRandomIntervalExcept = function(interval, exceptArr) {
		var result;
		
		if(exceptArr.length == 0) {
			result = getRandomInterval(interval);
			
		} else {
			var insetCounter = 0;
			while(insetCounter < exceptArr.length) {
				insetCounter = 0;
				result = getRandomInterval(interval);
				for(var i=0; i<exceptArr.length; i++) {
					if(exceptArr[i] != result - 1) {
						++insetCounter;
					}
				}
			}
		}
		
		result = (result > 0) ? result - 1 : 0;
		return result;
	};

	var getRandomizedTagsArray = function(data) {	
		var result = [];
	
		var iterLimit = (data.length < 30) ? data.length : 30;
		for(var i=0; i<iterLimit; i++) {
			result.push(getRandomIntervalExcept(data.length, result));
		}
		
		return result;
	}
	
	var opts = $.extend({}, jQuery.fn.sideTags.defaults, options);
		
	var _template = 
		'<div id="tagCloud">'	
	   +	'<div id="userTags" class="tagHead header1">теги пользователя <a class="link" href="my-album-list.html"></a></div>'
       +    '<div id="content" class="tagCloud">'
	   +      '<div id="noTags" class="hide" style="text-align: center; padding: 30px;"><p class="header1">У вас нет тегов</p></div>'
	   +	  '<div id="tagsLoading" style="text-align: center; padding: 30px;">'
       +          '<img src="img/loader.gif">'
       +      '</div>'
       +    '</div>'                  
	   +    '<div class="clear"></div>'
       +    '<div id="yourTags" class="tagFooter"><a class="link" id="otherTagsLink" href="tag-list.html">другие теги...</a></div>'
	   +    '<div class="clear"></div>'
	   +'<div>'
	
	//for each TagContainer element in jQuery array
	$(this).each(function(i){
		var el = null;
		if(this._tagContainerRendered){
			el = $(this).find("#tagCloud");
		}
		else{
			this._tagContainerRendered = true;
			el = $(_template);			
			$(this).append(el);
		}
		
		if(opts.data!=null){
			el.find("#tagsLoading").addClass("hide");
			if(opts.data.status=="404"){
				el.find("#noTags").removeClass("hide");
				return;
			}
			
			var tags = "";
			var tagsData = getRandomizedTagsArray(opts.data.tags);
			for(var i=0; i<tagsData.length; i++) {
				var strUrl = opts.tagUrl + $.trim(opts.data.tags[tagsData[i]]);
				if(opts.tagUID!=null)
					strUrl += "&uid=" + opts.tagUID;
	            tags += "<a class='tag' href=\"" + strUrl + "\" >" + $.trim(opts.data.tags[tagsData[i]]) + "</a>";
	    	}
			el.find("#content").append(tags);
		}
});
}

jQuery.fn.sideTags.defaults = {
	data: null,
	tagUrl: "tag-view.html#tag=", //"http://albums.zigzagz.net:8000/tag-view.html#tag="
	tagUID: null
};

$(document).ready(function(){
	$("#tagCloudContainer").sideTags();		
	if(pageConf.pageType == "public")
		return;
		
	// Get user tags
    zwsGetJSON("ListUserTagsServlet", {limit:50}, function(dt){ 
		if(dt.status && dt.status=="401"){
	        var newUrl = "http://www.zigzagz.net/login.html?continueUrl=" + encodeURIComponent(window.location);
	        window.location = newUrl;
			return;
	    }
		
		if (dt.status == "404")
		{
			$("#tagCloudContainer").addClass("hide");
		}
		$("#tagCloudContainer").sideTags({data: dt, tagUID: dt.uid}); 
	});
});

/*# AVOID COLLISIONS #*/
})(jQuery);
/*# AVOID COLLISIONS #*/