// browser
/*global HTMLElement */

// XML.Forms.wsc
/*global validateValue */

// default.js
/*global padDigits */

// -----------------------------------------------------------------------------
// Key codes
// -----------------------------------------------------------------------------

var char_BACKSPC = 8;
var char_TAB     = 9;
var char_ENTER   = 13;
var char_ESC     = 27;
var char_PGUP    = 33;
var char_PGDOWN  = 34;
var char_END     = 35;
var char_HOME    = 36;
var char_LEFT    = 37;
var char_UP      = 38;
var char_RIGHT   = 39;
var char_DOWN    = 40;
var char_HYPHEN  = 45;
var char_PERIOD  = 46;

// -----------------------------------------------------------------------------
// Cross browser preparation 
// -----------------------------------------------------------------------------

var isFirefox = !document.all;

if (isFirefox)
{
  // Mozilla click function implementation for html elements
  HTMLElement.prototype.click = function () {
    var evt = this.ownerDocument.createEvent('MouseEvents');
    evt.initMouseEvent('click', true, true, this.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
    this.dispatchEvent(evt);
  };
}

// -----------------------------------------------------------------------------
// Cross browser debug function implementations
// -----------------------------------------------------------------------------

if (typeof console === 'undefined') 
{
  // Only use firebug logging when available
  console         = {};
  console.trace   = function () {};
  console.log     = function () {};
  console.debug   = function () {};
  console.info    = function () {};
  console.warn    = function () {};
  console.error   = function () {};
  console.time    = function () {};
  console.timeEnd = function () {};
  console.count   = function () {};
}

/**
 * Debug function
 */
function debug(msg)
{
  console.log(msg);
}

// -----------------------------------------------------------------------------

function ie_ff_focus(elementId)
{
  if (isFirefox) {
    try {
      setTimeout("try{document.getElementById('" + elementId + "').focus();}catch(ex){}", 1);
    }
    catch (ex1) {
    }
    try {
      setTimeout("try{document.getElementById('" + elementId + "').select();}catch(ex){}", 2);  
    }
    catch (ex2) {
    }
  }
  else {
    if(document.getElementById(elementId)) {
      document.getElementById(elementId).focus();
	}
  }
}
function cancelEnterKey(evt) // assign to onkeydown 
{
  evt = (evt) ? evt : ((event) ? event : null);
  if (evt.keyCode === char_ENTER) { 
    console.log("cancelEnterKey");
    return false;     
  }
}
function plainTabTo(evt, elemId)
{
  if (!evt.shiftKey && (evt.keyCode === char_TAB)) {
    ie_ff_focus(elemId);
    return false;
  }
  return true;
}
function shiftTabTo(evt, elemId)
{
  var node;
  if (isFirefox) {
    if (evt.shiftKey && (evt.keyCode === char_TAB)) { 
      node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);			 	
      node.shiftTabToElementId = elemId;
      ie_ff_focus(elemId);
      return false;
    }
  }
  else {
    if (window.event.shiftKey && (window.event.keyCode === char_TAB)) { 
      node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
      node.shiftTabToElementId = elemId;
      ie_ff_focus(elemId);
      return false;
    }
  }
  return true;
}
function isShiftTab(evt)
{
  if (isFirefox) {
    if (evt.shiftKey && (evt.keyCode === char_TAB)) {
      return true;
    }
  } else {
    if (window.event.shiftKey && (window.event.keyCode === char_TAB)) { 
      return true;
    }
  }
  return false;
}
function isPlainTab(evt)
{
  if (isFirefox) {
    if (!evt.shiftKey && (evt.keyCode === char_TAB)) {
      return true;
    }
  } else {
    if (!window.event.shiftKey && (window.event.keyCode === char_TAB)) { 
      return true;
    }
  }
  return false;
}

// -----------------------------------------------------------------------------

var vdSelectionNamespaces = "xmlns:cpr='http://rep.oio.dk/cpr.dk/xml/schemas/core/2002/06/28/' xmlns:dkcc='http://rep.oio.dk/ebxml/xml/schemas/dkcc/2003/02/13/' xmlns:vd='http://rep.oio.dk/vd.dk/xml/schemas/2004/02/16/' ";

var CONTRACTORPATH_CREATE = 'DigTransaction1.DigInstanceCreate1.DigContacts1.Contractor1';
var CONTRACTORPATH_UPDATE = 'DigTransaction1.DigInstanceUpdate1.DigContacts1.Contractor1';


