/**
 * - onload function loader
 * - clear input elements and save default value
 */

Event.observe(window, 'load', doOnload);
var aOnloadFunctions = new Array();

/**
 * Onload function Load all functions stored in onloadFunctions
 * 
 * @return void
 */
function doOnload()
{
	for(var iIndex = 0; iIndex < aOnloadFunctions.length; iIndex++ )
	{
		if(aOnloadFunctions[iIndex])
		{
			aOnloadFunctions[iIndex]();
		}
	}
}

/**
 * Store a function to run in window.Onload
 * 
 * @param string sName
 * @return void
 */
function addOnloadFunction(sName)
{
	iIndex = aOnloadFunctions.length + 1;

	aOnloadFunctions[iIndex] = sName;
}


/**
 * Clear default texts
 * 
 * @author Bhe
 * @version 0.1
 * @copyright Copyright (c) 2009, Zig Websoftware
 * @buildOn Prototype
 */
function initClearElementDefaults() 
{
    var aFormInputs = $$('input');
    var iInputFields = aFormInputs.length;
    
    for (var iCounter = 0; iCounter < iInputFields; iCounter++) 
    {
        var oElement = aFormInputs[iCounter];

        if ((oElement.type == 'text' || oElement.type == 'password') && oElement.className.match(/\bcleardefault\b/)) 
        {       
            oElement.observe('focus', clearDefaultText);
            oElement.observe('blur', replaceDefaultText);
            
            if (oElement.value != '') 
            {
            	oElement.defaultText = oElement.value;
            }
        }
    }
}

function clearDefaultText(e) 
{
    var oTarget = window.event ? window.event.srcElement : e ? e.target : null;
    
    if (!oTarget)
    {
    	return;
    }
    
    if (oTarget.value == oTarget.defaultText) 
    {
    	oTarget.value = '';
    }
}

function replaceDefaultText(e) 
{
    var oTarget = window.event ? window.event.srcElement : e ? e.target : null;
    
    if (!oTarget)
    {
    	return;
    }
    
    if (oTarget.value == '' && oTarget.defaultText) 
    {
    	oTarget.value = oTarget.defaultText;
    }
}

addOnloadFunction(initClearElementDefaults);


/**
 * Make dButton fully clickable and hoverable for IE
 * by adding event to parent span
 * 
 * @author Sro
 * @version 0.2
 * @copyright Copyright (c) 2010, Zig Websoftware
 * @buildOn Prototype
 * @addon Dynamic Button CSS
 * 
 * Only works for IE sinds FF works with CSS
 */
function initDynamicButton() 
{
    var aButtons = $$('span.dButton');
    aButtons.each(function(oButton, iKey)
    {
    	oButton.observe('click', dButtonSimulateClick);
    	oButton.observe('mouseover', dButtonDoMouseOver);
    	oButton.observe('mouseout', dButtonDoMouseOut);
    });
}

addOnloadFunction(initDynamicButton);

function dButtonSimulateClick(oEvent)
{
	var oEl = oEvent.element();
	var oElement = oEl.down();
	if(typeof(oElement) == 'object' && oElement != null)
	{
		if(oElement.tagName != "INPUT" && oElement.tagName != "A" )
		{
			oElement = oEl.down(1);
		}
		if(oElement.tagName == "INPUT" || oElement.tagName == "A")
		{
			if(oElement.click)
			{
				oElement.click();
			}
			else if(document.createEvent)
			{
				if(oElement.tagName == 'A' && oEvent.target !== oElement)
				{
					//execute the link (FF only executes the onclick)
					var oEvt = document.createEvent("MouseEvents");
					oEvt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
					var bAllowDefault = oElement.dispatchEvent(oEvt);
					// you can check allowDefault for false to see if
					// any handler called evt.preventDefault().
				}
			}
		}
	}
}

function dButtonDoMouseOver(oEvent)
{
	var oElement = oEvent.element();//get the span element
	if(oElement.tagName == "SPAN" && oElement.hasClassName('dButton'))
	{
		oElement.addClassName('hover');
	}
	else if(oElement.tagName == "INPUT")
	{
		oElement.up('span', 1).addClassName('hover');
	}
	else if(oElement.tagName == "SPAN" && !oElement.hasClassName('dButton'))
	{
		oElement.up(0).addClassName('hover');
	}
}

function dButtonDoMouseOut(oEvent)
{
	var oElement = oEvent.element();//get the span element
	if(oElement.tagName == "SPAN" && oElement.hasClassName('dButton'))
	{
		oElement.removeClassName('hover');
	}
	else if(oElement.tagName == "INPUT")
	{
		oElement.up('span', 1).removeClassName('hover');
	}
	else if(oElement.tagName == "SPAN" && !oElement.hasClassName('dButton'))
	{
		oElement.up(0).removeClassName('hover');
	}
}


