 var ajaxObj, page;
var query = new Object();
var ajaxLoader;
var personList = false;
var actorCount = 0;
var lastLoad;
// var login = false;
var todo = new Array();

function analyzeResponse(xmlDoc) {
   root = xmlDoc.getElementsByTagName('root')[0];
//   query = new Object();
   if (root) {
      var actionAttribute = root.getAttribute('action');
      if (actionAttribute == 'showEdit') {
	 if (loadImage) {
	    loadImage.src = '/m_images/edit.gif';
	    loadImage = false;
	 };
	 clearFormular();
	 document.getElementById('director').getElementsByTagName('option')[0].selected = true;
	 for (y = 0; y < root.childNodes.length; y++) {
	    tag = root.childNodes[y];
	    if (tag.nodeType == 1) {
	       switch (tag.tagName) {
		  case "id":
		  document.getElementById('editID').value = tag.getAttribute('value');
		  break;
		  
		  case "title":
		  document.getElementById('titel').value = tag.getAttribute('value');
		  break;
		  
		  case "image":
//		  document.getElementById('titel').value = tag.getAttribute('value');
		  break;
		  
		  case "imdb":
		  document.getElementById('imdb').value = tag.getAttribute('value');
		  break;
		  
		  case "year":
		  document.getElementById('year').value = tag.getAttribute('value');
		  break;
		  
		  case "orig":
		  document.getElementById('orig').value = tag.getAttribute('value');
		  break;
		  
		  case "genre":
		  for (j = 0; j < document.getElementsByName('genre').length; j++) {
		     document.getElementsByName('genre')[j].checked = false;
		  };
		  var genreList = tag.getAttribute('value').split(',');
		  for (i in genreList) {
		     genreID = genreList[i];
		     genreID = genreID.replace(/ö/g, "oe")
			.replace(/ä/g, "ae")
			.replace(/ü/g, "ue")
			.replace(/ß/g, "ss")
			.toLowerCase();
		     if (genreID == 'theater/literatur') {
			genreID = 'literatur';
		     } else if (genreID == 'science fiction') {
			genreID = 'scifi';
		     };
		     document.getElementById('genre_'+genreID).checked = true;
		  };
		  break;
		  
		  case "staff":
		  if (tag.getAttribute('type') == 'actors') {
		     object = document.getElementById('actor');
		     for (x = 0; x < tag.getElementsByTagName('person').length; x++) {
			newTag = tag.getElementsByTagName('person')[x];
/*
			if (newTag.nodeType == 1) {
			   switch (newTag.tagName) {
			      case 'person':
*/
			inputElem = document.createElement('input');
			inputElem.setAttribute('type','hidden');
			inputElem.setAttribute('name','actor'+x);
			inputElem.setAttribute('value',newTag.getAttribute('id'));
			pElem = document.createElement('p');
			pElem.style.marginTop = '0px';
			pElem.appendChild(document.createTextNode(newTag.getAttribute('name')));
			delElem = document.createElement('img');
			delElem.src = '/m_images/delete.gif';
			delElem.setAttribute('style','margin-left: 5px; cursor: pointer;');
			delElem.setAttribute('onClick','delActor(this,'+newTag.getAttribute('mha')+')');
			pElem.appendChild(delElem);
			object.parentNode.insertBefore(pElem,object);
			object.parentNode.insertBefore(inputElem,object);
			actorCount = x;
/*
			      break;
			   };
			};   
*/
		     };
		  } else if (tag.getAttribute('type') == 'directors') {
		     object = document.getElementById('director');
		     for (x = 0; x < tag.getElementsByTagName('person').length; x++) {
			newTag = tag.getElementsByTagName('person')[x];
			if (newTag.nodeType == 1) {
			   for (y = 0; y < document.getElementById('director').getElementsByTagName('option').length; y++) {
			      if (document.getElementById('director').getElementsByTagName('option')[y].value == newTag.getAttribute('id')) {
				 document.getElementById('director').getElementsByTagName('option')[y].selected = true;
				 break;
			      };
			   };
			};
			break;
		     };
		  };
		  break;
		  
		  // comment etc.
	       };
	    };
	 };
      } else {
	 if (actionAttribute == 'movies') {
	    document.getElementById('movies').innerText = '';
	    if (document.getElementById('movies').innerHTML) {
	       document.getElementById('movies').innerHTML = '';
	    };
	    document.getElementById('back').innerText = ' ';
	    document.getElementById('showEntries').disabled = false;
	 } else if (actionAttribute == 'movie') {
	    document.getElementById('movie').style.display = 'block';
	    document.getElementById('movieInfo').innerText = '';
	    if (document.getElementById('movieInfo').innerHTML) {
	       document.getElementById('movieInfo').innerHTML = '';
	    };
	 } else if (actionAttribute == 'delMovie') {
	    for (z = 0; z < root.childNodes.length; z++) {
	       var zElem = root.childNodes[z];
	       if (zElem.nodeType == 1) {
		  if (zElem.tagName == 'fail') {
		     window.alert('Movie cannot be deleted!');
		  } else if (zElem.tagName == 'okay') {
		     ajaxObj.sendRequest('action=movies'+addQuery());
		  };
	       };
	    };
	 } else if (actionAttribute == 'login') {
	    for (z = 0; z < root.childNodes.length; z++) {
	       var zElem = root.childNodes[z];
	       if (zElem.nodeType == 1) {
		  if (zElem.tagName == 'fail') {
		     window.alert('Wrong Password!');
		  } else if (zElem.tagName == 'okay') {
		     query['sid'] = zElem.getAttribute('sid');
		     document.getElementById('sid').value = zElem.getAttribute('sid');
		     document.getElementById('loginField').getElementsByTagName('input')[0].style.visibility = 'hidden';
		     loginImg = document.getElementById('loginField').parentNode.getElementsByTagName('img')[0];
		     loginImg.src = 'm_images/logout.gif';
		     loginImg.setAttribute('onClick','logoutDB()');
		     ajaxObj.sendRequest('action=movies'+addQuery());
		  };
	       };
	    };
	 } else if (actionAttribute == 'logout') {
	    for (z = 0; z < root.childNodes.length; z++) {
	       var zElem = root.childNodes[z];
	       if (zElem.nodeType == 1) {
		  if (zElem.tagName == 'fail') {
		     window.alert('Cannot log out!');
		  } else if (zElem.tagName == 'okay') {
		     delete query['sid'];
		     document.getElementById('sid').value = '';
		     loginImg = document.getElementById('loginField').parentNode.getElementsByTagName('img')[0];
		     loginImg.src = 'm_images/login.gif';
		     loginImg.setAttribute('onClick','typeIn(this)');
		     ajaxObj.sendRequest('action=movies'+addQuery());
		  };
	       };
	    };
	 };
	 
	 for (y = 0; y < root.childNodes.length; y++) {
	    tag = root.childNodes[y];
	    if (tag.nodeType == 1) {
	       switch (tag.tagName) {
		  case "movie":
		  tBody = document.getElementById('movies');
		  row = tBody.appendChild(document.createElement('tr'));
		  
		  cell = row.appendChild(document.createElement('td'));
		  anchor = document.createElement('a');
		  anchor.setAttribute('href','javascript:ajaxObj.sendRequest(\'action=movie' + addQuery() + '&id='+tag.getAttribute('id') + '\')');
		  anchor.appendChild(document.createTextNode(tag.getAttribute('title')));
		  cell.appendChild(anchor);
		  
		  yearCell = document.createElement('td');
		  yearCell.style.textAlign = 'center';
		  if (tag.getAttribute('year')) {
		     yearCell.appendChild(document.createTextNode(tag.getAttribute('year')));
		  };
		  row.appendChild(yearCell);
		  cell = row.appendChild(document.createElement('td'));
		  
		  textNode = '';
		  if (tag.getAttribute('actorN1')) {
		     textNode = 'Mit ';
		     for (i = 1; i < 3; i++) {
			if (tag.getAttribute('actorN'+i)) {
			   textNode += '<a href="javascript:changeActor(' + tag.getAttribute('actorID'+i) + ')">';
			   textNode += tag.getAttribute('actorN'+i);
			   textNode += '</a>'+', ';
			};
		     };
		     textNode = textNode.substring(0,textNode.length - 2);
//	    	  cell.appendChild(document.createTextNode(textNode));
		  };
		  if (query['sid']) {
		     cell.innerHTML = '<img src="/m_images/delete.gif" onClick="delImage = this; delMovie(\''+tag.getAttribute('id')+'\')" class="delImage" />';
		     cell.innerHTML += '<img src="/m_images/edit.gif" onClick="loadImage = this; editMovie(\''+tag.getAttribute('id')+'\')" class="editImage" />';
		  };
		  
		  cell.innerHTML += textNode;
		  
		  break;
		  
		  case 'page':
		  pageView = document.getElementById('page');
		  page = tag.getAttribute('act');
		  pageView.innerHTML = 
		     'Filme: '+ tag.getAttribute('movies');
		  if (query['sid']) {
		     pageView.innerHTML += '<img src="m_images/create2.gif" alt="Create" style="cursor: pointer; display: inline; padding-left: 5px;" onClick="createNew()"/>';
		  };
		  
		  pageView.innerHTML += '<br />'+
		     'Seite: ' + 
		  pagination(
			     tag.getAttribute('act'),
			     tag.getAttribute('count'),
			     'changePage(',
			     ')'
			     );
		  break;
		  
		  case 'query':
		  query[tag.getAttribute('statement')] = tag.getAttribute('value');
		  if (tag.getAttribute('statement') == 'actor' || tag.getAttribute('statement') == 'search' || tag.getAttribute('statement') == 'nomovies' || tag.getAttribute('statement') == 'genre') {
		     document.getElementById('back').innerHTML = '<a href="javascript:backToList()">Zurück zur kompletten Filmliste</a>';
		  };
		  break;
		  
		  
		  case 'title':
		  hTag = document.createElement('h3');
		  hTag.appendChild(document.createTextNode(tag.getAttribute('value')));
		  document.getElementById('movieInfo').appendChild(hTag);
		  break;
		  
		  case 'year':
		  document.getElementById('movieInfo').getElementsByTagName('h3')[0].appendChild(document.createTextNode(' ('+tag.getAttribute('value')+')'));
		  break;
		  
		  case 'orig':
		  pOrig = document.createElement('p');
		  pOrig.setAttribute('class','noFirst');
		  pOrig.appendChild(document.createTextNode(tag.getAttribute('value')));
		  document.getElementById('movieInfo').appendChild(pOrig);
		  break;
		  
		  case 'image':
		  imgTag = document.createElement('img');
		  imgTag.setAttribute('alt','');
		  imgTag.setAttribute('src','m_images/'+tag.getAttribute('value'));
		  document.getElementById('movieInfo').insertBefore(imgTag,document.getElementById('movieInfo').getElementsByTagName('h3')[0]);
		  break;
		  
		  case 'imdb':
		  aHref = document.createElement('a');
		  aHref.setAttribute('href','http://german.imdb.com/title/'+tag.getAttribute('value')+'/');
		  imgTag = document.createElement('img');
		  imgTag.setAttribute('alt','');
		  imgTag.setAttribute('class','imdb');
		  imgTag.setAttribute('src','imdb.gif');
		  aHref.appendChild(imgTag);
		  document.getElementById('movieInfo').insertBefore(aHref,document.getElementById('movieInfo').getElementsByTagName('h3')[0]);
		  break;
		  
		  case 'genre':
		  genre = document.createElement('p');
		  genre.setAttribute('class','noFirst');	       
		  genreList = tag.getAttribute('value').split(',');
		  textNode = '<strong>Genre:</strong> ';
		  for (i in genreList) {
		     textNode += '<a href="javascript:ajaxObj.sendRequest(\'action=movies'+ addQuery() +'&genre='+genreList[i] +'&search=&page=1\');">'+genreList[i]+'</a>, ';
		  };
		  textNode = textNode.substring(0,textNode.length - 2);
		  genre.innerHTML = textNode;
		  document.getElementById('movieInfo').appendChild(genre);
		  break;
		  
		  case 'staff':
		  mitTag = document.createElement('p');
		  var type, staffNode;
		  if (tag.getAttribute('type') == 'directors') {
		     type = 'von'
		     staffNode = '<strong>Von: </strong>';
		  } else if (tag.getAttribute('type') == 'actors') {
		     type = 'mit'
		     staffNode = '<strong>Mit: </strong>';
		  };
		  mitTag.setAttribute('id',type);
		  document.getElementById('movieInfo').appendChild(mitTag);
		  
		  for (x = 0; x < tag.childNodes.length; x++) {
		     newTag = tag.childNodes[x];
		     if (newTag.nodeType == 1) {
			switch (newTag.tagName) {
			   case 'person':
			   staffNode += '<a href="javascript:ajaxObj.'+
			      'sendRequest(\'action=movies' +
			   addQuery() +
			      '&actor=' +
			   newTag.getAttribute('id') + '&search=&page=1\')">' +
			   newTag.getAttribute('name') + '</a>, ';
			   break;
			};
		     };   
		  };
		  staffNode = staffNode.substring(0,staffNode.length - 2);
		  mitTag.innerHTML = staffNode;
		  break;
		  
		  case 'personList':
		  opt = document.createElement('option');
		  opt.setAttribute('value','');
		  opt.appendChild(document.createTextNode(''));
		  document.getElementById('director').appendChild(opt);
		  document.getElementById('actor').appendChild(opt.cloneNode(true));
		  for (x = 0; x < tag.childNodes.length; x++) {
		     newTag = tag.childNodes[x];
		     
		     if (newTag.nodeType == 1) {
			if (newTag.tagName == 'option') {
			   opt = document.createElement('option');
			   opt.setAttribute('value',newTag.getAttribute('value'));
			   opt.appendChild(document.createTextNode(newTag.getAttribute('name')));
			   document.getElementById('director').appendChild(opt);
			   document.getElementById('actor').appendChild(opt.cloneNode(true));
			};
		     };
		  };
		  break;
		  
		  case 'persons':
		  tBody = document.getElementById('movies');
		  row = tBody.appendChild(document.createElement('tr'));
		  cell = document.createElement('td')
		  cell.setAttribute('colspan','3');
		  row.appendChild(cell);
		  personNode = '';
		  for (x = 0; x < tag.childNodes.length; x++) {
		     person = tag.childNodes[x];
		     if (person.nodeType == 1 && person.tagName == 'person') {
			personNode += '<a href="javascript:ajaxObj.'+
			   'sendRequest(\'action=movies' +
			addQuery() +
			   '&actor=' +
			person.getAttribute('id') + '\')">' +
			person.getAttribute('name') + '</a>, ';
		     };
		  };
		  personNode = personNode.substring(0,personNode.length - 2);
		  pElem = document.createElement('p');
		  pElem.innerHTML = personNode;
		  cell.appendChild(pElem);
		  break;
	       };
	    };
	 };
      };
   };
};