function StationingBuildingDuplicate(sParentElementPath, sSourceElement, sTargetElement) {
  var SourceElement = document.getElementById(sParentElementPath + "." + sSourceElement);
  var TargetElement = document.getElementById(sParentElementPath + "." + sTargetElement);
  
  if ((TargetElement.value === "") && (SourceElement.value !== "")) 
  {
    if (validateValue(SourceElement.value, "^[1-9][0-9]{0,2}[A-Z]?$", 1, 4))
    {
      TargetElement.value = SourceElement.value;
      TargetElement.select();
    }
    else
    {
      TargetElement.select();
    }
  }
  return false;
}

/* Insert current date on double-click */
function ondblclick_DateElement(oSource) {
  var dtNow = new Date();
  oSource.value = padDigits(dtNow.getDate(), 2) + "-" + padDigits(dtNow.getMonth() + 1, 2) + "-" + dtNow.getFullYear();
}

function onsubmit_DisableButtons() {
  //Button for attachments breaks if this is used
  if (false) {
    window.document.body.style.cursor = "wait";
    window.status = "Operationen udføres. Vent venligst et øjeblik...";
    var loButtons = document.getElementsByTagName("input");
    for (var loButton in loButtons) {
      if (loButtons[loButton].type === "submit" || loButtons[loButton].type === "button" || loButtons[loButton].type === "reset") {
        loButtons[loButton].disabled = true;
      }
    }
  }
  return true;
}


//Transform destination id to source id, with source type as input
function destinationIdToSourceId(lsDestinationId, lsSource) {
  var lsSourceId = lsDestinationId;
  lsSourceId = lsSourceId.replace('Applicant',  lsSource);
  lsSourceId = lsSourceId.replace('Contractor', lsSource);
  lsSourceId = lsSourceId.replace('Proprietor', lsSource);
  lsSourceId = lsSourceId.replace('Marker',     lsSource);

  return lsSourceId;
}

/* Set type of adresse based on argument */
function setAddresseeType(lsElementId, lsSelect)
{
  var liIndex = "1";

  var lsCompanyElement = lsElementId + '.CompanyAddressee' + liIndex;
  var loCompanyElement = document.getElementById(lsCompanyElement);
  //alert(lsCompanyElement);
  var lsPersonElement  = lsElementId + '.PersonName' + liIndex;
  var loPersonElement  = document.getElementById(lsPersonElement);
  //alert(lsPersonElement);

  if (lsSelect === 'person') {
    // use "style.display" to hide it and "disabled" to prevent it from submitting
    loCompanyElement.style.display = 'none';
    loCompanyElement.disabled = true;
    loPersonElement.style.display  = 'block';
    loPersonElement.disabled = false;
  }
  else {
    // use "style.display" to hide it and "disabled" to prevent it from submitting
    loCompanyElement.style.display = 'block';
    loCompanyElement.disabled = false;
    loPersonElement.style.display  = 'none';
    loPersonElement.disabled = true;
  }
}

/* Will probably eventually need argument for index */
/* Toggle type of addresse based on selection in dropdown */
function toggleAddresseeType(lsElementId) {
  var liIndex = "1", lsSelect;

  var lsSelectElement = lsElementId + '.SelectType' + liIndex;
  //alert(lsSelectElement);
  var loSelect = document.getElementById(lsSelectElement);
  //alert(loSelect);

  var liSelect = loSelect.selectedIndex;
  if (loSelect.options.length > liSelect) {
    lsSelect = loSelect.options[liSelect].value;
  }
  //alert(lsSelect);
  
  setAddresseeType(lsElementId, lsSelect);
}

