﻿// JScript File

var brightDegree = 50; 	//sequence no 0
var contrastDegree = 50;//sequence no 1
var satDegree = 50;		//sequence no 2
var hueDegree = 50;		//sequence no 3
var focusDegree = 1;	//sequence no 4
var rotateDegree = 0;
var rotateDegree2 = 0;

var currentEffect;
var currentCmd = "";
var isCropping = false;
var id;
var crop;
var cmds;
var UserHostAddress;


function askUserSave()
{
    if(isCropping)
        return confirm("The cropped image will not be saved unless you click    \non the Save or Save as a copy button.\n\nWould you like to click on save first?");
    else
        return isCropping;
}

function HideDiv()
{
    document.getElementById("EffectDiv").style.display = "None";
    document.getElementById("BorderDiv").style.display = "None";
    document.getElementById("DegreeDiv").style.display = "None";
    document.getElementById("cropInstructionDiv").style.display = "None";
    hideCropRegion();
    document.getElementById("RedEyeDiv").style.display = "None";
	
    enableEffectButtons();
    currentEffect = "";
    document.getElementById("ctl00_BrowsePlaceHolder_TemporaryImg").style.cursor = "auto";
    
    isCropping = false;
}

function enableEffectButtons()
{
    document.aspnetForm.EffectBtn1.disabled = false;
    document.aspnetForm.EffectBtn2.disabled = false;
    document.aspnetForm.EffectBtn3.disabled = false;
    document.aspnetForm.EffectBtn4.disabled = false;
    document.aspnetForm.EffectBtn5.disabled = false;
    document.aspnetForm.EffectBtn6.disabled = false;
}

function undoAll()
{
		pageIsDirty = false;
		currentEffect = "";
		currentCmd = "";
		HideDiv();
		document.aspnetForm.ctl00_BrowsePlaceHolder_TemporaryImg.src = "../DisplayTempImage.aspx?id=" + id;
}


function showEffect()
{
 	 pageIsDirty = true;
    if (askUserSave() == false)
    {
        HideDiv();
        document.getElementById("EffectDiv").style.display = "";
    }
}

function showRedEyeFix()
{
 	pageIsDirty = true;
	if (askUserSave() == false)
	{
		HideDiv();
		document.getElementById("RedEyeDiv").style.display = "";	
		currentEffect = "redeye";
		document.getElementById("ctl00_BrowsePlaceHolder_TemporaryImg").style.cursor = "crosshair";
	}
}	

function showBorder()
{		
	if (askUserSave() == false)
	{
		HideDiv();
		document.getElementById("BorderDiv").style.display = "";	
		document.aspnetForm.BorderBtn1.disabled = false;
		document.aspnetForm.BorderBtn2.disabled = false;
	}
}

function showCrop()
{
 	 pageIsDirty = true;
    HideDiv();
    document.getElementById("cropInstructionDiv").style.display = "";
    isCropping = true;
    showCropRegion();
}

function ResetDegreeBar()
{				
    var degree = 50;
    if (currentEffect == "smooth")
    {
        degree = 1;
    }
    document.getElementById("degreeBarLeft").width = degree + "%";

    var cmd = generateCmd(currentEffect, degree);
    updateImageUrl(cmd);	
}

function getOffsets (evt)
{
	var target = evt.target;
	
	if (typeof target.offsetLeft == 'undefined') 
	{
		target = target.parentNode;
	}
	
	var pageCoords = getPageCoords(target);
	
	var eventCoords = 
	{ 
		x: window.pageXOffset + evt.clientX,
		y: window.pageYOffset + evt.clientY
	};
	
	var offsets = {
		offsetX: eventCoords.x - pageCoords.x,
		offsetY: eventCoords.y - pageCoords.y
	}
	
	return offsets;
}

function getPageCoords (element) 
{
	var coords = {x : 0, y : 0};
	while (element) {
		coords.x += element.offsetLeft;
		coords.y += element.offsetTop;
		element = element.offsetParent;
	}
	return coords;
}

function fixRedEye(e)
{
    var x;
    var y;
    
    if(currentEffect != "redeye")
        return;
    
    // get x and y coordinate
    if(document.all)
    {
        x = event.offsetX;
        y = event.offsetY;
    }
    else
    {
        var evtOffsets = getOffsets(e);
		x = evtOffsets.offsetX;
		y = evtOffsets.offsetY;
    }
    
    var cmd = "fr:" + x.toString() + ":" + y.toString();
    updateImageUrl(cmd);
}

function AdjustImage(e)
{
 	pageIsDirty = true;
	var x;
	var cmd;
	
	if (document.all)
	{
		x = window.event.offsetX + window.event.srcElement.offsetLeft; // x relative to the table										
	}
	else
	{					
		var evtOffsets = getOffsets(e);
		x = evtOffsets.offsetX + e.target.offsetLeft;
	}
	var barWidth = document.getElementById("degreeBar").offsetWidth;

	var degree = parseInt(100 * x / barWidth);
	document.getElementById("degreeBarLeft").width = degree + "%";
	
	cmd = generateCmd(currentEffect, degree);
	updateImageUrl(cmd);
}