function sort (object) {
   orderBy = object.getAttribute('title');
   orderDir = object.getAttribute('class');
   if (orderDir == 'sortUp') {
      query['orderdir'] = 'desc';
      object.setAttribute('class','sortDown');
   } else {
      query['orderdir'] = 'asc';
      object.setAttribute('class','sortUp');
   };
   top.query['orderby'] = orderBy;
   ajaxObj.sendRequest('action=movies'+addQuery()+'&page='+page);
};

function changeEntryCount () {
   var showEntryArray = document.getElementById('showEntries');
   showEntryArray.disabled = 'disabled';
   var showEntry = showEntryArray.options[showEntryArray.selectedIndex].value;
   query['showEntry'] = showEntry;
   ajaxObj.sendRequest('action=movies'+addQuery());
};

function addQuery () {
   var s = new String();
   for (qIterator in query) {
      s += '&' + qIterator + '=' + query[qIterator];
   };
   return s;
};

function createNew () {
	 clearFormular();
	 document.getElementById('director').getElementsByTagName('option')[0].selected = true;
	 document.getElementById('editForm').getElementsByTagName('legend')[0].innerHTML = 'Neuer Film';
   if (!personList) {
      ajaxObj.sendRequest('action=personlist');
      personList = true;
   };
   if (query['sid']) {
			document.getElementById('image').src = '/cgi-bin/movieimage.pl?sid='+query['sid'];
			document.getElementById('editForm').style.display = 'block';
			document.getElementById('editID').value = '-1';
	 };
};

