﻿jQuery(function () {
  initImageGallery();
  initFormValidation();
  initImagePaging();
  var externalLinks=jQuery("a[href^=http],.newsletters li a").bind("click",function(){
    window.open(this.href,'','');
    return false;
  });

});

function initImageGallery() {
  var galleryImages = jQuery(".galleryImage img");

  var settings = {
    showImageList: false,
    imageListHeight: 60,
    imageListImageMargin: 5,
    imageListChosenBorderColor: '#000000',
    imageListChosenBorderWidth: 1,
    imageListChosenMarginWidth: 2,
    PaddingTop: 25,
    PaddingRight: 25,
    PaddingBottom: 25,
    PaddingLeft: 25,
    ImageMarginTop: 10,
    ImageMarginBottom: 10,
    imageInformationHeight: 100,
    imageInformationTemplate: /*'<div id="Co3Gallery_ImageHeader">[header]</div>*/'[description]'
  };


  galleryImages.each(function () {
    var image = jQuery(this),
        description = image.closest(".galleryImage").find(".imageDescription");

    //alert(image.attr("imagehref"));
    //image.attr("imagehref", image.attr("imagehref").replaceAll("&amp;", "&"));

    //    description = description.replace(/.jpg$/, "").replace(/_/g, " ").replace(/-/g, " ");
    //alert(description.text());
    if (description.text().length > 0) {

      image.attr("description", description.html());
      image.attr("showinfo", "true");
    }
    //    image.next().text(description);
  });
  galleryImages.CreateGallery(settings);
}

function initFormValidation() {
  var settings = {
    valArr: [["notempty", "[name=name]", "Navn skal udfyldes"],
            ["notempty", "[name=E-mail]", "E-mail skal udfyldes"],
            ["isMail", "[name=E-mail]", "E-mail skal være en email"]],
    submitBtn: "[name=send]",
    onFieldValidateFalse: "fail"
  }
  jQuery("form[name=postform1]").ReadyValidate(settings);

  //Kurv validering
  var settingsBasket = {
    valArr: [["notempty", "#EcomOrderCustomerName", "Navn skal udfyldes"],
            ["notempty", "#EcomOrderCustomerAddress", "Adresse skal udfyldes"],
            ["notempty", "#EcomOrderCustomerZip", "Postnummer skal udfyldes"],
            ["notempty", "#EcomOrderCustomerCity", "By skal udfyldes"],
            ["notempty", "#EcomOrderCustomerPhone", "Telefon skal udfyldes"],
            ["notempty", "#EcomOrderCustomerEmail", "E-mail skal udfyldes"],
            ["isMail", "#EcomOrderCustomerEmail", "E-mail skal være en email"]],
    submitBtn: "#Submit",
    onFieldValidateFalse: "fail"
  }
  jQuery("form#CustomerInformation").ReadyValidate(settingsBasket);
}

jQuery.fn.ReadyValidate = function (settings) {
  //Udvider settings
  settings = jQuery.extend({
    //Af typen function
    //Hvis valideringen mislykkes fyres denne event.
    onValidateFalse: null,
    /*
    Af typen function eller string
    Hvis valideringen mislykkes fyres denne event
    for hvert failede felt
    String'en vil blive sat p? elementet, som
    klasse. Functionen vil blive fyret n?r fejlen sker
    */
    onFieldValidateFalse: null,
    //Af typen function
    //Hvis valideringen g?r godt fyres denne event.
    onValidateTrue: null,
    /*
    Af typen function eller string
    Hvis valideringen g?r godt fyres denne event
    for hvert felt
    String'en vil blive sat p? elementet, som
    klasse. Functionen vil blive fyret efter validering
    */
    onFieldValidateTrue: null,
    //valiederingsparametrene
    valArr: null
  }, settings);
  //Hvis nogle formularer er valgt g?r vi videre
  if (this[0]) {
    //Hver formular behandles selvst?ndigt.
    //Det er alts? muligt at h?ndtere flere formularer p? samme side.
    this.each(function () {
      //formularens egen submit gemmes
      var submit = this.onsubmit,
      //formularen jQueryfiseres
          jQform = jQuery(this),
          submitBtn = jQform.find(settings.submitBtn);
      //formularens egen submit fjernes
      this.onsubmit = null;
      /*
      Test om der er en knap vi skal tilmeldevores event
      Dette er i realiteten et hack for at klare dynamicweb
      formularer.
      */
      if (submitBtn[0]) {
        submitBtn.each(function () {
          /*
          Vi fjerner events der allerede er tilknyttet knappen
          Dette g?res hovedsageligt for at t?kkes dynamicweb,
          der syntes den er verdensmester i at styre s?dan noget.
          */
          this.onclick = null;
          jQuery(this).click(function () { return Validater.submitForm(settings, jQform, submit); });
        });
      }
      //Vi binder vores egen event til formularens onSubmit
      jQform.bind("submit", function () { return Validater.submitForm(settings, jQform, submit); });

      var allfieldselect = "";
      for (var i = 0; i < settings.valArr.length; i++) {
        allfieldselect += settings.valArr[i][1] + ",";
        jQform.find(settings.valArr[i][1]).bind("blur", function () {
          var jQele = jQuery(this);
          Validater.submitForm(settings, jQform, submit, jQele);
        }).attr("valsubmitno", i);
      }

    });
  }
  return this;
};

