function findX(obj) {
  var curleft = 0;
  if (obj.offsetParent) {
    while (obj.offsetParent) {
      curleft += obj.offsetLeft;
      obj = obj.offsetParent;
    }
  }
  else if (obj.x)
    curleft += obj.x;
  return curleft;
}

function findY(obj) {
  var curtop = 0;
  if(obj.offsetParent) {
    while (obj.offsetParent) {
      curtop += obj.offsetTop;
      obj = obj.offsetParent;
    }
  }
  else if (obj.y)
    curtop += obj.y;
  return curtop;
}

function mousePosX(e) {
  var posx = 0;
  if (!e) var e = window.event;
  if (e.pageX)
    posx = e.pageX;
  else if (e.clientX && document.body.scrollLeft)
    posx = e.clientX + document.body.scrollLeft;
  else if (e.clientX && document.documentElement.scrollLeft)
    posx = e.clientX + document.documentElement.scrollLeft;
  else if (e.clientX)
    posx = e.clientX;
  return posx;
}

function mousePosY(e) {
  var posy = 0;
  if (!e) var e = window.event;
  if (e.pageY)
    posy = e.pageY;
  else if (e.clientY && document.body.scrollTop)
    posy = e.clientY + document.body.scrollTop;
  else if (e.clientY && document.documentElement.scrollTop)
    posy = e.clientY + document.documentElement.scrollTop;
  else if (e.clientY)
    posy = e.clientY;
  return posy;
}

var tagging = false;
var frameWidth = 166;
var frameHeight = 166;
var activeImageMouseX;
var activeImageMouseY;
var BoxX;
var BoxY;
var AjaxFriends = false;
var member = '';
var non_member = '';
var photo_divname = 'picpv';

function imageMouseUp() {
    if (tagging) {
        $('name').focus();
        $('name').select();
    }
}

function imageMouseDown(event, image, tagsID) {
    if (tagging) {
        activeImageMouseX = mousePosX(event) - findX(image);
        activeImageMouseY = mousePosY(event) - findY(image);
    
        updateFrame(image, activeImageMouseX, activeImageMouseY);
        return false;
    }
}

function frameMouseDown(event)
{   
    if (tagging) {
        image = $(photo_divname);
        activeImageMouseX = mousePosX(event) - findX(image);
        activeImageMouseY = mousePosY(event) - findY(image);
        updateFrame(image, activeImageMouseX, activeImageMouseY);
    }
}   

function frameMouseUp() {   
    if (tagging) {
        $('name').focus();
        $('name').select();
    }
}

function updateFrame(image, imageMouseX, imageMouseY) {
  imageMinX = findX(image);
  imageMinY = findY(image);
  imageMaxX = imageMinX + image.width;
  imageMaxY = imageMinY + image.height;

  // Before constraints
  frameX = findX(image) + imageMouseX;
  frameY = findY(image) + imageMouseY;

  // Apply Constraints
  if(frameX < imageMinX + (frameWidth/2))
    frameX = imageMinX + (frameWidth/2);
  if(frameY < imageMinY + (frameHeight/2))
    frameY = imageMinY + (frameHeight/2);
  if(frameX > imageMaxX - (frameWidth/2))
    frameX = imageMaxX - (frameWidth/2);
  if(frameY > imageMaxY - (frameHeight/2))
    frameY = imageMaxY - (frameHeight/2);

  var tagMinX = frameX - (frameWidth/2) - 8;
  var tagMinY = frameY - (frameHeight/2) - 8;

  $('tagframe').style.left = tagMinX + "px";
  $('tagframe').style.top = tagMinY + "px";

  if (imageMouseX < 300) {
      BoxX = (tagMinX + frameWidth + 16 + 10);
  } else {
      BoxX = (tagMinX - 190);
  }
  BoxY = tagMinY;
  $('selector').style.left = BoxX + "px";
  $('selector').style.top  = BoxY + "px";

  if (! AjaxFriends) {
      GetFriends();
      AjaxFriends = true;
  }
  Element.show('selector');
  Element.show('tagframe');
}

function tagHit() {
    // if non_member or member != '', submitTag
    
    if (non_member != '' || member != '') {
        submitTag();
        resetSelector();
        return true;
    } else {
        InviteFriend();
    }    
}

function cancelHit() {   
    resetSelector();
}

function resetSelector() {
  Element.hide('selector');  
  Element.hide('tagframe');
  Element.hide('emailprompt');
  $('name').value = "";
  $('email').value = "";
}

function hideFace() {
  Element.hide('tagframe');
  Element.hide('selector');
}