function editMovie (movieID) {
   if (!personList) {
      ajaxObj.sendRequest('action=personlist');
      personList = true;
   };
   if (query['sid'])
      document.getElementById('image').src = '/cgi-bin/movieimage.pl?sid='+query['sid']+'&id='+movieID;
   document.getElementById('editForm').style.display = 'block';

   if (ajaxObj.loading) {
      todo.push('action=showEdit'+addQuery()+'&id='+movieID);
   } else {
      ajaxObj.sendRequest('action=showEdit'+addQuery()+'&id='+movieID);
   };
};

function delMovie (movieID) {
   if (confirm("Do you want to delete the movie '"+movieID+"'?")) {
      if (ajaxObj.loading) {
				 todo.push('action=delMovie'+addQuery()+'&id='+movieID);
      } else {
				 ajaxObj.sendRequest('action=delMovie'+addQuery()+'&id='+movieID);
      };
   };
};

function changePage (pageNr) {
   query['page'] = pageNr;
   ajaxObj.sendRequest('action=movies' + addQuery() + '&page=' + pageNr);
};

function changeActor (actorID) {
   query['actor'] = actorID;
   delete query['search'];
   ajaxObj.sendRequest('action=movies' + addQuery() + '&actor=' + actorID + '&search=&page=1');
};

