// Global holds reference to selected element
var selectedObj;

// Globals hold location of click relative to element
var offsetX, offsetY;

//номер ковера + номер текста в ковере
var NumText;

// Set global reference to element being engaged and dragged
function ZsetSelectedElem(evt) {
    var target = (evt.target) ? evt.target : evt.srcElement;
//    var divID = (target.name && target.src) ? target.name + "Wrap" : "";
    var divID = (target.id) ? target.id + "Wrap" : "";
    if (divID) {
        var re = /t(\d+)/g;
        NumText=target.id.replace(re, "$1");
        if (document.layers) {
            selectedObj = document.layers[divID];
        } else if (document.all) {
            selectedObj = document.all(divID);
        } else if (document.getElementById) {
            selectedObj = document.getElementById(divID);
        }
        ZsetZIndex(selectedObj, 100);
        return;
    }
    selectedObj = null;
    return;
}

// Turn selected element on
function Zengage(evt) {
    evt = (evt) ? evt : event;
    ZsetSelectedElem(evt);
    if (selectedObj) {
        if (document.body && document.body.setCapture) {
            // engage event capture in IE/Win
            document.body.setCapture();
        }
        if (evt.pageX) {
            offsetX = evt.pageX - ((selectedObj.offsetLeft) ? 
                      selectedObj.offsetLeft : selectedObj.left);
            offsetY = evt.pageY - ((selectedObj.offsetTop) ? 
                      selectedObj.offsetTop : selectedObj.top);
        } else if (typeof evt.offsetX != "undefined") {
            offsetX = evt.offsetX - ((evt.offsetX < -2) ? 
                      0 : document.body.scrollLeft);
            offsetX -= (document.body.parentElement && 
                     document.body.parentElement.scrollLeft) ? 
                     document.body.parentElement.scrollLeft : 0
            offsetY = evt.offsetY - ((evt.offsetY < -2) ? 
                      0 : document.body.scrollTop);
            offsetY -= (document.body.parentElement && 
                     document.body.parentElement.scrollTop) ? 
                     document.body.parentElement.scrollTop : 0
        } else if (typeof evt.clientX != "undefined") {
            offsetX = evt.clientX - ((selectedObj.offsetLeft) ? 
                      selectedObj.offsetLeft : 0);
            offsetY = evt.clientY - ((selectedObj.offsetTop) ? 
                      selectedObj.offsetTop : 0);
        }
        return false;
    }
}



// Drag an element
function ZdragIt(evt) {
    evt = (evt) ? evt : event;
    if (selectedObj) {
        if (evt.pageX) {
            ZshiftTo(selectedObj, (evt.pageX - offsetX), (evt.pageY - offsetY));
        } else if (evt.clientX || evt.clientY) {
            ZshiftTo(selectedObj, (evt.clientX - offsetX), (evt.clientY - offsetY));
        }
        evt.cancelBubble = true;
        return false;
    }
}

function IsNewText(obj){
 if (obj.id=="newtextWrap"){
    return 1;
 } else
 {
    return 0;
 }
}

function interselection(x1,y1,w1,h1,x2,y2,w2,h2){

    x1=Math.round(x1);
    y1=Math.round(y1);
    w1=Math.round(w1+x1);
    h1=Math.round(h1+y1);

    x2=Math.round(x2);
    y2=Math.round(y2);
    w2=Math.round(w2+x2);
    h2=Math.round(h2+y2);

    x12=(x1+w1)/2;
    y12=(y1+h1)/2;

    x22=(x2+w2)/2;
    y22=(y2+h2)/2;

    r=0.7*(w1-x1);

    if (r>200) r=200;

    d=Math.round(Math.sqrt((x22-x12)*(x22-x12)+(y22-y12)*(y22-y12)));

//    alert(" x1="+x1+" y1="+y1+" w1="+(x1+w1)+" h1="+(y1+h1)+"\n"+" x2="+x2+" y2="+y2+" w2="+(x2+w2)+" h2="+(y2+h2));
//if (((x2>x1) && (x2<w1) && (y2>y1) && (y2<+h1)) || ((x1>x2) && (x1<w2) && (y1>y2) && (y1<h2))  || ((x2>x1) && (x2<w1) && (h2>y1) && (h2<h1)) || ((w2>x1) && (w2<w1) && (y2>y1) && (y2<h1)))
if (d<r)
{
    return 1;
  } else {
     return 0;
  }
}

// Turn selected element off
function Zrelease(evt) {
    if (selectedObj) {
        //ZsetZIndex(selectedObj, 0);
        ZsetZIndex(selectedObj, 3);

        //вызвать ajax-овую хрень
        //которая передаст на сервер
        // х top координату
        // х left координату
        // х N темплейта
        // х N текста

        ZLeft=ZgetObjectLeft(selectedObj);
        ZTop=ZgetObjectTop(selectedObj);
        ZWidth=ZgetObjectWidth(selectedObj);
        ZHeight=ZgetObjectHeight(selectedObj);

        if (document.body && document.body.releaseCapture) {
            // stop event capture in IE/Win
            document.body.releaseCapture();
        }

        if (IsNewText(selectedObj)) {
                    //если новый текст сразу перетягивается на корзину
                if (interselection(ZLeft,ZTop,ZWidth,ZHeight,TrashLeft,TrashTop,TrashWidth,TrashHeight)){
                          removenewtext();
                          JsHttpRequest.query('redrawall.php', // backend
                               {'x': Math.round(1000*Math.random())},
                            	// Function is called when an answer arrives.
                            	function(result, errors){
                                  removeall(1);
                                  eval(result);
        						}
                          );
                }else{
               JsHttpRequest.query('new_text.php', // backend
                                {'Top': ZTop,'Left': ZLeft,
                                 'x': Math.round(1000*Math.random())},
                            	// Function is called when an answer arrives.
                            	function(result, errors){
                                  removenewtext();
//                                  alert(result);
                                  eval(result);
        						}
                    );
                }
        } else{
                //если пересекаются удалить иначе сменить координаты
                if (interselection(ZLeft,ZTop,ZWidth,ZHeight,TrashLeft,TrashTop,TrashWidth,TrashHeight)){
                    //удалить
        //            alert("Object Deleted!");
                    selectedObj.parentNode.removeChild(selectedObj);
                    removeitem(NumText);
                    JsHttpRequest.query('delete_text.php', // backend
                                {'NumText': NumText,
                                 'x': Math.round(1000*Math.random())},
                            	// Function is called when an answer arrives.
                            	function(result, errors){
        						}
                    );
                } else {
//                    alert(NumText+"=num "+ZTop+"=top "+ZLeft+"=left");
                    JsHttpRequest.query('new_coord.php', // backend
        	                    {'NumText': NumText,
                                'Top':ZTop,
                                'Left':ZLeft,
                                 'x': Math.round(1000*Math.random())},
                            	// Function is called when an answer arrives.
                            	function(result, errors){
           						}
                    );
                }
        }
        selectedObj = null;
    }
}

// Assign event handlers used by both Navigator and IE
function ZinitDrag() {
    if (document.layers) {
        // turn on event capture for these events in NN4 event model
        document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP);
        return;
    }
  	document.onmousedown = Zengage;
   	document.onmousemove = ZdragIt;
   	document.onmouseup = Zrelease;
    return;
}