function ContactCopy(lsDestinationId) {
  //alert(lsDestinationId);
  var loDestination = document.getElementById(lsDestinationId);
  var lsCopy        = lsDestinationId + '.Copy1';
  var loCopy        = document.getElementById(lsCopy);
  var liCopy        = loCopy.selectedIndex;
  var lsSource      = loCopy.options[liCopy].value;

  if (lsSource !== "") {
    //alert(lsSource);
    var loInputs    = loDestination.getElementsByTagName('input');
    var loSelects   = loDestination.getElementsByTagName('select');
    var lsSourceId  = destinationIdToSourceId(lsDestinationId, lsSource);
    //alert(lsSourceId);

    var loSource;
    var lsSourceValue;
    var liSourceIndex;
    
    //Contractor is always addresseetype company - result of copy may confuse user if source is person
    if (lsDestinationId === CONTRACTORPATH_UPDATE) {
      //Determine addresseetype of source
      loSource = document.getElementById(lsSourceId + '.Addressee1.SelectType1');
      liSourceIndex = loSource.selectedIndex;
      lsSourceValue = loSource.options[liSourceIndex].value;
      if (lsSourceValue === 'person') {
        //Issue warning and continue
        alert('Du er ved at kopiere kontaktoplysninger for en person, til felterne for entreprenør, der er en virksomhed.');
      }
    }

    //type text, radio, check
    for (var i = 0; i < loInputs.length; i += 1) {
      lsSourceId    = destinationIdToSourceId(loInputs[i].id, lsSource);
      if (lsSourceId !== '') {
        loSource      = document.getElementById(lsSourceId);
        if (loSource !== null) {
          lsSourceValue = loSource.value;
          loInputs[i].value = lsSourceValue;
        }
      }
    }
    //dropdown and listboxes
    for (i = 0; i < loSelects.length; i += 1) {
      lsSourceId    = destinationIdToSourceId(loSelects[i].id, lsSource);
      if (lsSourceId !== '') {
        loSource      = document.getElementById(lsSourceId);
        if (loSource !== null) {
          liSourceIndex = loSource.selectedIndex;
          loSelects[i].selectedIndex = liSourceIndex;
        }
      }
    }
    //The onchange event is not fired - make sure the UI updates by calling Toggle...
    if (lsDestinationId !== CONTRACTORPATH_CREATE && lsDestinationId !== CONTRACTORPATH_UPDATE) {
      toggleAddresseeType(lsDestinationId + '.Addressee1');
    }
  } else {
    alert('Vælg en kontaktperson at kopiere fra først!');
  }
}


/* Display seleceted attachment to user */
function ViewAttachment(lsElementId) {
  /* Fetch URI of the attachment to be displayed */
  var loURI = document.getElementById(lsElementId);
  var sUri = loURI.value.replace(/vdext-app39.vdnet.dk:8080/, "webgt.vd.dk");

  /* If possible, open new window to display attachment in */
  if (window.open(sUri, 'Attachment', 'width=600,height=400,left=100,top=100,resizable=yes,status=yes,toolbar=no,menubar=no,location=no') === null) {
    /* Otherwise, use current browser window to display attachment */
    window.top.location = sUri;
  }
}

function deleteUserFile(filename){
  if(confirm ("Er du sikker på du vil slette denne fil?")) {
	document.getElementById(filename).style.display = "none";
	console.log(document.getElementById("hiddenXmlAttachements"));
	
	var hiddenElement = document.getElementById("hiddenXmlAttachementsToBeDeleted");
	
	if(!hiddenElement) {
	  var form = document.forms[0];
	  var el = document.createElement("input");
	  el.type = "hidden";
	  el.id = "hiddenXmlAttachementsToBeDeleted";
	  el.name = "hiddenXmlAttachementsToBeDeleted";
	  el.value = filename;
	  form.appendChild(el);
	}
	else {
	  hiddenElement.value = hiddenElement.value + ":" + filename; 
	}

	
	
	//console.log(document.forms[0].innerHTML);
	
	
  }
  return false;
}

function DigCompletionType_Toggle(lsElementId) {
  var liIndex = "1", lsSelect;

  var lsSelectElement    = lsElementId + '.FinalIndicator' + liIndex;
  var loSelect           = document.getElementById(lsSelectElement);
  //alert(lsSelectElement);

  var loFinalElement     = document.getElementById('Final');
  var loTemporaryElement = document.getElementById('Temporary');

  if (typeof loSelect.options !== 'undefined') {
    /* Will be a select in update mode */
    var liSelect       = loSelect.selectedIndex;
    lsSelect           = loSelect.options[liSelect].value;
  }
  else {
    /* Will be an input in readonly mode */
    lsSelect           = loSelect.value;
  }

  //alert(lsSelect);

  if (lsSelect === 'true' || lsSelect === '1') {
    // use "style.display" to hide it and "disabled" to prevent it from submitting
    loFinalElement.disabled = false;
    loFinalElement.style.display = 'block';
    loTemporaryElement.disabled = true;
    loTemporaryElement.style.display = 'none';
  }
  else {
    loFinalElement.disabled = true;
    loFinalElement.style.display = 'none';
    loTemporaryElement.disabled = false;
    loTemporaryElement.style.display = 'block';
  }
}

