
window.onload = function() {
	initCalendars();
	initSimap();
  initExternalLinks();
}

function initCalendars() {
  var buttons = document.getElementsByTagName('button');
  for (var i = 0; i < buttons.length; i++) {
  	if (buttons[i].className == 'calendar') {
  	  var id = buttons[i].id;
  	  var str = 'button-';
      var field = id.substr(str.length);
      Calendar.setup({
        inputField  : field,      // id of the input field
        ifFormat    : "%d.%m.%Y", // format of the input field
        showsTime   : false,      // will display a time selector
        button      : id,         // trigger for the calendar (button ID)
        singleClick : true,       // single-click mode
        step        : 1           // show all years in drop-down boxes (instead of every other year as default)
      });
  	}
  }
}

simap_modified = false;
function initSimap() {
  var notice = document.getElementById('notice');
  if (notice) {
	  var elements = notice.getElementsByTagName('*');
	  for (i = 0; i < elements.length; i++) {
	    var element = elements.item(i);
	    var elementName = element.nodeName.toLowerCase();
	    if (elementName == 'input' || elementName == 'select' || elementName == 'textarea' || elementName == 'button') {
	      if (element.addEventListener) {
	        element.addEventListener('change',setSimapModified,false);
	      }
	      else if (element.attachEvent) {
			    element.attachEvent('onchange',setSimapModified);
			  }
			  switch (element.className)
			  {
			    case 'date':
			      if (element.addEventListener) {
			        element.addEventListener('click',clearDate,false);
			      }
			      else if (element.attachEvent) {
			        element.attachEvent('onclick',clearDate);
			      }
			      break;
			    case 'time':
			      if (element.addEventListener) {
			        element.addEventListener('click',clearTime,false);
			      }
			      else if (element.attachEvent) {
			        element.attachEvent('onclick',clearTime);
			      }
			      break;
			    case 'calendar':
			      if (element.addEventListener) {
			        element.addEventListener('click',clearDate,false);
			      }
			      else if (element.attachEvent) {
			        element.attachEvent('onclick',clearDate);
			      }
			      break;
			  }
	    } // end of if input, select, textarea or button
	  }
	}
}
function setSimapModified() {
  simap_modified = true;
}
function confirmChanges() {
  return !simap_modified || confirm('Et ole tallentanut muutoksia. Haluatko varmasti siirtyä toiselle sivulle?');
}
function confirmRemove() {
  return confirm('Haluatko varmasti poistaa kohteen?');
}
function confirmSubmit() {
  if (getLanguage() == 'fi') {
    return confirm('Olethan tarkistanut ilmoituksen? Julkaistua ilmoitusta ei voi muuttaa.');
  }
  else {
    return confirm('Har du granskat annonsen? En publicerad annons kan inte ändras.');
  }
}
function clearDate(e) {
  if (!e) {
    var e = window.event;
  }
  if (e.srcElement) {
    var target = e.srcElement;
  }
  else if (e.target) {
    var target = e.target;
  }
  if (target) {
	  if (target.id != null && target.id.substring(0, 7) == 'button-') {
	    var input = document.getElementById(target.id.substring(7));
	    if (input.value == 'pp.kk.vvvv' || input.value == 'dd.mm.åååå') {
		    input.value = '';
		  }
	    input.style.color = 'black';
	    input.style.fontStyle = 'normal';
	  }
	  else {
		  if (target.value == 'pp.kk.vvvv' || target.value == 'dd.mm.åååå') {
		    target.value = '';
		  }
		  target.style.color = 'black';
		  target.style.fontStyle = 'normal';
		}
  }
}
function clearTime(e) {
  if (!e) {
    var e = window.event;
  }
  if (e.srcElement) {
    var target = e.srcElement;
  }
  else if (e.target) {
    var target = e.target;
  }
  if (target) {
	  if (target.value == 'tt.mm') {
	    target.value = '';
	  }
	  target.style.color = 'black';
	  target.style.fontStyle = 'normal';
	}
}
function sendPause() {
  var notice = document.getElementById('notice');
  if (notice) {
    var inputs = notice.getElementsByTagName('input');
    for (i = 0; i < inputs.length; i++) {
      var input = inputs.item(i);
      if (input.getAttribute('name') == '_sent') {
        input.setAttribute('name', '_pause');
        break;
      }
    }
    notice.submit();
  }
}

function clearForm(name) {
  var div = document.getElementById(name);
  if (div)
  {
    var elements = div.getElementsByTagName('*');
    for (i = 0; i < elements.length; i++) {
	    var element = elements.item(i);
	    var name = element.nodeName.toLowerCase();
	    if (name == 'input') {
	      switch (element.getAttribute('type').toLowerCase()) {
	        case 'text':
	          element.value = '';
	          break;
	        case 'checkbox':
	          element.checked = false;
	          break;
	      }
	    }
	    else if (name == 'textarea') {
	      element.value = '';
	    }
	    else if (name == 'select') {
	      element.selectedIndex = 0;
	    }
	  }
  }
}

