
// importare:
// <script type='text/javascript' src='/tripadvice/dwr/interface/DWRCartSrv.js'></script>
// <script type='text/javascript' src='/tripadvice/dwr/engine.js'></script>
// <script type='text/javascript' src='/tripadvice/dwr/util.js'></script>
// http://www.tvidesign.co.uk/blog/improve-your-jquery-25-excellent-tips.aspx

// Fly To Cart
var flyingSpeed = 8;

var ajaxtpbox_div = false;
var flyingDiv = false;
var currentProductDiv = false;

var ajaxtpbox_x = false;
var ajaxtpbox_y = false;

var slide_xFactor = false;
var slide_yFactor = false;

var diffX = false;
var diffY = false;

var currentXPos = false;
var currentYPos = false;

var isAdding = false;

var __isFireFox = navigator.userAgent.match(/gecko/i);


//returns the absolute position of some element within document
function GetElementAbsolutePos(element) {
    var res = new Object();
    res.x = 0; res.y = 0;
    if (element !== null) {
        res.x = element.offsetLeft;
        res.y = element.offsetTop;

        var offsetParent = element.offsetParent;
        var parentNode = element.parentNode;

        while (offsetParent !== null) {
            res.x += offsetParent.offsetLeft;
            res.y += offsetParent.offsetTop;

            if (offsetParent != document.body && offsetParent != document.documentElement) {
                res.x -= offsetParent.scrollLeft;
                res.y -= offsetParent.scrollTop;
            }
            //next lines are necessary to support FireFox problem with offsetParent
            if (__isFireFox) {
                while (offsetParent != parentNode && parentNode !== null) {
                    res.x -= parentNode.scrollLeft;
                    res.y -= parentNode.scrollTop;

                    parentNode = parentNode.parentNode;
                }
            }
            parentNode = offsetParent.parentNode;
            offsetParent = offsetParent.offsetParent;
        }
    }
    return res;
}

function findPos(obj) {

    var curleft = 0;
    var curtop = 0;
    /*
        if (obj.offsetParent !== null) {
        while (obj.offsetParent) {
            curleft += obj.offsetLeft-obj.scrollLeft;
            curtop += obj.offsetTop-obj.scrollTop;
            var position='';
            if (obj.style&&obj.style.position) position=obj.style.position.toLowerCase();
            if ((position=='absolute')||(position=='relative')) break;
            while (obj.parentNode!=obj.offsetParent) {
                obj=obj.parentNode;
                curleft -= obj.scrollLeft;
                curtop -= obj.scrollTop;
            }
            obj = obj.offsetParent;
        }
    }
    else {
        if (obj.x)
            curleft += obj.x;
        if (obj.y)
            curtop += obj.y;
    }
*/

    return {
        left:curleft,
        top:curtop
    };

}


function addItemAndFlyToCart(p0, p1, p2, p3, p4, p5, p6, p7)
{


    var pid = 'myItem_'+p0;
    //var pid = 'contentMainBox';
    if (isAdding == false) {
        isAdding = true;
        if(!ajaxtpbox_div)ajaxtpbox_div = document.getElementById('ajaxtpbox');

        if(!flyingDiv){
            flyingDiv = document.createElement('DIV');
            flyingDiv.style.position = 'absolute';
            document.body.appendChild(flyingDiv);
        }
        ajaxtpbox_pos = GetElementAbsolutePos(ajaxtpbox_div);
        ajaxtpbox_x = ajaxtpbox_pos.x;
        ajaxtpbox_y = ajaxtpbox_pos.y;

        currentProductDiv = document.getElementById(pid);

        currentPos = GetElementAbsolutePos(currentProductDiv);
        currentXPos = currentPos.x;
        currentYPos = currentPos.y;

        //currentPos = findPos(currentProductDiv);
        //currentXPos = currentPos.left;
        //currentYPos = currentPos.top;

        //var pos = jQuery(pid).position();
        //alert("pos: " + pos + "-for PID"+pid);
        //alert("pos.left: " + pos.left);
        //alert('position with jquery:'+pos.left + ' '+pos.top);

        diffX = ajaxtpbox_x - currentXPos;
        diffY = ajaxtpbox_y - currentYPos;

        var tpboxContentCopy = currentProductDiv.cloneNode(true);
        tpboxContentCopy.id='';
        flyingDiv.innerHTML = '';
        flyingDiv.style.left = currentXPos + 'px';
        flyingDiv.style.top = currentYPos + 'px';
        flyingDiv.appendChild(tpboxContentCopy);
        flyingDiv.style.display='block';
        flyingDiv.style.width = currentProductDiv.offsetWidth + 'px';

        //jQuery('#piano_viaggio_box_id').addClass('loading');
        //DWRCartSrv.addToCart(pid, pType, addItemAndFlyToCartCallback );
        AddToCart.addItemToCart(p0, p1, p2, p3, p4, p5, p6, p7, addItemAndFlyToCartCallback);

        flyToCart(p0, p1);
    }
}

function flyToCart(pid, pType)
{
    var maxDiff = Math.max(Math.abs(diffX),Math.abs(diffY));
    var moveX = (diffX / maxDiff) * flyingSpeed;
    var moveY = (diffY / maxDiff) * flyingSpeed;

    currentXPos = currentXPos + moveX;
    currentYPos = currentYPos + moveY;

    flyingDiv.style.left = Math.round(currentXPos) + 'px';
    flyingDiv.style.top = Math.round(currentYPos) + 'px';

    if(moveX>0 && currentXPos > ajaxtpbox_x){
        flyingDiv.style.display='none';
    }
    if(moveX<0 && currentXPos < ajaxtpbox_x){
        flyingDiv.style.display='none';
    }

    if(flyingDiv.style.display=='block') {
        setTimeout('flyToCart("' + pid + '","' + pType + '")',10);
    } else  {
//        jQuery('#piano_viaggio_box_id').addClass('loading');
//        DWRCartSrv.addToCart(pid, pType, addItemAndFlyToCartCallback );
//        AddToCart.addItemToCart(p0, p1, p2, p3, p4, p5, p6, p7, addItemAndFlyToCartCallback);
    }
}


function updateTpBox() {
    DWRCartSrv.countItems('2', function(data) {
        if (data != '0') {
            jQuery('#piano_viaggio_box_id').removeClass('empty');
            jQuery('#piano_viaggio_box_id').removeClass('loading');
            jQuery('#tpACount').show();
            dwr.util.setValue('tpACount', data);
        } else {
            jQuery('#tpACount').hide();
        }
    });
}

function addItemAndFlyToCartCallback(data) {
    AddToCart.getTPBoxParam('',1,function(data) {dwr.util.setValue("ajaxtpbox", data, { escapeHtml:false });});
    isAdding = false;
}