function DigCompletion_Toggle(lsElementId) {
  //alert(lsElementId);
  var liIndex = "1", lsSelect, liSelect, loDigCompletionDateElement;

  var lsDigCompletionElement = lsElementId + '.DigCompletion' + liIndex;
  var loDigCompletionElement = document.getElementById(lsDigCompletionElement);

  var lsDigCompletionDate    = "DigCompletionDate";
  var loDigCompletionDate    = document.getElementById(lsDigCompletionDate);


  var lsSelectElement     = lsElementId + '.DigVariantCode' + liIndex;
  var loSelect            = document.getElementById(lsSelectElement);
  if (!loSelect) {
    return;
  }

  if (typeof loSelect.options !== 'undefined') {
    /* Will be a select in update mode */
    liSelect           = loSelect.selectedIndex;
    lsSelect           = loSelect.options[liSelect].value;
  }
  else {
    /* Will be an input in readonly mode */
    lsSelect           = loSelect.value;
  }

  //alert(lsSelect);

  var loDiv1 = document.getElementById('NoDigCompletion1');
  var loDiv2 = document.getElementById('NoDigCompletion2');

  if (lsSelect === 'report') {
    if (loDiv1) {
      loDiv1.style.display = 'none';
    }
    if (loDiv2) {
      loDiv2.style.display = 'none';
    }
	
    if (loDigCompletionElement) {
	  
      //loDigCompletionElement.style.display = 'block';
	  //loDigCompletionElement.style.display = 'none';
      loDigCompletionElement.disabled = false;
    }
	
    if (loDigCompletionDate) {
      loDigCompletionDate.style.display = 'block';
      loDigCompletionDate.disabled = false;
    }
    loDigCompletionDateElement = document.getElementById("CompletionDate");
    if (loDigCompletionDateElement) {
      loDigCompletionDateElement.style.display = 'block';
      loDigCompletionDateElement.disabled = false;
    }
  }
  else {
    if (lsSelect === 'application%2C+normal') {
      if (loDiv1) {
        loDiv1.style.display = 'block';
      }
      if (loDiv2) {
        loDiv2.style.display = 'none';
      }
    }
    if (lsSelect === 'application%2C+urgent') {
      if (loDiv1) {
        loDiv1.style.display = 'none';
      }
      if (loDiv2) {
        loDiv2.style.display = 'block';
      }
    }
    var lsDigCompletionDateSelect = lsElementId + '.DigDates1.CompletionDateTime1.Day' + liIndex;
    var loDigCompletionDateSelect = document.getElementById(lsDigCompletionDateSelect);
    if (loDigCompletionDateSelect) {
      /* Will be a select in update mode */
      liSelect           = loDigCompletionDateSelect.selectedIndex;
      lsDigCompletionDate   = loDigCompletionDateSelect.options[liSelect].value;
      //alert(lsDigCompletionDate);
    }
    else {
      var lsDigCompletionDateInput = lsElementId + '.DigDates1.CompletionDateTime' + liIndex + '.text1';
      var loDigCompletionDateInput = document.getElementById(lsDigCompletionDateInput);
      if (!loDigCompletionDateInput) {
        /* Will be an input in readonly mode */
        lsDigCompletionDateInput = lsElementId + '.DigDates1.CompletionDateTime' + liIndex;
        loDigCompletionDateInput = document.getElementById(lsDigCompletionDateInput);
        //alert(lsDigCompletionDate);
      }
      lsDigCompletionDate      = loDigCompletionDateInput.value;
    }

    var lbDigCompletionDate   = (lsDigCompletionDate !== '');
    if (!lbDigCompletionDate) {
      // use "style.display" to hide it and "disabled" to prevent it from submitting
      if (loDigCompletionElement) {
        loDigCompletionElement.style.display = 'none';
        loDigCompletionElement.disabled = true;
      }
      if (loDigCompletionDate) {
        loDigCompletionDate.style.display = 'none';
        loDigCompletionDate.disabled = true;
      }
      loDigCompletionDateElement = document.getElementById("CompletionDate");
      if (loDigCompletionDateElement) {
        loDigCompletionDateElement.style.display = 'none';
        loDigCompletionDateElement.disabled = true;
      }
    }
    else {
      if (loDiv1) {
        loDiv1.style.display = 'none';
      }
      if (loDiv2) {
        loDiv2.style.display = 'none';
      }
    }
  }
   

}

