/**
 * Codestars Image related functionality
 * @author Floris Weijenburg (http://www.florisweijenburg.nl)
 * @copyright (c) 2008 Floris Weijenburg
 * All programming rights reserved.
*/  

CS.DOM.images = function() 
{
	this.sLoc = config.rootFolder + 'ajax/ajaxDataHandler.php';
}

CS.DOM.images.prototype.SetImageData = function(type, albumId)
{
	this.linkImageType = type;
	this.albumId = albumId;
}	
 
CS.DOM.images.prototype.ShowFullImage = function(image) 
{
	var imageHolder = document.createElement('div');
	var newImage = new Image();
	
	imageHolder.id = 'fullImage';
	imageHolder.style.position = 'absolute';
	
	newImage.src = (image.src).replace("tn_","");
	newImage.style.border = 'solid 1px #CCC';
	
	imageHolder.style.top = (this.FindPosY(image)-(newImage.height-image.height)/2)+'px';
	imageHolder.style.left = (this.FindPosX(image)-(newImage.width-image.width)/2)+'px';
	
 	imageHolder.onmouseout = this.removeFullImage;
 	imageHolder.appendChild(newImage);  
 		
	image.parentNode.appendChild(imageHolder); 
}

CS.DOM.images.prototype.removeFullImage = function() 
{
	var oldFullImage = document.getElementById('fullImage');
	if(oldFullImage != null) { (oldFullImage.parentNode).removeChild(oldFullImage); }
}
 
CS.DOM.images.prototype.FindPosY = function(obj)
{
	var curtop = 0;
	if(obj.offsetParent)
	    while(1)
	    {
	      curtop += obj.offsetTop;
	      if(!obj.offsetParent)
	        break;
	      obj = obj.offsetParent;
	    }
	else if(obj.y)
	    curtop += obj.y;
	return curtop;
}

CS.DOM.images.prototype.FindPosX = function(obj)
{
	var curleft = 0;
	if(obj.offsetParent)
	    while(1) 
	    {
	      curleft += obj.offsetLeft;
	      if(!obj.offsetParent)
	        break;
	      obj = obj.offsetParent;
	    }
	else if(obj.x)
	    curleft += obj.x;
	return curleft;
}

/*
CS.DOM.images.prototype.ResizeImages = function(container) 
{	
	var maxWidth = 300;
	var container = document.getElementById(container);
	var myImages = new Array(); 
	myImages = (container != null ? container.getElementsByTagName('img') : null);
 
	if(container!=null) 
	{
		if(myImages != null) {
			for (var i=0; i <= myImages.length-1; i++) {
				if (myImages[i].width > maxWidth) {
					// Create full version pop-up
					myImages[i].onmouseover = function() {
						CS.DOM.images.prototype.ShowFullImage(this);
					}
					
					// Size and style modification
					myImages[i].width = maxWidth;
					myImages[i].style.border = '1px dashed #CCC';
					myImages[i].style.cursor = 'pointer';
				}
			}
		}
	}
}
*/

CS.DOM.images.prototype.AddImages = function(itemId, type)
{
	// First we use the php viewImages command 
	// So we can fetch the images HTML content
	new Ajax.Request(
	this.sLoc,
    {
        method:'get',
		parameters: 
	  	{
		  	cmd: 'ViewImages', 
		  	value: config.userSessId 
		},
        onSuccess: function(transport)
        {
			CS.DOM.tools.ShowDialog
			( "Afbeeldingen toevoegen", transport.responseText,  "html" );
			
			// Add event to the link button
			
			var btn = $('submitImages');
			
			if (this.linkImageType == 'albumPhoto') 
			{
				YAHOO.util.Event.addListener(btn, "click", this.AddImagesToAlbum, this, true);
			}
			else 
			{
				YAHOO.util.Event.addListener(btn, "click", this.LinkImages, this, true);
			}
			
			if(itemId && type)
			{
				// If the itemId parameter is set, we would like to auto-save the images
				// Assemble the data to be saved
				var updateData = new Object();
				
				updateData.itemId = itemId;
				updateData.userSessId = config.userSessId;
				updateData.type = type;
				
				this.updateData = updateData;
				return true;
			}
        }.bind(this)
    });
}

CS.DOM.images.prototype.CallCommand = function(command, dataObject)
{
	new Ajax.Request( 
	this.sLoc, 
	{
	  	method: 'get',
	  	parameters: 
	  	{
			cmd: command, 
		  	value: Object.toJSON(dataObject)
		},
        onSuccess: function(transport)
        { }
        .bind(command, dataObject)
	});
}

