/*********************************
 *****   BACS Facebook Connect
 *
 *********************************/
/**	Facebook Stream.Share-Dialog
 * 
 * @param {String} url 					- zu "teilende" url
 */
function bacs_connect_share (url) 
{
	var data = {
			method: 'stream.share',
			u: url
	}
	bacs_connect_publish_stream(data);
}

/**	Wrapperfunktion
 * 
 */
function bacs_connect_start (message, description, user_message_prompt, image_source) 
{
	var status = bacs_connect_status();
	if (status == 1) {
		if (document.getElementById('video_panel')) {
			bacs_connect_publish_prepareVideo(message, description, user_message_prompt);
		} else {
			bacs_connect_publish_prepareAnything(message, description, image_source, user_message_prompt);
		}
	} else {
		//user::no session
	}
}

/**	FB.UI - Stream.Publish
 *
 * @param {Object} data					- Objekt mit Attachment und Actionlink
 */

function bacs_connect_publish_stream (data) 
{
	FB.getLoginStatus(function(response) {
		  if (response.authResponse) {
			  // success :)
			  FB.ui(data, function(ui_response) {
		    	if (ui_response && ui_response.post_id) {
		    		// success :)
		    	} else {
		    		// user::abort
		    	}
		    });
		  } else {
			  //user::no session
		  }
	});
}


/**	Facebook Stream.Publish-Dialog für Videos
 * 		called by: BACS.Connect.Start
 * 
 * @param {String} message 				- Nachricht, die auf Facebook veröffentlicht werden soll. Optional.
 * @param {String} description 			- Beschreibung der Anlage. Optional. Wenn leer wird versucht die Beschreibung aus '#videoData_Details' zu extrahieren.
 * @param {String} user_message_prompt 	- Überschrift der Eingabebox
 */

function bacs_connect_publish_prepareVideo (message, description, user_message_prompt) 
{		
	var user_message_prompt 	= '';
	var category_text			= 'TVtotal.de';
	var category_href			= 'http://www.tvtotal.de';
	var videodata				= null;
	
	try {
		videodata = bacs_connect_getVideoData();
		var attachment_rating 	= videodata.rating;
		var description			= (videodata.desc.length > 290 ? videodata.desc.substr(0, 292) + '..' : videodata.desc);
		var action_title		= videodata.title;
		var action_title_s		= (videodata.title.length >= 20 ? videodata.title.substr(0, 18) + ".." : videodata.title);
	} catch (err) {
		//
	}
	
	var image_source 			= bacs_connect_getMetaScreenshot();
	var action_href  			= document.location + '';
	var attachment 				= bacs_connect_getAttachmentForVideos(action_title, action_href, '', description, category_text, category_href, attachment_rating, 'image', image_source, action_href, metadata, 1);
	var action_links 			= bacs_connect_getActionLink('MySpass.de', 'http://www.myspass.de');
	
	var data 					= 	{	method: 'stream.publish',
										display: 'dialog',
										message: message,
										attachment: attachment,
										action_links: action_links,
										user_message_prompt: user_message_prompt
									}
	
	bacs_connect_publish_stream(data);
}

/**	Facebook Stream.Publish.PrepareAnything
 * 		called by: BACS.Connect.Start
 * 
 * 		DEPRECATED		
 * 
 * @param {String} message 				- Nachricht, die auf Facebook veröffentlicht werden soll. Optional.
 * @param {String} description 			- Beschreibung der Anlage. Optional.
 * @param {String} image_source 		- Absolute URL zum Bild der Anlage.
 * @param {String} link 				- Absolute URL.
 * @param {String} display_type 		- 'dialog' für iFrame oder 'popup' für Popup 
 * @param {String} user_message_prompt 	- Überschrift der Eingabebox
 */

