/*
 * Project: Capriolus (general javascript)
 * Author: Victor Zuydweg
 * Date: april 2008
 */

// dynamic content
var contentFile = "/js/src/content.inc";

// class for input(type='text') which can only have numeric input
var numericClass = 'numeric';

var id_imagelist = 'imageList';
var id_imagebox = 'imageBox';

/*
   Initial loading calls
*/

function init()
{
	loadFile(contentFile, afterContentLoad);
	selectButtonIsGone();
	inputImages();
	deleteLinks();
	setFilter();
}

function deleteLinks()
{
	var links = document.getElementsByTagName('a');
	
	for(var i = 0; i < links.length; i++)
	{
		if(links[i].className.indexOf('delete') > -1)
		{
			links[i].confirmLink = links[i].href;
			links[i].href = '#';
			links[i].onclick = function()
			{
				if(confirm('Are you sure you want to delete this item?'))
				{
					document.location = this.confirmLink;
				}
			};
		}
	}
}

function afterContentLoad()
{
	catchButtonActions();
	setInputActions();
}

if(window.addEventListener)
	window.addEventListener("load", init, false);
else if (window.attachEvent)
	window.attachEvent("onload", init);
else
	window.onload=init;

/*
	Load language files
	Languagefile url is hardcoded at line nr. 10
*/

function loadFile(url, doneFunction)
{ 
	var xmlRequest = null;
	
	if(window.XMLHttpRequest)
		xmlRequest = new XMLHttpRequest(); 
	else if (window.ActiveXObject)  
		xmlRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
	
	xmlRequest.onreadystatechange = function()
	{
		if(xmlRequest.readyState == 4)
		{
			if(xmlRequest.status == 200)
			{
				eval(xmlRequest.responseText);
				
				if(doneFunction != null) doneFunction();
			}
		} 
	}
	xmlRequest.open("GET", url, true); 
	xmlRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xmlRequest.setRequestHeader("If-Modified-Since", "Sat, 1 Oct 2007 00:00:00 GMT");
	xmlRequest.send(null);
}

/*
	catchButtonActions()
*/

function catchButtonActions()
{
	var buttons = document.getElementsByTagName('button');
	for(i=0; i<buttons.length; i++)
	{
		if(buttons[i].type == 'submit')
		{
			buttons[i].onclick = function()
			{
				if(this.innerHTML == content.button) return false;
				this.innerHTML = content.button;
			}	
		}
	}
}

/*
	setInputActions()
*/

function setInputActions()
{
	var input = document.getElementsByTagName('input');
	for(i=0; i<input.length; i++)
	{
		if(input[i].type == 'text')
		{
			input[i].onfocus = function()
			{
				if(defaultValue(this, content.search)) this.search = true;
			}
			input[i].onblur = function()
			{
				if(this.search) resetDefaultValue(this, content.search);
			}
			
			if(input[i].className.search(numericClass) > -1)
			{
				input[i].onkeydown = function(e)
				{
					return isNumeric(e)
				}
			}
			
			function resetDefaultValue(obj, def_value)
			{
				if(obj.value == "") obj.value = def_value;
			}
			
			function defaultValue(obj, def_value)
			{
				if(obj.value == def_value)
				{
					obj.value = "";
					return true;
				}
			}
		}
	}
}

/*
	selectButtonIsGone
*/

function selectButtonIsGone()
{
	var form = document.getElementsByTagName('form');
	for(var i=0; i<form.length; i++)
	{
		for(var j=0; j<form[i].length; j++)
		{
			var select = form[i][j].getElementsByTagName('select');
			var input = form[i][j].getElementsByTagName('input');

			for(var k=0; k<input.length; k++)
			{
				if(input[k].type == "submit")
				{
					if(select.length > 0)
					{
						input[k].style.display = 'none';
						for(var s=0; s<select.length; s++)
						{
							select[s].i = i;
							select[s].onchange = function()
							{
								form[this.i].submit();
							}
						}
					}
				}
			}
		}
	}
}

// Common validation functions

var keynum;
var keychar;
var numcheck;