/*
Validater er en klasse med statiske metoder.
*/
Validater = {
  // returnerer true hvis det er en ?gte email
  ismail: function (str) {
    var t = "\\wwáàãââæåçéèêëìíîïñòóôõöøùúûüýÿ";
    var regexp = new RegExp("^[" + t + "][" + t + "\\.\\-]*@[" + t + "][" + t + "\\.\\-]*\\.[a-z]{2,6}$", "i");
    if (!this.notempty(str) || !regexp.test(str) || /(\.@|\-@|@\.|@\-|\-\-|\.\.|\-\.|\.\-)/g.test(str)) { return false; }
    return true;
  },
  // returnerer true hvis telefonnummeret er korrekt
  isphonenumber: function (str) {
    if (this.notempty(str) || !str.match(/^[0-9]{8}$/)) {
      return false;
    }
    return true;
  },
  // returnerer true hvis string'en ikke er tom
  notempty: function (str) {
    return (str !== null) && (str.length > 0);
  },
  // returnerer true hvis string'en kun indeholder disse karakterer A-? eller a-?
  isalpha: function (str) {
    var re = /[^a-zA-ZæøåÆØÅ]/g;
    if (re.test(str)) { return false; }
    return true;
  },
  // returnerer true hvis string'en kun indeholder tal fra 0-9
  isnumeric: function (str) {
    var re = /[\D]/g;
    if (re.test(str)) { return false; }
    return true;
  },
  // returnerer true hvis string'en kun indeholder disse karakterer eller tal
  // A-?, a-? or 0-9
  isalphanumeric: function (str) {
    var re = /[^a-zA-Z0-9æøåÆØÅ]/g;
    if (re.test(str)) { return false; }
    return true;
  },
  // returnerer true hvis string'ens l?ngde er pr?cis "len"
  islength: function (str, len) {
    return str.length === len;
  },
  // returnerer true hvis string'ens l?ngde er mellem "min" og "max"
  islengthbetween: function (str, min, max) {
    return (str.length >= min) && (str.length <= max);
  },
  // returnerer true hvis string'en er en dato i et af formaterne...
  // mm dd yyyy, mm/dd/yyyy, mm.dd.yyyy, mm-dd-yyyy
  // dd mm yyyy, dd/mm/yyyy, dd.mm.yyyy, dd-mm-yyyy
  isdate: function (str, monthFirst) {
    var re = /^(\d{1,2})[\s\.\/-](\d{1,2})[\s\.\/-](\d{4})$/;

    if (!re.test(str)) { return false; }
    var result = str.match(re);
    var d = parseInt(result[1]);
    var m = parseInt(result[2]);
    var y = parseInt(result[3]);
    if (monthFirst) {
      var m = parseInt(result[1]);
      var d = parseInt(result[2]);
      var y = parseInt(result[3]);
    }
    if (m < 1 || m > 12 || y < 1900 || y > 2100) { return false; }
    if (m === 2) {
      var days = ((y % 4) === 0) ? 29 : 28;
    } else if (m === 4 || m === 6 || m === 9 || m === 11) {
      var days = 30;
    } else {
      var days = 31;
    }
    return (d >= 1 && d <= days);
  },
  // returnerer true hvis "str1" er den samme som "str2"
  ismatch: function (str1, str2) {
    return str1 === str2;
  },
  // returnerer true hvis string'en kun indeholder whitespaces
  // cannot check a password type input for whitespace
  iswhitespace: function (str) { // NOT USED IN FORM VALIDATION
    var re = /[\S]/g;
    if (re.test(str)) { return false; }
    return true;
  },
  // returnerer true hvis customtjekket bliver overholdt
  customcheck: function (str, re) {
    if (re.test(str)) { return false; }
    return true;
  }
};