function getBaseUrl() {
  var header = document.getElementById('header');
  var a = header.getElementsByTagName('a').item(0);
  return a.getAttribute('href');
}

function getLanguage() {
  var base_url = getBaseUrl();
  return base_url.match('/fi/')?'fi':'sv';
}

function idemClicked(idem) {
  
  // find fieldset
  fieldset = idem.parentNode;
  while (fieldset.nodeName.toLowerCase() != 'fieldset') {
    fieldset = fieldset.parentNode;
  }
  
  // loop inputs
  var elements = fieldset.getElementsByTagName('*');
  for (i = 0; i < elements.length; i++) {
    var element = elements.item(i);
    if (element != idem)
    {
      var elementName = element.nodeName.toLowerCase();
      if (elementName == 'input' || elementName == 'select') {
        element.disabled = idem.checked;
      }
    }
  }
}

function selectCpv(field, limit, year) {
  var value = document.getElementById(field).value;
  var address = getBaseUrl() + 'code/cpv?field=' + field + '&limit=' + limit + '&value=' + value;
  address += year?'&year='+year:'';
  var popup = window.open(address, 'cpv', 'width=700,height=500,toolbar=no,scrollbars=yes,resizable=yes');
  popup.focus();
  return false;
}

function selectCpvSupplementary(field) {
  var value = document.getElementById(field).value;
  var address = getBaseUrl() + 'code/cpvsupplementary?field=' + field + '&value=' + value;
  var popup = window.open(address, 'cpvsupplementary', 'width=700,height=500,toolbar=no,scrollbars=yes,resizable=yes');
  popup.focus();
  return false;
}

function updateCode(field, value) {
  var field = window.opener.document.getElementById(field);
  if (field.nodeName == 'SELECT') {
	for (i = 0; i < field.options.length; i++) {
	  if (field.options[i].value == value) {
		field.options[i].selected = "1";
		var rel = field.options[i].getAttribute('rel');
		if (rel != '') {
		  window.opener.removeOthers(field.options, rel);
	      window.opener.intoMainForm(rel);
		}
		
	  }
	}
  }
  else {
	field.value = value;
  }
  
  window.opener.focus();
  window.close();
}

function addAttachment() {
  var form = document.getElementById('notice');
  var inputs = form.getElementsByTagName('input');
  for (i = 0; i < inputs.length; i++)
  {
    var input = inputs[i];
    if (input.getAttribute('name') == '_sent')
    {
      input.setAttribute('name', '_attachment');
      break;
    }
  }
}

function addLink() {
  var form = document.getElementById('notice');
  var inputs = form.getElementsByTagName('input');
  for (i = 0; i < inputs.length; i++)
  {
    var input = inputs[i];
    if (input.getAttribute('name') == '_sent')
    {
      input.setAttribute('name', '_link');
      break;
    }
  }
}

function addCriteria(field) {
  
  // find next criteria
  for (i = 1; document.getElementById(field+'_criteria_'+i); i++);
  var div = document.getElementById(field+'_criterias');
  var tbody = div.getElementsByTagName('tbody').item(0);

  // generate html
  tr = document.createElement('tr');
  td = document.createElement('td');
  td.className = 'criteria';
  label = document.createElement('label');
  label.setAttribute('for', field+'_criteria_'+i);
  label.appendChild(document.createTextNode(i+'.'));
  input = document.createElement('input');
  input.setAttribute('type', 'text');
  input.setAttribute('id', field+'_criteria_'+i);
  input.setAttribute('name', field+'_criteria_'+i);
  input.setAttribute('size', '25');
  label.appendChild(input);
  td.appendChild(label);
  tr.appendChild(td);
  td = document.createElement('td');
  label = document.createElement('label');
  label.setAttribute('for', field+'_weighting_'+i);
  input = document.createElement('input');
  input.setAttribute('type', 'text');
  input.setAttribute('id', field+'_weighting_'+i);
  input.setAttribute('name', field+'_weighting_'+i);
  input.setAttribute('size', '5');
  label.appendChild(input);
  td.appendChild(label);
  tr.appendChild(td);
  tbody.appendChild(tr);
}

