var jqueryply;
var player;
var playlist = null;
var file = null;
var viewCount = 0;
var position = 0;
var duration = 0;
var state = "notset";

function playerReady(obj) {
	player = document.getElementById(obj['id']);

	playlistInit();
	setTimeout(function(){checkPlaylistLoaded(obj)}, 10);

	player.addControllerListener('ITEM', 'itemTracker');
	player.addModelListener("STATE","stateTracker");
	player.addModelListener("TIME","timeTracker");
	player.addControllerListener("MUTE","muteTracker");
	player.addControllerListener("VOLUME","volumeTracker");
	$("#"+obj['id']).addControlbar();
};

jQuery.fn.addControlbar = function (options){
	var settings = jQuery.extend({'prefix': 'jw_controlbar'}, options);
	var player = this[0];
	jqueryply = this[0];
	var play = $("."+settings.prefix+".play");
	var pause = $("."+settings.prefix+".pause");
	var stop = $("."+settings.prefix+".stop");
	var scrubber = $("."+settings.prefix+".scrubber");
	var currenttime = $("."+settings.prefix+".currenttime");
	var totaltime = $("."+settings.prefix+".totaltime");
	var fullscreen = $("."+settings.prefix+".fullscreen");
	var mute = $("."+settings.prefix+".mute");
	var unmute = $("."+settings.prefix+".unmute");
	var volume = $("."+settings.prefix+".volume");

	play.click(function() {
		player.sendEvent("PLAY", true);
	});


	pause.click(function() {
		player.sendEvent("PLAY", false);
	});

	stop.click(function() {
		hide_controlbar();
		setPosition();
		$('#ply2').fadeOut(2000);
		player.sendEvent("STOP");
	});

	currenttime.html("00:00");

	scrubber.slider({
			range: "min",
			min: 0,
			max: 100000,
			slide: function(event, ui) {
				var duration = player.getPlaylist()[player.getConfig()['item']].duration;
				var seekTime = Math.round(duration * ui.value / 100000);
				player.sendEvent("SEEK", seekTime);
			}
	});

	totaltime.html("00:00");

	fullscreen.click(function() {
		player.sendEvent("FULLSCREEN", true);
	});

	mute.click(function() {
		player.sendEvent("MUTE", true);
	});

	unmute.click(function() {
		player.sendEvent("MUTE", false);
	});

	volume.slider({
			range: "min",
			min: 0,
			max: 100,
			value: player.getConfig()['volume'],
			slide: function(event, ui) {
				player.sendEvent("VOLUME", ui.value);
			}
		});
}

function buildControlbar(settings){
	var result = "";
	result += "<div class='"+settings.prefix+"' style='width:"+settings.width+"px'>";
	for (element in settings.elements){
		var style = "";
		for (styleElement in settings.elements[element]){
			style += styleElement+":"+settings.elements[element][styleElement]+";";
		}
		result += "<div class='"+settings.prefix+" "+element+"' style='"+style+"'>&nbsp;</div>";
	}
	result += "</div>";
	return result;
}

function pad(s,l) {
	return( l.substr(0, (l.length-s.length) )+s );
}

function formatTime(seconds){
	var result = "";
	var remaining = Math.floor(seconds);
	
	if (seconds > 3600){
		result += pad((Math.floor(remaining/3600)).toString(),"00")+":";
		remaining = remaining % 3600;
	}
	
	result += pad((Math.floor(remaining/60)).toString(),"00")+":";
	remaining = remaining % 60;

	result += pad(remaining.toString(),"00")+"";
	
	return result;
}

function play(player){
	player.sendEvent("PLAY");
	return false;
}

function stop(player){
	player.sendEvent("STOP");
	return false;
}

function seek(player){
	player.sendEvent("STOP");
	return false;
}

function clickListener(obj) {
	var mousex = obj.mousex;
	var mousey = obj.mousey;
//	alert(mousex+", "+mousey);
	play(player);
}

function timeTracker(obj){
	position = obj.position;
	duration = obj.duration;

	var percentComplete = Math.round(100000 * position / duration);

	$(".jw_controlbar.scrubber").slider('option', 'value', percentComplete);
	$(".jw_controlbar.currenttime").html(formatTime(position));
	$(".jw_controlbar.totaltime").html(formatTime(duration));
//	document.getElementById('timecode').innerHTML = "Currently playing: " + position;


	//Counting system that will tell us how many times this was executed beyond
	//a specified time limit (in this case 25 seconds before duration).

	if(Math.round(position) == (Math.round(duration) - 25)) {
		viewCount++;
//		document.getElementById('alert').innerHTML = viewCount;
	}
	//This will ensure that this conditional is met only one time no matter how
	//many times the system calls this whole function.
	if(viewCount == 1){
		viewsCounter();
	}

}

