var browser = navigator.userAgent.toLowerCase();
var opera = (browser.indexOf("opera") != -1);
var ie = ((browser.indexOf("msie") != -1) && (browser.indexOf("opera") == -1));
var ns4=(document.layers)?1:0;
var ns6=(!document.all && document.getElementById)?1:0;
var dodrag = false;

var subX = 25;
var subY = 25;
var posX = 0;
var posY = 0;
var posNSX = 0; // ignore scrolling pos
var posNSY = 0;

var actLayer = null;

var formsent = 0;

var penchoose = -1;

var dont_animate = false;

function open_window(url, width, height) {
    var winwidth = window.innerWidth ? window.innerWidth : window.document.body.clientWidth;
    var winheight = window.innerHeight ? window.innerHeight : window.document.body.clientHeight;
    
    var lmid = Math.floor((winwidth - width) / 2);
    var tmid = Math.floor((winheight - height) / 2);
    
    var mywin = window.open(url, 'smpopwin', 'width=' + width + ',height=' + height + ',left=' + lmid + ',top=' + tmid + ',dependent=1,location=no,menubar=no,resizable=yes,scrollbars=yes,status=no,toolbar=no');
    return false;
}


function is_function(obj) {
    if((ie && typeof obj == 'object') || typeof obj == 'function') return true;
    return false;
}


function get_element(elemname) {
 if (document.getElementById) {
   var Elem = document.getElementById(elemname);
 } else if(document.all) { // MSIE
   var Elem = document.all(elemname);
 } else {
   eval("var Elem = elemname;");
 }
  return Elem;
}

function hideInfo(myLayer, par) {
  var where;
  if(par) where = parent.document;
  else where = document;
  
  if(ns4) {
   var Elem = where.layers[myLayer];
   Elem.visibility = 'hide';
   Elem.display='none';
  } else if (ns6) {
   var Elem = where.getElementById(myLayer);
   Elem.style.visibility='hidden';
   Elem.style.display='none';
  } else if(!ns4) {
   var Elem = where.all(myLayer);
   Elem.style.visibility='hidden';
   Elem.style.display='none';
  }
}

function setHTML(field, value) {
    if(typeof field != 'object') Elem = getElement(field);
    else Elem = field;
    
    if(!Elem) return false;
    
    Elem.innerHTML = value;
    return true;
}

function getHTML(field) {
    if(typeof field != 'object') Elem = getElement(field);
    else Elem = field;
    
    if(!Elem) return false;
    
    return Elem.innerHTML;
}

function replaceHTML(field, search, replace) {
    if(typeof field != 'object') Elem = getElement(field);
    else Elem = field;
    
    if(!Elem) return false;
    
    Elem.innerHTML = stringReplace(search, replace, Elem.innerHTML);
    
    return;
}

function setClass(field, new_class) {
    var el = getElement(field);
    if(!el) return;
    
    el.className = new_class;
    return;
}

function addClass(field, new_class) {
    var el = getElement(field);
    if(!el) return;
    
    var curClass = el.className;
    
    curClass = curClass.replace(new RegExp('\s*' + new_class + '\s*','g'), '');
    el.className = curClass + ' ' + new_class;
    return;
}

function removeClass(field, new_class) {
    var el = getElement(field);
    if(!el) return;
    
    var curClass = el.className;
    curClass = curClass.replace(new RegExp('\s*' + new_class + '\s*','g'), '');
    el.className = curClass;
    return;
}

function showInfo(myLayer, par, atMousePos, addX, addY) {
  var where;
  var atx = posX + 5;
  var aty = posY + 5;
  
  if(par) {
      where = parent.document;
      atx = posNSX + 415;
      aty = posNSY + 165;
  } else {
      where = document;
  }
  
  if(addX) atx = Math.floor(atx) + Math.floor(addX);
  if(addY) aty = Math.floor(aty) + Math.floor(addY);
  
 if (ns4) {
  var Elem = where.layers[myLayer];
   Elem.visibility='show';
   Elem.display='inline';
   if(atMousePos) {
      Elem.left = atx;
      Elem.top = aty;
   }
 } else if (ns6) {
   var Elem = where.getElementById(myLayer);
   Elem.style.visibility='visible';
   Elem.style.display='inline';
   if(atMousePos) {
      Elem.style.left = atx + "px";
      Elem.style.top = aty + "px";
   }
 } else { // MSIE
   var Elem = where.all(myLayer);
   Elem.style.visibility='visible';
   Elem.style.display='inline';
   if(atMousePos) {
      Elem.style.left = atx + "px";
      Elem.style.top = aty + "px";
   }
 }
}

function showInfoClass(myLayer) {
 if (ns4) {
   var Elem = document.layers[myLayer];
 } else if (document.getElementById) {
   var Elem = document.getElementById(myLayer);
 } else { // MSIE
   var Elem = document.all(myLayer);
 }
 Elem.className = 'visdiv';
}

