
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({
          trigger     : id,
          inputField  : field,
          animation   : false,
          dateFormat  : "%e.%o.%Y",
          bottomBar   : true,
          noScroll    : true,
          weekNumbers : true,
          titleFormat : "%B %Y",
          onSelect    : function() { this.hide() }
      });
      /*
      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() {
  if (simap_modified) {
	if (getLanguage() == 'fi') {
      return confirm('Et ole tallentanut muutoksia. Haluatko varmasti siirtyä toiselle sivulle?');
	}
	else {
      return confirm('Du har inte sparat ändringarna. Vill du säkert gå till en annan sida?');
	}
  }
  return true;
}
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 addNuts(field) {
  for (rownum = 0; document.getElementById(field + '_' + rownum); rownum++);
  var rel = document.getElementById(field + '_div_0').getAttribute('rel');
  var labelValue = 'NUTS-koodi';
  var buttonValue = 'Valitse';
  
  if (getLanguage == 'sv') {
	labelValue = 'NUTS-kod';
	buttonValue = 'Välja';
  }

  var divEl = document.createElement('div');
  divEl.setAttribute('id', field + '_div_' + rownum);
  if (rel) {
	divEl.setAttribute('rel', rel);
  }
  divEl.innerHTML = '<label for="' + field + '_' + rownum + '">'
                  + labelValue
                  + '</label>'
                  + '<input type="text" id="' + field + '_' + rownum + '" name="' + field + '[]" value="" />'
                  + '<button type="button" class="select" onclick="selectNuts(\'' + field + '_' + rownum + '\')" title="' + buttonValue + '"></button>';
  
  var buttonDiv = document.getElementById(field + '_div_add');
  buttonDiv.parentNode.insertBefore(divEl, buttonDiv);
}

function addEmail(field) {
  for (rownum = 0; document.getElementById(field + '_' + rownum); rownum++);
  var rel = document.getElementById(field + '_div_0').getAttribute('rel');
  var labelValue = 'Sähköpostiosoite';

  if (getLanguage == 'sv') {
    labelValue = 'E-post';
  }

  var divEl = document.createElement('div');
  divEl.setAttribute('id', field + '_div_' + rownum);
  if (rel) {
    divEl.setAttribute('rel', rel);
  }
  divEl.innerHTML = '<label for="' + field + '_' + rownum + '">'
                  + labelValue
	              + '</label>'
	              + '<input type="text" id="' + field + '_' + rownum + '" size="42" name="' + field + '[]" value="" />';
	  
  var buttonDiv = document.getElementById(field + '_div_add');
  buttonDiv.parentNode.insertBefore(divEl, buttonDiv);
}

/**
 * Opens new popup window.
 * 
 * @param field the name of a input field
 * @param publishedBy the type of publisher
 * @return boolean false
 */
function selectServiceCategory(field, publishedBy) {
  var address = getBaseUrl()
              + 'code/servicecategory/?field=' + field + '&publishedBy=' + publishedBy;
  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;
      }
    });
  }
}