function generateCmd(commandName, degree)
{
    var cmd;
    switch(commandName)
    {
        case "brightness":
		    brightDegree = degree;
		    cmd = "br:" + brightDegree.toString();
		    updateImageUrl(cmd);
            break;
        case "contrast":
            contrastDegree = degree;
            cmd = "co:" + contrastDegree.toString();
            updateImageUrl(cmd);
            break;
        case "saturation":
            satDegree = degree;
            cmd = "sa:" + satDegree.toString();
            updateImageUrl(cmd);
            break;
        case "hue":
            hueDegree = degree;
            cmd = "hu:" + hueDegree.toString();
            updateImageUrl(cmd);
            break;
        case "smooth":
            focusDegree = degree;
            cmd = "sm:" + focusDegree.toString();
            updateImageUrl(cmd);
            break;
    }
    return cmd;
}

function showBar(effect)
{
 	 pageIsDirty = true;
    currentEffect = effect;
    enableEffectButtons();
    switch(effect)
    {
        case "brightness":
		    document.aspnetForm.EffectBtn1.disabled = true;
		    document.getElementById("degreeBarLeft").width  = brightDegree + "%";
            break;
        case "contrast":
            document.aspnetForm.EffectBtn2.disabled = true;
		    document.getElementById("degreeBarLeft").width  = contrastDegree + "%";
            break;
        case "saturation":
            document.aspnetForm.EffectBtn3.disabled = true;
		    document.getElementById("degreeBarLeft").width  = satDegree + "%";
            break;
        case "hue":
            document.aspnetForm.EffectBtn4.disabled = true;
		    document.getElementById("degreeBarLeft").width  = hueDegree + "%";
            break;
        case "smooth":
            document.aspnetForm.EffectBtn5.disabled = true;
		    document.getElementById("degreeBarLeft").width  = focusDegree + "%";
            break;
    }
    document.getElementById("DegreeDiv").style.display = "";
}

function grayScale()
{
 	 pageIsDirty = true;
    currentEffect = "grayscale";
	enableEffectButtons();
	document.aspnetForm.EffectBtn6.disabled = true;		
	document.getElementById("DegreeDiv").style.display = "none";		
	var cmd = "gr";
	updateImageUrl(cmd);
}

function blurBorder()
{
		pageIsDirty = true;
		currentEffect = "blurborder";
		document.aspnetForm.BorderBtn1.disabled = true;
		document.aspnetForm.BorderBtn2.disabled = false;
		var cmd = "bo:0";
		updateImageUrl(cmd);
}

function shadowBorder()
{
	ShowBusyImage ();
	
 	 pageIsDirty = true;
    currentEffect = "shadowborder";
    document.aspnetForm.BorderBtn1.disabled = false;
    document.aspnetForm.BorderBtn2.disabled = true;
    var cmd = "bo:1";
    updateImageUrl(cmd);
}




function updateImageUrl(cmd)
{

    if(currentCmd.length == 0)
    {
        currentCmd += cmd;
    }
    else
    {
        // if it's fix red eye command, then don't replace
        var i = cmd.indexOf("fr");
        if(i >= 0)
            currentCmd += "|" + cmd;
        else
            currentCmd = replaceCmd(cmd);
    }
    // refresh image 
    document.aspnetForm.ctl00_BrowsePlaceHolder_TemporaryImg.src = "../DisplayTempImage.aspx?id=" + id + "&cmds=" + currentCmd + "&n=" + Math.random().toFixed(3);
   HideBusyImage ();
}

function replaceCmd(cmd)
{
    var cmdName = cmd.substring(0, 2);

    var i = currentCmd.indexOf(cmdName);
    if(i < 0)
    {
        if(currentCmd.length > 0)
            currentCmd += "|" + cmd;
        else
            currentCmd += cmd;
    }
    else
    {
        var s1 = currentCmd.substring(0, i);
        var j = currentCmd.indexOf("|", i);
        var s2 = "";
        if(j >= 0)
            s2 = currentCmd.substring(j, currentCmd.length);
        currentCmd = s1 + cmd + s2;
    }
    
    return currentCmd;
}


/* crop related */

function hideCropRegion()
{
    dragObj.elNode.style.display = "none";
    maskObj.Top.style.display = "none";
    maskObj.Left.style.display = "none";
    maskObj.Bottom.style.display = "none";
    maskObj.Right.style.display = "none";
}

function showCropRegion()
{
    dragObj.elNode.style.display = "";
    maskObj.Top.style.display = "";
    maskObj.Left.style.display = "";
    maskObj.Bottom.style.display = "";
    maskObj.Right.style.display = "";
}



/* prepare for submit */
function prepareSubmit()
{
    document.aspnetForm.cmds.value = currentCmd;
    if(isCropping)
    {
        // construct crop parameters
        dragObj.elStartLeft  = parseFloat(dragObj.elNode.style.left, 10);
        dragObj.elStartTop   = parseFloat(dragObj.elNode.style.top,  10);

        dragObj.elStartWidth  = parseFloat(dragObj.elNode.style.width, 10);
        dragObj.elStartHeight   = parseFloat(dragObj.elNode.style.height,  10);

        var s = dragObj.elStartLeft + ":" + dragObj.elStartTop + ":" + dragObj.elStartWidth + ":" + dragObj.elStartHeight;
        document.aspnetForm.crop.value = s;
       crop = s; 
    }
}

	function CheckPageStatus(saveAsCopy) {
		if(pageIsDirty && currentCmd != null && currentCmd != '') {
			if(confirm('Do you wish to save your changes before you leave this page?')) {
				prepareSubmit();
				
				if(!saveAsCopy)
					SaveEditedImageJs();
				else
					SaveCopyJs();
				currentCmd = '';
			}
		}
	}