// Sammlung, der nicht mit Werten initialisierten Variablen
var i, e;
var browserAtributeLength, browserId;
var imgCountTotal, lowImageSrc, highImageSrc, currentImg, currentState, currentAct, currentPerm, checkLoad;
var divNum, documentLeftScroll, documentTopScroll, mouseX, mouseY, loopDragging;
var speedHorizontal, speedVertical, currrentLeft, currrentTop, goup, godown, speed, currentObjNo;
var setDivPosition, currentObjId, currentSpeed, currenDirection, currentDelay;
var diffWidth,diffHeight, lastWidth, lastHeight, currentDiv;
var popup_window, winUrl;
// vorbelegte Variablen
var ua                  = navigator.userAgent.toLowerCase();
var an                  = navigator.appName.toLowerCase();
var writeUserAgent      = 'User Agent: <strong>' + ua + '</strong><br /><br />';
var writeAplicationName = 'Aplication Name: Pretends to be <strong>' + an + '</strong><br /><br />';
var currentStep         = 0;
var windowWidth         = 0;
var windowHeight        = 0;
var browserVersion      = 0;
var loaded              = 0;
var looping             = -1;
var slideCount          = -1;
var writeBrowser        = "";
var tempAct             = "";
var slideNumber         = "";
var slideDescription    = "";
var divLeft             = "";
var divTop              = "";
var highImages          = new Array();
var lowImages           = new Array();
var slideText           = new Array();
var permanentActive     = new Array();
var slideImages         = new Array();
var supportedOS         = false;
var supportedVersion    = false;
var currentLoop         = false;
var dragAllowed         = false;
var divIsMoving         = false;

if (typeof slideImagesColection != 'undefined') {
  var slideAmount       = slideImagesColection.length;
}

// default Browsermuster, welches zum Einsatz kommt, wenn es nicht durch eines in der Contentseite implementiertes ueberschrieben wird
// - Erklaerung zum Muster s. Beispielseite >> 'bmw_scriptlib_browsercheck_example.html'
if (typeof browser != 'object') {
  browser     = new Array();
  browser[0]  = new Array('Opera',    'opera ',     '7.5', '',        '',             '');
  browser[1]  = new Array('Safari',   'safari/',    '125', '',        'mac os x',     '');
  browser[2]  = new Array('Netscape', 'netscape/',  '6.1', 'windows', 'mac os x',     'other');
  browser[3]  = new Array('Mozilla',  'rv:',        '1.5', 'windows', 'mac os x',     'other');
  browser[4]  = new Array('MSIE',     'msie ',      '5.1', 'windows', 'mac_powerpc',  '');
  browser[5]  = new Array('Netscape4','mozilla/',   '6.1', 'windows', 'mac os x',     'other');
}
// browsercheck, der den aktuellen client gegen das Muster prueft
function checkClient() {
  var browserLength = browser.length;
  for (i = 0; i < browserLength; i++) {
    browserAtributeLength = browser[i].length;
    if (ua.indexOf(browser[i][1]) != -1) {
      browserId = browser[i][0];
      for (e = 3; e < browserAtributeLength; e++) {
        if (browser[i][e] != '' && ua.indexOf(browser[i][e]) != -1) {
            supportedOS = true;
            break;
        }
        else {
          supportedOS = false;
        }
      }
      browserVersion = ua.split(browser[i][1]);
      browserVersion = browserVersion[1].slice(0,3);
      if (browserVersion >= browser[i][2]) {
        supportedVersion = true;
      }
      else {
        supportedVersion = false;
      }
      break;
    }
    else {
      browserId = 'unknown';
    }
  }
  
}
// END of browsercheck

// Mouseover-Image-preloader
// muss onload geladen werden - geht alle images durch, die das nicht leere Pseudoattribut 'preload' tragen. 
// Der Wert fuer preload muss der relative oder absolute URL des bildes oder der reine Sourcen - Name sein
function preload() {
  imgCountTotal = document.images.length;
  for (i = 0; i < imgCountTotal; i++) {
    if (typeof document.getElementsByTagName('img')[i].getAttribute('preload') == 'string') {
      lowImageSrc = document.getElementsByTagName('img')[i].src;
      if (document.getElementsByTagName('img')[i].getAttribute('preload').indexOf('/') != -1) {
        highImageSrc = document.getElementsByTagName('img')[i].getAttribute('preload');
      }
      else {
        var highImageUrl = lowImageSrc.split('/');
        var fileLevel = highImageUrl.length;
        var highImagePath = '';
        for (e = 0; e < fileLevel - 1; e++) {
          highImagePath += highImageUrl[e] + '/';
        }
        highImageSrc = highImagePath + document.getElementsByTagName('img')[i].getAttribute('preload');
      }
      highImages[document.images[i].id] = new Image();
      highImages[document.images[i].id].src = highImageSrc;
      lowImages[document.images[i].id] = new Image();
      lowImages[document.images[i].id].src = lowImageSrc;
    }
    if (i == imgCountTotal - 1) {
      loaded = 1;
    }
  }
}
// End of preloader