function addCpvCode(field, supplementary, year) {
  
  // find next code position
  for (i = 1; document.getElementById(field+'_code_'+i); i++);
  div = document.getElementById(field);
  tr_elements = div.getElementsByTagName('tr');
  ref = tr_elements.item(tr_elements.length-1);
  
  // generate html
  tr = document.createElement('tr');
  td = document.createElement('td');
  td.appendChild(document.createTextNode(i+'.'));
  tr.appendChild(td);
  td = document.createElement('td');
  td.innerHTML = '<input type="text" id="'+field+'_code_'+i+'" name="'+field+'_code_'+i+'" size="10" />' +
                 '<button type="button" class="select" onclick="selectCpv(\''+field+'_code_'+i+'\', \'\', \''+year+'\')">' +
                 '<span>Valitse</span>' +
                 '</button>';
  tr.appendChild(td);
  if (supplementary) {
    td = document.createElement('td');
    td.innerHTML = '<input type="text" id="'+field+'_code_'+i+'_supp_1" name="'+field+'_code_'+i+'_supp_1" size="10" />' +
                   '<button type="button" class="select" onclick="selectCpvSupplementary(\''+field+'_code_'+i+'_supp_1\')">' +
                   '<span>Valitse</span>' +
                   '</button>' +
                   '<button id="'+field+'_code_'+i+'_supp" onclick="addCpvSupplementaryCode(\''+field+'_code_'+i+'_supp\')" type="button" class="more">' +
                   'Lisää täydentävä nimike' +
                   '</button>';
    tr.appendChild(td);
  }
  ref.parentNode.insertBefore(tr, ref);
}

function addCpvSupplementaryCode(field) {
  var linkElement = document.getElementById(field);
  var td = linkElement.parentNode;
  td.removeChild(linkElement);
  
  // find next code
  for (j = 1; document.getElementById(field+'_'+j); j++);
  
  // do not clear selected value
  inputs = td.getElementsByTagName('input');
  for (i = 0; i < inputs.length; i++) {
    input = inputs.item(i);
    input.setAttribute('value', input.value);
  }
  
  // generate html
  td.innerHTML += '<br />' +
                  '<input type="text" id="'+field+'_'+j+'" name="'+field+'_'+j+'" size="10" />' +
                  '<button type="button" class="select" onclick="selectCpvSupplementary(\''+field+'_'+j+'\')">' +
                  '<span>Valitse</span>' +
                  '</button>' +
                  '<button id="'+field+'" onclick="addCpvSupplementaryCode(\''+field+'\')" title="Lisää täydentävä nimike" type="button" class="more">Lisää täydentävä nimike</button>';
}

function selectNuts(field) {
  var value = document.getElementById(field).value;
  var address = getBaseUrl() + 'code/nuts/?field=' + field + '&value=' + value;
  var popup = window.open(address, 'nuts', 'width=700,height=500,toolbar=no,scrollbars=yes,resizable=yes');
  popup.focus();
  return false;
}

function selectServiceCategory(form, field) {
  var value = document.getElementById(field).value;
  var address = getBaseUrl() + 'code/servicecategory/?form=' + form + '&field=' + field;
  var popup = window.open(address, 'servicecategory', 'width=700,height=500,toolbar=no,scrollbars=yes,resizable=yes');
  popup.focus();
  return false;
}

function addPreviousPublication(field) {
  
  // remove add button
  var table = document.getElementById(field+'_table');
  var buttons = table.getElementsByTagName('button');
  var button = buttons.item(buttons.length - 1);
  button.parentNode.removeChild(button);
  
  // find next code id
  for (i = 1; document.getElementById(field+'_other_number_'+i); i++);
  
  // generate html
  var lang = getLanguage();
  tr = document.createElement('tr');
  td = document.createElement('td');
  td.appendChild(document.createTextNode((lang == 'fi')?'Muu ilmoitus':'Muu ilmoitus'));
  tr.appendChild(td);
  td = document.createElement('td');
  input = document.createElement('input');
  input.setAttribute('id', field+'_other_number_'+i);
  input.setAttribute('type', 'text');
  input.setAttribute('name', field+'_other_number_'+i);
  td.appendChild(input);
  tr.appendChild(td);
  td = document.createElement('td');
  td.innerHTML = '<input id="'+field+'_other_date_'+i+'" type="text" name="'+field+'_other_date_'+i+'" size="8" />' +
                 ' ' +
                 '<button type="button" class="calendar" id="button-'+field+'_other_date_'+i+'" title="Valitse päivämäärä kalenterista"><span>Valitse</span></button> ' +
                 '<button type="button" class="add" title="' + ((lang == 'fi')?'Lisää':'Lägg till') + '" onclick="addPreviousPublication(\''+field+'\')">' + ((lang == 'fi')?'Lisää':'Lägg till') + '</button>';
  tr.appendChild(td);
  
  tbody = table.getElementsByTagName('tbody').item(0);
  tbody.appendChild(tr);
  
  initCalendars();
}

function initExternalLinks()
{
  var links = $("a.external").add("a.finlex").add("a.eu");
  if (links) {
    links.each(function(i) {
      links[i].onclick = function() {
        window.open(this.href, "_blank");
        return false;
      }
    });
  }
}
