var xmlHttp;
var autozoom=0;
var wabble=0;

// AJAX utility
// create new xmlHTTP object based on the type of browser 
function GetXmlHttpObject() {
  var xmlHttp=null;
  try 
  {
    // Firefox, Opera 8.0+, Safari
    xmlHttp=new XMLHttpRequest();
  }
  catch (e) 
  {
    // Internet Explorer
    try {
    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e) {
    xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
  return xmlHttp;
}

function flashliftbutton(r)
{
if (r>=511) r=0;
if (r>255) {rr=511-r;} else rr=r;
document.getElementById('liftbutton').style.color="rgb("+rr+",0,0)";
r=r+40;
setTimeout('flashliftbutton('+r+');',80);
}

function facesettingchange()
{
//document.getElementById('liftbutton').style.display="block";
//document.getElementById('messagebox').innerHTML="Face and/or image settings have changed, please press the button below to calculate new resulting face.";
}

function displaymessage(mnum)
{
message="";
switch (mnum) 
{
case 0:message="";break;
case 1:message="Your image appears to be slightly rotated.  For best results, use the rotate buttons to make the image straight.";break;
case 2:message="We had a problem processing your image.  Please make sure you only upload a FRONTAL photo of a face.";break;
case 3:message="We had a problem processing your image.  Please make sure you only upload a FRONTAL photo of a face.";break;
case 4:message="We had a problem processing your image.  Please make sure you only upload a FRONTAL photo of a face.";break;
}
document.getElementById('messagebox').innerHTML=message;
}


//AJAX caller for sending email
function mailsend(target) {
  if (picOrig=="default.jpg")
  {    alert("Please upload an image first.");}
  else
  {    data=packdata();
    showloader(1);
    xmlHttp=GetXmlHttpObject();
    if (xmlHttp==null)
    { alert("Browser does not support HTTP Request");
      return;}
    var url="ajax/mailer.php";
    url=url+"?data="+data;
    url=url+"&target="+target;
    url=url+"&sid="+Math.random();
    xmlHttp.onreadystatechange=function()
    {      if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
      {
        //alert("unpacking:"+xmlHttp.responseText);
        //unpackdata(xmlHttp.responseText);
        //update_pictures();
        //cropper.init(facecoords[0],facecoords[1],facecoords[2],facecoords[3]);
//        document.getElementById('sendmail').style.display='none';
//        document.getElementById('mailbutton').style.display='block';
        showloader(0);
        alert('Ihre e-Mail wurde versendet.');
      }    }
    xmlHttp.open("GET",url,true);
    xmlHttp.send(null);  
}
}


//AJAX caller for all facetool changes
function doJob(pid) {
  if (picOrig=="default.jpg")
  {
    alert("Please upload an image first.");
  }
  else
  {
    showloader(1);
//    indicateprogress();
    data=packdata();
    //alert("packed:"+data);
    xmlHttp=GetXmlHttpObject();
    if (xmlHttp==null)
    {
      alert("Browser does not support HTTP Request");
      return;
    }
    
    var url="ajax/change.php";
    url=url+"?data="+data+"&autozoom="+autozoom;
    url=url+"&sid="+Math.random();
    xmlHttp.onreadystatechange=function() 
    {
      if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") 
      {
	document.getElementById('finalresulttd').style.display="block";
        unpackdata(xmlHttp.responseText);
        update_pictures();
	if (wabble==0)
	{
//	wabble=1;
	showafter(1);
	}
        doneprogress();
	showads();
	showloader(0);
	fillsmartlinks();
 
     }
    }
    xmlHttp.open("GET",url,true);
    xmlHttp.send(null);
      
//    displayValues();
  }
}


//AJAX caller for all imagetool changes
function doRotate(pid) {
  if (picOrig=="default.jpg")
  {
    alert("Please upload an image first.");
  }
  else
  {
    data=packdata();
    showloader(1);
    //alert("packed:"+data);
    xmlHttp=GetXmlHttpObject();
    if (xmlHttp==null)
    {
      alert("Browser does not support HTTP Request");
      return;
    }
    
    var url="ajax/rotate.php";
    url=url+"?data="+data;
    url=url+"&sid="+Math.random();
    xmlHttp.onreadystatechange=function() 
    {
      if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") 
      {
        cropper.removeit();
        //alert("unpacking:"+xmlHttp.responseText);
        unpackdata(xmlHttp.responseText);
        update_pictures();
if (cropperhack==1)
cropper.init(Math.round(facecoords[0]*2.0/2),
Math.round(facecoords[1]*2.0/2),Math.round(facecoords[2]*2.0/2),Math.round(facecoords[3]*2.0/2));
	showloader(0); 
 
      }
    }
    xmlHttp.open("GET",url,true);
    xmlHttp.send(null);
  }

}

/*
option orders
around eyes   forehead   mid-brow   inner cheek   outer cheek   jaw   eyebrow   lip   outer lip   cheek lift  under eyes   nose   beside eyes 	weight
0             1          2          3             4             5     6         7     8           9           10           11     12	13
*/

function packdata()
{
    data=picCur;                                                              //data[0]
    for (i=0;i<4;i++) data+=","+facecoords[i];                                //data[1]-data[4]  
    data+=","+picOrig;
    for (i=0;i<4;i++) data+=","+origcoords[i];                                //data[6]-data[9]
    data+=","+picWork;
    data+=","+settings[3];                                                    //data[11],data[12]
    data+=","+settings[4];
    for (i=0;i<3;i++) data+=","+settings[i];
//modified settings order to match javascript with c program. A better solution (if time permits) would be to modify the c program to use the settings[] order.
    //for (i=20;i<33;i++) data+=","+settings[i];
data+=","+settings[23]/2;
data+=","+settings[20]/2;
data+=","+settings[22]/2;
data+=","+settings[26]/2;
data+=","+settings[27]/2;
data+=","+settings[32];
data+=","+settings[21];
data+=","+settings[31];
data+=","+settings[30];
data+=","+settings[28];
data+=","+settings[25]/2;
data+=","+settings[29];
data+=","+settings[24]/2;
data+=","+settings[33]*0;
data+=","+settings[34]/2;
data+=","+settings[35]/2;
data+=","+(settings[36]/2);    //eyelid fold attenuation needed


  return (data);
}

function unpackdata(data)
{
  tempArray=new Array();
  tempArray=data.split(",");
  
  picCur=tempArray[0];
  for (i=0;i<4;i++) facecoords[i]=eval(tempArray[i+1]);  
  picOrig=tempArray[5];
  for (i=0;i<4;i++) origcoords[i]=eval(tempArray[i+6]);
  picWork=tempArray[10];
  settings[3]=eval(tempArray[11]);
  settings[4]=eval(tempArray[12]);
  for (i=0;i<3;i++) settings[i]=eval(tempArray[i+13]);
//modified settings
  //for (i=20;i<33;i++) settings[i]=eval(tempArray[i-4]);

 anyerror=new Array();
 anyerror=data.split("#");
// if (anyerror.length>1) displaymessage(parseInt(anyerror[1]));
}



//changes the tool selected
function toolChange(nextTool) {
tool=nextTool;
  document.getElementById('currenttool').style.display="block";
displayValues();
}

//redetects the face
function faceChange(pid) {
  tool=5;

  //needs to call the real php function.
  if (picOrig=="default.jpg")
  {
    alert("Please upload an image first.");
    return;
  }
    showloader(1);
    data=packdata();
    //alert("packed:"+data);
    xmlHttp=GetXmlHttpObject();
    if (xmlHttp==null)
    {
      alert("Browser does not support HTTP Request");
      return;
    }
    
    var url="ajax/detect.php";
    url=url+"?data="+data;
    url=url+"&sid="+Math.random();
    xmlHttp.onreadystatechange=function() 
    {
      if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") 
      {
        cropper.removeit();
        //alert("unpacking:"+xmlHttp.responseText);
        unpackdata(xmlHttp.responseText);
        update_pictures();
cropper.init(Math.round(facecoords[0]*2.0/2),
Math.round(facecoords[1]*2.0/2),Math.round(facecoords[2]*2.0/2),Math.round(facecoords[3]*2.0/2));
  	showloader(0);
      }
    }
    xmlHttp.open("GET",url,true);
    xmlHttp.send(null);
}

//placeholder for enhance button
function enhanceChange(pid,amount) {
tool=6;
displayValues();
}

//lowers the value of the slider
function lower(tool)
{
  if (settings[tool]>0) facesettingchange();
  if (settings[tool]<=0.1)
  {
    settings[tool]=0;
  }
  else
  {
    settings[tool]-=0.1;
  }

if (tool<3)
{
  doRotate();
}

displayValues();
}
//raises the value of the slider
function higher(tool)
{
  if (settings[tool]<3) facesettingchange();
  if (settings[tool]>=2.9)
  {
    settings[tool]=3;
  }
  else
  {

    settings[tool]+=0.1;
  }

if (tool<3)
{
  doRotate();
}

displayValues();
}


//for displaying the currently selected tool
function getToolName(tool)
{
  var toolname="no tools selected";
  switch (tool)
  {
    case 0:
      toolname="contrast";
      break
    case 1:
      toolname="brightness";
      break
    case 2:
      toolname="colour";
      break
    case 3:
      toolname="rotate";
      break
    case 4:
      toolname="zoom";
      break
    case 5:
      toolname="face detect";
      break
    case 6:
      toolname="enhance";
      break
    case 20:
      toolname="INJECTIBLES FOR FOREHEAD";
	toolname="Faltenbehandlung Stirn";
      break
    case 21:
      toolname="EYEBROW LIFT";
	toolname="Augenbraunen Lifting";
      break
    case 22:
      toolname="INJECTIBLES FOR FROWN LINES";
	toolname="Faltenbehandlung Zornesfalten / Nasenwurzel";
      break
    case 23:
      toolname="BLEPHAROPLASY (EYE SURGERY)";
	toolname="Schlupflider Lifting";
      break
    case 24:
      toolname="INJECTIBLES FOR CROWS FEET";
	toolname="Tränensack Lifting";
	toolname="Faltenbehandlung Krähenfüße";
      break
    case 25:
      toolname="INJECTIBLES FOR UNDER EYES";
	toolname="Faltenbehandlung Unterlidbereich";
      break
    case 26:
      toolname="INJECTIBLES FOR NASOLABIAL FOLDS";
	toolname="Faltenbehandlung Nasiolabialfalten";
      break
    case 27:
      toolname="FACIAL WRINKLE REDUCTION";
	toolname="Gesichtsfalten reduzierung";
      break
    case 28:
      toolname="INJECTIBLES TO RESTORE VOLUME";
	toolname="Wangen Verjüngun";
      break
    case 29:
      toolname="RHINOPLASTY (NOSE JOB)";
	toolname="Nasenkorrektur";	
      break
    case 30:
      toolname="SMILE CORRECTION";
	toolname="Faltenbehandlung Lippenbereich";
      break
    case 31:
      toolname="LIP AUGMENTATION";
	toolname="Lippenvergrößerung";
      break
    case 32:
      toolname="JAW CONTOURING";
	toolname="Kinnstraffung";
      break
    case 33:
      toolname="";
//      toolname="weight reduction";
      break
    case 34:
      toolname="INJECTIBLES FOR UNDER THE LIPS";
	toolname="Faltenbehandlung Kinnbereich";
      break
    case 35:
      toolname="NECK LIFT";
	toolname="Halsstraffung";
      break
    case 36:
      toolname="EYELID FOLD ENHANCEMENT";
	toolname="Tränensack-Lifting";
      break
    default:
      toolname="";
  }
  return(toolname);
}
//display the value of the current tool
function displayValues()
{
  var toolname=getToolName(tool);
  //display name of tool
//  document.getElementById("toolDisplay").innerHTML=toolname;
  if ((tool<3)||(tool>=20))
  {
//    document.getElementById("valueDisplay").innerHTML=":  "+Math.round(settings[tool]*100/3)+"%";
    //set slider value
    A_SLIDERS[0].f_setValue(settings[tool]);
    if (tool>=20) {
	valx=Math.round(9*settings[tool]/3);
//	document.getElementById("option"+(tool-19)).style.background="url('images/lmlevel"+valx+".png') no-repeat";

	}
  }
  else
  {
//    document.getElementById("valueDisplay").innerHTML="";
  }
}


function update_pictures()
{
  
  document.getElementById("picture").src = "img/"+picWork;
  document.getElementById("pictureResult").src = "img/"+picCur;
}



//set progressbar
function indicateprogress()
{
  document.getElementById('liftbutton').style.display='none';
  document.getElementById('progressBar').style.display='block';
}
//hide progressbar, set "show me" bar
function doneprogress()
{
//  document.getElementById('liftbutton').style.display='none';
//  document.getElementById('progressBar').style.display='none';
  document.getElementById('welcomediv').style.display='none';
  document.getElementById('comparediv').style.display='block';
  document.getElementById('finimtag').style.display='block';
  document.getElementById('resultdiv').style.display='block';
}


function setrotate(cw,num)
{
  tool=num;
  settings[num]=settings[num]+cw;
}

function setzoom(zm)
{
  tool=4;
  if (settings[4]>0)
  {
    for (i=0;i<4;i++) facecoords[i]=origcoords[i];
//    document.getElementById("zoombutton").src = "buttons/zoom_in.png";
    y=settings[4]-zm;
  }
  else
  {
    for (i=0;i<4;i++) origcoords[i]=facecoords[i];
//    document.getElementById("zoombutton").src = "buttons/zoom_out.png";
    y=settings[4]+zm;
  }
  if (y>7) y=7;
  if (y<0) y=0;
  settings[4]=y;
}

function showbefore(w)
{
if (w==0) wabble=0;
//document.getElementById('before').className="pictitleon";
//document.getElementById('after').className="pictitleoff";
document.getElementById('pictureResult').src="img/xlmforig-"+picCur;
if (wabble==1) setTimeout('showafter(1);',2000);
}

function showafter(w)
{
if (w==0) wabble=0;
//document.getElementById('before').className="pictitleoff";
//document.getElementById('after').className="pictitleon";
document.getElementById("pictureResult").src = "img/"+picCur;
if (wabble==1) setTimeout('showbefore(1);',2000);
}

//Function used for slider. Refer to line 105 of slider.js
function sliderSave(n_value,mouseUp)
{
  if(((tool==1)||(tool==0))&&(n_value!=settings[tool])&&(mouseUp==1))
	{
//    document.getElementById('valueDisplay').innerHTML= n_value.toFixed(2);//in this case it's the div valueDisplay in lift2.htm
    document.getElementById("valueDisplay").innerHTML=Math.round(n_value*100/3)+"%";

    settings[tool]=n_value;                        //directly tied to settings[] in lift2.htm
    doRotate();
//	facesettingchange();
  }
  else
  {
    document.getElementById("valueDisplay").innerHTML=Math.round(n_value*100/3)+"%";

//   if ((tool>=20)&&(n_value!=settings[tool])&&(mouseUp==1)) facesettingchange();

    settings[tool]=n_value;                        //directly tied to settings[] in lift2.htm

    if (tool>=20) {
	valx=Math.round(9*settings[tool]/3);
	document.getElementById("option"+(tool-19)).style.background="url('images/lmlevel"+valx+".png') no-repeat";
	}

  }

}