function bacs_connect_publish_prepareanything (message, description, image_source, user_message_prompt) 
{	
	var action_title 	= document.title;
	var action_title_s 	= document.title;
	var action_href  	= document.location + '';
	var attachment 		= bacs_connect_getAttachment('image', image_source, action_href, action_title, description, 'MySpass.de', 'http://www.myspass.de');
	var action_links 	= bacs_connect_getActionLink(action_title_s, action_href);
	if (action_title.length >= 20) { action_title_s = action_title.substr(0, 18) + ".."; }
	
	var data 			= 	{	method: 'stream.publish',
								message: message,
								display: 'popup',
								attachment: attachment,
								action_links: action_links,
								user_message_prompt: user_message_prompt
							}

	bacs_connect_publish_stream(data);
}

/**	AttachmentBuilder for Videos
 * 	creates a json-object for facebook
 * 
 * 		called by: BACS.Connect.PrepareVideo
 * 
 * @param {String} name 						- Überschrift
 * @param {String} href 						- Absolute URL zum Ziel
 * @param {String} caption						- Absolute URL
 * @param {String} description					- Beschreibung (max 292chars)
 * @param {String} properties_category_text		- Kategorie der Anlage
 * @param {String} properties_category_href		- Absolute URL zum Ziel der Kategorie
 * @param {String} properties_rating			- Bewertung der Anlage
 * @param {String} media_type					- Typ der Anlage (image, flash oder mp3)
 * @param {String} media_src					- Absolute URL zur Anlage
 * @param {String} media_href					- Absolute URL zum Ziel der Anlage
 * @param {Array} metadata						- Videometadaten (Staffelnummer, Folge, Spieldauer)
 * @param {Boolean} popup						- Popup j/n
 * @todo: Title ist noch nicht verlinkt.
 */

function bacs_connect_getAttachmentForVideos (name, href, caption, description, properties_category_text, properties_category_href, properties_rating, media_type, media_src, media_href, metadata, popup) 
{	
	if (caption == '' && popup == 1 && (metadata[0] && metadata[0] != 'undefined') && (metadata[1] && metadata[1] != 'undefined') && (metadata[2] && metadata[2] != 'undefined')) 
			caption = 'Staffel ' + metadata[0] + ', Folge ' + metadata[1] + ', ' + metadata[2];
	
	var attachment = { 
		    'name': name, 
		    'href': href, 
		    'caption': caption, 
		    'description': description, 
		    'properties': { 
		        'Kategorie': { 'text': properties_category_text , 'href': properties_category_href}, 
		        'Bewertung': properties_rating
		    },
		    'media': [{ 
		        'type': media_type, 
		        'src': media_src, 
		        'href': media_href}]
		};
	
	return attachment;
}

/**	AttachmentBuilder
 *		called by: BACS.Connect.PrepareAnything
 * 
 * 		DEPRECATED		
 *  
 * @param {String} type 				- Typ der Anlage (image, flv oder mp3)
 * @param {String} src 					- Absolute URL zum Bild/Flv/Mp3
 * @param {String} href					- Absolute URL
 * @param {String} name					- Name
 * @param {String} desc					- Beschreibung
 * @param {String} category				- Kategorie
 * @param {String} categoryHref			- Absolute URL zur Kategorie
 * @param {String} rating				- Bewertung
 */

function bacs_connect_getAttachment(type, src, href, name, desc, category, categoryHref, rating) 
{	
	if (!src || src == '') { src = 'http://www.myspass.de/myspass/media/images/myspass_de.png'; }
	var attachment = {'media': [{'type':type, 'src': src, 'href': href}], 'name':name, 'description':desc, 'properties':{'category':{'text':category, 'href':categoryHref}, 'Bewertung': rating}};
	
	return attachment;
}

/**	ActionLinkBuilder
 * @param {String} text 				- Titel des Link.
 * @param {String} href 				- Absolute URL.
 */
function bacs_connect_getActionLink (text, href) 
{	
	var action_links = [{"text": text, "href": href}];
	return action_links;
}

/**	GetVideoData
 * 
 */
