$(document).ready(function() {
    
    var tfDragActive = false;
    
    var subX = 34;
    var subY = 45;
    var dragCard = $('#dragcard');
    var field = $('#arrange-field');
    var off = { 'left': 0, 'top': 0 };
    if(field.offset) {
        off = field.offset();
        if(off) {
            subX += off.left;
            subY += off.top;
        }
    }
    
    var container = $('#container');
    
    var atX = 0;
    var atY = 0;
    var realX = 0;
    var realY = 0;
    
    var bRelativeElPos = false;
    var bChecked = false;
    
    function _storeMousePos(event) {
        if(!event) event = window.event;
        
        if(typeof event.pageX == 'number') {
            atX = event.pageX;
            atY = event.pageY;
        } else {
            atX = event.clientX;
            atY = event.clientY;
            var oIEBody;
            if(document.documentElement) oIEBody = document.documentElement;
            else oIEBody = document.body;
            if (typeof oIEBody.scrollTop == "number") {
                atX += oIEBody.scrollLeft;
                atY += oIEBody.scrollTop;
            }
         }
         realX = atX;
         realY = atY;
         atX += container.scrollLeft();
         atY += container.scrollTop();
    }
    
    function _moveCardToMouse() {
        var toX = atX - subX;
        var toY = atY - subY;
        
        if(toX < -190) toX = -190;
        else if(toX > 650) toX = 650;
        if(toY < 0) toY = 0;
        else if(toY > 500) toY = 500;
        
        dragCard.css({ 'left': toX, 'top': toY, 'padding': 0 });
    }
    
    function _setCardInfo(pid, origId, bLiveGame) {
        if(!js_pdata[pid]) return;
        
        dragCard.data('pid', pid);
        dragCard.data('sourceId', origId);
        dragCard.data('livegame', (bLiveGame ? 'yes' : 'no'));
        dragCard.find('.p-pos').html(js_pdata[pid].posname);
        dragCard.find('.p-str').html(js_pdata[pid].ew);
        dragCard.find('.p-name').html(js_pdata[pid].name);
    }
    
    $(document).mouseup(function(e) {
        if(tfDragActive == false) return;
        
        var targ;
        var bRestore = true;
        if(!e) e = window.event;
        
        dragCard.hide();
        var sourceId = dragCard.data('sourceId');
        var bLiveGame = (dragCard.data('livegame') == 'yes');
        
        var bSame = false;
        
        var targ = $.getElementAtPos(realX, realY);
        if(targ) {
            if(targ.nodeType == 3) targ = targ.parentNode;
            if(!targ.id || targ.nodeName != 'DIV') targ = targ.parentNode; // if we release the mouse on the name, posname or ew value
            
            // set player data to new node
            // if source type (field, penalty, penalty6) differs from target, restore source data
            var pid = dragCard.data('pid');
            var id = targ.id;
            if(id && $(targ).hasClass('p-card')) {
                var obj;
                var sourceType, targetType;
                var posnum = 0;
                
                if(id == sourceId) bSame = true;
                
                if(id == 'penpos6') {
                    targetType = 'gamepenalty';
                } else if(id.substr(0, 8) == 'fieldpos') {
                    targetType = 'field';
                    posnum = id.substr(8);
                } else if(id.substr(0, 6) == 'penpos') {
                    targetType = 'penalty';
                    posnum = id.substr(6);
                }
                
                if(sourceId == 'penpos6') sourceType = 'gamepenalty';
                else if(sourceId.substr(0, 8) == 'fieldpos') sourceType = 'field';
                else if(sourceId.substr(0, 6) == 'penpos') sourceType = 'penalty';
                else bRestore = false;
                
                obj = $(targ);
                var prevrel = obj.attr('rel');
                var prevpid = prevrel.substr(1);
                
                obj.find('.p-pos').html(js_pdata[pid].posname);
                obj.find('.p-str').html(js_pdata[pid].ew);
                obj.find('.p-name').html(js_pdata[pid].name);
                obj.attr('rel', 'p' + pid);
                obj.removeClass('ok yellow orange red').addClass('ok');
                
                if(sourceType == targetType) {
                    bRestore = false;
                    // we need to set the data of this object to the previous one (switch positions)
                    if(prevrel && prevrel != '') {
                        var preobj = $('#' + sourceId);
                        preobj.find('.p-pos').html(js_pdata[prevpid].posname);
                        preobj.find('.p-str').html(js_pdata[prevpid].ew);
                        preobj.find('.p-name').html(js_pdata[prevpid].name);
                        preobj.removeClass('ok yellow orange red').addClass('ok');
                        preobj.attr('rel', prevrel);
                    }
                    if(targetType == 'gamepenalty') {
                        if(prevpid) js_pdata[prevpid].gamepenalty = false;
                        js_pdata[pid].gamepenalty = true;
                    } else if(targetType == 'penalty') {
                        if(prevpid) js_pdata[prevpid].penalty = js_pdata[pid].penalty;
                        js_pdata[pid].penalty = posnum;
                    } else if(targetType == 'field') {
                        if(prevpid) js_pdata[prevpid].arranged = js_pdata[pid].arranged;
                        js_pdata[pid].arranged = posnum;
                    }
                } else if(!bLiveGame) {
                    // we have to check if this player is already arranged on a different position of same type
                    if(targetType == 'gamepenalty') {
                        // set gamepenalty attrib of previous player to false
                        if(prevpid) js_pdata[prevpid].gamepenalty = false;
                        js_pdata[pid].gamepenalty = true;
                    } else if(targetType == 'penalty') {
                        // check for penalty attrib of player
                        if(js_pdata[pid].penalty && js_pdata[pid].penalty != posnum) {
                            // delete from previous position
                            obj = $('#penpos' + js_pdata[pid].penalty);
                            obj.find('.p-pos').html('');
                            obj.find('.p-str').html('');
                            obj.find('.p-name').html('');
                            obj.attr('rel', '').removeClass('ok yellow orange red');
                        }
                        js_pdata[pid].penalty = posnum;
                    } else if(targetType == 'field') {
                        // check for arranged attrib of player
                        if(js_pdata[pid].arranged != -1 && js_pdata[pid].arranged != posnum) {
                            // delete from previous position
                            obj = $('#fieldpos' + js_pdata[pid].arranged);
                            obj.find('.p-pos').html('');
                            obj.find('.p-str').html('');
                            obj.find('.p-name').html('');
                            obj.attr('rel', '').removeClass('ok yellow orange red');
                        }
                        js_pdata[pid].arranged = posnum;
                        $('#plist-entry' + pid).addClass('arranged');
                    }
                }
            } else if(id && pid && atX < subX && !bLiveGame) {
                bRestore = false;
                obj = $('#' + sourceId);
                
                if(sourceId == 'penpos6') {
                    sourceType = 'gamepenalty';
                    js_pdata[pid].gamepenalty = false;
                } else if(sourceId.substr(0, 8) == 'fieldpos') {
                    sourceType = 'field';
                    js_pdata[pid].arranged = -1;
                    $('#plist-entry' + pid).removeClass('arranged');
                } else if(sourceId.substr(0, 6) == 'penpos') {
                    sourceType = 'penalty';
                    js_pdata[pid].penalty = false;
                }
                
                if(sourceType) {
                    obj.find('.p-pos').html('');
                    obj.find('.p-str').html('');
                    obj.find('.p-name').html('');
                    obj.attr('rel', '').removeClass('ok yellow orange red');
                }
            }
        }
        
        if(bRestore == true) {
            // restore original data on original node!
            obj = $('#' + sourceId);
            pid = obj.data('pid');
            obj.find('.p-pos').html(obj.data('pos'));
            obj.find('.p-str').html(obj.data('ew'));
            obj.find('.p-name').html(obj.data('name'));
            obj.attr('rel', 'p' + pid).attr('class', obj.data('class'));
        } else if(bLiveGame && !bSame) {
            $('#arrnewplayer').val(dragCard.data('pid'));
            $('#arronpos').val(id.substr(8));
            document.arrangeform.submit();
        }
        
        // stop dragging if dragging is active
        tfDragActive = false;
    });
    
    $(document).mousemove(function(event) {
        if(tfDragActive == false) return;
        if(!event) event = window.event;
        _storeMousePos(event);
        event.preventDefault();
        _moveCardToMouse();
    });
    $('#arrange-field').mousemove(function(event) {
        if(tfDragActive == false) return;
        if(!event) event = window.event;
        _storeMousePos(event);
        event.preventDefault();
        _moveCardToMouse();
    });
    
    $.extend({
        getElementAtPos: function(x, y) {
            if(!document.elementFromPoint) return null;
            
            if(bChecked == false) {
                var scroll;
                if((scroll = $(document).scrollTop()) > 0) bRelativeElPos = (document.elementFromPoint(0, scroll + $(window).height() -1) == null);
                else if((scroll = $(document).scrollLeft()) > 0) bRelativeElPos = (document.elementFromPoint(scroll + $(window).width() -1, 0) == null);
                bChecked = (scroll > 0);
            }
            
            if(bRelativeElPos == false) {
                x += $(document).scrollLeft();
                y += $(document).scrollTop();
            }
            
            return document.elementFromPoint(x,y);
        }
    });
    
    $.fn.extend({
        playerdrag: function(bFromCard, bLiveGame) {
            this.each(function() {
              var obj = $(this);
              
              // delete all events
              obj.unbind('click');
              obj.unbind('mousedown');
              obj.unbind('mouseup');
              obj.unbind('dblclick');
              
              obj.click(function(event) { event.preventDefault(); return false; });
              obj.select(function(event) { event.preventDefault(); return false; });
              //obj.dragstart(function(event) { event.preventDefault(); return false; });
              obj.dblclick(function(event) { event.preventDefault(); return false; });
              obj.bind('contextmenu', function(event) { event.preventDefault(); return false; });
              
              obj.mousedown(function(event) {
                  var obj = $(this);  
                  if(event.which == 3) {
                      if(bLiveGame) {
                          var posid = obj.attr('id');
                          posid = posid.substr(8);
                          chooseplayer(posid);
                      }
                      event.preventDefault();
                      return false;
                  }
                  var rel = obj.attr('rel');
                  if(!rel || rel == '' || rel.substr(0, 1) != 'p') return this;
                  
                  var pid = rel.substr(1);
                  if(!pid) return this;
                  
                  obj.data('pid', pid);
                  obj.data('livegame', (bLiveGame ? 'yes' : 'no'));
                  if(bFromCard) {
                      obj.data('pos', obj.find('.p-pos').html());
                      obj.data('ew', obj.find('.p-str').html());
                      obj.data('name', obj.find('.p-name').html());
                      obj.data('class', obj.attr('class'));
                      obj.attr('rel', '');
                      obj.find('.p-pos').html('');
                      obj.find('.p-str').html('');
                      obj.find('.p-name').html('');
                      obj.removeClass('ok yellow orange red');
                  }
                  _storeMousePos(event);
                  _moveCardToMouse();
                  _setCardInfo(pid, obj.attr('id'), bLiveGame);
                  tfDragActive = true;
                  event.preventDefault();
                  dragCard.show();
              });
              
              obj.mouseup(function(event) {
                  event.preventDefault(); 
              });
              
              return this;
            });
            
            return this;
        },
        
        hoverinfo: function() {
            this.each(function() {
                var obj = $(this);
                
                var rel = obj.attr('rel');
                var pid = rel.substr(1);
                if(!pid) return this;
                
                obj.find('td.plhover').mouseover(function() {
                    var posx = obj.offset().left - off.left + 100;
                    var posy = obj.offset().top - off.top;
                    
                    var hel = $('#hoverinfo' + pid);
                    hel.css({ 'left': posx, 'top': posy }).stop(true, true).delay(150).slideDown('fast');
                });
                obj.find('td.plhover').mouseout(function() {
                    $('#hoverinfo' + pid).stop(true, true).hide();
                });
                
                return this;
            });
            
            return this;
        }
    });  
  
  
  
  function blur_input(obj) {
        var tmp = obj.val();
        
        if(tmp == '') {
            obj.val(obj.data('origval'));
            obj.data('input', '');
            if(obj.hasClass('password')) {
                // hide the real field
                var fld = obj.data('input_field');
                if(fld) {
                    obj.hide();
                    fld.val(fld.data('origval'));
                    fld.show();
                    fld.data('input', '');
                }
            }
        }
    }
    
    $('input.intext').focus(function() {
        var obj = $(this);
        var tmp = obj.data('input');
        if(tmp && tmp != '') return;
        
        obj.data('origval', obj.val());
        obj.data('input', '1');
        obj.val('');
        
        /*if(obj.hasClass('password')) {
            // check for replacement field
            var fld = obj.data('input_field');
            if(!fld) {
                fld = $('<input type="password" />');
                // copy over attributes
                if(obj.attr('name')) fld.attr('name', obj.attr('name'));
                if(obj.attr('class')) fld.attr('class', obj.attr('class'));
                if(obj.attr('size')) fld.attr('size', obj.attr('size'));
                if(obj.attr('style')) fld.attr('style', obj.attr('style'));
                fld.blur(function() {
                    var obj = $(this);
                    blur_input(obj);
                });
                fld.data('input_field', obj);
                obj.parent().append(fld);
            }
            obj.hide();
            fld.show().focus();
        }*/
    }).blur(function() {
        var obj = $(this);
        blur_input(obj);
    });
});

