var undefined;
var __selectedId = 0;
var __activateItemTimeout;
var __buttons = Array();

var __confirmDelete = 'Are you sure you want to delete this item?';

var arrFormRequired = Array();
var arrUnique = Array();

var __formErrorTitle = 'Er zijn fouten gemaakt in het formulier:\n\n';
var __formError = '#NAME# is verplicht.';


/**** PROTOTYPES ****/
Array.prototype.has = function(value)
{
  for (var i in this)
  {
    if (this[i] === value) return i;
  }

  return -1;
}

Array.prototype.remove = function(value)
{
  for (var i = 0; i < this.length; i++)
  {
    if(this[i] == value)
    {
      this.splice(i, 1);
      return true;
    }
  }
  
  return false;
}

/* ----- */

function trim(value) {
	return value;
	
  value = trimLeft(value); // trim left
  value = trimRight(value); // trim right
  return value;
}

function trimLeft(value) {
	if(value == '' || value == undefined) return value;
	value = value.replace(/^s/,''); // trim left
	return value;
}

function trimRight(value) {
	if(value == '' || value == undefined) return value;
	value = value.replace(/s$/,''); // trim right
	return value;
}

function replaceAll(haystack, needle) {
  haystack.replace(eval('/needle/g'), needle);
}

/****[ OVERVIEW FUNCTIONS ]****/
function gotoOverview() {
	// regexp test?
  href = location.href.split('?');
  href = href[1];
  
  if(href.indexOf('&') > -1) {
    href = href.split('&');
    href = href[0];
  }
  
	if(href) location.href = '?'+href;
}


function action(action) {
  if(action == 'add' || __selectedId != 0) {
    if(action != 'delete' || (window.confirm(__confirmDelete))) {
			if(action == 'add')
			{
				__selectedId = 0;
			}
      location.href += '&action='+action+'&id='+__selectedId;
    }
  }
}

function changeOrder(target) {
  if(__selectedId != 0) {
    location.href += '&action=modify&do=order&id='+__selectedId+'&target='+target;
  }
}

/*** OVERVIEW BUTTONS ***/
function initialize(func) {
  listOverviewButtons();
	window.addEvent('scroll', rePositionStatus);
	
	if(func != undefined)
	{
		func();
	}
}

function listOverviewButtons() {
	if(document.all)
	{
		for(i=0; i<document.all.length; i++) {
			if(document.all[i].tagName == 'TD') {
				if(document.all[i].className.indexOf('button') > -1 && document.all[i].id != '__overview_button_add') {
					__buttons.push(document.all[i]);
				}
			}
		}
	}
	else
	{
		var tdList = document.getElementsByTagName('td')
		for (var i=0; i<tdList.length; i++)
		{
			td = tdList[i];
			if(td.className.indexOf('button') > -1 && td.id != '__overview_button_add')
			{
				__buttons.push(td);
			}
		}
	}
}

function handleOverviewButton(enabled) {
  for(i=0; i<__buttons.length; i++) {
    if(enabled) {
      __buttons[i].className = __buttons[i].className.replace('Disabled', '');
    } else {
      __buttons[i].className += 'Disabled';
    }
  }
}

function activateItem(prev_id) {
  // deactivate previous
  if(prev_id != 0) {
    tr = $$(prev_id);
    tr.backgroundColor = '';
    tr.color = '';
  }

  // dont reactivate if previous is the same as current clicked
  if(__selectedId == prev_id) {
    __selectedId = 0;
    handleOverviewButton(false);
    return;
  }
  
  tr = $$(__selectedId);
  tr.backgroundColor = '#abd505';
  tr.color = '#ffffff';
}

function selectItem(tr) {
  setTimeout('activateItem(\''+__selectedId+'\');', __activateItemTimeout);
  __selectedId = tr.id;
  
  handleOverviewButton(true);
  
  tr = $$(__selectedId);
//  tr.backgroundColor = '#abd505';
  tr.color = '#ffffff';
}
/******************************/


/****[ FORM     FUNCTIONS ]****/
function checkForm(item) {
  err = '';
  
  for(var x=0;x<arrFormRequired.length;x++) {
    if(arrFormRequired[x][0] == item.name) {
      if(item.value == '') {
        err += __formError.replace('#NAME#', item.name) + '\n';
      }
    }
  }
  
  return err;
}

function checkUnique(item) {
  err = '';
  
  for(var x=0; x<arrUnique.length;x++) {
    if(arrUnique[x][0] == item.name) {
      for(var y=0; y<arrUnique[x][1].length;y++) {
        if(item.value.toLowerCase() == arrUnique[x][1][y].toLowerCase()) {
          err += __formNotUnique.replace('#NAME#', item.name) + '\n';
        }
      }
    }
  }
  
  return err;
}