function delActor (object,actorID) {
   query['actor'] = actorID;
   delete query['search'];
   ajaxObj.sendRequest('action=delActor' + addQuery() + '&actor=' + actorID);

      if(object.parentNode.nextSibling.tagName == 'INPUT') {
      object.parentNode.parentNode.removeChild(object.parentNode.nextSibling);
   };

   object.parentNode.parentNode.removeChild(object.parentNode);
   delete query['actor'];
};

function loadMovie (movieID) {
   if (!ajaxObj.loading) {
      ajaxObj.sendRequest('action=showEdit'+addQuery()+'&id='+movieID);
      window.clearTimeout(ajaxLoader);
   };
};

function backToList () {
   delete query['search'];
   delete query['actor'];
   delete query['genre'];
   document.getElementById('back').innerHTML = '&nbsp;';
   ajaxObj.sendRequest('action=movies'+ addQuery() + '&page=1');
};

function searchMovie () {
   query['page'] = 1;
   delete query['actor'];
   searchString = 'action=movies' + addQuery() + '&page=1&search=' + document.getElementById('search').value;
   if (ajaxObj.loading) {
      todo.push(searchString);
   } else {
      ajaxObj.sendRequest(searchString);
   };
};

/* Übergibt alle Informationen aus einem Formular an das Serverscript */
function sendForm(id) {
   var line = '';
   form = document.getElementById(id);
   for (i = 0; i < form.getElementsByTagName('input').length; i++) {
      inputField = form.getElementsByTagName('input')[i];
      if (inputField.type == 'checkbox') {
	 if (inputField.checked) {
	    line += form.getElementsByTagName('input')[i].name +
	       '=' +
	    form.getElementsByTagName('input')[i].value +
	       '&';
	 };
      } else if (inputField.type != 'button') {
	 line += form.getElementsByTagName('input')[i].name +
	    '=' +
	 form.getElementsByTagName('input')[i].value +
	    '&';
      };
   };
   for (i = 0; i < form.getElementsByTagName('select').length; i++) {
      selElem = form.getElementsByTagName('select')[i];
      line += selElem.name + '=';
      var selIndex = selElem.selectedIndex;
      if (selIndex >= 0) {
	 line += selElem.options[selIndex].value;
      };
      line += '&';
   };
   line = line.substr(0, line.length-1);
   ajaxObj.sendRequest(line);
};