// die Funktion uebernimmt onmouesover und onclick imagehighlighting (bzw. src - Tausch)
// Pflichtparameter, die der Funktion mitgegeben werden muessen:
// - imgId     : String             : ID des zu manipulierenden Bildes
// - state     : 0 oder 1           : 1 bewirkt highlight
// optionale Parameter:
// - act       : 0 oder 1           : 1 steht fuer aktives highlight, welches erst durch ein aktives highlight einer anderen source aufgehoben wird
//                                    Wert muss mit 'state' uebereinstimmen
// - permanent : 0 oder 1           : 1 steht fuer permanentes highlight, welches erst durch explizites ausschalten per Funktion wieder aufgehoben wird
//                                    - der Wert von 'state' und 'act' muss der gleiche sein
// - dropPerm  : String oder 'all'  : ID des Bildes dessen permanentes highlighting aufgehoben werden soll - muss nicht identisch mit imgId sein
//                                    (so dass in einem Schritt ein Bild gehighlightet und bei einem anderen das permanente highlight geloescht werden kann)
//                                    - oder der String 'all', der zu einem Aufruf der Funktion 'dropPermanentAll ()' fuehrt (s.u.)
function switchImage(imgId,state,act,permanent,dropPerm) {
  currentImg = imgId;
  currentState = state;
  currentAct= act;
  currentPerm = permanent;
  if (typeof dropPerm == 'string' && dropPerm != 'all') {
    document.getElementsByTagName('img')[dropPerm].src = lowImages[dropPerm].src;
    delete permanentActive[dropPerm];
    if (dropPerm == tempAct) {
      tempAct = '';
    }
  }
  else if (dropPerm == 'all') {
    dropPermanentAll ();
  }
  if (loaded == 1) {
    clearTimeout(checkLoad);
    if (tempAct != '' && imgId != tempAct && act == 1 && !permanentActive[tempAct]) {
      document.getElementsByTagName('img')[tempAct].src = lowImages[tempAct].src;
    }
    if ((tempAct == '' || imgId != tempAct) && !permanentActive[imgId]) {
      if (state == 1) {
        document.getElementsByTagName('img')[imgId].src = highImages[imgId].src;
      }
      else {
        document.getElementsByTagName('img')[imgId].src = lowImages[imgId].src;
      }
    }
    if (act == 1) {
      tempAct = imgId;
    }
    if (permanent == 1) {
      permanentActive[imgId] = imgId;
    }
  }
  else {
    checkLoad = setTimeout('switchImage(currentImg,currentState,currentAct,currentPerm)',50);
  }
}
// loescht alle permanenten highlights
function dropPermanentAll () {
  for (var dropImg in permanentActive) {
    document.getElementsByTagName('img')[dropImg].src = lowImages[dropImg].src;
    delete permanentActive[dropImg];
  }
  // switch active image to lowlight
  if (tempAct != '') {
    document.getElementsByTagName('img')[tempAct].src = lowImages[tempAct].src;
    tempAct = '';
  }
}

// slideshow / Diashow / Imageanimation
// benoetigt eine Grafik mit der ID 'slideshow' (Bezeichnung diskutierbar - wie alle Bezeichnungen...)

