/*********************************************************************
 * Layer functions
 *********************************************************************/

function showLayer(id) {
  if (document.layers) {
   document.layers[id].visibility = 'show';
  } else if (document.getElementById) {
    document.getElementById(id).style.visibility = 'visible';
  } else if (document.all) {
    document.all[id].style.visibility = 'visible';
  }
}

function hideLayer(id) {
  if (document.layers) {
    document.layers[id].visibility = 'hide';
  } else if (document.getElementById) {
    document.getElementById(id).style.visibility = 'hidden';
  } else if (document.all) {
    document.all[id].style.visibility = 'hidden';
  }
}

function changeCursor(id, value) {
  if (document.layers) {
    document.layers[id].cursor = value;
  } else if (document.getElementById) {
    document.getElementById(id).style.cursor = value;
  } else if (document.all) {
    document.all[id].style.cursor = value;
  }
}

/*********************************************************************
 * Fancy stuff
 *********************************************************************/

function highlightInfoMessage() {
    new Effect.Pulsate('infoMessage', {
        delay: 1,
        duration: 1,
        from: 0.3,
        pulses: 2,
        queue: {position: 'end', scope:'infoMessage'}});
    
    new Effect.Fade('infoMessage', {
        duration: 0.8, delay: 4,
        queue: {position: 'end', scope:'infoMessage'}});
}

function flashShoppingCart() {
    if($('shoppingCartBody')) {
        new Effect.Pulsate('shoppingCartBody', {
            duration: 1,
            from: 0.3,
            pulses: 3,
            queue: {position: 'end', scope:'shoppingCart'}});
    }
}


/*********************************************************************
 * Format fields
 *********************************************************************/
 
function trim(elem) {
  elem.value = elem.value.replace(/^\s+|\s+$/g, "");
}

/*
String.prototype.ltrim = function() {
  return this.replace(/^\s+/, "");
}
String.prototype.rtrim = function() {
  return this.replace(/\s+$/, "");
}
*/

function formatDate(elem) {
  if (elem.value.match(/^(\d{4})(\d{2})(\d{2})$/)) {
    str = RegExp.$1 + "-";
    str += RegExp.$2 + "-";
    str += RegExp.$3;
    elem.value = str;
  }
}

function formatDateAndTime(elem) {
  if (
    elem.value.match(/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/) ||
    elem.value.match(/^(\d{4})(\d{2})(\d{2}) (\d{2})(\d{2})(\d{2})$/)
  ) {
    str = RegExp.$1 + "-";
    str += RegExp.$2 + "-";
    str += RegExp.$3 + " ";
    str += RegExp.$4 + ":";
    str += RegExp.$5 + ":";
    str += RegExp.$6;
    elem.value = str;
  }
}

function formatIsbn13(elem) {
  if (elem.value.match(/^(\d{3})(\d{2})(\d{4})(\d{3})(\d{1})$/)) {
    str = RegExp.$1 + "-";
    str += RegExp.$2 + "-";
    str += RegExp.$3 + "-";
    str += RegExp.$4 + "-";
    str += RegExp.$5;
    elem.value = str;
  }
}

function formatIsbn10(elem) {
  if (elem.value.match(/^(\d{2})(\d{4})(\d{3})(\d{1})$/)) {
    str = RegExp.$1 + "-";
    str += RegExp.$2 + "-";
    str += RegExp.$3 + "-";
    str += RegExp.$4;
    elem.value = str;
  }
}

function formatPersonalCodeNumber(elem) {
  if (elem.value.match(/^(\d{8})(\d{4})$/)) {
    str = RegExp.$1 + "-";
    str += RegExp.$2;
    elem.value = str;
  }
}

function formatPrice(elem) {
  if (elem.value.match(/^(\d{1,6})$/)) {
    str = RegExp.$1 + ":00";
    elem.value = str;
  } else if (elem.value.match(/^(\d{1,6})\:(\d{1,1})$/)) {
    str = RegExp.$1 + ":";
    str += RegExp.$2 + "0";
    elem.value = str;
  } else if (elem.value.match(/^(\d{1,6})\.(\d{1,1})$/)) {
    str = RegExp.$1 + ":";
    str += RegExp.$2 + "0";
    elem.value = str;
  } else if (elem.value.match(/^(\d{1,6})\,(\d{1,1})$/)) {
    str = RegExp.$1 + ":";
    str += RegExp.$2 + "0";
    elem.value = str;
  } else if (elem.value.match(/^(\d{1,6})\.(\d{2,2})$/)) {
    str = RegExp.$1 + ":";
    str += RegExp.$2;
    elem.value = str;
  } else if (elem.value.match(/^(\d{1,6})\,(\d{2,2})$/)) {
    str = RegExp.$1 + ":";
    str += RegExp.$2;
    elem.value = str;
  }
}