function stateTracker(obj){
	var player = $("#"+obj['id']);
	if (obj.newstate == "PLAYING"){
		state = obj.newstate;
		setCookie('state', state, '', '', '', '/');
		$(".jw_controlbar.pause").css("display","block");
		$(".jw_controlbar.play").css("display","none");
		show_controlbar();
		//document.getElementById('cover').innerHTML = "Currently playing: " + file;

	} else if (obj.newstate == "PAUSED") {
		state = obj.newstate;
		setPosition();
		setCookie('state', state, '', '', '', '/');
		$(".jw_controlbar.pause").css("display","none");
		$(".jw_controlbar.play").css("display","block");
	} else if (obj.newstate == "BUFFERING") {
		state = obj.newstate;
		setCookie('state', state, '', '', '', '/');
	}
}

function muteTracker(obj){
	var player = $("#"+obj['id']);
	if (!obj.state){
		$(".jw_controlbar.mute").css("display","block");
		$(".jw_controlbar.unmute").css("display","none");
		setVolume($(".jw_controlbar.volume"), player[0].getConfig()['volume']);
	} else {
		$(".jw_controlbar.mute").css("display","none");
		$(".jw_controlbar.unmute").css("display","block");
		setVolume($(".jw_controlbar.volume"), 0);
	}
}

function volumeTracker(obj){
	var player = $("#"+obj['id']);
	setVolume($(".jw_controlbar.volume"),obj.percentage);
}

function setVolume(slider, value){
	slider.slider('option', 'value', value);
}


/*************************************************************/
/*****************  Playlist Functions  **********************/
/*************************************************************/

function itemHandler(obj) {
	var item = obj['index'];
//	var playlist = $("#"+obj['id']).next();
	var playlist = $(".image-list").next();
	var currentItem = 0;
	playlist.children().each(function(){
		if (currentItem == item) {
			$(this).addClass("playing");
		} else {
			$(this).removeClass("playing");
		}
		currentItem++;
	});
}


function checkPlaylistLoaded(obj) {
	var player = document.getElementById(obj['id']);
	var jsPlaylist = player.getPlaylist();

	if (jsPlaylist.length > 0) {
		var playlist = createPlaylist(obj);
		populatePlaylist(player, jsPlaylist, playlist);
		player.addControllerListener("PLAYLIST","playlistHandler");
		player.addControllerListener("ITEM","itemHandler");
	} else {
		setTimeout(function(){checkPlaylistLoaded(obj)}, 150);
	}
}

function createPlaylist(obj){
//	var playerDiv = $("#"+obj['id']);
	var playerDiv = $(".image-list");
//	playerDiv.after("<div class='jw_playlist_playlist'></div>");
$('.image-list').append("<div class='jw_playlist_playlist'></div>");
	return playerDiv.find('div.jw_playlist_playlist');
}

function playlistHandler(obj){
	var player = document.getElementById(obj['id']);
	var jsPlaylist = player.getPlaylist();
	var playerDiv = $("#"+obj['id']);
	var playlist = playerDiv.next();
	populatePlaylist(player, jsPlaylist, playlist);
}

function populatePlaylist(player, jsPlaylist, playlist){
	playlist.empty();
	for (var i=0;i<jsPlaylist.length;i++) {
		var jsItem = jsPlaylist[i];
		var alternate = "even";
		if (i % 2) {
			alternate = "odd";
		}
		playlist.append("<div class='jw_playlist_item "+alternate+"'>"+dump(jsItem)+"</div>");
	}

	var playlistItem = 0;
	playlist.children().each(function(){
		var currentItem = playlistItem;
		$(this).click(function () {
			player.sendEvent("ITEM", currentItem);
		});
		playlistItem++;
	});
}

function dump(arr) {
	var output = "<div class='jw_playlist_image_div'><img src='${image}' class='jw_playlist_image' alt='' /></div><div class='jw_playlist_title'>${title}</div><div class='jw_playlist_description'>${description}</div><div class='clear'></div>";
	var output = "<div class='jw_playlist_image_div'><a href='javascript:void(0)'><img src='${image}' class='jw_playlist_image' alt='' /></a></div><div class='clear'></div>";
	var variables = getVars(output);
	for (var j=0; j<variables.length; j++) {
		var variable = variables[j];
		var varName = variable.replace('${','').replace('}','');
		var value = arr[varName];
		if (!value) {
			value = '';
		}
		output = output.replace(variable, value);
	}
	output = output.replace("<div class='jw_playlist_image_div'><img src='' class='jw_playlist_image' /></div>","");
	return output;
}

