// JavaScript Document

var ImageRatings = 
{
	ratings: new Array(),
	starImageSrc: '/img/star.gif',
	starImageWihth: 30,
	socialMedia: null,
	
	trackImage: function(image, loadcallback, socialImage)
	{	
		
		var source = '';
		var path = '';
		
		var src = $(image).attr("src");
		
		if(src.indexOf(".php") > 0)
		{
			//mage.php?file=proslave/DSC03456.JPG
			//image.php?file=onama1.jpg&path=img
			
			source = src.match(/(file=)(.+\.\w{3,4})/)[2];
			
			if(src.indexOf("path")> 0)
				path = src.match(/(path=)(.+$)/)[2];
		}
		else
		{	
			source = src.match(/\w+\.\w{3,4}$/)[0];
			
			if(src.indexOf('/') >= 0)
				path = src.match(/\/?.+\//)[0];
		}
		
		var ratingDiv = document.createElement("div");
		$(ratingDiv).addClass("ratings").addClass('left');
		
		if(source != '')
		{
			//random number to image, and new array with this key,also put key on bg image
			var rid = ImageRatings.ratings.length;
			
			$(ratingDiv).attr("rid", rid);
			$(image).addClass("ratingImage").attr("rid", rid);
			
			var data = {
				container: ratingDiv,
				file: source,
				path: path,
				rated: false,
				callback: loadcallback
			};
			
			ImageRatings.ratings.push(data);
			
			var Bgimage = ImageRatings.getBgImage(rid);
				
			$(Bgimage).attr("src", "/rating.php?file="+data.file+"&path="+data.path);
		}
		else
		{
			$(ratingDiv).text("Implement error handeling");
		}

		
		//http://zlatnodoba.local/galerija_slika.php?id=ustanova&img=DSC05031.jpg
		//@todo: if per image rating system
		if(ImageRatings.socialMedia == null || socialImage) {
			
			var link = window.location.href;
			
			if(socialImage){
				
				if(link.indexOf('?', 0) > 0)
					link = link.substring(0, link.indexOf('?', 0));
				
				//src is variable from begining of script
				var gallery = src.substring(src.indexOf('=', 0) + 1, src.lastIndexOf('/'));
				var file = src.substring(src.lastIndexOf('/')+1);

				link = link + '?id='+gallery+'&img='+file;
			}
			
			ImageRatings.socialMedia = socialMedia.init(link);
		}
		var extender = document.createElement('div');
		
		$(extender).attr('id', 'ImageRatings').css('position', 'relative').append(ratingDiv).append(ImageRatings.socialMedia);
		
		return extender;
	},
	
	getBgImage: function(rid)
	{
		var img = document.createElement("img");
		
		$(img).attr("rid", rid).addClass("noclick").addClass("backgroundImage").load(ImageRatings.onBgImageLoad);
		
		return img;
	},
	
	onBgImageLoad: function()
	{
		var rid = parseInt($(this).attr("rid"));
		
		if(ImageRatings.ratings[rid] != null)
		{
			$(ImageRatings.ratings[rid].container).css({ 'width' : this.width + "px"}).append(this);
			
			if(!ImageRatings.ratings[rid].rated)
				$(ImageRatings.ratings[rid].container).append(ImageRatings.createStarImages(this.height)).mousemove(ImageRatings.showStars).mouseleave(ImageRatings.hideStars).css({'height': this.height + "px", 'overflow': 'hidden', 'cursor' : 'pointer', 'padding' : '0px'});
				
			if(ImageRatings.ratings[rid].callback != null)
			{
				ImageRatings.ratings[rid].callback.call();	
				ImageRatings.ratings[rid].callback = null;
			}
		}
	},
	
	createStarImages: function(topMargin)
	{
		var div = document.createElement("div");
		
		var width = 0;
		
		for(var i = 1; i <= 5; i++)
		{
			var star = document.createElement("img");
			$(star).addClass("noclick").css("position", "relative").attr("src", ImageRatings.starImageSrc).attr("grade", i).mouseover(ImageRatings.onStarOver).click(ImageRatings.onStarsClick);
			$(div).append(star);
			width += ImageRatings.starImageWihth;
		}
		
		$(div).css({'visibility':'hidden', 'margin-top' : '-'+topMargin+'px', 'height' : topMargin + "px", 'width' : width + "px", 'padding': '0px'}).addClass("stars").mouseleave(ImageRatings.hideStars);
		
		return div;	
	},
	
	showStars:function(event)
	{
		var pos = event.layerX;
		if(pos == null)
			pos = event.offsetX;
		
		if(pos == event.clientX)
			pos -= this.offsetLeft;
			
		if($(this).children(".stars").css('visibility') != 'visible' && pos < $(this).children(".stars").width())
			$(this).children(".stars").css({'visibility':'visible'});
			
	},
	
	hideStars: function() 
	{
		if($(this).hasClass("stars"))
			$(this).css({'visibility' : 'hidden' });
		else
			$(this).children(".stars").css({'visibility':'hidden'});
	},
	
	onStarOver: function()
	{
		var offset = $(this).height() / 2;
		var grade = $(this).attr("grade");
		
		$(this).parent().children("img").each(function(){
				
				if($(this).attr("grade") <= grade)
					$(this).css("top", "-" + offset + "px");
				else
					 $(this).css("top", "0px");
		});
	},
	
	onStarsClick: function()
	{
		var grade = $(this).attr("grade");
		
		var rid = $(this).parent().parent().attr("rid");
		
		var data = ImageRatings.ratings[rid];
		
		data.rated = true;
		
		var img = ImageRatings.getBgImage(rid);
		
		$(img).attr("src", "/rating.php?file="+data.file+"&path="+data.path+"&vote="+grade);
		
		$(ImageRatings.ratings[rid].container).unbind("mouseenter").unbind("mousemove").css("cursor", "auto").children().remove();
		
		
		//ADD THANK YOU FOR VOTING
	},
	
	removeImage: function(image)
	{
		var rid = $(image).attr("rid");
		
		if(rid != null)
		{
			$(image).removeAttr("rid");
			
			$(ImageRatings.ratings[rid].container).remove();
			
			ImageRatings.ratings.splice(rid,1);
			
		}
	}
};



var fbShare =
{
		'name': 'Facebook',
		'src' : '/img/fb.jpg',
		'text' : 'Share on facebook',
		'action': 'http://www.facebook.com/share.php?u=',
		'encode': true
};

var twitterShare = 
{
		'name': 'Twitter',
		'src': '/img/tweet.jpg',
		'text': 'Share on Twitter',
		'action': 'http://twitter.com/home?status=',
		'encode': true
};

var googlePlus =
{
	'name': 'GooglePlus',
	'src': '/img/gPlus.jpg',
	'text': 'Publish on Google plus',
	'callFunction' : null
};

var socialMedia = 
{
	actionURL: null,
	medias: new Array(fbShare, twitterShare, googlePlus),
	actionDiv: null,
	
	init: function(actionURL){
		
		socialMedia.actionURL = actionURL;
		
		var socialDiv = document.createElement('div');
		
		$(socialDiv).addClass('socialMedia').addClass('right').css({'margin-right':'10px'});
		
		for(n in socialMedia.medias)
		{
			var img = document.createElement('img');
			
			$(img).attr({'src': socialMedia.medias[n].src, 'id' : socialMedia.medias[n].name}).css({'cursor' : 'pointer', 'margin-left':'10px'}).click(socialMedia.shareClick).mouseenter(socialMedia.showAction);
			
			$(socialDiv).append(img);
		}
		
		
		return socialDiv;
	},
	
	shareClick: function(){
		
		var media = socialMedia.getMediaOBJ($(this).attr('id'));
		
		if(media != null && media.action != null){
			
			var action = media.action;
			
			action += (media.encode) ? encodeURIComponent(socialMedia.actionURL) : socialMedia.actionURL;
			
			//alert('open location: '+action);
			
			//window.open('http://www.zlatnodoba.hr/');
			window.open(action, media.text, "location=0,status=0,scrollbars=1");
		}
		else {
			socialMedia.getPlusOneBtn(this);
		}
	
	},
	
	showAction: function(){
		//$(socialMedia.actionDiv);
	},
	
	
	getPlusOneBtn: function(image){
		
		$(image).prev().css('margin-right', '10px');
		
		var gPlus = '<g:plusone count="false"></g:plusone>';
        
        $(image).unbind('click').replaceWith(gPlus);
        
		var jsnode = document.createElement('script');
        jsnode.setAttribute('type','text/javascript');
        jsnode.setAttribute('src','https://apis.google.com/js/plusone.js');
        document.getElementsByTagName('head')[0].appendChild(jsnode);
        
        
        //gapi.plusone.go();
	},
	
	getMediaOBJ: function(name){
		for(n in socialMedia.medias)
			if(socialMedia.medias[n].name == name)
				return socialMedia.medias[n];
		
		return null;
	}
};