function bacs_connect_getVideoData() 
{
	var videodata = {};
	
	try {
		// retrieve videoration from flashembed (#voting)
		var txt				= document.getElementById("voting").innerHTML;
		var re				= '.*?\\d+.*?\\d+.*?\\d+.*?(\\d+)';
		var p 				= new RegExp(re,["i"]);
		var m 				= p.exec(txt);
		videodata.rating 	= (m ? m[1] : 0) + ' Stern(e)';
		
		// retrieve extended videoinformation (#video_panel)
		txt 				= document.getElementById("video_panel").innerHTML;
		re					= '.*?<h2>{}(.*?)</h2>{1}.*';
		p					= new RegExp(re,["i"]);
		m					= p.exec(txt);
		
		videodata.title		= m[1];
		
		// retrieve videodescription (.infobox_tags_inner)
		videodata.desc		= 'tmp_description';
		
	} catch (err) {
		return false;
	}
	
	return videodata;
}

/**	GetVideoScreenshotByMetaTag
 * 	extracts videoscreenshot from fb:metatag
 */
function bacs_connect_getMetaScreenshot() 
{	
	var tags = document.getElementsByTagName('meta');
	
	for(var i in tags) {
		try {
			if (tags[i].content.match('.jpg')) {
				return tags[i].content;
			}
		} catch (err) {
			
		}
	}
	
	return 'http://tvtotal.prosieben.de/tvtotal/media/images/logo.jpg';
}

/**	OnLogin bzw. InstantLogin
 *	
 */
function bacs_connect_onLogin() 
{
	var _is_special_site		= false;
	var _display_in_url			= new RegExp('videos\/player\/', ["i"]);
		_is_special_site 		= _display_in_url.exec(window.location);
		
	if (_is_special_site)
	{
		var _login_url						= '/tvtotal/community/forum/people.php?PostBackAction=InstantFacebookSignIn';
		var _display_in_container 			= document.getElementById('related_list_container');
		var _container_backup				= _display_in_container.innerHtml;
		_display_in_container.innerHTML 	= '&nbsp;Du wirst jetzt per Facebook eingeloggt.. Bitte habe einen Moment Geduld.';
		
		var callback = {
			success: function(o) {
				//_display_in_container.innerHTML 	+= o.responseText;
			
				// Schwarze Magie... :D
				//var response = o.responseText.trim();
			
			
			var roto = '{"a":"b"}';
			
			alert(roto);
			alert(o.responseText);
			alert(roto == o.responseText);
			alert(roto == o.responseText.trim());
			
			var temp = o.responseText.replace(" ", "");
			
			
			alert("temp" + (roto == temp));
			alert(temp);
			
			/*	
			var json =  YAHOO.lang.JSON.parse(roto);
				var json2 =  YAHOO.lang.JSON.parse(o.responseText);
				
				*/
				if (json.status == 'success')
				{
					alert('yupp');
					//_display_in_container.innerHTML 	= 'Du wurdest erfolgreich eingeloggt.';
					//document.getElementById('subnavi_framework').innerHTML = '';
					//ajax('','ajax.php','getComments&contentId=89617&contentType=video','comments');
					//setTimeout(function() { _display_in_container.innerHTML = _container_backup; }, 1500);
				}
				else
				{
					alert('nupp');
					//window.location = "/tvtotal/community/forum/people.php?PostBackAction=SignInViaFacebook&useFacebook=True&returnUrl="+window.location;
				}
				
			},
			failure: function(o) {
				window.location = "/tvtotal/community/forum/people.php?PostBackAction=SignInViaFacebook&useFacebook=True&returnUrl="+window.location;
			}
		}
		
		YAHOO.util.Connect.asyncRequest('GET', _login_url, callback);		
	}
	else
	{
		window.location = "/tvtotal/community/forum/people.php?PostBackAction=SignInViaFacebook&useFacebook=True&returnUrl="+window.location;
	}
}

/**	GetLoginStatus
 * 	checks whether the user is currently logged into facebook and has authorized our application
 */
function bacs_connect_status() 
{
	var status = 0;
	try {
		FB.getLoginStatus(function(response) {
			if (response.authResponse) {
				status = 1;
			}
		});	
	} catch (err) {
		// 
	}
	
	return status;
}