function getElement(elemname, style) {
    var Elem;
    
    if (document.getElementById) {
        Elem = document.getElementById(elemname);
        if(!Elem) return false;
        if(style) Elem = Elem.style;
    } else if(document.layers) {
        Elem = document.layers[elemname];
    } else if(document.all) {
        Elem = document.all(elemname);
        if(!Elem) return false;
        if(style) Elem = Elem.style;
    }
    
    return Elem;
}

function show_layer(objname) {
    var obj = getElement(objname, true);
    if(!obj) return;
    
    obj.visibility = 'visible';
    return;
}

function number_format(number, dec, noformat, is_numeric) {
    if(!dec) dec = 0; // no decimal
    
    var formatted = '';
    var negative = false;
    
    number = number.toString(); // we need a string for replacements
    if(number.substring(0, 1) == "-") negative = true;
    
    if(is_numeric) {
        number = number.replace(/[^0-9\.]/g, "");
    } else {
        number = number.replace(/[^0-9,]/g, "");
        number = number.replace(/,/, ".");
        number = number.replace(/,/g, "");
        number = number.replace(/\.$/, "");
    }
    
    if(negative == true) number = number * -1;
    
    if(noformat) return number;
    
    var tmp = Math.floor(number);
    number = number - tmp;
    
    // round to dec
    var factor = Math.pow(10, dec);
    number = number * factor;
    if(number >= 0) number = number + (0.5 / factor);
    else number = number - (0.5 / factor);
    number = Math.floor(number);
    number = number / factor;
    
    number = '' + (tmp + number);
    
    if(dec > 0) {
        // add any missing zeros
        var idc = number.indexOf('.');
        if(idc == -1) number += '.';
        number = number + factor.toString().substring(1);
    
        idc = number.indexOf('.');
        if(idc == -1) idc = number.length;
        else formatted = ',' + number.substr(idc + 1, dec);
    } else {
        idc = number.indexOf('.');
        if(idc == -1) {
            idc = number.length;
        } else {
            number = number.substr(0, idc);
        }
    }
    
    // Tausendertrennzeichen
    while(idc > 0) {
        if(idc - 3 > 0) formatted = '.' + number.substring(idc - 3, idc) + formatted;
        else formatted = number.substring(0, idc) + formatted;
        idc -= 3;
    }
    
    return formatted;
}

function goto(url) {
  location.href= url;
}

var aAJAXObjects = new Array();

function newAjaxCall() {
    for(var i = 0; i < aAJAXObjects.length; i++) {
        if(aAJAXObjects[i].locked == false) {
            aAJAXObjects[i].locked = true;
            return aAJAXObjects[i];
        }
    }
    
    aAJAXObjects[i] = new AjaxCall(i);
    aAJAXObjects[i].locked = true;
    return aAJAXObjects[i];
}

function AjaxCall(iIndex) {
    this.locked = true;
    this.request = false;
    var index = iIndex;
    
    if (window.XMLHttpRequest) { // Mozilla, Safari, Opera...
        this.request = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        try {
            this.request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (othermicrosoft) {
            try {
                this.request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (failed) {
                this.request = false;
            }
        }
    }

    if (!this.request) alert("Error initializing XMLHttpRequest!");

    this.get = function(url, callback) {
        this.request.open('GET', url, true);
        this.request.onreadystatechange = function() {
            ajaxResponse(index, callback);
        };
        this.request.send(null);
        
        return true;
    };
    
    this.post = function(url, data, callback) {
        this.request.open('POST', url, true);
        this.request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        
        this.request.onreadystatechange = function() {
            ajaxResponse(index, callback);
        };
        
        if(data && data != '') this.request.send(data);
        else this.request.send(null);
        
        return true;
    };
}

function ajaxResponse(iIndex, callback) {
    if(!aAJAXObjects[iIndex]) return;
    var oRequest = aAJAXObjects[iIndex];
    if(!oRequest.request) return;
    
    if (oRequest.request.readyState == 4) {
        var all_data;
        
        sContentType = oRequest.request.getResponseHeader("Content-Type");
        if(sContentType.indexOf("xml") == -1) all_data = oRequest.request.responseText;
        else all_data = oRequest.request.responseXML;
        
        if(is_function(callback)) {
            callback(all_data);
        } else {
            // default actions
            var data = all_data.split('||\n');
        }
        aAJAXObjects[iIndex].locked = false;
    } // end if readystate
}

var helpDisplayer = newAjaxCall();

function displayGameHelp(helptext) {
    setHTML('game_help_content', helptext);
    showInfoClass('game_help');
}

function closeGameHelp() {
    var El = getElement('game_help');
    El.className = 'hidden';
}

function displayTutorial(helptext) {
    setHTML('tutorial_content', helptext);
    showInfoClass('tutorial');
}

function closeTutorial() {
    var El = getElement('tutorial');
    El.className = 'hidden';
}


if(ns4) {
    document.captureEvents(Event.MOUSEMOVE);
    document.captureEvents(Event.MOUSEUP);
}