function addAddressOtherCA(field)
{
  // find next rownum and divs
  for (var rownum = 1; document.getElementById(field+'_'+rownum+'_organisation'); rownum++);
  var addressOtherDiv = document.getElementById(field);
  var buttonDiv = document.getElementById(field+'_button');
 
  // init dictionary
  var mandatoryTitle = 'Pakollinen tieto';
  var organisationTitle = 'Virallinen nimi';
  var nationalidTitle = 'Kansallinen henkilötunnus';
  var addressTitle = 'Postiosoite';
  var postalCodeTitle = 'Postinumero';
  var townTitle = 'Postitoimipaikka';
  var countryTitle = 'Maa';
  
  if (getLanguage() == 'sv') {
	mandatoryTitle = 'Obligatorisk information';
	organisationTitle = 'Officiellt namn';
	nationalidTitle = 'Nationellt id';
	addressTitle = 'Postaddress';
	postalCodeTitle = 'Postnummer';
	townTitle = 'Ort';
	countryTitle = 'Land';
  }
  
  // horizontal rule
  hrEl = document.createElement('hr');
  hrEl.setAttribute('class', 'divisor');
  addressOtherDiv.insertBefore(hrEl, buttonDiv);
 
  // organisation
  divEl = document.createElement('div');
  divEl.innerHTML = '<label for="' + field + '_' + rownum + '_organisation">'
                  + '<strong title="' + mandatoryTitle + '" class="required">*</strong>'
                  + organisationTitle
                  + '</label>'
                  + '<input type="text" size="42" id="' + field + '_' + rownum + '_organisation" name="' + field + '[' + rownum + '][organisation]" value="" />';
  addressOtherDiv.insertBefore(divEl, buttonDiv);
  
  // nationalid
  divEl = document.createElement('div');
  divEl.innerHTML = '<label for="' + field + '_' + rownum + '_nationalid">'
                  + nationalidTitle
                  + '</label>'
                  + '<input type="text" size="42" id="' + field + '_' + rownum + '_nationalid" name="' + field + '[' + rownum + '][nationalid]" value="" />';
  addressOtherDiv.insertBefore(divEl, buttonDiv);
  
  // address
  divEl = document.createElement('div');
  divEl.innerHTML = '<label for="' + field + '_' + rownum + '_address">'
                  + addressTitle
                  + '</label>'
                  + '<input type="text" size="42" id="' + field + '_' + rownum + '_address" name="' + field + '[' + rownum + '][address]" value="" />';
  addressOtherDiv.insertBefore(divEl, buttonDiv);

  // postal code
  divEl = document.createElement('div');
  divEl.innerHTML = '<label for="' + field + '_' + rownum + '_postal_code">'
                  + postalCodeTitle
                  + '</label>'
                  + '<input type="text" size="5" id="' + field + '_' + rownum + '_postal_code" name="' + field + '[' + rownum + '][postal_code]" value="" />';
  addressOtherDiv.insertBefore(divEl, buttonDiv);
  
  // town
  divEl = document.createElement('div');
  divEl.innerHTML = '<label for="' + field + '_' + rownum + '_town">'
                  + townTitle
                  + '</label>'
                  + '<input type="text" size="42" id="' + field + '_' + rownum + '_town" name="' + field + '[' + rownum + '][town]" value="" />';
  addressOtherDiv.insertBefore(divEl, buttonDiv);

  // country
  divEl = document.createElement('div');
  
  labelEl = document.createElement('label');
  labelEl.setAttribute('for', field + '_' + rownum + '_country');
  labelEl.appendChild(document.createTextNode(countryTitle));
  divEl.appendChild(labelEl);
  
  // clone country select with options from first one
  var firstSelectEl = document.getElementById(field+'_0_country');
  var selectEl = firstSelectEl.cloneNode(true);

  selectEl.setAttribute('id', field + '_' + rownum + '_country');
  selectEl.setAttribute('name', field + '[' + rownum + '][country]');
  selectEl.selectedIndex = '';
  
  divEl.appendChild(selectEl);
  
  addressOtherDiv.insertBefore(divEl, buttonDiv);
}

function checkLanguageAnyEc(field) {
  var anyEcEl = document.getElementById(field + '_any_ec');
  var isChecked = anyEcEl.checked;
  var countriesEl = document.getElementById(field);
  countriesEl.style.display = isChecked ? 'none' : 'block';
}

function clone(obj){
  if(obj == null || typeof(obj) != 'object')
      return obj;

  var temp = obj.constructor(); // changed
  for(var key in obj)
      temp[key] = clone(obj[key]);
  return temp;
}

/**
 * @param string sourceName
 * @param string targetName
 */
function addSimapRelation(sourceName, targetName) {
  var sourceElem = $('#' + sourceName);
  var targetElem = $('#' + targetName);
  if (sourceElem && targetElem) {
	sourceElem.change(function () { changeSimapRelation(sourceName, targetName) });
	sourceElem.keyup(function () { changeSimapRelation(sourceName, targetName) });
	changeSimapRelation(sourceName, targetName);
  }
}

/**
 * @param string sourceName
 * @param string targetName
 */
function changeSimapRelation(sourceName, targetName) {
  var sourceElem = $('#' + sourceName);
  var targetElem = $('#' + targetName);
  if ($.trim(sourceElem.val()) != '') {
	targetElem.show();
  }
  else {
	targetElem.hide();
  }
}