function CrossSectionElementType_Toggle(lsElementId)
{
  
  var lsCheckbox = lsElementId + '.CrossSectionElementPartTypeCheckbox1';
  var lbDisabled = !(document.getElementById(lsCheckbox).checked);

  //alert(lsElementId + '_SideIdentifier');
  var loElement = document.getElementById(lsElementId + '_SideCode');
  if (loElement) {
    loElement.disabled = lbDisabled;
  }

  //alert(lsElementId + '_Orientation');
  loElement = document.getElementById(lsElementId + '.Orientation1');
  if (loElement) {
    loElement.disabled = lbDisabled;
  }
  
  //alert(lsElementId + '_AreaMeasure');
  loElement = document.getElementById(lsElementId + '_AreaMeasure');

  if (loElement) {
    //Need to store and reinsert value to circumvent bug in IE
	
    var lsValue = document.getElementById(lsElementId + '.AreaMeasure1').value;
	document.getElementById(lsElementId + '.AreaMeasure1').disabled =lbDisabled;
    
	loElement.disabled = lbDisabled;
    document.getElementById(lsElementId + '.AreaMeasure1').value = lsValue;
    if (!lbDisabled)
    {
      document.getElementById(lsElementId + '.AreaMeasure1').select();
    }
	
  }
}


function AddDigSite() {
  var loDigSiteCount = document.getElementById("DigSiteCount");
  var liDigSiteCount = parseInt(loDigSiteCount.value, 10);

  loDigSiteCount.value = liDigSiteCount + 1;
  document.forms[0].submit();
}


function DelDigSite() {
  var loDigSiteCount = document.getElementById("DigSiteCount");
  var liDigSiteCount = parseInt(loDigSiteCount.value, 10);
  var lbConfirm   = confirm('Dette vil permanent slette "Gravested ' + liDigSiteCount + '" fra ansøgningen. Er du sikker?');

  if (lbConfirm) {
    loDigSiteCount.value = liDigSiteCount - 1;
    document.forms[0].submit();
  }
}


function padDigits(lsString, liLength) {
  var lsRs = '';
  lsRs += lsString; /* This will convert any numeric lsString to string */

  if (lsRs.length < liLength) {
    return padDigits('0' + lsRs, liLength);
  }
  else {
    return lsRs;
  }
}


function stripZero(lsIdentifier) {
  for (var i = 0; i < lsIdentifier.length; i += 1) {
    if (lsIdentifier.substr(i, 1) !== '0') {
      return lsIdentifier.substr(i);
    }
  }
}

// -----------------------------------------------------------------------------
// Form functions
// -----------------------------------------------------------------------------

function polutedSoilStateCheck(radioId0, radioId1) {
  var elem = document.getElementById(radioId0);
  var elem1 = document.getElementById(radioId1);
  if (elem.id) {		
    if (elem1) {
      if (!elem1.checked) {
        elem.checked = true; // default enable first radio button
      }
    }
    var validationElem = document.getElementById('toggleValidateId0');
    if (validationElem) {
      validationElem.style.visibility = elem.checked ? "hidden" : "visible";
    }
    var validationStateElem = document.getElementById('toggleValidateState0');
    if (validationStateElem) {
      validationStateElem.value = elem.checked ? "off" : "on";
    }
  }
}

// -----------------------------------------------------------------------------
// General cross browser XML function implementations
// -----------------------------------------------------------------------------

/**
 * Returns the text content for the current XML node, if #text node child exists.
 */
function getNodeText(node)
{
  var txt = null;
  if ((node !== null) && (node !== undefined)) 
  {
    if (isFirefox)
    {
      if (node.childNodes.length > 0) 
      {
        if (node.childNodes[0].nodeType === node.TEXT_NODE) 
        {
          txt = node.childNodes[0].textContent;
        }
      }
    }
    else
    {
      txt = node.text;
    }
  }
  return txt;
}

/**
 * Debug method. Traverses all nodes and prints out all nodes/element data to the debug console.
 */ 
var limit_debug_traverse = -1;
function debug_Node_Traverse(currentNode, indent)
{ 
  var childNode = null;
  if ((currentNode !== null) && (currentNode !== undefined))
  {
    var txt;
    for (var i = 0; i < currentNode.childNodes.length; i += 1)
    {
      if (limit_debug_traverse === 0) {
        return;
      }
      limit_debug_traverse -= 1;
      childNode = currentNode.childNodes[i];
      if (childNode.nodeType === childNode.ELEMENT_NODE)
      { 
        txt = getNodeText(childNode);
        if (txt !== null)
        {
          debug(indent + "<" + childNode.nodeName + ">, value: " + txt);
        }
        else
        {
          debug(indent + "<" + childNode.nodeName + ">");
        }
        debug_Node_Traverse(childNode, indent + "  ");
      }
    }
  }
}