function showFace(percentX, percentY) {
  
  if (! percentX || ! percentY) return false;
  
  thePhoto = $(photo_divname);
  if( thePhoto == null ) alert(ZORPIA_JS_LANG.NULL_PHOTO);
  thePhotoX = findX(thePhoto);
  thePhotoY = findY(thePhoto);
  
  $('tagframeinside').innerHTML = "+ " + thePhotoX + "." + thePhotoY + "<br>";
  $('tagframeinside').innerHTML += "% " + percentX + "." + percentY + "<br>";
  $('tagframeinside').innerHTML += "d " + thePhoto.width + "." + thePhoto.height + "<br>";
  $('tagframeinside').innerHTML += '= ' + ((percentX * thePhoto.width)/100) + "." + ((percentY * thePhoto.height)/100) + "<br>";
  
  newX = thePhotoX + ((percentX * thePhoto.width)/100) - (frameWidth/2);
  newY = thePhotoY + ((percentY * thePhoto.height)/100) - (frameHeight/2);
  $('tagframeinside').innerHTML += "> " + newX + "." + newY;
  $('tagframeinside').innerHTML = "";
  
  imageMinX = findX(thePhoto);
  imageMinY = findY(thePhoto);
  imageMaxX = imageMinX + thePhoto.width;
  imageMaxY = imageMinY + thePhoto.height;
  
  // Before constraints
  frameX = imageMinX + ((percentX * thePhoto.width)/100);
  frameY = imageMinY + ((percentY * thePhoto.height)/100);
  
  // Apply Constraints
  if(frameX < imageMinX + (frameWidth/2))
    frameX = imageMinX + (frameWidth/2);
  if(frameY < imageMinY + (frameHeight/2))
    frameY = imageMinY + (frameHeight/2);
  if(frameX > imageMaxX - (frameWidth/2))
    frameX = imageMaxX - (frameWidth/2);
  if(frameY > imageMaxY - (frameHeight/2))
    frameY = imageMaxY - (frameHeight/2);

  $('tagframe').style.left = (frameX - (frameWidth/2) - 8) + "px";
  $('tagframe').style.top = (frameY - (frameHeight/2) - 8) + "px";
  Element.show('tagframe');
}

function SetMember(membername) {
    member = membername;
    non_member = '';
}
function SetNonMember(membername, email_value) {
    non_member = membername;
    $('email').value = email_value;
    member = '';
}
function ClearMember() {
    non_member = '';
    member = '';
}

function submitTag() {
  tagImage = $(photo_divname);
  percentX = (activeImageMouseX*100)/tagImage.width;
  percentY = (activeImageMouseY*100)/tagImage.height;

  var email = $('email').value;
  if (non_member == '') {
    non_member = $('name').value;
  }

  var url = '/ajax/tag/face_tag';
  var pars = 'non_member=' + non_member + '&email=' + email + '&member=' + member
           + '&object_type=' + object_type + '&object_id=' + object_id
           + '&username=' + username + '&group_code=' + group_code
           + '&x=' + percentX + '&y=' + percentY;
  $(message_div).innerHTML = "<p>"+ZORPIA_JS_LANG.LOADING+"</p>";
  
  var myAjax = new Ajax.Request( url, {
      method: 'post',
      postBody: pars,
      onSuccess: showFaceResponse,
      onFailure: reportFaceError
  } );
}

function showFaceResponse(request) {
    response  = request.responseText;

    var xotree = new XML.ObjTree();
    var tree = xotree.parseXML( response ); 

    if (tree.xml.message != 'Add OK'){
        $(message_div).innerHTML = tree.xml.message;
        return false;
    } else {
        $(message_div).innerHTML = '';
    }

    if (iswhere == 'photo') {
        Element.show(people_text_div);
    } else {
        Element.hide(people_text_div);
        AjaxFriends = false;
    }
    
    var bottom_msg;
    if (tree.xml.tag_type == 'user') {
        bottom_msg = ' <span id="people' + tree.xml.tag_id + '" onmouseover="showFace(' + tree.xml.coordinate_x + ', ' + tree.xml.coordinate_y + ')" onmouseout="hideFace();"> &nbsp; <a href="http://search.zorpia.com/search/photos/face/' + tree.xml.tagname + '">' + tree.xml.tagname_out + '</a>';
    bottom_msg = bottom_msg + " (<a href=\"javascript:del_item('" + tree.xml.object_type + "', '" + tree.xml.object_id + "', 'user', '" + tree.xml.tag_id + "')\">X</a>) </span>";
        new Insertion.Bottom(people_div, bottom_msg);
        $('member' + tree.xml.tag_id).style.display = '';
    } else {
        bottom_msg = '<span id="tag' + tree.xml.tag_id + '" onmouseover="showFace(' + tree.xml.coordinate_x + ', ' + tree.xml.coordinate_y + ')" onmouseout="hideFace();">' + "<a href='http://search.zorpia.com/search/photos/face_guest/" + tree.xml.tagname + "'>" + tree.xml.tagname + "</a>";
    bottom_msg = bottom_msg + " (<a href=\"javascript:del_item('" + tree.xml.object_type + "', '" + tree.xml.object_id + "', 'tag', '" + tree.xml.tag_id + "')\">X</a>) </span>";
        new Insertion.Bottom(people_div, bottom_msg);
    }
}
function reportFaceError(request) {
    $(message_div).innerHTML = '<p>'+ZORPIA_JS_LANG.ENCOUTER_SOME_ERROR+'</p>';
}

function GetFriends(page) {
    var url = '/ajax/tag/user_list';
    var pars;
    if (page != undefined) {
        pars = 'page=' + page;
    }
    pars = pars + '&photo_id=' + object_id;
    
    $('userlist').innerHTML = ZORPIA_JS_LANG.LOADING;
    
    var myAjax = new Ajax.Request( url, {
        method: 'get',
        parameters: pars,
        onSuccess: showFriendsResponse,
        onFailure: reportFriendsError
    } );
  
}
function showFriendsResponse(request) {
    $('userlist').innerHTML = request.responseText;
}
function reportFriendsError(request) {
    $('userlist').innerHTML = '<p>'+ZORPIA_JS_LANG.ENCOUTER_SOME_ERROR+'</p>';
}
/*
function windowloadit() {
    Element.hide('selector');  
    Element.hide('tagframe');
}
function addEvent( obj, type, fn ) {
  if ( obj.attachEvent ) {
    obj['e'+type+fn] = fn;
    obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
    obj.attachEvent( 'on'+type, obj[type+fn] );
  } else
    obj.addEventListener( type, fn, false );
}
addEvent( window, 'load', windowloadit );
*/
