//
// JVideo! AJAX
//
function XmlHttpCreate()
{
	var xmlhttp = null;
	
	if (window.ActiveXObject)
	{
		try
		{
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch (e)
			{
				alert("You need to enable active scripting and activeX controls.");
			}
		}
	}
	else if (window.XMLHttpRequest)
	{
		try
		{
			xmlhttp = new XMLHttpRequest();
		}
		catch (e)
		{
			alert("Error creating XMLHttpRequest object.");
		}
	}
	else
	{
		alert("XMLHttp is not supported on this browser.");
	}

	return xmlhttp;
}

function XmlHttpGET(xmlhttp, url)
{
	xmlhttp.open("GET",url,true);
	xmlhttp.send(null);
}

function XmlHttpPOST(xmlhttp, url, data)
{
	xmlhttp.open("POST",url,true);
	xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	xmlhttp.setRequestHeader('Content-Length', data.length);
	xmlhttp.send(data);
}


/**
 * Utility class to facilitate encoding of post data
 */
function XmlHttpPostDataEncoder()
{
	this.data = new Array();
}

XmlHttpPostDataEncoder.prototype.addData = function(key, value)
{
	this.data[key] = value;
};

XmlHttpPostDataEncoder.prototype.encodeData = function()
{
	var encData = '';
	
	for (var i in this.data)
	{
		if (encData.length > 0) encData += '&';
		encData += encodeURIComponent(i) + '=' + encodeURIComponent(this.data[i]);
	}
	return encData;
};


function JVideoAJAX()
{

}

JVideoAJAX.prototype.init = function ()
{
	
}

JVideoAJAX.prototype.normalSync = function()
{	
	var thisRef = this;
	var xmlHttp = XmlHttpCreate();
	
	xmlHttp.onreadystatechange = function()
		{
			if (xmlHttp.readyState == 4)
			{
				if (xmlHttp.status == 200)
				{
					try
					{
						if (xmlHttp.responseText == "true")
						{
							//alert('Sync complete');
						}
						else
						{
							//alert('Sync failed: ' + xmlHttp.responseText);
						}
					}
					catch (e) {
						//alert('AJAX Error:\n\n' + e);
					}
				}
				else
				{
					//alert('AJAX Error:\n\n' + xmlHttp.responseText.substr(200));
				}
			}
		};
		
	var dataEncoder = new XmlHttpPostDataEncoder();
	dataEncoder.addData('option', 'com_jvideo');
	dataEncoder.addData('task', 'normalSync');
	dataEncoder.addData('format', 'raw');
	
	XmlHttpPOST(xmlHttp, 'index.php', dataEncoder.encodeData());
}

JVideoAJAX.prototype.dashboardSync = function()
{	
	var thisRef = this;
	var xmlHttp = XmlHttpCreate();
	
	xmlHttp.onreadystatechange = function()
		{
			if (xmlHttp.readyState == 4)
			{
				if (xmlHttp.status == 200)
				{
					try
					{
						if (xmlHttp.responseText == "true")
						{
							//alert('Sync complete');
						}
						else
						{
							//alert('Sync failed: ' + xmlHttp.responseText);
						}
					}
					catch (e) {
						//alert('AJAX Error:\n\n' + e);
					}
				}
				else
				{
					//alert('AJAX Error:\n\n' + xmlHttp.responseText.substr(200));
				}
			}
		};
		
	var dataEncoder = new XmlHttpPostDataEncoder();
	dataEncoder.addData('option', 'com_jvideo');
	dataEncoder.addData('task', 'dashboardSync');
	dataEncoder.addData('format', 'raw');
	
	XmlHttpPOST(xmlHttp, 'index.php', dataEncoder.encodeData());
}


JVideoAJAX.prototype.rateVideo = function(videoID, userID, rating)
{	
	var thisRef = this;
	var xmlHttp = XmlHttpCreate();
	
	xmlHttp.onreadystatechange = function()
		{
			if (xmlHttp.readyState == 4)
			{
				if (xmlHttp.status == 200)
				{
					try
					{
						document.getElementById('ajaxRating').innerHTML = xmlHttp.responseText;
					}
					catch (e) {
						//alert('AJAX Error:\n\n' + e);
					}
				}
				else
				{
					//alert('AJAX Error:\n\n' + xmlHttp.responseText.substr(200));
				}
			}
		};
		
	var dataEncoder = new XmlHttpPostDataEncoder();
	dataEncoder.addData('option', 'com_jvideo');
	dataEncoder.addData('task', 'rate_video');
	dataEncoder.addData('format', 'raw');
	dataEncoder.addData('id', videoID);
	dataEncoder.addData('user_id', userID);
	dataEncoder.addData('rating', rating);
	
	XmlHttpPOST(xmlHttp, 'index.php', dataEncoder.encodeData());
}