/**
 * Zig-Popup
 * 
 * @author Bhe
 * @version 0.1
 * @customVersion 0.1.4
 * @copyright Copyright (c) 2009, Zig Websoftware
 * @buildOn Scriptaculous, Prototype
 */
var PopupOpen = false;
var Popup = 
{	
	/**
	 * Config Options
	 * 
	 * @param array aOptions
	 * 
	 */
	setOptions: function(aOptions)
	{
		this.aOptions = {

			//Popup options
	    	id					: 'popup',	// id of popup
			popupShowDuration	: 0.6,		// Window fade in/out duration
			popupHideDuration	: 0.6,		// Window fade in/out duration
			
	    	//Overlay options
	    	overlayId			: 'overlay',	// id of overlay element
	    	showOverlay			: true,			// show overlay
			overlayShowDuration	: 0.3,			// Overlay fade in/out duration
			overlayHideDuration	: 0.3,			// Overlay fade in/out duration
			overlayFadeFrom		: 0.0,			// From where must the fade-in start? 0.0 = transparent
			overlayFadeTo		: 0.6,			// From where must the fade-in end? 1.0 = solid
			
			//Content options
			url					: '',			// url to load content with
			urlSuccess			: null,			// callback function onSuccess
			Image				: '',			// url to show single image
	    	title				: '',			// title of content
	    	content				: '',			// content in popup
	    	showClose			: true,			// show close button
	    	showConfirmSuccess	: false, 		// show OK button
	    	showConfirmCancel	: false, 		// show cancel button
	    	textConfirmSucces	: 'OK',			// text OK button
	    	textConfirmCancel	: 'Annuleer', 	// text Cancel button
	      	onConfirmSuccess	: null,			// callback function onConfirmSuccess
	      	onConfirmCancel		: null			// callback function onConfirmCancel
		}

	    Object.extend(this.aOptions, aOptions || {});
		
		$(this.aOptions.id).removeClassName('popupAlbum');
		
	    //empty content
		$(this.aOptions.id+'Content').innerHTML = '';

		//add ajax content
		if(this.aOptions.url)
		{
			new Ajax.Request(	this.aOptions.url, 
								{
									method:'get',
									onSuccess: function(oTransport){
				
										if(this.aOptions.urlSuccess)
										{
											this.aOptions.urlSuccess(oTransport);
										}
										else
										{
											$(this.aOptions.id+'Content').innerHTML = oTransport.responseText;
											initAjaxPopupForm();
										}
									}.bind(this)
								}
			);
		}

		//add image
		if(this.aOptions.image)
		{
			$(this.aOptions.id+'Content').innerHTML  = '<img id="'+ this.aOptions.id +'_image" src="'+this.aOptions.image+'" alt="Vergroting van afbeelding" />';
		}

		//add image
		if(this.aOptions.album)
		{
			$(this.aOptions.id).addClassName('popupAlbum');
			
			var oNavigation = document.createElement('ul');			
				oNavigation.className = 'albumNavigation';
						
			var oMarkedNavigation = document.createElement('ul');			

			var iCounter = 0;	
			var sActiveImage = this.aOptions.image;
				
			var aLinks = $$('a[rel='+this.aOptions.album+']');		

			var iAmountOfLinks = aLinks.size();

			var sAlbum = this.aOptions.album;
			
			var oPrevImage = document.createElement('a');
			var oNextImage = document.createElement('a');
			var oFirstLi;
			var oLastLi;
			
			var oTempPrevImage;
			var iGetNext = 0;
			var sImageSuffix = 'Active';
			var isFirst = false;
			var isLast = false;
			
			aLinks.each(function(oEl)
			{	
				iCounter++;
				
				var oLi = document.createElement('LI');
				
				var oElement = oEl.cloneNode(true);

				oElement.innerHTML = iCounter;
				
				
				if(iGetNext == 1)
				{
					oNextImage = oEl.cloneNode(true);
					iNextImage = new Image();
					iNextImage.src = oNextImage;
					iGetNext = 0;
				}
				
				if(oElement.href.match(sActiveImage))
				{
					if(iCounter > 1)
					{
						oPrevImage = oTempPrevImage;
						iPrevImage = new Image();
						iPrevImage.src = oPrevImage;
					}
					oElement.className = 'active';
					
					iGetNext = 1;
					if(iCounter == 1)
						isFirst = true;
					if(iCounter == iAmountOfLinks)
						isLast = true;
					
				}
				oNavigation.appendChild(oLi);
				
				oTempPrevImage = oEl.cloneNode(true);
				
				
				oLi.appendChild(oElement);
				
				if(iCounter == 1)
				{
					var oFirstElement = oElement.cloneNode(true);
					
					if(oElement.href.match(sActiveImage))
						oFirstElement.innerHTML = '<img src="/images/pageSelectFirst.png" alt="&lt;&lt;" />';
					else
						oFirstElement.innerHTML = '<img src="/images/pageSelectFirst'+sImageSuffix+'.png" alt="&lt;&lt;" />';
						oFirstElement.setAttribute('id','first'+sAlbum);
					
						oFirstLi = document.createElement('LI');			
						oFirstLi.appendChild(oFirstElement);
						
					}
				
				if(iCounter == iAmountOfLinks)
				{			
					var oLastElement = oElement.cloneNode(true);
					
					if(oElement.href.match(sActiveImage))
						oLastElement.innerHTML = '<img src="/images/pageSelectLast.png" alt="&gt;&gt;" />';
					else
						oLastElement.innerHTML = '<img src="/images/pageSelectLast'+sImageSuffix+'.png" alt="&gt;&gt;" />';
						oLastElement.setAttribute('id', 'last'+sAlbum);
						
						oLastLi = document.createElement('LI');			
						oLastLi.appendChild(oLastElement);
				}	

			});
			
			
			// Create first two icons and insert them on top
			if(isFirst)
				oPrevImage.innerHTML = '<img src="/images/pageSelectPrev.png" alt="&lt;" />';
			else
				oPrevImage.innerHTML = '<img src="/images/pageSelectPrev'+sImageSuffix+'.png" alt="&lt;" />';
			oPILi = document.createElement('li');			
			oPILi.appendChild(oPrevImage);
			
			oNavigation.insertBefore(oPILi, oNavigation.firstChild);
			oNavigation.insertBefore(oFirstLi, oNavigation.firstChild);
			
			// Create last two icons
			if(isLast)
				oNextImage.innerHTML = '<img src="/images/pageSelectNext.png" alt="&gt;" />';
			else
				oNextImage.innerHTML = '<img src="/images/pageSelectNext'+sImageSuffix+'.png" alt="&gt;" />';
			oNILi = document.createElement('li');			
			oNILi.appendChild(oNextImage);
			
			oNavigation.appendChild(oNILi);
			oNavigation.appendChild(oLastLi);
			
			$(this.aOptions.id+'Content').appendChild(oNavigation);		
		}



		//add title
		if(this.aOptions.title)
		{
			$(this.aOptions.id+'Title').innerHTML  += this.aOptions.title;
		}

		//add content
		$(this.aOptions.id+'Content').insert(this.aOptions.content);

		//show confirm
		if(this.aOptions.showConfirmSuccess || this.aOptions.showConfirmCancel)
		{
			$(this.aOptions.id+'Confirm').style.display = 'block';
			$(this.aOptions.id+'ConfirmSuccess').innerHTML = this.aOptions.textConfirmSucces;
			$(this.aOptions.id+'ConfirmCancel').innerHTML = this.aOptions.textConfirmCancel;

			if(this.aOptions.showConfirmSuccess)
			{
				$(this.aOptions.id+'ConfirmSuccessButton').style.display = 'inline';
			}
			else
			{
				$(this.aOptions.id+'ConfirmSuccessButton').style.display = 'none';				
			}
			
			if(this.aOptions.showConfirmCancel)
			{
				$(this.aOptions.id+'ConfirmCancelButton').style.display = 'inline';
			}
			else
			{
				$(this.aOptions.id+'ConfirmCancelButton').style.display = 'none';				
			}
			
			if(this.aOptions.onConfirmSuccess)
			{
				var sOnConfirmSuccess = this.aOptions.onConfirmSuccess;
				$(this.aOptions.id+'ConfirmSuccessButton').onclick = sOnConfirmSuccess;
			}
			else
			{
				$(this.aOptions.id+'ConfirmSuccessButton').onclick = function(){ Popup.close();return false; }
			}
			
			if(this.aOptions.onConfirmCancel)
			{
				var sOnConfirmCancel = this.aOptions.onConfirmCancel;
				$(this.aOptions.overlayId).onclick = sOnConfirmCancel;
				$(this.aOptions.id+'ConfirmCancelButton').onclick = sOnConfirmCancel;
			}
			else
			{
				$(this.aOptions.overlayId).onclick = function(){ Popup.close();return false;  }
				$(this.aOptions.id+'ConfirmCancelButton').onclick = function(){ Popup.close();return false;  }
			}
		}
		else
		{
			$(this.aOptions.id+'Confirm').style.display = 'none';
		}
		
		if(this.aOptions.showClose)
		{
			$(this.aOptions.overlayId).onclick = function(){ Popup.close();return false;  }
			$(this.aOptions.id+'Close').style.display = 'block';
		}
		else
		{
			$(this.aOptions.id+'Close').style.display = 'none';
		}
	},

	/**
	 * Open popup
	 */
	open: function(aOptions)
	{	
		if(PopupOpen == false)
		{
			this.setOptions(aOptions);
			this.PopupOpen = true;
			this.showOverlay();

			setTimeout("Effect.Appear('"+this.aOptions.id+"')", this.aOptions.popupShowDuration);
			setTimeout(function() { this.adjustSize(); }.bind(this), 100);
		}
		this.adjustSize();
		this.adjustPosition();
	},

	/**
	 * Close popup
	 */
	close: function(aOptions)
	{
		oPopup = this;
		
		new Effect.Fade(this.aOptions.id, {	
											duration: this.aOptions.popupHideDuration, 
											afterFinish: function(){oPopup.setOptions(aOptions);}
											}
						);
		
		this.hideOverlay();
		PopupOpen = false;
	},

	/**
	 * Show overlay
	 */
	showOverlay: function()
	{
		if(this.aOptions.overlayId && $(this.aOptions.overlayId) && this.aOptions.showOverlay)
		{
			var aPageSize = this.getPageSize();
			$(this.aOptions.overlayId).style.height = aPageSize[1]+'px';

			if($(this.aOptions.overlayId).style.display == 'none')
			{
				new Effect.Appear(this.aOptions.overlayId, {duration: this.aOptions.overlayShowDuration, from: this.aOptions.overlayFadeFrom, to: this.aOptions.overlayFadeTo});
			}
		}
	},

	/**
	 * Hide overlay
	 */
	hideOverlay: function()
	{
		if(this.aOptions.overlayId && $(this.aOptions.overlayId))
		{
			document.getElementsByTagName("body")[0].style.overflow = "auto"; 
			new Effect.Fade(this.aOptions.overlayId, {duration: this.aOptions.overlayHideDuration});
		}
	},

	/**
	 * adjust popup size
	 * adjust position
	 */
	adjustSize: function()
	{
		var aPage 			= this.getPageSize();			
		var iPopupHeight 	= $(this.aOptions.id).getHeight();	
		var iWindowHeight	= aPage[3];
		var iExtraSpace 	= 0;

		if(iPopupHeight < iWindowHeight)
		{		
			var iExtraSpace = parseInt((iWindowHeight - iPopupHeight) / 2);
		}
		
		var iHeight = parseInt((aPage[1] - aPage[3]) + iExtraSpace);

		$(this.aOptions.id).style.top = iHeight + 'px';
	},

	/**
	 * adjust popup window to show him correct vertically
	 * 
	 * - fix to do this in asjustSizem sow we now size of new popup
	 */
	adjustPosition: function()
	{


	},

	/**
	 * get scroll size
	 * @return array
	 */
	getScrollSize: function () 
	{
		
		  var iScrollX = 0, iScrollY = 0;
		  if( typeof( window.pageYOffset ) == 'number' ) 
		  {
			  iScrollY = window.pageYOffset;
			  iScrollX = window.pageXOffset;
		  } 
		  else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) 
		  {
			  iScrollY = document.body.scrollTop;
			  iScrollX = document.body.scrollLeft;
		  } 
		  else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) 
		  {
			  iScrollY = document.documentElement.scrollTop;
			  iScrollX = document.documentElement.scrollLeft;
		  }
		  
		  return [ iScrollX, iScrollY ];
	},
	/**
	 * get page size
	 * @return array
	 */
	getPageSize: function()
	{
		var aScrollSize = this.getScrollSize();
		
		var xScroll = aScrollSize[0];
		var yScroll = aScrollSize[1];
		
		var windowWidth, windowHeight;
		if (self.innerHeight) {	// all except Explorer
			windowWidth = self.innerWidth;
			windowHeight = self.innerHeight;
		} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
			windowWidth = document.documentElement.clientWidth;
			windowHeight = document.documentElement.clientHeight;
		} else if (document.body) { // other Explorers
			windowWidth = document.body.clientWidth;
			windowHeight = document.body.clientHeight;
		}	
		
		var pageHeight = yScroll + windowHeight;
		var pageWidth = xScroll + windowWidth;


		aArrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
		return aArrayPageSize;
	}

}