var loan_arr = new Array();
var onhand_arr = new Array();

function addto(js_amount, max) {
    var curam = document.contform.years.value;
    curam = Math.floor(curam) + js_amount;
    if(curam > max) curam = max;
    document.contform.years.value = curam;
    document.contform.loan.value = loan_arr[curam];
    document.contform.onhand.value = onhand_arr[curam];
}

function subfrom(js_amount, min) {
    var curam = document.contform.years.value;
    curam = Math.floor(curam) - js_amount;
    if(curam < min) curam = min;
    document.contform.years.value = curam;
    document.contform.loan.value = loan_arr[curam];
    document.contform.onhand.value = onhand_arr[curam];
}

function addplaces(form,field,js_amount,max,min) {
    var cstand = 1000;
    var csit = 2000;
    var cloge = 4000;

    eval("curam = document." + form + "." + field + ".value;");
    curam = Math.floor(curam.replace(/\./,"")) + js_amount;
    if(curam > max) curam = max;
    else if(curam < min) curam = min;

    var retval = "";
    while(curam >= 1000) {
       retval = ".000" + retval;
       curam = curam / 1000;
    }
    retval = curam + retval;
    eval("document." + form + "." + field + ".value = retval;");

    var costs = 0;

    eval("var curstand = document." + form + ".curstand.value;");
    eval("var cursit = document." + form + ".cursit.value;");
    eval("var curloge = document." + form + ".curloge.value;");
    eval("var newstand = document." + form + ".stands.value;");
    newstand = Math.floor(newstand.replace(/\./,""));
    eval("var newsit = document." + form + ".sits.value;");
    newsit = Math.floor(newsit.replace(/\./,""));
    eval("var newloge = document." + form + ".loges.value;");
    newloge = Math.floor(newloge.replace(/\./,""));

    costs = ((newstand - curstand) * cstand) + ((newsit - cursit) * csit) + ((newloge - curloge) * cloge);
    if(costs < 0) costs = 0;

    retval = "";
    var rest = 0;
    while(costs >= 1000) {
       rest = String(costs % 1000);
       while(rest.length < 3) rest = "0" + rest;
       retval = "." + rest + retval;
       costs = Math.floor(costs / 1000);
    }
    retval = costs + retval;
    eval("document." + form + ".costs.value = retval;");
}

