/**
* Agathons Image Editor
* Versjon: 0.1
*
* Denne koden inneholder mesteparten av funksjonaliteten som trengs for å
* kunne redigere bilder på en webside. Visse forutsetninger må være tilstede
* for at scriptet skal kunne fungere. Blant annet trengs tilgang til Agathons
* standard funksjonsbibliotek.
*/

var imageEditor = new ImageEditor();
var EDIT_UPLOAD_IMAGE = 1;
var EDIT_LEFT_ALIGN   = 2;
var EDIT_BLOCK_ALIGN  = 3;
var EDIT_RIGHT_ALIGN  = 4;
var EDIT_RESIZE       = 5;
var EDIT_ADD_HOTSPOT  = 6;

/**
* Dette er hovedklassen i Agathons Image Editor. Den inneholder alle editerings-
* funksjonene. 
*/
function ImageEditor() {
    var currentImageObj     = null;
    var currentAction       = null;
    var originalWidth       = null;
    var originalHeight      = null;
    var originalPercentage  = null;
    var min_width           = 50;
    var max_width           = 700;
    var resize_active       = false;
    
    
    this.setImageObj         = setImageObj;
    this.hasImageObj         = hasImageObj;
    this.getImageObj         = getImageObj;
    
    this.eventHappened       = eventHappened;
    this.alignImage          = alignImage;
    
    this.toggle_resize       = toggle_resize;
    this.init_resize         = init_resize;
    this.draw_resize_frame   = draw_resize_frame;
    this.place_resize_handle = place_resize_handle;
    this.hide_resize         = hide_resize;
    this.start_resize        = start_resize;
    this.stop_resize         = stop_resize;
    this.do_resize           = do_resize;
    
    /**
    * Setter bildet som skal redigeres
    */
    function setImageObj(imageName) {
        this.currentImageObj = findObj(imageName);
        
        if (this.currentImageObj != null) {
            var percentageFieldObj  = findObj("resampling_percentage");
            this.originalWidth      = this.currentImageObj.width;
            this.originalHeight     = this.currentImageObj.height;
            this.originalPercentage = percentageFieldObj.value;
        }
    }
    
    /**
    * Returnerer true hvis objektet har fått satt et image-objekt
    */ 
    function hasImageObj() {
        return this.getImageObj() != null;
    }
    
    function getImageObj() {
        return this.currentImageObj;
    }
    
    function eventHappened(eventCode) {
        if (eventCode == EDIT_UPLOAD_IMAGE) {
            dialogProducer.showCustomDialog('Upload an Image', 'image_upload_form', null, null, new CloseAction());
        }
        else if (eventCode == EDIT_LEFT_ALIGN) {
            this.alignImage('left');
        }
        else if (eventCode == EDIT_RIGHT_ALIGN) {
            this.alignImage('right');
        }
        else if (eventCode == EDIT_BLOCK_ALIGN) {
            this.alignImage('block');
        }
        else if (eventCode == EDIT_RESIZE) {
            this.toggle_resize();
        }       
    }
    
    function alignImage(alignment) {
        if (!this.hasImageObj()) {return;}
        if (this.resize_active) { this.hide_resize(); this.resize_active = false;}
        
        if (alignment == "block") {
            this.currentImageObj.style.display = alignment;
        }
        else {
            this.currentImageObj.style.cssFloat = alignment;
        }
        edit_field("alignment", alignment);
    }
    
    function toggle_resize() {
        if (!this.hasImageObj()) {return;}

        if (!this.resize_active) {
            this.resize_active = true;
            this.init_resize();
        }
        else {
            this.resize_active = false;
            this.hide_resize();
        }
    }
    
    function init_resize() {
        var resize_frame;
        if ((resize_frame = findObj('resize_frame')) != null) {
            var resize_handle = findObj("resize_handle");
            this.draw_resize_frame(resize_frame);
            resize_frame.style.visibility = "visible";
    
            this.place_resize_handle(resize_handle);
            resize_handle.style.visibility = "visible";
        }
        else {
            alert("Resize not available on this page");
        }
    }
    
    function draw_resize_frame() {
        if (!this.hasImageObj()) {return;}
        var resize_frame = findObj('resize_frame');
        var top  = get_top(this.currentImageObj);
        var left = get_left(this.currentImageObj);
        resize_frame.style.top = top;
        resize_frame.style.left = left;
        resize_frame.style.width = this.currentImageObj.width;
        resize_frame.style.height = this.currentImageObj.height;
    }
    
    
    function place_resize_handle() {
        if (!this.hasImageObj()) {return;}
        var resize_handle = findObj("resize_handle");
        var top  = get_top(this.currentImageObj);
        var left = get_left(this.currentImageObj);
        resize_handle.style.top = top + this.currentImageObj.height - 5;
        
        // Plasserer resize_handle til høyre eller venstre basert på bildets float-verdi
        if (this.currentImageObj.style.cssFloat == "right" || this.currentImageObj.style.styleFloat == "right") { //float er reservert i javascript, bruk cssFloat istedet
            resize_handle.style.left = left - 5;
        }
        else {
            resize_handle.style.left = left + this.currentImageObj.width - 5;
        }
    }
    
    function hide_resize() {
        var resize_frame;
        
        if ((resize_frame = findObj("resize_frame")) != null) {
            
            var resize_handle = findObj("resize_handle");
            resize_frame.style.visibility  = "hidden";
            resize_handle.style.visibility = "hidden";
        }
    }
    
    function start_resize() {
        var body_obj = findObj("resize_body");
        var percentage_field_obj = findObj("resampling_percentage");
        original_width = this.currentImageObj.width;
        original_height = this.currentImageObj.height;
        original_percentage = percentage_field_obj.value;
        body_obj.onmousemove = imageEditor.do_resize;
        body_obj.onmouseup = imageEditor.stop_resize;
    }
    
    function stop_resize() {
        var body_obj = findObj("resize_body");
        body_obj.onmousemove = null;
    }
    
    function do_resize(e) {
        if (!e) var e = window.event;
        var mouseX = e.clientX;
        
        var delta_width = 0;
        if (imageEditor.getImageObj().style.cssFloat == "right" || imageEditor.getImageObj().style.styleFloat == "right") { //float er reservert i javascript, bruk cssFloat eller styleFloat istedet
            delta_width = (get_left(imageEditor.getImageObj()) + imageEditor.getImageObj().width) - mouseX;
        }

        else {
            delta_width = mouseX - get_left(imageEditor.getImageObj());
        }
        if (delta_width < min_width) { delta_width = min_width;}
        if (delta_width > max_width) { delta_width = max_width;}
        
        var ratio = delta_width / original_width;
        var delta_height = original_height * ratio;
        var delta_percentage = original_percentage * ratio;
        imageEditor.getImageObj().height = delta_height;
        imageEditor.getImageObj().width = delta_width;
    
        imageEditor.draw_resize_frame()
        imageEditor.place_resize_handle();
        edit_field("resampling_percentage", delta_percentage);
    }
}


/**
* Event-listener for edit_image events. 
*/
function edit_image_event(event_name, value) {
    if (event_name == "show_dialog" && value != null) {
        show_dialog(value);
    }
    else if (event_name == "alignment" && value != null) {
        edit_field("alignment", value);
    }
    else if (event_name == "resize"  && value != null) {
        toggle_resize(value);
    }
    else if (event_name == "add_hotspot"  && value != null) {
        add_hotspot(value);
    }
}

// *** Slutt edit image script ***


// *** Agathons resize script v 0.0000000000000001 ***
var resize_script_loaded = true;
var resize_active = false;
var original_width = 0;
var original_height = 0;
var original_percentage = 0;
var current_image_obj = null; //Objektet vi jobber med
var min_width = 50;
var max_width = 700;