CS.DOM.images.prototype.AddImagesToAlbum = function(e, obj)
{
	var form = $('dialogImageContainer').getElementsByTagName('form')[0];
	var submitSuccessNode = document.createTextNode('De afbeeldingen worden toegevoegd...');
	var checkboxes = form.getElementsByTagName('input');
	var imagesArray = new Array();

	// Collect the selected items
	if (checkboxes.length > 0) 
	{
		for (var i = 0; i < checkboxes.length; i++) 
		{
			if (checkboxes[i].checked == true) 
			{ imagesArray.push(checkboxes[i].name); }
		}
		
		form.innerHTML = '';
		form.appendChild(submitSuccessNode);	
		
		var result = new Object();
		result.albumId = this.albumId;
		result.images = imagesArray;
		
		// Run the server command
		new Ajax.Request(
		this.sLoc,
	    {
	        method:'get',
			parameters: 
		  	{
			  	cmd: 'AddImagesToAlbum', 
			  	value: Object.toJSON(result)

			},
	        onSuccess: function(transport)
	        {
				var pauze = new CS.DOM.tools.Pause(1.5,5);
				YAHOO.stocklist.container.wait.hide();
				
				if(obj.updateData)
				// The updateData object has been set
				// So we want to save it right away
				{
					// The photo's as been added to an album!
					obj.updateData = null;
				}
				
	        }.bind(obj)
	    });
	}
}

CS.DOM.images.prototype.LinkImages = function(e, obj)
{
	var form = $('dialogImageContainer').getElementsByTagName('form')[0];
	var submitSuccessNode = document.createTextNode('De afbeeldingen worden toegevoegd...');
	var checkboxes = form.getElementsByTagName('input');
	var imagesArray = new Array();

	// Collect the selected items
	if (checkboxes.length > 0) 
	{
		for (var i = 0; i < checkboxes.length; i++) 
		{
			if (checkboxes[i].checked == true) 
			{ imagesArray.push(checkboxes[i].name); }
		}
		
		form.innerHTML = '';
		form.appendChild(submitSuccessNode);
				 
		// Run the server command
		new Ajax.Request(
		this.sLoc,
	    {
	        method:'get',
			parameters: 
		  	{
			  	cmd: 'LinkImages', 
			  	value: imagesArray.toJSON()

			},
	        onSuccess: function(transport)
	        {
				var pauze = new CS.DOM.tools.Pause(1.5,5);
				YAHOO.stocklist.container.wait.hide();
				
				if(obj.updateData)
				// The updateData object has been set
				// So we want to save it right away
				{
					obj.CallCommand('ApplyImageLink', obj.updateData);
					obj.updateData = null;
				}
				
	        }.bind(obj)
	    });
	}
}

/**
 * Codestars Default functionality to manipulate the DOM
 * @author Floris Weijenburg (http://www.florisweijenburg.nl)
 * @copyright (c) 2008 Floris Weijenburg
 * All programming rights reserved.
*/  

CS.DOM.utils = function() { }

CS.DOM.utils.prototype.RemoveElement = function(element) 
{
	var container = document.getElementById(element).parentNode;
	container.removeChild(container.lastChild);
}

CS.DOM.utils.prototype.LockInputsInContainer = function(containerElement) 
{	
	var cEl = document.getElementById(containerElement);
	var inputs = cEl.getElementsByTagName('input');
	
	for(var i=0; i<2; i++) {
		inputs[i].disabled = true;	
	}
}

CS.DOM.utils.prototype.AddEvent = function(obj, evType, fn)
{ 
	if (obj.addEventListener){ 
		obj.addEventListener(evType, fn, false); 
		return true; 
	} else if (obj.attachEvent){ 
		var r = obj.attachEvent("on"+evType, fn); 
		return r; 
	} else { 
		return false; 
	} 
}

CS.DOM.utils.prototype.DisplayMessage = function(element, text, sec) 
{
	var header = document.createElement('h3');
	var okImg =  document.createElement('img');
	
	sec = sec * 1000;
	okImg.src = config.rootFolder+'images/application/icon-ok.png';
	okImg.alt = '';
	
	header.id = 'displayMessage';
	header.appendChild(okImg);
	header.appendChild(document.createTextNode(' '+text));
	
	element.parentNode.appendChild(header);		
	setTimeout('CS.DOM.utils.prototype.RemoveElement("displayMessage")', sec);
}