// Schleife ueber den Array 'slideImages', der in der Contentseite eingepflegt sein muss, um die Funktion 
// 'setSlideshow' nutzen zu koennen (s. 'bmw_scriptlib_images_example.html')
for (i = 0; i < slideAmount; i++) {
  slideImages[i] = new Image();
  slideImages[i].src = slideImagesColection[i];
}
// Funktion fuer die Diashow/Animation
// Pflichtparameter:
// - direction : 'forward' / 'backward' : die Richtung, in die gewechselt werden soll - Richtung ist Reihenfolge im Array von links nach rechts
// Optionale Parameter:
// - delay     : Nummer : wird kein Wert uebergeben, wird genau nur einmal getauscht (vor oder zurueck, je nach Angabe)
//               'delay' kann aber auch mit einer Zahl belegt werden, die dann die Wiederholrate des setTimeouts fuer die Animation bestimmt - 
//               wenn also der Wert belegt ist, wird die Animation gestartet
function setSlideshow(direction,delay) {
  currenDirection = direction;
  currentDelay = delay;
  if (direction == "forward") {
    slideCount ++;
    if (slideCount > slideAmount - 1) {
      slideCount = 0;
    }
  }
  else if (direction == "backward") {
    slideCount --;
    if (slideCount < 0) {
      slideCount = slideAmount - 1;
    }
  }
  else {
    slideCount = 0;
  }
  if (delay) {
    looping = setTimeout("setSlideshow(currenDirection,currentDelay)",currentDelay);
  }
  else {
    clearTimeout(looping);
    looping = -1;
  }
  document.getElementById('slideshow').src = slideImages[slideCount].src;
}
// Animation starten wenn nicht an und stoppen, wenn an...
// Optionale Parameter:
//    falls 'direction' und 'delay' nicht uebergeben werden, werden die initialen oder bereits schon mal uebergebenen Werte aus 'setSlideshow(direction,delay)'
//    uebernommen - es koennen aber auch Werte neu uebergeben werden - zum Beispiel wenn die Animation nicht onload gestartet wurde
//    oder wenn die Richtung gewechselt werden soll
// Platzhalter: null
function toggleSlideshow(direction,delay) {
  if (!direction) {
    direction = currenDirection;
  }
  if (!delay) {
    delay = currentDelay;
  }
  if (looping > -1) {
    clearTimeout(looping);
    looping = -1;
  }
  else {
    setSlideshow(direction,delay);
  }
}
// einem Element eine neue Klasse zuweisen
// Pflichtparameter:
// - tagId : String : ID des zu manipulierenden Elements. Siehe mehr dazu auch weiter unten.
// - nameOfClass : String : Bezeichner fuer die neue css - Klasse die auf das Objekt angewendet werden soll
function setClassName(tagId,nameOfClass) {
  if (typeof tagId != 'object') {
    tagId = document.getElementById(tagId);
  }
  tagId.className = nameOfClass;
}
// liefert diverse Infos ueber das Objekt, welches im Parameter 'layer' uebergeben wird - fuer die gewuenschte Info
// muss der entsprechende Schluessel in 'attribute' mit uebergeben werden
function getDivInformation(layer,attribute) {
  divInformation = new Array();
  if (typeof layer != 'object') {
    layer = document.getElementById(layer);
  }
  divInformation['offsetLeft']  = layer.offsetLeft;
  divInformation['offsetTop']   = layer.offsetTop;
  divInformation['styleLeft']   = parseInt(layer.style.left);
  divInformation['styleTop']    = parseInt(layer.style.top);
  divInformation['width']       = layer.offsetWidth;
  divInformation['height']      = layer.offsetHeight;
  divInformation['visibility']  = layer.style.visibility;
  divInformation['display']     = layer.style.display;
  divInformation['zIndex']      = layer.style.zIndex;
  return divInformation[attribute];
}
// in div schreiben
function writeIntoLayer(objId,content) {
  if (typeof objId != 'object') {
    objId = document.getElementById(objId);
  }
  objId.innerHTML = content;
}
// Bewegt Objekte entweder ohne oder mit Verzoegerung
// Pflichtparameter:
// - objId      : Objekt/String : ID des zu Bewegenden Elements. Wird der Parameter nicht als Objekt uebergeben, unterstellt die Funktion, dass 
//                                es das Objekt schon irgendwo in der Seite geben wird und spricht ein Objekt mit dem uebergebenen
//                                String an 'objId = document.getElementById(objId)'
// - left / top : Number        : Es muss mindestens einer von beiden Parametern uebergeben werden. Die Zahl steht fuer die Position in Pixeln von links oder oben gemessen.
//                                Es koennen auch beide gefuellt sein, um das Objekt auf beiden Achsen zu versetzen
// Optionale Parameter:
// - speed      : Number        : Wird speed gesetzt so geschieht die Neupositionierung ueber pixelweises versetzen - die Zahl gibt die Anzahl der Pixel an, um die verschoben wird 
//                                - je hoeher der Wert desto schneller (der Timeout ist bereits 'maximales minimum')
//                                es sollte beim verschieben (im Gegesatz zum versetzen) immer nur auf einer Achse verschoben werden - d.h. nur left ODER top setzen.
//                                wenn gewuenscht, habe ich die Funktion auch zum diagonalen verschieben parat - dies ist hier nicht vorgesehen - es kommt hier bei der 
//                                Angabe beider Positionen zu ungeraden Wegen (s. bewegen von 'clipTest' im Beispiel 'bmw_scriptlib_moving_modding_example.html')
// Platzhalter: soll ein Parameter vor dem letzten benutzten nicht verwendet werden, dann an der betreffenden Stelle ein Leerstring eintragen werden ('')
function moveObject(objId,left,top,speed) {
  if (typeof objId != 'object') {
    objId = document.getElementById(objId);
  }
  if (left) {
    divLeft = left;
  }
  else if (typeof left == 'undefined' || typeof left == 'string') {
    divLeft = getDivInformation(objId,'offsetLeft');
  }
  if (top) {
    divTop = top;
  }
  else if (typeof top == 'undefined' || typeof top == 'string') {
    divTop = getDivInformation(objId,'offsetTop');
  }
  if (speed) {
    if (!divIsMoving) {
      currrentLeft = getDivInformation(objId,'offsetLeft');
      currrentTop  = getDivInformation(objId,'offsetTop');
    }
    var horizontalRange = currrentLeft - divLeft;
    var verticalRange   = currrentTop - divTop;
    currentObjId = objId;
    currentSpeed = speed;
    currentStep ++;
    if (left != '' || left == 0) {
      if (horizontalRange > 0) {
        objId.style.left = (currrentLeft - Math.round(currentStep * speed)) + 'px';
        if (divLeft - getDivInformation(objId,'offsetLeft') > 5) {
          objId.style.left = divLeft + 'px';
        }
      }
      else if (horizontalRange < 0) {
        objId.style.left = (currrentLeft + Math.round(currentStep * speed)) + 'px';
        if (divLeft - getDivInformation(objId,'offsetLeft') < 5) {
          objId.style.left = divLeft + 'px';
        }
      }
    }
    if (top != '' || top == 0) {
      if (verticalRange > 0) {
        objId.style.top = (currrentTop - Math.round(currentStep * speed)) + 'px';
        if (divTop - getDivInformation(objId,'offsetTop') > 5) {
          objId.style.top = divTop + 'px';
        }
      }
      else if (verticalRange < 0) {
        objId.style.top = (currrentTop + Math.round(currentStep * speed)) + 'px';
        if (divTop - getDivInformation(objId,'offsetTop') < 5) {
          objId.style.top = divTop + 'px';
        }
      }
    }
    if (getDivInformation(objId,'offsetLeft') == left && getDivInformation(objId,'offsetTop') == top) {
      divIsMoving = false;
      currentStep = 0;
      divLeft = 0;
      divTop = 0;
      clearTimeout(setDivPosition);
    }
    else {
      divIsMoving = true;
      setDivPosition = setTimeout('moveObject(currentObjId,divLeft,divTop,currentSpeed)',10);
    }
  }
  else {
    if (divLeft != '') {
      objId.style.left = left + 'px';
    }
    if (divTop != '') {
      objId.style.top = top + 'px';
    }
  }
}
function moveObjectBack(objId,speed) {
  alert(currrentTop);
  moveObject(objId,currrentLeft,currrentTop,speed);
}
// liefert x und y Koordinaten des Mauszeigers
// die Funktion MUSS ohne Parameter aufgerufen werden, am besten gkoppelt an ein event. Z.B.:
// document.onmousemove = mousePosition;
// hernach kann mit mouseX und mouseY auf die Werte zugegriffen werden.
function mousePosition(currentevent){
  if(window.event) {
    currentevent = window.event;
  }
  mouseX = currentevent.clientX;
  mouseY = currentevent.clientY;
}
// Auslesen von Infos zum window und document Objekt
// als Parameter wird der Schluessel fuer den Wert erwartet, den man geliefert bekommen moechte
function getWindowInformation(value) {
  windowInformation = new Array();
  windowInformation['winWidth'] = document.body.clientWidth;
  if (document.body.clientHeight == 0) {
    windowInformation['winHeight'] = window.innerHeight;
  }
  else {
    windowInformation['winHeight'] = document.body.clientHeight;
  }
  windowInformation['docWidth'] = document.body.scrollWidth;
  windowInformation['docHeight'] = document.body.scrollHeight;
  windowInformation['scrollLeft'] = document.body.scrollLeft;
  windowInformation['scrollTop'] = document.body.scrollTop;
  return windowInformation[value];
}
// Sichtbarkeit und Dispalay eines Objektes setzen
// Pflichtparameter:
// - objId      : Objekt/String :  ID des zu manipulierenden Elements. Siehe mehr dazu auch oben.
// wird kein weiterer Parameter uebergeben, wird die Sichtbarkeit 'getoggelt'
// Optionale Parameter:
// - visibility : 0 / 1         : 1 steht fuer sichtbar machen
// - display    : String        : Wird fuer display ein Style eingetragen, wird dieser zusaetzlich oder alternativ auf das Objekt uebertragen
// Platzhalter fuer nicht benoetigte Parameter: null (natuerlich nicht am Ende notwendig)
function setVisibility(objId,visibility,display) {
  if (typeof objId != 'object') {
    objId = document.getElementById(objId);
  }
  if (typeof visibility == 'undefined' && typeof display == 'undefined') {
    var currentState = getDivInformation(objId,'visibility');
    if (currentState == 'hidden') {
      objId.style.visibility = 'visible';
    }
    else {
      objId.style.visibility = 'hidden';
    }
  }
  else if(visibility == 1) {
      objId.style.visibility = 'visible';
  }
  else if(visibility == 0) {
    objId.style.visibility = 'hidden';
  }
  if(display) {
    objId.style.display = display;
  }
}
// setzt Z-Index
// Pflichtparameter:
// - objId : Objekt/String :  ID des zu manipulierenden Elements. Siehe mehr dazu auch oben.
//                            String an 'objId = document.getElementById(objId)'
// - n     : Nummer        :  Steht fuer die Indexnummer 
function setZIndex(obj,n) {
  if (typeof obj != 'object') {
    obj = document.getElementById(obj);
  }
  obj.style.zIndex = n;
}
// Neue Groesse fuer ein Objekt
// Pflichtparameter:
// - objId                : Objekt/String :  ID des zu manipulierenden Elements. Siehe mehr dazu auch oben.
// - newWidth / newHeight : Nummer        :  mindestens einer der Werte muss uebergeben werden. Wert = neues Ma&szlig; in Pixeln
// Platzhalter fuer nicht benoetigte Parameter: null
function resizeLayer(objId, newWidth, newHeight) {
  if (typeof objId != 'object') {
    objId = document.getElementById(objId);
  }
  currentDiv = objId;
  lastWidth = getDivInformation(objId,'width');
  lastHeight = getDivInformation(objId,'height');
  if (newWidth) {
    objId.style.width = newWidth + 'px';
  }
  if (newHeight) {
    objId.style.height = newHeight + 'px';
  }
}
// Neuer Ausschnitt von einem Objekt
// Pflichtparameter:
// - objId                 : Objekt/String :  ID des zu manipulierenden Elements. Siehe mehr dazu auch oben.
// - top/right/bottom/left : Nummer        :  ALLE Werte muessen uebergeben werden. Beschreibt die Ma&szlig;e eines Rechtecks
//                                            das Objekt wird in der Groesse beschnitten - fuer Groessenaenderungen bitte 'resizeLayer(objId, newWidth, newHeight)' nutzen
function clipLayer(objId, top, right, bottom, left) {
  if (typeof objId != 'object') {
    objId = document.getElementById(objId);
  }
  currentDiv = objId;
  lastWidth = getDivInformation(objId,'width');
  lastHeight = getDivInformation(objId,'height');
  objId.style.clip = "rect("+top+"px "+right+"px "+bottom+"px "+left+"px)";
}
// only for testing - dunno if it's usefull in any other case
// liefert Clipping Ma&szlig;e eines Objekts
function getClipping(objId) {
  if (typeof objId != 'object') {
    objId = document.getElementById(objId);
  }
  return objId.style.clip;
}