function addprice(form,field,js_amount,max,min) {
    eval("curam = document." + form + "." + field + ".value;");
    curam = Math.floor(curam.replace(/\./,"")) + js_amount;
    if(curam > max) curam = max;
    else if(curam < min) curam = min;

    retval = "";
    var rest = 0;
    while(curam >= 1000) {
       rest = String(curam % 1000);
       while(rest.length < 3) rest = "0" + rest;
       retval = "." + rest + retval;
       curam = Math.floor(curam / 1000);
    }
    retval = curam + retval;
    
    eval("document." + form + "." + field + ".value = retval;");

    var costs = 0;

    eval("var newstand = document.buildform.stands.value;");
    newstand = Math.floor(newstand.replace(/\./,""));
    eval("var newsit = document.buildform.sits.value;");
    newsit = Math.floor(newsit.replace(/\./,""));
    eval("var newloge = document.buildform.loges.value;");
    newloge = Math.floor(newloge.replace(/\./,""));

    eval("var pricestand = document." + form + ".stands.value;");
    pricestand = Math.floor(pricestand.replace(/\./,""));
    eval("var pricesit = document." + form + ".sits.value;");
    pricesit = Math.floor(pricesit.replace(/\./,""));
    eval("var priceloge = document." + form + ".loges.value;");
    priceloge = Math.floor(priceloge.replace(/\./,""));

    costs = (newstand * pricestand) + (newsit * pricesit) + (newloge * priceloge);
    if(costs < 0) costs = 0;

    retval = "";
    var rest = 0;
    while(costs >= 1000) {
       rest = String(costs % 1000);
       while(rest.length < 3) rest = "0" + rest;
       retval = "." + rest + retval;
       costs = Math.floor(costs / 1000);
    }
    retval = costs + retval;
    eval("document." + form + ".costs.value = retval;");
}

function showclub(js_clubid) {
    url = 'system.php?action=clubinfos;id=' + js_clubid;
    location.href = url;
}