Validater.submitForm = function (settings, jQform, submit, lastEle) {
  /*
  N?r formularen submittes kommer vi hertil
  Valideringsarrayet k?res igennem og for 
  hver af dem tjekker vi om feltet skal
  valideres og om det s? ogs? validerer.
  */
  var invalids = [],
      valids = [];
  for (var i = 0; i < settings.valArr.length; i++) {
    var eleArr = settings.valArr[i],
                 jQele = jQform.find(eleArr[1]);

    isValid = Validater.validateField(jQele, eleArr);

    if (!isValid) {
      invalids.push([jQele, eleArr]);
    } else {
      valids.push([jQele, eleArr]);
    }
    //Der tjekkes om vi er n?et til elementet
    if (lastEle && lastEle.attr("valsubmitno") === i.toString()) {
      break;
    }
  }
  //Hvis der er sendt et lastEle med skal alerten
  //ikke vises
  if (!lastEle) {
    //Tjekker om nogen felter fejlede valideringen
    if (invalids.length == 0) {
      //Hvis ingen felter fejlede, fyres onValidateTrue
      //hvis ellers den indeholder en metode
      if (settings.onValidateTrue) { settings.onValidateTrue(this); }
      //Har formularen i forvejen en submitmetode
      //tilmeldt fyres den her. Ellers returnerer
      //vi bare true, da formularen s? kan sende
      //sit indhold til serveren
      if (submit) {
        return submit(this);
      } else {
        return true;
      }
    }

    //N?r vi hertil har et felt fejlet valideringen
    var errorTxt = "";
    //De fejlede felter k?res igennem og der laves
    //en fuld valideringstekst.
    for (var i = 0; i < invalids.length; i++) {
      errorTxt += invalids[i][1][2] + (i < invalids.length - 1 ? "\n" : "");
    }
    //Valideringsteksten alertes og onValidateFalse fyres
    alert(errorTxt);
  }
  //Advarer alle success felter
  for (var i = 0; i < valids.length; i++) {
    Validater.fieldSuccess(settings, valids[i][0], valids[i][1][2]);
  }
  //Advarer alle fejlede felter
  for (var i = 0; i < invalids.length; i++) {
    Validater.fieldFailed(settings, invalids[i][0], invalids[i][1][2]);
  }

  if (settings.onValidateFalse) { settings.onValidateFalse(this); }
  return false;
};

Validater.fieldFailed = function (settings, ele, failStr) {
  var jQele = jQuery(ele).removeClass(settings.onFieldValidateTrue);
  if (settings.onFieldValidateFalse && typeof settings.onFieldValidateFalse === "string") {
    jQele.addClass(settings.onFieldValidateFalse);
  } else if (settings.onFieldValidateFalse && typeof settings.onFieldValidateFalse === "function") {
    settings.onFieldValidateFalse(ele, failStr);
  }
};

Validater.fieldSuccess = function (settings, ele) {
  var jQele = jQuery(ele).removeClass(settings.onFieldValidateFalse);
  if (settings.onFieldValidateTrue && typeof settings.onFieldValidateTrue === "string") {
    jQele.addClass(settings.onFieldValidateTrue);
  } else if (settings.onFieldValidateTrue && typeof settings.onFieldValidateTrue === "function") {
    settings.onFieldValidateTrue(ele);
  }
};

Validater.validateField = function (jQele, eleArr) {
  var str = jQele.val();
  /*
  Her benyttes Validater klassen til at tjekke
  om feltet validerer. Det udnyttes af alle 
  objekter ogs? kan findes p? deres string navn.
  */
  return Validater[eleArr[0].toLowerCase()](str, eleArr[3] ? eleArr[3] : null, eleArr[4] ? eleArr[4] : null);
};

var shiftTime = 700, timeOut = 6000;
function initImagePaging() {
  var imageGalleryContainer = jQuery(".imageGalleryContainer");
  if (imageGalleryContainer[0]) {
    imageGalleryContainer.each(function () {
      initSingleGallery(jQuery(this));
    });
  }
}

function initSingleGallery(imageGalleryContainer) {
  var images = imageGalleryContainer.children("img"), foreGround = imageGalleryContainer.parent().children('.foreGround');
  images.eq(0).addClass("chosen");
  foreGround.animate({ opacity: 0 }, shiftTime, function () {
    foreGround.css("display", "none").children().css("display", "none");
  });
  if (images.length > 1) {
    window.setTimeout(function () {
      shiftImage(foreGround, images);
    }, timeOut + shiftTime);
  }
}

function shiftImage(foreGround, images) {
  var thisImage = images.filter(".chosen");
  foreGround.css("display", "block");
  foreGround.animate({ opacity: 1 }, shiftTime / 2, function () {
    thisImage.removeClass("chosen");
    var nextImage = thisImage.next("img");
    if (!nextImage[0])
      nextImage = images.eq(0);
    nextImage.addClass("chosen");
    foreGround.animate({ opacity: 0 }, shiftTime / 2, function () {
      foreGround.css("display", "none");
    });
  });
  window.setTimeout(function () {
    shiftImage(foreGround, images);
  }, timeOut + shiftTime);
}

//Erstatter alle matches med den medsendte tekst
String.prototype.replaceAll = function (matchStr, replaceStr) {
  return this.replace(matchStr + "/g", replaceStr);
};
function getURLParam(strParamName) {
  return getParameterFromLink(strParamName, window.location.href);
}
function getParameterFromLink(strParamName, link) {
  var strReturn = "";
  var strHref = link;
  if (strHref.indexOf("?") > -1) {
    var strQueryString = strHref.substr(strHref.indexOf("?"));
    var aQueryString = strQueryString.split("&");
    for (var iParam = 0; iParam < aQueryString.length; iParam++) {
      if (aQueryString[iParam].indexOf(strParamName + "=") > -1) {
        var aParam = aQueryString[iParam].split("=");
        strReturn = aParam[1];
        break;
      }
    }
  }
  return unescape(strReturn);
}