function bacs_connect_login() 
{
	FB.login(function(response) {
	  if (response.authResponse) {
	    
            /*
            if (response.perms) {
	      bacs_connect_onLogin();
	    } else {
	    	// user is logged in, but did not grant any permissions
	    	bacs_connect_onLogin();
	    }
            */
            bacs_connect_onLogin();
	  } else {
	    // user is not logged in
	  }
	}, {perms:'email,publish_stream'});
}


/*********************************
 *****   BACS SCCC Special
 *
 *********************************/

var bacs_sccc_currentYear = 2010;

/**	BACS.SCCC.OnAuth
 * 		FQL'd diverse Userinformationen und fügt diese in unser Forumlar ein.
 */
function bacs_sccc_onAuth() 
{
	document.getElementById('sccc_facebook_button').style.display = 'none';
	var status_div 			= document.getElementById('sccc_facebook_button');
	var stat 				= bacs_connect_status();
	status_div.innerHTML 	= 'Bitte warten..';
	
	if (stat == 1)
	{
		var error_timer 	= setTimeout(function() { status_div.innerHTML = 'Es ist ein Fehler aufgetreten!';  }, 10000); 
		
		FB.api('/me', function(response)
		{
			var fb_query = FB.Data.query('select uid,work_history,first_name,last_name,birthday_date,sex,hometown_location,about_me,status,verified,email from user where uid = {0}', response.id);
			fb_query.wait(function(q) 
			{
				q = q[0];
				
				try { if (q.uid) bacs_sccc_insert('frm_fuid', q.uid) } 																catch (e) { bacs_addError(e) }
				try { if (q.first_name && q.last_name) bacs_sccc_insert('frm_username', q.first_name + q.last_name) } 				catch (e) { bacs_addError(e) }
				try { if (q.email) bacs_sccc_insert('frm_email', q.email) }															catch (e) { bacs_addError(e) }			
				try { if (q.first_name) bacs_sccc_insert('frm_prename', q.first_name) } 											catch (e) { bacs_addError(e) }
				try { if (q.last_name) bacs_sccc_insert('frm_name', q.last_name) } 													catch (e) { bacs_addError(e) }
				try { if (q.hometown_location.zip) bacs_sccc_insert('frm_plz', q.hometown_location.zip) } 							catch (e) { bacs_addError(e) }
				try { if (q.hometown_location.city) bacs_sccc_insert('frm_city', q.hometown_location.city) } 						catch (e) { bacs_addError(e) }
				try { if (q.work_history && q.work_history[0].position) bacs_sccc_insert('frm_job', q.work_history[0].position) } 	catch (e) { bacs_addError(e) }
				
				if (q.sex)
				{
					try
					{
						if (q.sex == 'male' || q.sex == 'männlich')
						{
							document.form.gender[0].checked = true;
						}
						else
						{
							document.form.gender[1].checked = true;
						}
					}
					catch (e)
					{
						bacs_addError(e)
					}
				}
				
				if (q.hometown_location.country)
				{
					try 
					{
						if (q.hometown_location.country == 'Deutschland' || q.hometown_location.country == 'Germany')
						{
							document.form.country.selectedIndex = 0;
						}
						else if (q.hometown_location.country == 'Schweiz' || q.hometown_location.country == 'Switzerland')
						{
							document.form.country.selectedIndex = 1;
						}
						else if (q.hometown_location.country == 'Österreich' || q.hometown_location.country == 'Austria')
						{
							document.form.country.selectedIndex = 2;
						}
					}
					catch (e) 
					{ 
						bacs_addError(e) 
					}
				}
				
				if (q.birthday_date)
				{
					try 
					{
						var frm_bd_d, frm_bd_m, frm_bd_y, arr_birthday;
						arr_birthday = q.birthday_date.split('/');
						parseInt(arr_birthday[0]);
						parseInt(arr_birthday[1]);
						parseInt(arr_birthday[2]);
	
						frm_bd_d = document.getElementsByName('geburtsdatum[d]');
						frm_bd_m = document.getElementsByName('geburtsdatum[m]');
						frm_bd_y = document.getElementsByName('geburtsdatum[Y]');
						
						var first_entry = bacs_sccc_currentYear - 100, counter = 0;
						while (first_entry <= arr_birthday[2]) {
							first_entry++;
							counter++;
						}
	
						try { frm_bd_d[0].selectedIndex = arr_birthday[1] -1; } catch (e) { bacs_addError(e) }
						try { frm_bd_m[0].selectedIndex = arr_birthday[0] -1; } catch (e) { bacs_addError(e) }
						try { frm_bd_y[0].selectedIndex = counter - 1; } 		catch (e) { bacs_addError(e) }
					}
					catch (e)
					{
						bacs_addError(e);
					}
				}
				
				clearTimeout(error_timer);
				status_div.innerHTML = 'Daten erfolgreich übertragen!';
				setTimeout(function() { status_div.innerHTML = '';  }, 3500); 
			});
		});
	}
	else
	{
		status_div.innerHTML = 'Es ist ein Fehler aufgetreten!'; 
	}
	
	//bacs_printError();
}