// Exceptions of keys (in keycode) which are allowed to work in strict inputfields (isNumeric, isTxt)
var exceptions = new Array();
exceptions[0] = 9;     // tab
exceptions[1] = 8;     // backspace
exceptions[2] = 17;    // ctrl
exceptions[3] = 18;    // alt
exceptions[4] = 33     // page up
exceptions[5] = 34     // page down
exceptions[6] = 35     // end
exceptions[7] = 36;    // home
exceptions[8] = 37;    // left
exceptions[9] = 38;    // up
exceptions[10] = 39;   // richt
exceptions[11] = 40;   // down
exceptions[12] = 46;   // del
exceptions[13] = 115;  // F5 (refresh)

function isException(obj)
{
    for(i=0; i<exceptions.length; i++)
    {
        if(exceptions[i]==obj) return true
    }
    return false;
}
    
function toUpperCase(obj)
{
    obj.value = obj.value.toUpperCase();
}
    
function isNumeric(e)
{
    if(window.event)
    {
        keynum = e.keyCode;
    }
    else if(e.which)
    {
        keynum = e.which;
    }
    if (isException(keynum) || (keynum>=96 && keynum<=105)) return true;
    keychar = String.fromCharCode(keynum);
    numcheck = /\d/;
    return numcheck.test(keychar);
}

function isTxt(e)
{
    if(window.event)
    {
        keynum = e.keyCode;
    }
    else if(e.which)
    {
        keynum = e.which;
    }
    if (isException(keynum)) return true;
    keychar = String.fromCharCode(keynum);
    numcheck = /\d/;
    return !numcheck.test(keychar);
}

function isEmail(obj)
{
    apos=obj.value.indexOf("@")
    dotpos=obj.value.lastIndexOf(".")
    if (apos<1||dotpos-apos<2)
	{
		setError(obj);
		return false;
	}
    else
	{
		resetError(obj);
		return true;
	}
}

/**
 * set prev/next buttons which swap values between inputs
 */
function inputImages()
{
	var imagelist = document.getElementById(id_imagelist);
	var fieldset = document.getElementById(id_imagebox);

	if(imagelist && fieldset)
	{
		var images = imagelist.getElementsByTagName('img');
		for(var i=0; i<images.length; i++)
		{
			images[i].onclick = copyImageToFieldset;
		}
	}
	
	function copyImageToFieldset()
	{
		if(fieldset)
		{
			// reference image
			this.className = "hover";
			
			// make clone
			var clone = this.cloneNode(true);
			fieldset.appendChild(makeInput(clone));
			fieldset.appendChild(clone);
			
			// set action to remove clone
			clone.onclick = function()
			{
				var id = this.id;
				
				// remove img
				fieldset.removeChild(this);
				
				// remove hidden input
				var hidden = document.getElementById(id.replace('id','img'));
				fieldset.removeChild(hidden);
				
				// reference image
				var img = document.getElementById(id);
				img.className = "";
			}
		}
	}
	
	// make hidden input for the backend functionality
	function makeInput(obj)
	{
		var input = document.createElement('input');
		input.type = "hidden";
		input.value = obj.id.replace('id_','');
		input.name = "id[]";
		input.id = 'img_' + input.value;
		return input;
	}
}

/**
 * set action for filter
 */

function setFilter()
{
	var filter = document.getElementById('filter');
	if(filter)
	{
		var imagelist = document.getElementById(id_imagelist);	
		var images = imagelist.getElementsByTagName('img');
		var imagenames = [];
		
		filter.onkeyup = function()
		{
			for(var i=0; i<images.length; i++)
			{
				images[i].parentNode.style.display = 'block';
				if(images[i].alt.toLowerCase().search(filter.value.toLowerCase()) == -1)
				{
					images[i].parentNode.style.display = 'none'
				}
			};
		}
	}
}
/**
 * Write Flash to screen
 * @param {Object} src
 */

function writeFlash(src, flashvars)
{
	var width = 425;
	var height = 715;

	// construct the player
	var result = '<object width="' + width + '" height="' + height + '">';
	result += '<param name="movie" value="' + src + '" />';
	result += '<param name="wmode" value="transparent" />';
	result += '<param name="FlashVars" value="' + flashvars + '" />';
	result += '<embed src="' + src + '" type="application/x-shockwave-flash" allowfullscreen="true" width="' + width + '" height="' + height + ' FlashVars="' + flashvars + '" wmode="transparent">';
	result += '</object>';
	document.write(result);
}