var shareButtons = {
	inited: false,
	hover:  false,
	plushover:  false,
	button:  '',
	sfInfo: {}, // array of objects { type: [ugc|song], id: [fileId|productId] 
	
	showButton : function(id, left, top){
		if(left){
			document.getElementById(id).style.left = left-6 + "px";
		}
		if(top){
			document.getElementById(id).style.top = top-5 + "px";
		}
			document.getElementById(id).style.visibility = "visible";
	},
	
	hideButton : function(id){
			document.getElementById(id).style.visibility = "hidden";
	},
	
	getButtons : function(flashId){
		var buttons = [];
		var parent = document.getElementById(flashId).parentNode.id;
		for(var i = 0, l = document.getElementById(parent).getElementsByTagName('a').length; i<l; i++){
			if(document.getElementById(parent).getElementsByTagName('a')[i].className == "singstarfavourites_button" || document.getElementById(parent).getElementsByTagName('a')[i].className == "addthis_button"){
				buttons.push(document.getElementById(parent).getElementsByTagName('a')[i].id);
			}
		}
		return buttons;
	},
	
	init: function(){	
		shareButtons.inited = true;
		shareButtons.loadpagefile('/stk-resources/singstar/resources/singstar/css/addthis_css_overwrite.css','css');
		shareButtons.loadpagefile('/stk-resources/singstar/resources/singstar/css/singstarfavourites.css','css');
		shareButtons.loadpagefile('/stk-resources/singstar/resources/singstar/css/singstargrief.css','css');
		shareButtons.loadpagefile('/stk-resources/singstar/resources/singstar/css/selectStyle.css','css');
		shareButtons.init_popupwindow();
		shareButtons.init_singstarfavourites();
		shareButtons.init_addthis();
		shareButtons.init_reportgrief();
		shareButtons.init_setprivacy();
		shareButtons.hide_buttons();
	},
	
	init_popupwindow: function(){
			var outer=document.createElement('div')
			outer.setAttribute("id","outer")
			outer.setAttribute("style","position:absolute; z-index:9999; top:0px;");
			document.body.appendChild(outer);
			document.getElementById("outer").innerHTML += "\r\n\t" +'<div id="favbase"><div id="favload"><div id="favloadstatus"></div></div><div id="favheader"></div><div id="favcontent"></div></div>';
	},
	
	init_singstarfavourites: function(){
		for(var i =0, l=singstarfavourites_config.buttons.length; i< l; i++){
			curbtn = singstarfavourites_config.buttons[i];
			if(document.getElementById(curbtn.container) == null) {
				continue;
			}
			if(!document.getElementById(curbtn.container+"_socialbuttons")){
				var inner=document.createElement('div')
				inner.setAttribute("id", curbtn.container+"_socialbuttons")
				inner.setAttribute("style","position:absolute; top:0px; left:0px")
				document.getElementById(curbtn.container).appendChild(inner);
			}
			if(jQuery.browser.msie && jQuery.browser.version == "7.0"){
				var newbtn = document.createElement('<a class="singstarfavourites_button">');
			}else{
				var newbtn = document.createElement('a');
				newbtn.setAttribute('class',"singstarfavourites_button");
			}
			newbtn.setAttribute('id',curbtn.id);
			newbtn.setAttribute('href',curbtn.href);
			if(jQuery.browser.msie && jQuery.browser.version == "7.0"){
				newbtn.setAttribute('onmouseover',function(){shareButtons.sfover(this.id);});
				newbtn.setAttribute('onmouseout',function(){shareButtons.sfout();});
			}else{
				newbtn.setAttribute('onmouseover','shareButtons.sfover("'+curbtn.id+'");');
				newbtn.setAttribute('onmouseout','shareButtons.sfout();');
			}
			document.getElementById(curbtn.container+"_socialbuttons").appendChild(newbtn);
			document.getElementById(curbtn.id).style.display = "block";
			document.getElementById(curbtn.id).style.position = "absolute";
			document.getElementById(curbtn.id).style.left = curbtn.left + "px";
			document.getElementById(curbtn.id).style.top = curbtn.top + "px";
			document.getElementById(curbtn.id).style.visibility = "visible";
			var image = document.createElement('img');
			image.setAttribute('src', curbtn.url);
			image.setAttribute('alt', "");
			image.setAttribute('class', "SingStar Favourites");
			document.getElementById(curbtn.id).appendChild(image);
		}
	},
	
	init_addthis: function(){
		for(var i =0, l=addthis_config.buttons.length; i< l; i++){
			curdata = addthis_config.buttons[i];
			if(document.getElementById(curdata.id) == null) {
				continue;
			}
			curbtn = document.getElementById(curdata.id);
			curbtn.style.position = "absolute";
			curbtn.style.left = curdata.left + "px";
			curbtn.style.top = curdata.top + "px";
			curbtn.style.visibility = "visible";
			curbtn.innerHTML = "";
			var image = document.createElement('img');
			image.setAttribute('src', curdata.url);
			image.setAttribute('alt', "");
			image.setAttribute('class', "AddThis");
			document.getElementById(curdata.id).appendChild(image);
		}
		jQuery(".addthis_button").hover(shareButtons.atover, shareButtons.atout);
	},
	
	init_reportgrief: function(){
		for (var i =0, l=reportgrief_config.buttons.length; i< l; i++){
			var curdata = reportgrief_config.buttons[i];
			if(document.getElementById(curdata.id) == null) {
				continue;
			}
			var curbtn = document.getElementById(curdata.id);
			curbtn.style.position = "absolute";
			curbtn.style.left = curdata.left + "px";
			curbtn.style.top = curdata.top + "px";
			curbtn.style.visibility = "visible";
			curbtn.style.zIndex="1500";
			curbtn.innerHTML = "";
			if(jQuery.browser.msie && jQuery.browser.version == "7.0"){
				curbtn.setAttribute('onmouseover',function(){shareButtons.rgover(this.id);});
				curbtn.setAttribute('onmouseout',function(){shareButtons.rgout();});
			}else{
				curbtn.setAttribute('onmouseover','shareButtons.rgover("'+curdata.id+'");');
				curbtn.setAttribute('onmouseout','shareButtons.rgout();');
			}
			var image = document.createElement('img');
			image.setAttribute('src', curdata.url);
			image.setAttribute('alt', "");
			image.setAttribute('class', "ReportGrief");
			document.getElementById(curdata.id).appendChild(image);	
		}
	},
	
	init_setprivacy: function(){
			for (var i =0, l=setPrivacy_config.buttons.length; i< l; i++){
			var curdata = setPrivacy_config.buttons[i];
			if(document.getElementById(curdata.id) == null) {
				continue;
			}
			var curbtn = document.getElementById(curdata.id);
			curbtn.style.position = "absolute";
			curbtn.style.left = curdata.left + "px";
			curbtn.style.top = curdata.top + "px";
			curbtn.style.visibility = "visible";
			curbtn.style.zIndex="1500";
			curbtn.innerHTML = "";
			if(jQuery.browser.msie && jQuery.browser.version == "7.0"){
				curbtn.setAttribute('onmouseover',function(){shareButtons.spover(this.id);});
				curbtn.setAttribute('onmouseout',function(){shareButtons.spout();});
			}else{
				curbtn.setAttribute('onmouseover','shareButtons.spover("'+curdata.id+'");');
				curbtn.setAttribute('onmouseout','shareButtons.spout();');
			}
			var image = document.createElement('img');
			image.setAttribute('src', curdata.url);
			image.setAttribute('alt', "");
			image.setAttribute('class', "ReportGrief");
			document.getElementById(curdata.id).appendChild(image);	
		}
	},
	
	hide_buttons : function(){
		jQuery('.addthis_button').fadeTo(0,0);
		jQuery('.singstarfavourites_button').fadeTo(0,0);
		jQuery('.singstarreportgrief_button').fadeTo(0,0);
		jQuery('.singstarsetprivary_button').fadeTo(0,0);
		document.getElementById("favbase").style.visibility = "hidden";
		jQuery('.grief-box').hide();
		jQuery('.privacy-box').hide();
	},
	
	sfover : function(obj){
		that = this;
		shareButtons.hide_buttons();
		if(document.getElementById("at15s")){document.getElementById("at15s").style.display = "none"};
		shareButtons.button = jQuery("#"+obj)
		shareButtons.button.fadeTo(0,1);
		shareButtons.plushover = true;
		btnheight = jQuery("#"+obj).height();
		var jquerysfBody = jQuery("#favcontent");
		var sfHeader;
		var sfLinkText;
		jquerysfBody.unbind("click");
		var position = shareButtons.screenPosition.findPos(document.getElementById(obj));
		document.getElementById("favbase").style.left = position[0]+"px";
		document.getElementById("favbase").style.top = position[1]+btnheight+"px";
		document.getElementById("favbase").style.visibility = "visible";
		if (this.sfInfo[obj].type == "ugc") {
			document.getElementById("favheader").innerHTML = "<p><a href='javascript:goBackToMySingstarFavourite()'>"+shareTranslatedSententences.sfUgcHeader +"</a></p>";
			switch (this.ugcTrackIsFavourite(this.sfInfo[obj])) {
				case -1:
					sfLinkText = shareTranslatedSententences.sfUgcLinkTextNotFav;
					jquerysfBody.bind("click",function(){
						shareButtons.hide_buttons();
						showCommmonPopup(shareTranslatedSententences.sfUgcHeader,shareTranslatedSententences.popupTextFull,shareTranslatedSententences.popupButtonFull);
					});
					break;
				case 0:
					sfLinkText = shareTranslatedSententences.sfUgcLinkTextNotFav;
					jquerysfBody.bind("click",function(){
						that.updateUgcFavourites(that.sfInfo[obj], true)
					});
					break;
				case 1: 
					sfLinkText = shareTranslatedSententences.sfUgcLinkTextIsFav;
					jquerysfBody.bind("click",function(){
						that.updateUgcFavourites(that.sfInfo[obj], false)
					});
				}		
		} else if (this.sfInfo[obj].type == "song") {
			document.getElementById("favheader").innerHTML = "<p><a href='javascript:goBackToMySingstoreFavourite()'>"+shareTranslatedSententences.sfSongHeader +"</a></p>";
			switch (this.songTrackIsFavourite(this.sfInfo[obj])) {
				case -1:
					sfLinkText = shareTranslatedSententences.sfSongLinkTextNotFav;
					jquerysfBody.bind("click",function(){
						shareButtons.hide_buttons();
						showCommmonPopup(shareTranslatedSententences.sfSongHeader,shareTranslatedSententences.popupTextFull,shareTranslatedSententences.popupButtonFull);
					});
					break;
				case 0:
					sfLinkText = shareTranslatedSententences.sfSongLinkTextNotFav;
					jquerysfBody.bind("click",function(){
						that.updateStoreFavourites(that.sfInfo[obj])
					});
					break;
				case 1: 
					sfLinkText = shareTranslatedSententences.sfSongLinkTextIsFav;
					jquerysfBody.bind("click",function(){
						that.updateStoreFavourites(that.sfInfo[obj])
					});
				}		
		} else { // something is wrong, link to profilepage with favourites tab
			sfHeader = shareTranslatedSententences.sfHeaderUnknown;
			sfLinkText = shareTranslatedSententences.sfLinkTextUnknown;
			jquerysfBody.bind("click",function(){
					goBackToMySingstarFavourite()
			});
		}
		document.getElementById("favcontent").innerHTML = "<a href='javascript:void(0)'>"+sfLinkText+"</a>";
		
		jQuery('#favbase').hover(
			function(){
				shareButtons.hover = true;
			},
			function(){
				shareButtons.hover = false;
				setTimeout(shareButtons.hide,500);
			}
		)
	},
	
	sfout: function(){
		shareButtons.plushover = false;
		setTimeout(shareButtons.hide,500);
	},
	
	atover: function(){
		shareButtons.hide_buttons();
		shareButtons.button = jQuery(this);
		shareButtons.button.fadeTo(0,1);
		document.getElementById("favbase").style.visibility = "hidden";
		shareButtons.plushover = true;
		jQuery('#at15s').hover(
			function(){
				shareButtons.hover = true;
			},
			function(){
				shareButtons.hover = false;
				setTimeout(shareButtons.hide,500);
			}
		)
	},
	
	atout: function(){
		shareButtons.plushover = false;
		setTimeout(shareButtons.hide,500);
	},
	rgout: function(){
		shareButtons.plushover = false;
		setTimeout(shareButtons.hide,2500);
	},
	rgover: function(objId){
		shareButtons.hide_buttons();
		shareButtons.button = jQuery("#"+objId);
		shareButtons.button.fadeTo(0,1);
		shareButtons.plushover = true;
		var pos = shareButtons.screenPosition.findPos(document.getElementById(objId));
		var griefBox = jQuery(".grief-box");
		btnheight = jQuery("#"+objId).height();
		griefBox.css("left",pos[0] + 1 + "px");
		griefBox.css("top",pos[1] + btnheight +"px");
		GriefReportUtil.setUpForm(singstarGlobalVariables);
		griefBox.hover(
			function(){
				shareButtons.hover = true;
			},
			function(){
				shareButtons.hover = false;
				setTimeout(shareButtons.hide,500);
			}
		)
	},
	spout: function(){
		shareButtons.plushover = false;
		setTimeout(shareButtons.hide,2500);
	},
	spover: function(objId){
		shareButtons.hide_buttons();
		shareButtons.button = jQuery("#"+objId);
		shareButtons.button.fadeTo(0,1);
		shareButtons.plushover = true;
		var pos = shareButtons.screenPosition.findPos(document.getElementById(objId));
		var privacyBox = jQuery(".privacy-box");
		btnheight = jQuery("#"+objId).height();
		privacyBox.css("left",pos[0] + 1 + "px");
		privacyBox.css("top",pos[1] + btnheight +"px");
		SetPrivacyUtil.init(singstarGlobalVariables.fileId,singstarGlobalVariables.permission);
		privacyBox.hover(
			function(){
				shareButtons.hover = true;
			},
			function(){
				shareButtons.hover = false;
				setTimeout(shareButtons.hide,500);
			}
		)
	},
	screenPosition: {
		findPos: function(obj) {
			var curleft = curtop = 0;
			if (obj.offsetParent) {	
				do {
					curleft += obj.offsetLeft;
					curtop += obj.offsetTop;	
				} while (obj = obj.offsetParent);
			}
			return [curleft,curtop];
		},
 
		// getPageScroll() by quirksmode.org
		// Finds the scroll position of a page
		getPageScroll: function() {
			var xScroll, yScroll;
			if (self.pageYOffset) {
				yScroll = self.pageYOffset;
				xScroll = self.pageXOffset;
			} else if (document.documentElement && document.documentElement.scrollTop) {
				yScroll = document.documentElement.scrollTop;
				xScroll = document.documentElement.scrollLeft;
			} else if (document.body) {// all other Explorers
				yScroll = document.body.scrollTop;
				xScroll = document.body.scrollLeft;
			}
			return [xScroll,yScroll]
		},
 
		// Finds the position of an element relative to the viewport.
		findPosRelativeToViewport: function(obj) {
			var objPos = shareButtons.findPos(obj)
			var scroll = shareButtons.getPageScroll()
			return [ objPos[0]-scroll[0], objPos[1]-scroll[1] ]
		}
	},
	
	hide: function(){
		if(!shareButtons.hover && !shareButtons.plushover){
			shareButtons.button.fadeTo(0,0);
			document.getElementById("favbase").style.visibility = "hidden";
			jQuery(".grief-box").hide();
			jQuery(".privacy-box").hide();
		}
	},
	
	loadpagefile: function(filename, filetype){
		if (filetype=="js"){ //if filename is a external JavaScript file
			var fileref=document.createElement('script')
			fileref.setAttribute("type","text/javascript")
			fileref.setAttribute("src", filename)
		}
		else if (filetype=="css"){ //if filename is an external CSS file
			var fileref=document.createElement("link")
			fileref.setAttribute("rel", "stylesheet")
			fileref.setAttribute("type", "text/css")
			fileref.setAttribute("href", filename)
		}
		if (typeof fileref!="undefined")
			document.getElementsByTagName("head")[0].appendChild(fileref)
	},
	
	updateAddThis : function(buttonId, url, title, description) {
			addthis.button('#'+buttonId, {}, { url: url, title: title, description: description });
	},
	shareUGC : function(buttonId,song,locale) {
			var shareLink = "http://www.singstar.com/"+locale+"/my-singstar.html?user="+song.profileName+"&fileId="+song.id;
			var shareTitle = shareTranslatedSententences.atUgcTitle+" "+song.profileName+": "+song.title+" - "+song.artist;
			var shareDescription = shareTranslatedSententences.atUgcDesc;
			shareButtons.updateAddThis(buttonId,shareLink,shareTitle,shareDescription);
	},
	shareSong : function(buttonId,song,locale) {
			var shareLink = "http://www.singstar.com/"+locale+"/catalogue/catalogue-detail.html?songtitle="+urlEncoder.encode(song.title)+"&artist="+urlEncoder.encode(song.artist)+"&songid="+song.id;
			var shareTitle = shareTranslatedSententences.atSongTitle+" "+song.title+" - "+song.artist;
			var shareDescription = shareTranslatedSententences.atSongDesc;
			shareButtons.updateAddThis(buttonId,shareLink,shareTitle,shareDescription);
	},
	shareDisc : function(buttonId,disc) {
			var shareLink = "http://www.singstar.com/"+locale+"/catalogue.html?discid="+disc.id;
			var shareTitle = shareTranslatedSententences.atSongTitle+" "+disc.title+" - "+disc.artist;
			var shareDescription = shareTranslatedSententences.atSongDesc;
			shareButtons.updateAddThis(buttonId,shareLink,shareTitle,shareDescription);
	},
	songTrackIsFavourite : function (trackInfo) {
		if(isLoggedIn()){
			var params = {accountId:loginInfo.profileId}
			var isFav = 0;
			$("#favload").show();
			jQuery.ajax({
				type: 'POST',
				url: contextPath+'/ajax/fetchFavouriteSongs',
				dataType: 'text',
				success: function(data) {
					var obj = eval('('+data+')');;
					for(var i in obj.Result){
						if(trackInfo.id == obj.Result[i].productId){
							isFav = 1;	
						}
					}
					if(isFav == 0){ //not in favorites, so check if can add
						if(obj.Result.length == 5){
							isFav = -1;
						}	
					}
				},
				data : params,
				async: false
			});
		}
		$("#favload").hide();
		return isFav;
	},
 	updateStoreFavourites : function (trackInfo) {
 		params = {productId:trackInfo.id};
 		shareButtons.hide;
		jQuery.getJSON(contextPath+'/ajax/updateStoreFavourite',
				params, function(data){
				shareButtons.hide_buttons();
				if(data && data.status && data.status.indexOf("success") > 0 ){
					if (typeof mySingStoreFavoriteSongsUtil != undefined) { // my favourites are showing on this page, so reload them
						mySingStoreFavoriteSongsUtil.reloadIfOwn();
					}
					showSuccesEdit(true);			
				} else {
					if (data && data.error == "711") {
						showCommmonPopup(shareTranslatedSententences.sfSongHeader,shareTranslatedSententences.popupTextFull,shareTranslatedSententences.popupButtonFull);
					} else {
						showSuccesEdit(false);
				}
			}		
		});
	},
	ugcTrackIsFavourite : function (trackInfo) {
		if(isLoggedIn()){
			var isFav = 0;
			var params = {accountId:loginInfo.profileId,fileType:"ALL"}
			$("#favload").show();
			jQuery.ajax({
				type: 'POST',
				url: contextPath+'/ajax/fetchUserFavouriteMedia',
				dataType: 'text',
				success: function(data) {
					var obj = eval('('+data+')');;
					for(var i in obj.Result){
						if(trackInfo.id == obj.Result[i].fileId){
							isFav = 1;	
						}	
					}
					if(isFav == 0){ //not in favorites, so check if can add
						if(obj.Result.length == 40){
							isFav = -1;
						}	
					}
				},
				data : params,
				async: false
			});
		}
		$("#favload").hide();
		return isFav;
	},
 	updateUgcFavourites : function (trackInfo, add) {
 		shareButtons.hide;
	 	if (add) {
	 		params = {fileId:trackInfo.id};
			jQuery.getJSON(contextPath+'/ajax/addMyFavorite',
						params, function(data){
							try {
								if(data && data.status.indexOf("success") > 0){
										showSuccesEdit(true);	
								}else{
										showSuccesEdit(false);	
								}
							} catch (err){								
								showSuccesEdit(false);
							}
						}
			);
		} else {
	 		$.getJSON(contextPath+"/ajax/deleteFavourite", {accountId:loginInfo.profileId,fileId:trackInfo.id} , function call(data) {									
					if(data && data.Result.id == "200"){
						showSuccesEdit(true);	
					}else{
						showSuccesEdit(false);	
					}
			});	
		}
	}
};

function goBackToMySingstarFavourite(){
	if(loginInfo){
		window.location=contextPath+"/"+locale+"/my-singstar.html#/?tab=mediaspace_myfavorites&filter=myfavourite_all";	
	}	
}

function goBackToMySingstoreFavourite(){
	if(loginInfo){
		window.location=contextPath+"/"+locale+"/my-singstar.html#singstore-favourites";	
	}	
}

function setDisc (id, title, artist) {
		var sData = { id: id, title: title, artist: artist };
		shareButtons.shareDisc("carousel-addthis", sData);
}

var singstarfavourites_config = {
	buttons: []
};
	
var addthis_config = {
	services_compact: 'email, favorites, print, delicious, digg, more, google, myspace, live, facebook, stumbleupon, twitter',
	data_track_clickback: false,
	buttons: []
};

var reportgrief_config = {
	buttons: []	
};

var setPrivacy_config = {
	buttons: []
};

jQuery(document).ready(function() {
	shareButtons.init();
});