JVideoAJAX.prototype.approveVideo = function(videoID)
{	
	var xmlHttp = XmlHttpCreate();

	xmlHttp.onreadystatechange = function()
		{
			if (xmlHttp.readyState == 4)
			{
				if (xmlHttp.status == 200)
				{
					return true;
				}
			}
		};
		
	
	var dataEncoder = new XmlHttpPostDataEncoder();
	dataEncoder.addData('option', 'com_jvideo');
	dataEncoder.addData('task', 'approve');
	dataEncoder.addData('format', 'raw');
	dataEncoder.addData('id', videoID);
	
	XmlHttpPOST(xmlHttp, 'index.php', dataEncoder.encodeData());
}

JVideoAJAX.prototype.deleteVideo = function(videoID, resultPlaceholder)
{
	var xmlHttp = XmlHttpCreate();

	xmlHttp.onreadystatechange = function()
		{
			if (xmlHttp.readyState == 4)
			{
				if (xmlHttp.status == 200)
				{
					location.reload();
				}
			}
		};
		

	var dataEncoder = new XmlHttpPostDataEncoder();
	dataEncoder.addData('option', 'com_jvideo');
	dataEncoder.addData('task', 'delete_video');
	dataEncoder.addData('format', 'raw');
	dataEncoder.addData('id', videoID);

	XmlHttpPOST(xmlHttp, 'index.php', dataEncoder.encodeData());
}


JVideoAJAX.prototype.featureVideo = function(videoID, addFeatured)
{	
	var thisRef = this;
	var xmlHttp = XmlHttpCreate();

	xmlHttp.onreadystatechange = function()
		{
			if (xmlHttp.readyState == 4)
			{
				if (xmlHttp.status == 200)
				{
					try
					{
						document.getElementById('markFeatured').innerHTML = xmlHttp.responseText;
					}
					catch (e) {
						//alert('AJAX Error!');
					}
				}
				else
				{
					//alert('AJAX Error:\n\n' + xmlHttp.responseText.substr(200));
				}
			}
		};
		
	
	var dataEncoder = new XmlHttpPostDataEncoder();
	dataEncoder.addData('option', 'com_jvideo');
	if (addFeatured == "true") {
		dataEncoder.addData('task', 'add_featured');
	} else {
		dataEncoder.addData('task', 'remove_featured');
	}
	dataEncoder.addData('format', 'raw');
	dataEncoder.addData('id', videoID);
	
	XmlHttpPOST(xmlHttp, 'index.php', dataEncoder.encodeData());
}

JVideoAJAX.prototype.publishVideo = function(videoID, publishVideo)
{	
	var thisRef = this;
	var xmlHttp = XmlHttpCreate();

	xmlHttp.onreadystatechange = function()
		{
			if (xmlHttp.readyState == 4)
			{
				if (xmlHttp.status == 200)
				{
					try
					{
						document.getElementById('publishVideo').innerHTML = xmlHttp.responseText;
					}
					catch (e) {
						//alert('AJAX Error!');
					}
				}
				else
				{
					//alert('AJAX Error:\n\n' + xmlHttp.responseText.substr(200));
				}
			}
		};
		
	
	var dataEncoder = new XmlHttpPostDataEncoder();
	dataEncoder.addData('option', 'com_jvideo');
	if (publishVideo == "true") {
		dataEncoder.addData('task', 'publishVideo');
	} else {
		dataEncoder.addData('task', 'unpublishVideo');
	}
	dataEncoder.addData('format', 'raw');
	dataEncoder.addData('id', videoID);
	
	XmlHttpPOST(xmlHttp, 'index.php', dataEncoder.encodeData());
}