/*********************************************************************
 * Validate fields
 *********************************************************************/
 
function getRadioValue(radioObj) {
  if (!radioObj) return "";

  var radioLength = radioObj.length;

  if (radioLength == undefined) {
    if (radioObj.checked) {
      return radioObj.value;
    } else {
      return "";
    }
  }

  for (var i = 0; i < radioLength; i++) {
    if (radioObj[i].checked) {
      return radioObj[i].value;
    }
  }

  return "";
}

function getRadioIndex(radioObj) {
  if (!radioObj) return 0;

  var radioLength = radioObj.length;

  if (radioLength == undefined) {
    if (radioObj.checked) {
      return 0;
    } else {
      return 0;
    }
  }

  for (var i = 0; i < radioLength; i++) {
    if (radioObj[i].checked) {
      return i;
    }
  }

  return 0;
}

function isEmpty(elem) {
  return elem.value.length == 0;
}

function isNumeric(elem, str) {
  if (elem.value.match(/^[0-9]+$/)) {
    return true;
  }

  alert("Fältet " + str + " får endast innehålla siffror!");
  elem.focus();

  return false;
}

function lengthRestriction(elem, min, max, str) {
  if (elem.value.length >= min && elem.value.length <= max) {
    return true;
  }

  if (min == max) {
    alert("Fältet " + str + " måste innehålla " + min + " tecken!");
  } else {
    alert("Fältet " + str + " måste innehålla mellan " + min + " och " + max + " tecken!");
  }

  elem.focus();

  return false;
}

function validateCategories(elemArr, str) {
  for (i = 0; i < elemArr.length; i++) {
    if (elemArr.options[i].selected) {
      return true;
    }
  }
  
  alert("Minst ett alternativ måste väljas i fältet " + str + ".");
  elemArr.focus();
  
  return false;
}

function validateDate(elem, str) {
  if (elem.value.match(/^(\d{4})\-(\d{2})\-(\d{2})$/)) {
    var monthArray = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
    var curDate    = new Date();
    var curDay     = curDate.getDate();
    var curMonth   = curDate.getMonth() + 1;
    var curYear    = curDate.getYear();
    var selYear    = RegExp.$1;
    var selMonth   = RegExp.$2;
    var selDay     = RegExp.$3;

    if (curYear < 1900) {
      curYear += 1900;
    }

    if (selYear < 1901 || selYear > curYear) {
      alert("Fältet " + str + " innehåller felaktigt år!");
      elem.focus();

      return false;
    }

    if (selMonth < 1 || selMonth > 12 || (selYear == curYear && selMonth > curMonth)) {
      alert("Fältet " + str + " innehåller felaktig månad!");
      elem.focus();

      return false;
    }

    if (selYear % 400 == 0 || (selYear % 4 == 0 && selYear % 100 != 0)) {
      monthArray[1] = 29;
    }

    if (selDay < 1 || selDay > monthArray[selMonth - 1] || (selYear == curYear && selMonth == curMonth && selDay > curDay)) {
      alert("Fältet " + str + " innehåller felaktig dag!");
      elem.focus();

      return false;
    }

    return true;
  }

  alert("Fältet " + str + " är felaktigt!\nDatumet måste ha formatet ÅÅÅÅ-MM-DD.");
  elem.focus();

  return false;
}