// CAUTION - not for multiple objects - if we'll need this for more than one object at the same time, there has some little work to be done...
// setzt ein geclipptes oder resizetes Objekt auf seine Ursprungswerte zurueck
function restoreLayer () {
  if (typeof currentDiv == 'object') {
    if (typeof currentDiv.style.width != 'undefined') {
      currentDiv.style.width = lastWidth + 'px';
    }
    if (typeof currentDiv.style.height != 'undefined') {
      currentDiv.style.height = lastHeight + 'px';
    }
    if (typeof currentDiv.style.clip != 'undefined') {
      currentDiv.style.clip = "rect("+0+"px "+lastWidth+"px "+lastHeight+"px "+0+"px)";
    }
  }
}
// Popup - Oeffner
// Pflichtparamerter:
// - popup_url    : String : URL der Datei im Popup
// - popup_name   : String : Name fuer das zu oeffnende Fenster
// - popup_with   : Nummer : Weite des Popups
// - popup_height : Nummer : Hoehe des Popups
// Optionale Parameter:
// - reopen       : 'yes'  : Wird der Parameter uebergeben, laedt sich das Fenster auf jeden Fall neu
// - myScrollbar  : 0 / 1  : 1 bedeutet Scrollbar einblenden
// - myLeftPos    : Nummer : Pixel um die das Fenster gegenueber der Zentrierung horizontal versetzt werden soll.
//                           negative Werte versetzen nach links, positive nach rechts
// - myTopPos     : Nummer : Pixel um die das Fenster gegenueber der Zentrierung vertikal versetzt werden soll.
//                           negative Werte versetzen nach oben, positive nach unten
// Platzhalter             : null
function centerPopup(popup_url,popup_name,popup_with,popup_height,reopen,myScrollbar,myLeftPos,myTopPos) {
  if(!myLeftPos)  {myLeftPos    = 5;}
  if(!myTopPos)   {myTopPos     = 15;}
  if(!myScrollbar){myScrollbar  = 0;}
  var popup_left                = (window.screen.width/2)  - (popup_with/2 + myLeftPos);
  var popup_top                 = (window.screen.height/2) - (popup_height/2 + myTopPos);
  if ((typeof popup_window != 'object') || (typeof popup_window == 'object' && popup_window.closed)) {
    if (document.all) {
      var xyPos                 = 'left=' + popup_left + ',top=' + popup_top;
    }
    else {
      var xyPos                 = 'screenX=' + popup_left + ',screenY=' + popup_top;
    }
    popup_window                = window.open(popup_url, popup_name, "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=" + myScrollbar + ",resizable=no,width=" + popup_with + ",height=" + popup_height + ",copyhistory=no," + xyPos + "");
    popup_window.opener         = self;
    popup_window.focus();
    winUrl                      = popup_url;
    windowWidth                 = popup_with;
    windowHeight                = popup_height;
  }
  else {
    if ((winUrl != popup_url) || reopen) {
      popup_window.location.href = popup_url;
    }
    if ((windowWidth + windowHeight > 0) && (popup_with != windowWidth || popup_height != windowHeight || myLeftPos != diffWidth || myTopPos != diffHeight)) {
      var newWidth              = popup_with  - windowWidth;
      var newHeight             = popup_height - windowHeight;
      popup_window.resizeBy(newWidth,newHeight);
      popup_window.moveTo(popup_left,popup_top);
    }
    popup_window.focus();
    winUrl                      = popup_url;
    windowWidth                 = popup_with;
    windowHeight                = popup_height;
  }
  diffWidth                     = myLeftPos;
  diffHeight                    = myTopPos;
}

