All pastes #1895145 Raw Edit

youtube_lyrics.user.js

public javascript v1 · immutable
#1895145 ·published 2010-07-05 21:18 UTC
rendered paste body
// ==UserScript==// @name           YouTube Lyrics// @namespace      http://userscripts.org/users/28612// @version        3.04.00// @changes        Fixed the parsing of the video category,Added the "movies" video category// @description    Adds a lyrics box to the YouTube sidebar under the video informations box. It can search in twelve different lyrics sites and it shows also all the results in a drop down.// @include        http://*youtube.com/watch?*// @require        http://userscripts.org/scripts/version/33024/88773.user.js// @resource       Library1Resources http://www.fileden.com/files/2008/9/2/2077873/JavascriptLibrary/0_5_0/Library1.xml// @resource       Library1Resources_de http://www.fileden.com/files/2008/9/2/2077873/JavascriptLibrary/0_5_0//Library1_de.xml// @resource       Library1Resources_es http://www.fileden.com/files/2008/9/2/2077873/JavascriptLibrary/0_5_0/Library1_es.xml// @resource       Library1Resources_fr http://www.fileden.com/files/2008/9/2/2077873/JavascriptLibrary/0_5_0/Library1_fr.xml// @resource       Library1Resources_it http://www.fileden.com/files/2008/9/2/2077873/JavascriptLibrary/0_5_0/Library1_it.xml// @resource       YoutubeLyricsResources http://www.fileden.com/files/2008/9/2/2077873/YoutubeLyrics/3_4_0/YoutubeLyrics.xml// @resource       YoutubeLyricsResources_de http://www.fileden.com/files/2008/9/2/2077873/YoutubeLyrics/3_4_0/YoutubeLyrics_de.xml// @resource       YoutubeLyricsResources_es http://www.fileden.com/files/2008/9/2/2077873/YoutubeLyrics/3_4_0/YoutubeLyrics_es.xml// @resource       YoutubeLyricsResources_fr http://www.fileden.com/files/2008/9/2/2077873/YoutubeLyrics/3_4_0/YoutubeLyrics_fr.xml// @resource       YoutubeLyricsResources_it http://www.fileden.com/files/2008/9/2/2077873/YoutubeLyrics/3_4_0/YoutubeLyrics_it.xml// @resource       LyricsSitesDefinitions  http://userscripts.org/scripts/source/34831.user.js// ==/UserScript==var ScriptInfos={	id: 22569,	name: "Youtube Lyrics",	version: new Version("3.04.00"),	language: "en",	idPrefix: "YL"}var CM=nullvar RM=null;var SU=null;var DU=null;init();function init(){	CM=new ConfigurationManager();	RM=new ResoucesManager();	SU=new Updater(22569,"Youtube Lyrics","updater","//div[@id='YLLyricsPanel']");	DU=new Updater(34831,"Definitions","definitions","//div[@id='YLLyricsPanel']",installDefinitions);		if (ScriptInfos.version.compareTo(CM.config.updater && CM.config.updater.version)==1) updateOptions();	ScriptInfos.language=CM.config.language;		ScriptInfos.requestsCounter=0;	$rmc("MenuOptions",[ScriptInfos.name],showOptionsPanel);		var text1=getVideoCategory();	GM_log(text1);	if (CM.config.showOnCategory==text1 || ($isa(CM.config.showOnCategory) && CM.config.showOnCategory.contains(text1))) initLyricsPanel();	else if (CM.config.addUserScriptCommandToShowLyricsPanel) $rmc("MenuShow",[ScriptInfos.name],initLyricsPanel);}function updateOptions(){	var obj1={		language:"en",		showSendFeedbackConfirm:"on",		updater:{			lastCheckDate:new Date(),			checkFrequency:1},		showOnCategory:"10",		addUserScriptCommandToShowLyricsPanel:"on",		showAlertOnSavePreferred:"on",		showSearchTextBox:"on",		showResultsDropDown:"on",		showLinkOriginalPage:"on",		showLinkSearchYoutube:"on",		showLinkSendParsingError:"on",		showSendParsingErrorConfirm:"on",		preferredSite:"",		activeSites:[],		definitions:{			autoInstall:"on",			lastCheckDate:new Date(),			checkFrequency:1},		lyricsSitesDefinitions:[]		};	$mo(obj1,CM.config);	obj1.updater.version=ScriptInfos.version;	var text1=GM_getResourceText("LyricsSitesDefinitions");	obj1.definitions.version=new Version(/version.*?((?:\.|\d)+)/gm.exec(text1)[1]);	mergeLyricsSitesDefinitions(obj1,$t2o(text1));	setOptions(obj1);}function mergeLyricsSitesDefinitions(config,obj1){	var array1=new Array();	var obj2=config.lyricsSitesDefinitions;	for(var num1=0;num1<obj1.length;num1++)	{		var flag1=false;		var obj3=obj1[num1];		var num3=obj3.id;		for(var num2=0;num2<obj2.length;num2++) 		{			if (obj2[num2].id==num3) 			{				flag1=true;				obj2[num2]=obj3;				break;			}		}		if (!flag1) 		{			config.activeSites.push(num2.toString());			obj2.push(obj3);		}	}}function setOptions(options){	if (options) CM.config=options;	CM.save();}function savePreferredSite(){	var select1=$idp("LyricsSites");	var option1=select1.options[select1.selectedIndex];	CM.config.preferredSite=option1.value;	if (CM.config.showAlertOnSavePreferred) alert(RM.getText("SavedPreferredSite",option1.textContent));	setOptions();}function overwriteDefinitions(){	if (confirm(RM.getText("ReinstallLyricsSitesDefinitionConfirm")))	{		DU.overwriteDefinitions=true;		if (confirm(RM.getText("ReinstallLyricsSitesDefinitionChooseDialog"))) DU.checkForNewVersion(true,installDefinitions);		else installDefinitionsCallback(DU,{responseText:GM_getResourceText("LyricsSitesDefinitions")});	}}function installDefinitions(updater,response){	if (updater.newVersionAvailable || DU.overwriteDefinitions)	{		var version1=new RegExp("YoutubeLyrics.*?((?:\\.|\\d)+)","gmi").test(response.responseText)?new Version(RegExp.$1):null;		if (version1 && version1.compareTo(ScriptInfos.version)!=-1)		{			var text1=RM.getText("NewLyricsSitesDefinitionNotSupported",[ScriptInfos.name,ScriptInfos.version,version1]);			if (ScriptInfos.optionsPanelVisible) alert(text1);			else createInfoMessage("NewVersionRequired",text1,null,"//div[@id='YLLyricsPanel']");		}		else sendGetRequest(updater.installUrl,$chf(this,installDefinitionsCallback,[updater]));	}}function installDefinitionsCallback(updater,response){	if (new RegExp("version.*?((?:\\.|\\d)+)","gmi").test(response.responseText)) updater.config.version=new Version(RegExp.$1);	if (updater.overwriteDefinitions) CM.config.lyricsSitesDefinitions=new Array();	mergeLyricsSitesDefinitions(CM.config,$t2o(response.responseText));	setOptions();	updater.hideNewVersionHTML(false);	var text1=RM.getText("LyricsSitesDefinitionsInstalled",[updater.config.version]);	if (ScriptInfos.optionsPanelVisible) 	{		alert(text1);		showOptionsPanel(true);	}	else createInfoMessage("NewVersionInstalled",text1,null,"//div[@id='YLLyricsPanel']");}function sendLyricsRequest(url,handler,encoding){	ScriptInfos.requestsCounter++;	var callback=function(requestsCounter,handler){var num1=requestsCounter; return function(response){if (num1==ScriptInfos.requestsCounter) handler(response);};}(ScriptInfos.requestsCounter,handler);	sendGetRequest(url,callback,encoding);}function getVideoCategory(){	var num1=-1;	// mallo: this anchor-tag does no longer exist	// -- var node1=$id("watch-video-category");	// ++	var node1=$id("eow-category").firstChild;	// ++	if (node1)	{		var text1=node1.getAttribute("href");		switch(text1)		{			case "/comedy": num1=23; break;			case "/education": num1=27; break;			case "/gaming": num1=20; break;			case "/movies": num1=30; break;			case "/music": num1=10; break;			case "/news": num1=25; break;			case "/sports": num1=17; break;			default: num1=/c=(\d+)/i.exec(text1)?RegExp.$1:-1;		}	}	return num1;	alert(num1);}function initLyricsPanel(){	var flag1=false;	try	{		addLyricsPanel(false);		ScriptInfos.lyricsPanelInitialized=true;	}	catch(ex)	{		flag1=true;		GM_log(ex.message);	}	SU.checkForNewVersion(flag1);	if (!flag1) DU.checkForNewVersion(false,DU.config.autoInstall?installDefinitions:null);}function addLyricsPanel(reset){	var div1=$idp("LyricsPanel");	if (div1 && reset) {div1.parentNode.removeChild(div1); div1=null;}	if (div1==null)	{		addHiddenStyle();		if (!isStyleAdded("LyricsPanelStyle")) addStyle("LyricsPanelStyle",null,[ScriptInfos.idPrefix,RM.getText("LoadingImageSrc")]);				var array1=RM.getObject("LyricsPanelTexts");		array1[0]=ScriptInfos.idPrefix;		array1[2]=RM.getText("SaveImageSrc");		array1[3]=RM.getText("SaveImageWidth");		array1[4]=RM.getText("SaveImageHeight");		array1[5]=array1[5].format(ScriptInfos.name,ScriptInfos.version);		div1=stringToHTML(RM.getText("LyricsPanelHTML",array1));		// mallo: also these divs do exist any longer		// -- var div2=$id("more-from-panel") || $id("watch-channel-videos-panel");		// ++		var div2=$id("watch-sidebar").firstChild;		// ++		div2.parentNode.insertBefore(div1,div2);				var select1=$idp("LyricsSites");		select1.options.length=0;		for(var num1=0;num1<CM.config.lyricsSitesDefinitions.length;num1++)		{			var obj1=CM.config.lyricsSitesDefinitions[num1];			if (obj1.enabled && CM.config.activeSites.indexOf(obj1.id.toString())!=-1)			{				var text1=obj1.name;				var option1=$ce("option",text1,{value:obj1.id});				option1.selected=obj1.id==CM.config.preferredSite;				select1.appendChild(option1);			}		}		select1.addEventListener("change",function(e){searchForLyrics();},false);		$idp("PanelSwitch").addEventListener("click",function(e){if (!e.target.onlyOnce) {e.target.onlyOnce=true; searchForLyrics();}},false);		$idp("SavePreferredSite").addEventListener("click",savePreferredSite,false);		$idp("SearchText").addEventListener("keypress",function(e){if (e.which==13){searchForLyrics(e.target.value); return false;}},false);		$idp("ResultsList").addEventListener("change",function(e){loadLyricsPage(e.target.selectedIndex);},false);		$idp("SendParsingError").addEventListener("click",function(e){sendParsingError(ScriptInfos.lyricsLinks[ScriptInfos.lyricsLinksIndex][0]);},false);		// mallo: bind toggle listener		// ++		toggleEL = document.getElementsByClassName('YLToggler');		for(i=0;i<toggleEL.length;i++) {			toggleEL[i].addEventListener("click",function(e){toggleExpand(showLink=true);},false)		}		toggleExpand(showLink=false);		// ++	}	return div1;}function setLyricsDivContent(html,showLoadingIcon,showLyricsTextBox,showResultsDropDown,showLinkToOriginalPage,showLinkToSearchYoutube,showLinkToSendParsingError){	with($idp("SearchText"))	{		className=showLyricsTextBox?"":"hidden";		value=ScriptInfos.words;	}		var select1=$idp("ResultsList");	select1.className=showResultsDropDown?"":"hidden";	select1.options.length=0;	if (ScriptInfos.lyricsLinks)	{		for(var num1=0;num1<ScriptInfos.lyricsLinks.length;num1++) 		{			var option1=new Option(decodeHTML(ScriptInfos.lyricsLinks[num1][1]));			if (ScriptInfos.lyricsLinksIndex==num1) option1.selected=true;			select1.options[num1]=option1;		}	}		var text1="";	var text2="";	if (ScriptInfos.lyricsLinks && ScriptInfos.lyricsLinksIndex!=null)	{		var obj1=ScriptInfos.lyricsLinks[ScriptInfos.lyricsLinksIndex];		text1=obj1[0];		text2="http://{0}/results?search_query={1}".format(document.location.host,encodeURIComponent(obj1[1].replace(/-/gmi,"").replace(/lyrics/gmi,"").replace(/  /," ")).replace(/%20/gmi,"+"));	}		var link1=$idp("OriginalPage");	link1[showLinkToOriginalPage?"setAttribute":"removeAttribute"]("href",text1);	link1.className=showLinkToOriginalPage?"":"hidden";		var link2=$idp("SearchYoutube");	link2[showLinkToSearchYoutube?"setAttribute":"removeAttribute"]("href",text2);	link2.className=showLinkToSearchYoutube?"":"hidden";		var link3=$idp("SendParsingError");	link3.className=showLinkToSendParsingError?"":"hidden";		var text3="{0}Loading".format(ScriptInfos.idPrefix)	var div1=$idp("LyricsContentDiv");	var array1=div1.className.split(" ");	if (!showLoadingIcon) array1.remove(text3);	else if (array1.indexOf(text3)==-1) array1.push(text3);	div1.className=array1.join(" ");		$idp("Lyrics").innerHTML=html;	// mallo 	// ++	toggleExpand(showLink=true);	// ++}// mallo// ++function toggleExpand() {	var initialHeight = '200';	var lyricsHeight = $idp("Lyrics").offsetHeight;	var lyricsContainer = $id("YLLyricsContentDiv");		if(arguments[0]) {		for(i=0;i<toggleEL.length;i++) {			toggleEL[i].style.display = 'block';		}				if(lyricsContainer.offsetHeight == initialHeight && lyricsHeight != '0') {			lyricsContainer.style.height = 85 + lyricsHeight + 'px';			} 		else {			lyricsContainer.style.height = initialHeight + 'px';		}	} 	else {		for(i=0;i<toggleEL.length;i++) {			toggleEL[i].style.display = 'none';		}				lyricsContainer.style.height = 'auto';	}}// ++function initLyricsSiteDefinition(id){	ScriptInfos.lyricsSiteId=id;	var array1=CM.config.lyricsSitesDefinitions;	for(var num1=0;num1<array1.length;num1++) if (array1[num1].id==id) {ScriptInfos.lyricsSite=$co(array1[num1]); break;}	ScriptInfos.lyricsSite.parseListRegexp=new RegExp(ScriptInfos.lyricsSite.parseListRegexp,"gmi");	var array2=ScriptInfos.lyricsSite.parseLyrics;	for(var num2=0;num2<array2.length;num2++)	{		array2[num2].parseTitleRegexp=new RegExp(array2[num2].parseTitleRegexp,"gmi");		array2[num2].parseLyricsRegexp=new RegExp(array2[num2].parseLyricsRegexp,"gmi");	}}function searchForLyrics(words){		ScriptInfos.lyricsLinks=null;	ScriptInfos.lyricsLinksIndex=null;		var select1=$idp("LyricsSites");	initLyricsSiteDefinition(parseInt(select1.options[select1.selectedIndex].value));	if (words) ScriptInfos.words=words;	if (ScriptInfos.words==null) ScriptInfos.words=document.title.replace(/youtube/gmi,"").replace(/-/gmi," ").replace(/"/gmi," ").replace(/video/gmi," ").replace(/ +/gmi," ").replace(/^\s+/gmi,"").replace(/\s+$/gmi,"");	var text1=ScriptInfos.lyricsSite.name=="get-lyrics.net"?"-":"+";	var text2=encodeURIComponent(ScriptInfos.words).replace(/%20/gmi,text1);	var text3=ScriptInfos.lyricsSite.searchUrl.format(text2);		setLyricsDivContent(RM.getText("Searching",[ScriptInfos.lyricsSite.name,ScriptInfos.words]),true,CM.config.showSearchTextBox);	sendLyricsRequest(text3,parseSearchResponse,ScriptInfos.lyricsSite.searchEncoding);}function parseSearchResponse(response){	var text1="";	var text2="";	ScriptInfos.lyricsLinks=new Array();	//debugRegexp(ScriptInfos.lyricsSite.parseListRegexp,response.responseText);	ScriptInfos.lyricsSite.parseListRegexp.lastIndex=0;	var match1=ScriptInfos.lyricsSite.parseListRegexp.exec(response.responseText);	while(match1)	{		//GM_log(match1[0]);		//GM_log(match1[1]+" "+match1[2]);		ScriptInfos.lyricsLinks.push([ScriptInfos.lyricsSite.lyricsUrl+decodeHTML(match1[1]),match1[2].replace(/<\/?(b|em)>/gmi,"")]);		match1=ScriptInfos.lyricsSite.parseListRegexp.exec(response.responseText);	}		if (ScriptInfos.lyricsLinks.length!=0) loadLyricsPage(0);	else {		setLyricsDivContent(RM.getText("FoundNothing",ScriptInfos.lyricsSite.name),false,CM.config.showSearchTextBox);		// mallo		// ++		toggleExpand(showLink=false);		// ++	}}function loadLyricsPage(index){	ScriptInfos.lyricsLinksIndex=index;	setLyricsDivContent(RM.getText("Loading",[ScriptInfos.lyricsSite.name,ScriptInfos.lyricsLinks[index][1]]),true,CM.config.showSearchTextBox,CM.config.showResultsDropDown,CM.config.showLinkOriginalPage,CM.config.showLinkSearchYoutube);	sendLyricsRequest(ScriptInfos.lyricsLinks[index][0],parseLyricsPage,ScriptInfos.lyricsSite.lyricsEncoding);}function parseLyricsPage(response){		var text1="";	var flag1=false;		if (response.status!=200) 	{ 		flag1=true;		text1=RM.getText("LyricsParsingErrorHTML",[response.statusText,""]);	}	else	{		//GM_log(response.responseText);		var array1=ScriptInfos.lyricsSite.parseLyrics;		for(var num1=0;num1<array1.length;num1++)		{			array1[num1].parseTitleRegexp.lastIndex=0;			array1[num1].parseLyricsRegexp.lastIndex=0;						//debugRegexp(array1[num1].parseTitleRegexp,response.responseText);			//debugRegexp(array1[num1].parseLyricsRegexp,response.responseText);						var match1=array1[num1].parseTitleRegexp.exec(response.responseText);			var match2=array1[num1].parseLyricsRegexp.exec(response.responseText);			if (match1 && match2) 			{				if (match1.length!=1) match1.shift();				if (match2.length!=1) match2.shift();								var text2=match1.join(" ");				var text3=match2.join(" ");								text2=text2.replace(/<br ?\/?>/gmi,"");				if (response.responseText.match(/<\/pre>/gmi)) text3=text3.replace(/\n/gmi,"<br/>").replace(/\r/gmi,"");				text3=text3.replace(/<br ?\/?>/gmi,"<br/>").replace(/<br\/>(?:\s*<br\/>)+/gmi,"<br/>").replace(/^\s*(?:<br\/>\s*)+/gi,"");								text1=RM.getText("LyricsParsingSuccessHTML",[ScriptInfos.idPrefix,text2,text3]);								break;			}		}		if (!text1)		{			flag1=true;			text1=RM.getHTMLTexts("LyricsParsingError");		}	}	setLyricsDivContent(text1,false,CM.config.showSearchTextBox,CM.config.showResultsDropDown,CM.config.showLinkOriginalPage,CM.config.showLinkSearchYoutube,CM.config.showLinkSendParsingError && flag1);}function showOptionsPanel(reset){	var div1=addModalDiv(hideOptions);	var div2=addOptionsPanel(reset);		setFormValues($idp("OptionsForm"),CM.config);	$idp("EditLyricsSitesDefinitions").disabled=false; 	with($idp("LyricsSitesDefinitions"))	{		readOnly=true;		disabled=true;	}		div1.className="";	div2.className="";	ScriptInfos.optionsPanelVisible=true;}function addOptionsPanel(reset){	var div1=$idp("OptionsContainer");	if (div1 && reset) {div1.parentNode.removeChild(div1); div1=null;}	if (div1==null)	{		addStyle("OptionsContainerStyle");		addNoPaddedListStyle();				var array1=new Array();		array1.push(RM.getHTMLTexts("OptionsGeneral",[ScriptInfos.idPrefix,,,,,,,,,,SU.homepageUrl]));		array1.push(RM.getHTMLTexts("OptionsUpdater"));		array1.push(RM.getHTMLTexts("OptionsDisplay"));		array1.push(RM.getHTMLTexts("OptionsLyricsPanelContent"));		array1.push(RM.getHTMLTexts("OptionsLyricsSites"));		array1.push(RM.getHTMLTexts("OptionsLyricsSitesDefinitions"));		div1=stringToHTML(RM.getHTMLTexts("OptionsContainer",[ScriptInfos.idPrefix,RM.getHTMLTexts("OptionsLeftSide",[ScriptInfos.idPrefix,ScriptInfos.name]),array1.join("\n")]));		document.body.appendChild(div1);				var li1=$idp("OptionsLyricsSites");		var ul1=li1.parentNode;		ul1.removeChild(li1);		for(var num1=0;num1<CM.config.lyricsSitesDefinitions.length;num1++)		{			var obj1=CM.config.lyricsSitesDefinitions[num1];			if (obj1.enabled)			{				var li2=li1.cloneNode(true);				li2.innerHTML=li2.innerHTML.format(obj1.id,obj1.name);				ul1.appendChild(li2);			}		}				$idp("CheckForUpdate").addEventListener("click",function(e){SU.checkForNewVersion(true,$chf(SU,SU.newVersionDialog));},false);		$idp("SendFeedback").addEventListener("click",function(e){sendFeedback($idp("SendFeedback"),$idp("FeedbackMessage"),$idp("SendFeedbackStatus"));},false);		$idp("Apply").addEventListener("click",saveOptions,false);		$idp("OK").addEventListener("click",saveOptions,false);		$idp("Cancel").addEventListener("click",hideOptions,false);		$idp("Definitions.CheckForUpdate").addEventListener("click",function(e){DU.checkForNewVersion(true,$chf(DU,DU.newVersionDialog));},false);		$idp("EditLyricsSitesDefinitions").addEventListener("click",enableLyricsSitesDefinitionsTextarea,false);		$idp("ReinstallLyricsSitesDefinitions").addEventListener("click",overwriteDefinitions,false);	}	return div1;}function enableLyricsSitesDefinitionsTextarea(e){	if (confirm(RM.getText("EditLyricsSitesDefinitionsConfirm"))) 	{		$idp("EditLyricsSitesDefinitions").disabled=true; 		with($idp("LyricsSitesDefinitions"))		{			readOnly=false;			disabled=false;		}	}}function hideOptions(){	ScriptInfos.optionsPanelVisible=false;	$idp("ModalDiv").className="hidden";	$idp("OptionsContainer").className="hidden";}function saveOptions(e){	try{setOptions(getFormValues(e.target.form));}	catch(ex)	{		alert(RM.getText("LyricsSitesDefinitionsError",ex.message)); 		getFormValues(e.target.form);	}		if (ScriptInfos.language!=CM.config.language || $idp("EditLyricsSitesDefinitions").disabled)	{		ScriptInfos.language=CM.config.language;		showOptionsPanel(true);		if (ScriptInfos.lyricsPanelInitialized) addLyricsPanel(true);	}		if (e.target.name=="OK") hideOptions();}function getFeedbackClient(){return new FeedbackClient("YoutubeLyrics@hotmail.com",Math.round(Math.exp(6*Math.log(2))*3*643));}function sendFeedback(button,textarea,span){	if (!CM.config.showSendFeedbackConfirm || confirm(RM.getText("ConfirmSendFeedback")))	{		var fc=getFeedbackClient();		fc.button=button;		fc.textarea=textarea;		fc.span=span;		fc.button.disabled=true;		fc.textarea.disabled=true;		fc.span.innerHTML=RM.getText("SendingFeedback");		fc.login(sendFeedbackCallback1);	}}function sendFeedbackCallback1(fc,response){	if (fc.isLoggedIn)	{		fc.postMessage("topics/21769",fc.textarea.value,sendFeedbackCallback2);	}	else	{		fc.button.disabled=false;		fc.textarea.disabled=false;		fc.span.innerHTML=RM.getText("SendingFeedbackError");		fc.logOut();	}}function sendFeedbackCallback2(fc,response){	fc.button.disabled=false;	fc.textarea.disabled=false;	fc.span.innerHTML=RM.getText("FeedbackSent",fc.lastPostedMessageUrl);	fc.logout();}function sendParsingError(errorUrl){	if ((!CM.config.showSendParsingErrorConfirm || confirm(RM.getText("ConfirmSendParsingError"))) && (!CM.config.showSendFeedbackConfirm || confirm(RM.getText("ConfirmSendFeedback"))))	{		setLyricsDivContent(RM.getText("SendingParsingError"),false,CM.config.showSearchTextBox,CM.config.showResultsDropDown,CM.config.showLinkOriginalPage,CM.config.showLinkSearchYoutube);		var fc=getFeedbackClient();		fc.errorUrl=errorUrl;		fc.login(sendParsingErrorCallback1);	}}function sendParsingErrorCallback1(fc,response){	if (fc.isLoggedIn)	{		fc.postMessage("topics/21075",fc.errorUrl,sendParsingErrorCallback2);	}	else	{		setLyricsDivContent(RM.getText("SendingParsingErrorError"),false,CM.config.showSearchTextBox,CM.config.showResultsDropDown,CM.config.showLinkOriginalPage,CM.config.showLinkSearchYoutube);		fc.logOut();	}}function sendParsingErrorCallback2(fc,response){	setLyricsDivContent(RM.getText("ParsingErrorSent",fc.lastPostedMessageUrl),false,CM.config.showSearchTextBox,CM.config.showResultsDropDown,CM.config.showLinkOriginalPage,CM.config.showLinkSearchYoutube);	fc.logout();}