function submitForm(frm) {
  err = '';
  
  frm = $(frm);
  
  for(i=0; i<frm.length;i++) {
    err += checkForm(frm[i]);
    err += checkUnique(frm[i]);
  }
  
  if(err != '') {
    err = __formErrorTitle + err;
    alert(err);
    return false;
  }
  
  for(i=0; i<frm.length;i++) {
    if(frm[i].type=='password' && trim(frm[i].value) != '') {
      frm[i].value = hex_md5(frm[i].value);
    }
    
    if(frm[i].name.indexOf('link__') > -1) {
      for(x=0;x<frm[i].options.length;x++) {
        frm[i].options[x].selected = true;
      }
    }
  }
	
//  disableForm();
	
	return true;
}

function toggleDeleteFile(field) {
  obj = $(field);
  
  objHidden = $(field+'__delete');
  objHidden.value = (objHidden.value == 0)?1:0;
  
  alert((objHidden.value)?'set for deletion':'unset for deletion');
}

function linkMove(frm, id, target, all) {
  objDisabled = frm.elements['dummy__'+id+'[]'];
  objEnabled  = frm.elements['link__'+id+'[]'];
  
  if(target) { // true = disabled -> enabled
    for(d=0;d<objDisabled.options.length;d++) {
      if(objDisabled.options[d].selected || all) {
        objEnabled.options[objEnabled.options.length] = new Option(objDisabled.options[d].text, objDisabled.options[d].value);
        objDisabled.options[d] = null;
        d--;
      }
    }
  } else {
    for(i=0;i<objEnabled.options.length;i++) {
      if(objEnabled.options[i].selected || all) {
        objDisabled.options[objDisabled.options.length] = new Option(objEnabled.options[i].text, objEnabled.options[i].value);
        objEnabled.options[i] = null;
        i--;
      }
    }
  }
}

function disableForm() {
	if(document.getElementsByTagName)
	{
		var formFields = getElementsByTagNames('textarea,select,input');
		for(var i=0; i<formFields.length; i++)
		{
			var field = formFields[i];
			
			if(field.type == 'button' || field.type == 'submit')
			{
				field.blur();
			}
			field.disabled = true;
		}
	}
	else	if(document.all)
	{
		for(i=0; i<document.all.length; i++) {
			switch(document.all[i].tagName) {
				case "TEXTAREA":
				case "SELECT":
				case "INPUT":
					if(document.all[i].type == 'button' || document.all[i].type == 'submit') {
						document.all[i].disabled = true;
						document.all[i].blur();
					}
					document.all[i].readonly = true;
					break;
				default:
					break;
			}
		}
	}
}

function enableForm() {
	if(document.getElementsByTagName)
	{
		var formFields = getElementsByTagNames('textarea,select,input');
		for(var i=0; i<formFields.length; i++)
		{
			formFields[i].disabled = false;
		}
	} else if(document.all)
	{
		for(i = 0; i<document.all.length; i++) {
			switch(document.all[i].tagName) {
				case "INPUT":
				case "SELECT":
				case "TEXTAREA":
					if(document.all[i].type == 'button' || document.all[i].type == 'submit') {
						document.all[i].disabled = false;
					}
					document.all[i].readonly = false;
					break;
				default:
					break;
			}
		}
	}
}

function getElementsByTagNames(elements)
{
	var tagNames = (isArray(elements))?elements:elements.split(',');
	var results = Array();
	
	for(var i=0; i<tagNames.length; i++)
	{
		tag = tagNames[i];
		
		var objects = document.getElementsByTagName(tag);
		for(var i=0; i< objects.length; i++)
		{
			results.push(objects[i]);
		}
	}
	
	return results;
}

/******************************/

/****[ OBJECT   FUNCTIONS ]****/

function changeClassName(object, sNewClass) {
	object = $(object);
	object.className = sNewClass;
}

function toggleClass(object) {
  object = $(object);
  
  if(object.className.indexOf('Toggle') > -1) {
    object.className = object.className.replace('Toggle', '');
  } else {
    object.className = object.className + 'Toggle';
  }
}

function addToObject(obj, html, before) {
	before = (before);
  obj = $(obj);
  
  if(before) {
    obj.innerHTML = html + obj.innerHTML;
  } else {
    obj.innerHTML += html;
  }
}

function isArray() {
	if (typeof arguments[0] == 'object') {
		var criterion = arguments[0].constructor.toString().match( /array/i );
		return ( criterion != null );
	}
	return false;
}

function toggle(id) {
  objStyle = $$(id);
  objStyle.display = (objStyle.display != 'none')?'block':'none';
}


var statusTimer;
	
function showStatus(text, timer)
{
	$('status').innerHTML = text;
	$$('status').display = 'block';
	statusTimer = setTimeout(hideStatus, timer);
	
	statusFX = new Fx.Tween($('status'), {property: "top", duration: 250});
	statusFX.start(getScrollTop());
}

function hideStatus()
{
	clearTimeout(statusTimer);
	
	statusFX = new Fx.Tween($('status'), {property: "top", duration: 250, onComplete:clearStatus});
	statusFX.start(getScrollTop()-30);
}

function clearStatus()
{
	$('status').innerHTML = '';
	$$('status').display = 'none';
}

function rePositionStatus()
{
	posX = ($$('status').display == 'block')?0:30;
	$('status').setStyle('top', (getScrollTop()-posX)+'px');
}

function getScrollTop()
{
	return this.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
}