// taken from former scriptlib
//neu machen? ich denke, ist ok
function splitSearchstring() {
  parameterArray = unescape(self.location.search).substring(1).split("&");
  if (unescape(self.location.search).indexOf("=") == -1) {return;}
  for (var i=0;i<parameterArray.length;i++) {
    parameterArray[i] = parameterArray[i].split("=");
    eval("query." + parameterArray[i][0] + " = \"" + parameterArray[i][1] + "\"");
  }
}

//ok
function emailCheck(emailStr) {
  var emailPat=/^(.+)@(.+)$/;
  var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
  var validChars="\[^\\s" + specialChars + "\]";
  var quotedUser="(\"[^\"]*\")";
  var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
  var atom=validChars + '+';
  var word="(" + atom + "|" + quotedUser + ")";
  var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
  var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
  var matchArray=emailStr.match(emailPat)
  if (matchArray==null) {
    return false;
  }
  var user=matchArray[1]
  var domain=matchArray[2]
  if (user.match(userPat)==null) {
    return false;
  }
  var IPArray=domain.match(ipDomainPat);
  if (IPArray!=null) {
    for (var i=1;i<=4;i++) {
      if (IPArray[i]>255) {
        return false;
      }
    }
    return true;
  }
  var domainArray=domain.match(domainPat);
  if (domainArray==null) {
    return false;
  }
  var atomPat=new RegExp(atom,"g");
  var domArr=domain.match(atomPat);
  var len=domArr.length;
  if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>4) {
    return false;
  }
  if (len<2) {
    return false;
  }
  return true;
}
// END of taken from former scriptlib