JVideoAJAX.prototype.updateVideoCategories = function(videoID, categoryID, isAdding)
{
	var thisRef = this;
	var xmlHttp = XmlHttpCreate();

	xmlHttp.onreadystatechange = function()
		{
			if (xmlHttp.readyState == 4)
			{
				if (xmlHttp.status == 200)
				{
					try
					{
						document.getElementById('categoryList').innerHTML = xmlHttp.responseText;
					}
					catch (e) {
						//alert('AJAX Error!');
					}
				}
				else
				{
					//alert('AJAX Error:\n\n' + xmlHttp.responseText.substr(200));
				}
			}
		};
		
	
	var dataEncoder = new XmlHttpPostDataEncoder();
	dataEncoder.addData('option', 'com_jvideo');
	if (isAdding == "true") {
		dataEncoder.addData('task', 'addVideoToCategory');
	} else {
		dataEncoder.addData('task', 'removeVideoFromCategory');
	}
	dataEncoder.addData('format', 'raw');
	dataEncoder.addData('videoID', parseInt(videoID));
	dataEncoder.addData('categoryID', parseInt(categoryID));
	
	XmlHttpPOST(xmlHttp, 'index.php', dataEncoder.encodeData());
}


JVideoAJAX.prototype.getVideosByParams = function(params, placeholderId)
{	
	displayLoadingImage(placeholderId);
	
	var thisRef = this;
	var xmlHttp = XmlHttpCreate();
	
	xmlHttp.onreadystatechange = function()
		{
			if (xmlHttp.readyState == 4)
			{
				if (xmlHttp.status == 200)
				{
					try
					{
						document.getElementById(placeholderId).innerHTML = xmlHttp.responseText;
					}
					catch (e) { }	
				}
			}
		};
	
	
		
	var dataEncoder = new XmlHttpPostDataEncoder();
	dataEncoder.addData('option', 'com_jvideo');
	dataEncoder.addData('view', 'videos');
	dataEncoder.addData('format', 'ajax');
	for (var key in params) {
		dataEncoder.addData(key, params[key]);
	}
	
	XmlHttpPOST(xmlHttp, 'index.php', dataEncoder.encodeData());
}

JVideoAJAX.prototype.getVideoPlayer = function(id, playerHeight, playerWidth, placeholderId)
{	
	displayLoadingImage(placeholderId);
	
	var thisRef = this;
	var xmlHttp = XmlHttpCreate();
	
	xmlHttp.onreadystatechange = function()
		{
			if (xmlHttp.readyState == 4)
			{
				if (xmlHttp.status == 200)
				{
					try
					{
						document.getElementById(placeholderId).innerHTML = xmlHttp.responseText;
					}
					catch (e) {}
				}
			}
		};
		
	var dataEncoder = new XmlHttpPostDataEncoder();
	dataEncoder.addData('option', 'com_jvideo');
	dataEncoder.addData('view', 'watch');
	dataEncoder.addData('format', 'ajax');
	dataEncoder.addData('id', id);
	dataEncoder.addData('playerHeight', playerHeight);
	dataEncoder.addData('playerWidth', playerWidth);
	XmlHttpPOST(xmlHttp, 'index.php', dataEncoder.encodeData());
}

function highlightStars(starMap, fullStar, halfStar, emptyStar) {
	var star1 = document.getElementById('videoStar1');
	var star2 = document.getElementById('videoStar2');
	var star3 = document.getElementById('videoStar3');
	var star4 = document.getElementById('videoStar4');
	var star5 = document.getElementById('videoStar5');

	// starmap: 0 = empty, 1 = half, 2 = full
	star1.className = starMap.charAt(0) == "2" ? fullStar : starMap.charAt(0) == "1" ? halfStar : emptyStar;
	star2.className = starMap.charAt(1) == "2" ? fullStar : starMap.charAt(1) == "1" ? halfStar : emptyStar;
	star3.className = starMap.charAt(2) == "2" ? fullStar : starMap.charAt(2) == "1" ? halfStar : emptyStar;
	star4.className = starMap.charAt(3) == "2" ? fullStar : starMap.charAt(3) == "1" ? halfStar : emptyStar;
	star5.className = starMap.charAt(4) == "2" ? fullStar : starMap.charAt(4) == "1" ? halfStar : emptyStar;
	
}

function displayLoadingImage(placeholderId)
{
	var contents = "";
	var contentHeight = document.getElementById(placeholderId).clientHeight;
	
	if (contentHeight < 16) {
		contentHeight = 16;
	}
	
	contents += '<div style="width: 100%; height: '+contentHeight+'px; vertical-align: middle; text-align: center; position: relative;">';
	contents += '	<img src="' + jsBaseUrl + '/components/com_jvideo/assets/images/wait.gif" border="0" height="11" width="43" alt="Loading..." style="position: absolute; top: '+(contentHeight / 2)+'px;" />';
	contents += '</div>';
	
	document.getElementById(placeholderId).innerHTML = contents; 
}