/**	BACS.SCCC.Insert
 * 		Fügt Value X in Inputfeld Y ein
 */
function bacs_sccc_insert(id, value) 
{
	if (document.getElementById(id) && value != '' && value != 'undefined')
	{
		document.getElementById(id).value = value;
	}
}

/**	BACS.SCCC.PublishProfile
 * 		Sammelt Informationen über das aktuelle Profil und bietet an diese über Facebook zu veröffentlichen
 */
function bacs_sccc_publishProfile() 
{
	var stat = bacs_connect_status();
	if (stat == 1)
	{
		try 
		{
			var _answer_1				= document.getElementById('zitat').innerHTML;
			_answer_1 					= _answer_1.length > 250 ? _answer_1.substr(0, 247) + '..' : _answer_1.trim();
		}
		catch (e)
		{
			var _answer_1 = '';
		}
		
		var attachment_desc			= _answer_1;
		var action_title			= 'TVtotal SCCC Wildcards';
		var action_href				= document.location + '';
		var attachment_link			= document.location + '';
		var attachment_title		= 'Vodafone Wildcard';
		try { var username			= document.getElementById('userName').innerHTML; } catch (e) { bacs_addError(e) }	
		try { var attachment_image_source 	= document.getElementById('userIcon').src; } catch (e) { bacs_addError(e); var attachment_image_source = 'http://www.marco-nellessen.de/wordpress/wp-content/uploads/2010/06/vodafone_logo1.jpg'; }
		try { var attachment_rating			= document.getElementById('ajax_container_voting').innerHTML.replace('Votes', ''); } catch (e) { bacs_addError(e) }
		try { var attachment_standing		= '#' + document.getElementById('placement').innerHTML.replace('.', ''); } catch (e) { bacs_addError(e) }
		var user_message_prompt 	= 'Warum sollte ' + (username != '' ? username : 'dieses Profil') + ' die Vodafone Wildcard gewinnen?';
		var msg_body				= 'Votet für "' + username + '", damit er/sie die Vodafone Wildcard bekommt und bei der TV total Stock Car Crash Challenge mitfahren kann!';

		var action_link 			= bacs_connect_getActionLink(action_title, 'http://tvtotal.prosieben.de/specials/stockcar2010/');
		
		var attachment = { 
			    'name': username + ' | ' + attachment_title, 
			    'href': attachment_link, 
			    'caption': '', 
			    'description': attachment_desc,
			    'properties': {
			        'Platzierung' : attachment_standing
			    },
			    'media': [{ 
			        'type': 'image', 
			        'src': attachment_image_source, 
			        'href': attachment_link}]
			};

		var data	 			= 	{	method: 'stream.publish',
										message: msg_body,
										attachment: attachment,
										user_message_prompt: user_message_prompt
									}
	
		bacs_connect_publish_stream(data);
	}
	else
	{
		FB.login(function(response) {
			if (response.authResponse)
			{
				bacs_sccc_publishProfile();
			}
			else
			{
				bacs_modal_show('Fehler!', 'Du musst dich bei Facebook anmelden um dieses Profil zu teilen!', true, false);
			}
		});
	}
}

