/*
	Custom Player Manager
	@author Park U-yeong (ACG)
*/

var customPlayer = new CustomPlayerManager();

customPlayer.sns( 'facebook', '/common/img/ico_facebook.png', 'http://www.facebook.com/sharer.php', '', 'u', '', '' );
customPlayer.sns( 'twitter', '/common/img/ico_twitter.png', 'http://twitter.com/share', 'text', 'url', '', '' );
customPlayer.sns( 'youtube', '/common/img/ico_youtube.png', 'http://www.youtube.com', '', '', '', '' );

function CustomPlayerManager()
{
	// private property
	var target = this;
	var qs = new QueryStrUtils();
	var snsData = new Object();
	var snsArr;
	var playerStyle = new Object();
	var defaultStyle;
	
	// public property
	this.linkURL = '';
	this.linkParam = '';
	
	// public funcion
	this.tag = tag;
	this.run = run;
	this.targetRun = targetRun;
	this.popupRun = popupRun;
	this.sns = sns;
	this.snsList = snsList;
	this.snsArray = snsArray;
	this.share = share;
	this.style = style;
	this.styleData = styleData;
	this.styleCode = styleCode;
	this.onClickClose;

	init();

	// private function
	function init()
	{
		(function( $ ){
			$.fn.customPlayer = function( method )
			{
				var cpm = customPlayer;
				if ( cpm[method] != null || typeof cpm[method] === 'function' )
				{
					var arr = Array.prototype.slice.call( arguments, 1);
					if ( method == 'run' ) arr = [ $( this ) ].concat( arr );
					return cpm[method].apply( cpm, arr );
				}
				else if ( typeof method === 'object' || !method ) { for ( var s in method ) { cpm[s] = method[s]; } }
				else $.error( 'Method ' +  method + ' does not exist on jQuery.customPlayer' );
			}
		})( jQuery );
	}

	function tag( videoID, player, substitute, bgColor, getLink )
	{
		var styleStr = styleCode( player );
		if ( styleStr == null ) return '';

		var style = styleData( styleStr );

		var tag = '';

		if(!isMobile && !isFlashAvailable) {
			tag = '<img src="' + substitute + '" ';
			tag += 'title="Sorry. Flash player is not available at your browser. This is substitute image for flash player." />';
		}
		else {
			if ( qs.checkNull( bgColor ) ) bgColor = '#FFFFFF';
			//if ( getLink == null ) getLink = qs.setParam( target.linkParam, target.linkURL );
			if ( qs.checkNull( getLink ) ) getLink = qs.setParam( 'brightcove=' + videoID );

			tag = '<object id="myExperience' + videoID + '" class="BrightcoveExperience">';
			tag += '<param name="wmode" value="transparent">';
			tag += '<param name="bgcolor" value="' + bgColor + '" />';
			tag += '<param name="width" value="' + style[0] + '" />';
			tag += '<param name="height" value="' + style[1] + '" />';
			tag += '<param name="playerID" value="' + style[2] + '" />';
			tag += '<param name="playerKey" value="' + style[3] + '" />';
			tag += '<param name="isVid" value="true" />';
			tag += '<param name="isUI" value="true" />';
			tag += ( getLink != '' ) ? '<param name="linkBaseURL" value="' + getLink + '" />' : '';
			tag += '<param name="dynamicStreaming" value="true" />';
			tag += '<param name="@' + style[4] + '" value="' + videoID + '" />';
			tag += '</object>';
		}

		return tag;
	}

	function run( div, videoID, player, substitute, bgColor, getLink, flashDescTxt )
	{
		div.html( target.tag( videoID, player, substitute, bgColor, getLink ) ).show();
		brightcove.createExperiences();
		flashSkipArea(flashDescTxt); // 20120112 cidow acc ymr add (skip flash)
		return div;
	}

	function targetRun( divID, videoID, player, bgColor, getLink )
	{
		if ( $('#' + divID ).html() == null ) $( 'body' ).append( '<div id="' + divID + '"></div>' );

		var div = $('#' + divID );
		div.html( target.tag( videoID, player, bgColor, getLink ) ).show();
		brightcove.createExperiences();

		return div;
	}

	function popupRun( videoID, player, bgColor, getLink )
	{
		$('body').append( '<div id="' + target.closeDiv + '"><a href="#none"><img src="' + target.closeIcon + '" alt="' + target.closeAlt + '" /></a></div><div id="' + target.baseDiv + '"></div><div id="' + target.bgDiv + '"></div>' );

		var style = styleData( player );
		if ( style == null ) return;

		var brightcoveDiv = run( videoID, player, bgColor, getLink );
		var closeDiv = $('#' + target.closeDiv );
		var bgDiv = $('#' + target.bgDiv );
		var width = style[0];
		var height = style[1];

		brightcoveDiv.width( width ).height( height ).css( 'margin-left', -width / 2 );
		closeDiv.width( width ).css( 'margin-left', -width / 2 ).show();
		bgDiv.css( 'opacity', '0.5' ).show();

		closeDiv.find( 'a' ).click( function() {
			
			brightcoveDiv.hide().remove();
			closeDiv.hide().remove();
			bgDiv.hide().remove();
			if ( target.onClickClose != null ) target.onClickClose();
			return false;

		});	

		return brightcoveDiv;
	}

	function sns( name, icon, snsURL, paramTitle, paramUrl, paramText, paramImg )
	{
		var o = new Object();
		snsData['_' + name] = o;

		o.name = name;
		o.icon = icon;

		if ( typeof( snsURL ) == 'function' ) o.fnc = snsURL;
		else
		{
			o.sns = snsURL;
			o.title = paramTitle;
			o.url = paramUrl;
			o.text = paramText;
			o.img = paramImg;
		}
	}
	
	function snsList()
	{
		snsArr = new Array();
		var len = arguments.length;
		for ( var i = 0; i < len; i++ ) snsArr[i] = arguments[i];
	}

	function snsArray()
	{
		return snsArr.slice();
	}

	function share( name, feedTitle, feedUrl, feedText, feedImg )
	{
		var o = snsData['_' + name];
		if ( o == null ) return '';
		var s;
		
		if ( o.fnc ) s = o.fnc( feedTitle, feedUrl, feedText, feedImg );
		else
		{
			var arr = qs.urlData( o.sns );
			var d = qs.strToObj( arr[1] );
			
			if ( !qs.checkNull( o.title ) ) d[o.title] = feedTitle;
			if ( !qs.checkNull( o.url ) )  d[o.url] = (name == "facebook" ? getFacebookURL(feedUrl) : feedUrl);
			if ( !qs.checkNull( o.text ) ) d[o.text] = feedText;
			if ( !qs.checkNull( o.img ) ) d[o.img] = feedImg;
			
			s = qs.setParam( d, arr[0] );

			window.open( s, '_blank' );
		}
	}
	
	function style( playerName, styleCode, useDefault )
	{
		playerStyle['_' + playerName] = styleCode;
		if ( useDefault ) defaultStyle = playerName;
		return playerName;
	}

	function styleData( player )
	{
		var arr = styleCode( player ).split( '|' );
		arr[0] = parseInt( arr[0] );
		arr[1] = parseInt( arr[1] );
		return arr;
	}

	function styleCode( player )
	{
		if ( qs.checkNull( player ) ) player = playerStyle['_' + defaultStyle];
		else if ( player.indexOf( '|' ) == -1 ) player = playerStyle['_' + player];
		return player;
	}
}