function initialize () {
   page = 1;
   ajaxObj = new ajax('/cgi-bin/movies.pl');
   ajaxObj.sendRequest('action=movies&page=1');
};


function typeIn (object) {
   passwordField = object.parentNode.getElementsByTagName('input')[0];
   passwordField.style.visibility = "visible";
   object.setAttribute('onClick','loginDB(this)');
};

function loginDB (object) {
   password = object.parentNode.getElementsByTagName('input')[0].value;
   ajaxObj.sendRequest('action=login&password='+password);
};

function logoutDB () {
   ajaxObj.sendRequest('action=logout' + addQuery());
};

function uploadImage () {
   top.frames['image'].document.getElementById('movieUp').submit();
};

function clearFormular () {
	 document.getElementById('editID').value = '';
	 document.getElementById('titel').value = '';
	 document.getElementById('imdb').value = '';
	 document.getElementById('year').value = '';
	 document.getElementById('orig').value = '';
	 document.getElementById('editForm').getElementsByTagName('legend')[0].innerHTML = 'Film editieren';
	 var actorNodes = document.getElementById('actor').parentNode;
	 for (k = (actorNodes.getElementsByTagName('p').length - 1); k >= 0; k--) {
			actorNodes.removeChild(actorNodes.getElementsByTagName('p')[k]);
	 };
	 for (k = (actorNodes.getElementsByTagName('input').length - 1); k >= 0; k--) {
			if (actorNodes.getElementsByTagName('input')[k].getAttribute('type') == 'hidden') {
				 actorNodes.removeChild(actorNodes.getElementsByTagName('input')[k]);
			};
	 };
	 for (k = (actorNodes.getElementsByTagName('img').length - 1); k >= 0; k--) {
			actorNodes.removeChild(actorNodes.getElementsByTagName('img')[k]);
	 };
	 var genreArray = document.getElementById('genre').getElementsByTagName('input');
	 for (x = 0; x < genreArray.length; x++) {
			genreArray[x].checked = false;
	 };
};