function dumpText(arr) {
	var dumped_text = "";
	if(typeof(arr) == 'object') {
		for(var item in arr) {
			var value = arr[item];		
			if(typeof(value) == 'object') {
				dumped_text += "<div class='"+item+"'>";
				dumped_text += dump(value);
				dumped_text += "</div>";
			} else {
				dumped_text += "<div class='"+item+"'>"+ value + "</div>";
			}
		}
	} else {
		dumped_text += arr+" ("+typeof(arr)+")";
	}
	return dumped_text;
}

function getVars(str){
	return str.match(/\$\{(.*?)\}/g);
}

/*************************************************************/
/*****************  Functions I Created  *********************/
/*************************************************************/

function playlistInit(){
	try {
		playlist = player.getPlaylist();
	}
	catch(e) {
		setTimeout("playlistInit()", 100);
	}
};

function itemTracker(obj) {
//	document.getElementById('cover').innerHTML = "Current video: "+player.getPlaylist()[obj.index].title;
	file = playlist[obj.index].file;
};

function viewsCounter(){
	var ajaxRequest;  // The variable that makes Ajax possible!
	try{
		// Opera 8.0+, Firefox, Safari
		ajaxRequest = new XMLHttpRequest();
	} catch (e){
		// Internet Explorer Browsers
		try{
			ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try{
				ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e){
				// Something went wrong
				alert("Your browser broke!");
				return false;
			}
		}
	}
	var queryString = "?file=" + file;

	ajaxRequest.open("GET", "/themes/site_themes/jnet/php/mysql_insert.php" + queryString, true);
	ajaxRequest.send(null);
};

function setPosition() {
	if(file!=null && position!=0 && duration!=0){
		if(position >= (duration - 25)){
			setCookie(file, '0', '', '', '', '/');
			setCookie('file', file, '', '', '', '/');
		}else {
			setCookie(file, position, '', '', '', '/');
			setCookie('file', file, '', '', '', '/');
		}
	}
};

function resize(){
	var browserWindowSize = getBrowserWindowSize();
	$(".scrubber").css("width", (browserWindowSize.width-260)+"px");
};
function show_controlbar(){
	setCookie('controlbar', 'visible', '', '', '', '/');
	$(".controlbar").animate({ 
		bottom: "25px"
	}, 1000 );
	jqueryply.sendEvent("PLAY", true);
};
function hide_controlbar(){
	setCookie('controlbar', 'hidden', '', '', '', '/');
	$(".controlbar").animate({ 
		bottom: "0px"
	}, 1000 );
	if(jqueryply != null) {
		try{
			jqueryply.sendEvent("PLAY", false);
		}
		catch(err){
			hide_controlbar();
		}
	}
};
function init(){
	// resize scrubber
	var browserWindowSize = getBrowserWindowSize();
	$(".scrubber").css("width", (browserWindowSize.width-250)+"px");
	// hide player
	$("#ply2").hide();
	// hide controlbar
	hide_controlbar();
};

function jump_video(timecode){
	jqueryply.sendEvent("SEEK", timecode);
};

/*************************************************************/
/*****************  Useful Functions  ************************/
/*************************************************************/

function setCookie ( name, value, exp_y, exp_m, exp_d, path, domain, secure ){
	var cookie_string = name + "=" + escape ( value );

	if ( exp_y ) {
		var expires = new Date ( exp_y, exp_m, exp_d );
		cookie_string += "; expires=" + expires.toGMTString();
	}
	if ( path )
		cookie_string += "; path=" + escape ( path );
	if ( domain )
		cookie_string += "; domain=" + escape ( domain );
	if ( secure )
		cookie_string += "; secure";
	document.cookie = cookie_string;
}
function getCookie(c_name) {
	if (document.cookie.length>0){
		c_start=document.cookie.indexOf(c_name + "=");
		if (c_start!=-1){
			c_start=c_start + c_name.length+1;
			c_end=document.cookie.indexOf(";",c_start);
			if (c_end==-1) c_end=document.cookie.length;
			return unescape(document.cookie.substring(c_start,c_end));
		}
	}
	return "";
}
function getBrowserWindowSize() {
	var myWidth = 0, myHeight = 0;
	if( typeof( window.innerWidth ) == 'number' ) {
		//Non-IE
		myWidth = window.innerWidth;
		myHeight = window.innerHeight;
	}
	else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
		//IE 6+ in 'standards compliant mode'
		myWidth = document.documentElement.clientWidth;
		myHeight = document.documentElement.clientHeight;
	}
	else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
		//IE 4 compatible
		myWidth = document.body.clientWidth;
		myHeight = document.body.clientHeight;
	}
	
	return {width:myWidth, height:myHeight};
//example
//var browserWindowSize = getBrowserWindowSize();
//alert(browserWindowSize.width);
}