function validateDateAndTime(elem, str) {
  if (elem.value.match(/^(\d{4})\-(\d{2})\-(\d{2}) (\d{2})\:(\d{2})\:(\d{2})$/)) {
    var monthArray = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
    var curDate    = new Date();
    var curDay     = curDate.getDate();
    var curMonth   = curDate.getMonth() + 1;
    var curYear    = curDate.getYear();
    var curHour    = curDate.getHours();
    var curMinute  = curDate.getMinutes();
    var curSecond  = curDate.getSeconds();
    var selYear    = RegExp.$1;
    var selMonth   = RegExp.$2;
    var selDay     = RegExp.$3;
    var selHour    = RegExp.$4;
    var selMinute  = RegExp.$5;
    var selSecond  = RegExp.$6;

    if (curYear < 1900) {
      curYear += 1900;
    }

    if (selYear < 1901 || selYear > curYear) {
      alert("Fältet " + str + " innehåller felaktigt år!");
      elem.focus();

      return false;
    }

    if (selMonth < 1 || selMonth > 12 || (selYear == curYear && selMonth > curMonth)) {
      alert("Fältet " + str + " innehåller felaktig månad!");
      elem.focus();

      return false;
    }

    if (selYear % 400 == 0 || (selYear % 4 == 0 && selYear % 100 != 0)) {
      monthArray[1] = 29;
    }

    if (selDay < 1 || selDay > monthArray[selMonth - 1] || (selYear == curYear && selMonth == curMonth && selDay > curDay)) {
      alert("Fältet " + str + " innehåller felaktig dag!");
      elem.focus();

      return false;
    }

    if (selHour < 0 || selHour > 23)  {
      alert("Fältet " + str + " innehåller felaktig timme!");
      elem.focus();

      return false;
    }

    if (selMinute < 0 || selMinute > 59)  {
      alert("Fältet " + str + " innehåller felaktig minut!");
      elem.focus();

      return false;
    }

    if (selSecond < 0 || selSecond > 59)  {
      alert("Fältet " + str + " innehåller felaktig sekund!");
      elem.focus();

      return false;
    }

    return true;
  }

  alert("Fältet " + str + " är felaktigt!\nDatumet måste ha formatet ÅÅÅÅ-MM-DD HH:MM:SS.");
  elem.focus();

  return false;
}

function validateEmail(elem, str) {
  if (elem.value.match(/^[\w\-%~\.]+@[\w\-\.]+\.[\w]{2,4}$/)) {
    return true;
  }

  alert("Fältet " + str + " är felaktigt!");
  elem.focus();

  return false;
}

function validateIsbn13(elem, str) {
  if (elem.value.match(/^(\d{3})\-(\d{2})\-(\d{4})\-(\d{3})\-(\d{1})$/)) {
    return true;
  }

  alert("Fältet " + str + " är felaktigt!\nISBN-13 måste ha formatet nnn-nn-nnnn-nnn-n.");
  elem.focus();

  return false;
}

function validateIsbn10(elem, str) {
  if (elem.value.match(/^(\d{2})\-(\d{4})\-(\d{3})\-(\d{1})$/)) {
    return true;
  }

  alert("Fältet " + str + " är felaktigt!\nISBN-10 måste ha formatet nn-nnnn-nnn-n.");
  elem.focus();

  return false;
}

function validatePersonalCodeNumber(elem, str) {
  if (elem.value.match(/^(\d{8})\-(\d{4})$/)) {
    return true;
  }

  alert("Fältet " + str + " är felaktigt!\nPersonnummer måste ha formatet ÅÅÅÅMMDD-XXXX.");
  elem.focus();

  return false;
}

function validatePrice(elem, str) {
  if (elem.value.match(/^(\d{1,6})\:(\d{2})$/)) {
    return true;
  }

  alert("Fältet " + str + " är felaktigt!\n.");
  elem.focus();

  return false;
}

function validatePublishIndic(indicElem, priceElem) {
/*
  if (indicElem.checked && priceElem.value == '0:00') {
    alert("Felaktigt pris vid publicering!");

    return false;
  }
*/
  return true;
}

function validateWebAddress(elem, str) {
  /*
  if (elem.value.match(/^[\w\-%~\.]+@[\w\-\.]+\.[\w]{2,4}$/)) {
    return true;
  }

  alert("Fältet " + str + " är felaktigt!");
  elem.focus();

  return false;
  */
  return true;
}

function validateYear(elem, str) {
  var curDate = new Date();
  var curYear = curDate.getYear();
  
  if (curYear < 1900) {
    curYear += 1900;
  }

  if (elem.value >= 1800 && elem.value <= curYear) {
    return true;
  }

  alert("Fältet " + str + " innehåller felaktigt år!");
  elem.focus();

  return false;
}