/*********************************
 *****   BACS Misc
 *
 *********************************/

var bacs_overlay = document.getElementById('bacs_overlay_container');
function bacs_updateOverlay (headline, content)
{
	var o = bacs_overlay;
	o.style.display = 'block';
}


bacs_dbg = function(dbg_message) {
	/*try {
		if (BACS.AllMyBase == 'undefined' || !BACS.AllMyBase) {
			var pattern = new RegExp('cms.*?endo.e-tv\.de', ['gi']);
			var loc = String(document.location);
			var dbg_res = loc.match(pattern);
			
			if (dbg_res) {
				BACS.AllMyBase = true;
			} else {
				BACS.AllMyBase = false;
			}
		}
		
		if (BACS.AllMyBase) {
			if (console)
			{
				console.log(dbg_message);
			}
			else
			{
				alert('DEBUG: \n\n' + dbg_message);
			}
		}
	}
	catch (e)
	{
		alert('Firebug nicht initialisiert/installiert!\n Exception:' + e + '\n\n' + 'Urspruengliche Debugmeldung: ' + dbg_message);
	}*/
}

var bacs_errorCount = 0;
var bacs_errorMsg = new Array();
function bacs_addError(error_msg, custom_msg)
{
	var time = new Date();
	bacs_errorCount++;
	bacs_errorMsg.push(bacs_errorCount + ': ' + time.getTime() + ' --- ' + error_msg + '\n\n Custom_msg: ' + custom_msg);
}

function bacs_printError(use_console)
{
	if (bacs_errorCount > 0)
	{
		var arr_length = basc_errorMsg.length;
		for (var i = 0; i <= arr_length; i++)
		{
			if (use_console && console) 
			{
				console.log(bacs_errorMsg[i]);
			}
			else
			{
				alert(bacs_errorMsg[i]);
			}
		}
	}
}

function bacs_modal_show(headline, content, use_overlay, use_image)
{
	if (use_image) content = '<img src="'+content+'" id="bacs_overlay_embedded_image" />';
	
	document.getElementById('modal_headline').innerHTML = headline;
	document.getElementById('modal_content_text').innerHTML = content;
	
	var overlay = document.getElementById('modal_overlay');
	overlay.style.opacity = 0;
	overlay.style.display = 'block';
	
	if (use_overlay)
	{
		var overlay_anim_data = { opacity: { to: 0.5 }};
		var overlay_anim = new YAHOO.util.Anim('modal_overlay', overlay_anim_data, 0.4, YAHOO.util.Easing.easeIn);
		overlay_anim.onComplete.subscribe(function () {
			overlay.style.opacity = 0.5;
		});
		overlay_anim.animate();
	}
	
	var wrapper = document.getElementById('modalwrapper');
	wrapper.style.opacity = 0;
	wrapper.style.display = 'block';
	var wrapper_anim_data = { opacity: { to: 1 }};
	var wrapper_anim = new YAHOO.util.Anim('modalwrapper', wrapper_anim_data, 0.4, YAHOO.util.Easing.easeIn);
	wrapper_anim.onComplete.subscribe(function () {
		wrapper.style.opacity = 1;
	});
	wrapper_anim.animate();
}

function bacs_modal_hide()
{
	var wrapper = document.getElementById('modalwrapper');
	var overlay = document.getElementById('modal_overlay');
	
	var overlay_anim_data = { opacity: { to: 0 }};
	var overlay_anim = new YAHOO.util.Anim('modal_overlay', overlay_anim_data, 0.4, YAHOO.util.Easing.easeIn);
	overlay_anim.onComplete.subscribe(function() {
		overlay.style.display = 'none';
	});
	
	var wrapper_anim_data = { opacity: { to: 0 }};
	var wrapper_anim = new YAHOO.util.Anim('modalwrapper', wrapper_anim_data, 0.4, YAHOO.util.Easing.easeIn);
	wrapper_anim.onComplete.subscribe(function() {
		wrapper.style.display = 'none';
	});
	
	wrapper_anim.animate();
	overlay_anim.animate();
}