/*
	Query String Utils
	@author Park U-yeong (ACG)
*/

function QueryStrUtils()
{
	// public function
	this.getParam = getParam;
	this.setParam = setParam;
	this.strToObj = strToObj;
	this.objToStr = objToStr;
	this.urlData = urlData;
	this.checkNull = checkNull;

	// private function
	function getParam( s )
	{
		return strToObj( urlData( s )[1] );
	}

	function setParam( o, u )
	{
		var arr = urlData( u );
		var param = strToObj( arr[1] );

		if ( typeof( o ) == 'string' ) o = strToObj( o );

		for ( var s in o ) param[s] = o[s];

		var str = objToStr( param );
		if ( str != '' ) str = '?' + str;

		return arr[0] + str;
	}

	function strToObj( s )
	{
		var o = new Object();

		if ( !checkNull( s ) )
		{
			var param = s.split( '&' );
			var len = param.length;
			var val;
			
			for ( var i = 0; i < len; i++ ) 
			{
				val = param[i].split( '=' );
				if ( val.length > 1 ) o[ val.shift() ] = decodeURIComponent( val.join( '=' ) );
			}
		}

		return o;
	}

	function objToStr( o )
	{
		var str = '';
		var p = '';

		for ( var s in o ) 
		{
			str += p + s + '=' + encodeURIComponent( o[s] );
			if ( p == '' ) p = '&';
		}		

		return str;
	}

	function urlData( u )
	{
		if ( checkNull( u ) ) u = location.href;
		var arr = u.split( '?' );
		return [ arr.shift(), arr.join( '?' ) ];
	}

	function checkNull( str )
	{
		return ( str == null || str == '' );
	}
}

function getFacebookURL(str) {
	if(str) {
		var arr = str.split('/');

		if(arr.length > 4) {
			arr[2] = 'fb.' + arr[3] + '.samsung.com' + (arr[2].split(':').length == 2 ? ':' + arr[2].split(':')[1] : '');
			arr.splice(3, 1);

			return arr.join('/');
		}
		else {
			return str;
		}
	}
	else {
		return '';
	}
}
