/*
 * Invision File Manager
 * Admin Javascript Library
 * Copyright (c) 2003 Invision Power Services
 * -------------------------------------
 * You may not remove the copyright or
 * redistribute the script in any form
 *
 * Authors: Stephen Ball <stephen@aquonics.com>
 *
 * Last Modified: 22nd February 2003 
 *
 */

// A function to disable word wrapping
function wrap()
{
    // Check that the user is using IE
    var browser = navigator.appName;
    if (browser.indexOf("Microsoft") < 0)
    {
        alert ("Sorry this feature requires Microsoft Internet Explorer");
        return false;
    }

    var form = window.document.template;

    if (form.fdata.wrap == "off")
    {
        form.fdata.wrap = "soft";
        form.fdata.rows = 25;
        form.wrapping.value = "Disable Wrapping";
    }
    else
    {
        form.fdata.wrap = "off";
        form.fdata.rows = 24;
        form.wrapping.value = "Enable Wrapping";
    }

    return true;
}

// A function to update the RGB colour sample
function update_rgb(type)
{
    if (type == 1)
    {
        // Update the "free" space colour
        if (is_RGB(window.document.settings.free_red) == false || is_RGB(window.document.settings.free_green) == false || is_RGB(window.document.settings.free_blue) == false)
        {
            // One of the fields doesn't contain a valid number so return
            return;
        }

        var red     = window.document.settings.free_red.value;
        var green   = window.document.settings.free_green.value;
        var blue    = window.document.settings.free_blue.value;

        window.document.settings.free_rgb.style.backgroundColor = 'rgb(' + red + ',' + green + ',' + blue + ')';
    }
    else
    {
        // Update the "used" space colour
        if (is_RGB(window.document.settings.used_red) == false || is_RGB(window.document.settings.used_green) == false || is_RGB(window.document.settings.used_blue) == false)
        {
            // One of the fields doesn't contain a valid number so return
            return;
        }

        var red     = window.document.settings.used_red.value;
        var green   = window.document.settings.used_green.value;
        var blue    = window.document.settings.used_blue.value;

        window.document.settings.used_rgb.style.backgroundColor = 'rgb(' + red + ',' + green + ',' + blue + ')';
    }

    ConvertToHex(type);
}

// A function which checks if the value is valid
function is_RGB(field)
{
    if (field.value == null || field.value == "")
    {
        // Value is empty
        field.focus();
        return false;
    }
    else if (isNaN(field.value) == true)
    {
        // Value is not a number
        field.focus();
        return false;
    }
    else if (field.value < 0 || field.value > 255)
    {   
        // Value too high/low
        field.focus();
        return false;
    }
    else
    {
        // We got through all the check so convert to an Integer not a decimal
        field.value = parseInt(field.value);
        return true;
    }
}

// A function to increase the RGB value
function increase(field, type)
{
    if (parseInt(window.document.settings.elements[field].value) + 5 > 255)
    {
        // If the new value is going to be more than 255 set it to 255
        window.document.settings.elements[field].value = 255;
    }
    else
    {
        window.document.settings.elements[field].value = parseInt(window.document.settings.elements[field].value) + 5;
    }

    update_rgb(type);
}

// A function to decrease the RGB value
function decrease(field, type)
{
    if (parseInt(window.document.settings.elements[field].value) - 5 < 0)
    {
        // If the new value is less than 0 set it to 0
        window.document.settings.elements[field].value = 0;
    }
    else
    {
        window.document.settings.elements[field].value = parseInt(window.document.settings.elements[field].value) - 5;
    }

    update_rgb(type);
}

// Converts a Hex character to a Decimal
function DecValue(Hex)
{
    if (Hex == "A")
    {
        return 10;
    }
    else if (Hex == "B")
    {
        return 11;
    }
    else if (Hex == "C")
    {
        return 12;
    }
    else if (Hex == "D")
    {
        return 13;
    }
    else if (Hex == "E")
    {
        return 14;
    }
    else if (Hex == "F")
    {
        return 15;
    }
    else
    {
        return eval(Hex);
    }
}

// Converts a Decimal to a Hex character
function HexValue(Dec)
{
    if (Dec == 10)
    {
        return "A";
    }
    else if (Dec == 11)
    {
        return "B";
    }
    else if (Dec == 12)
    {
        return "C";
    }
    else if (Dec == 13)
    {
        return "D";
    }
    else if (Dec == 14)
    {
        return "E";
    }
    else if (Dec == 15)
    {
        return "F";
    }
    else
    {
        return "" + Dec;
    }
}

// Converts the Hex string to RGB
function ConvertToRGB(type)
{
    var valid = new RegExp("^[A-Fa-f0-9]+$");

    if (type == 1)
    {
        var input    = window.document.settings.free_hex;
        var red      = window.document.settings.free_red;
        var green    = window.document.settings.free_green;
        var blue     = window.document.settings.free_blue;
    }
    else
    {
        var input    = window.document.settings.used_hex;
        var red      = window.document.settings.used_red;
        var green    = window.document.settings.used_green;
        var blue     = window.document.settings.used_blue;
    }

    if (valid.test(input.value) == false)
    {
        input.focus();
        return;
    }    
    else if (input.value.length < 6 || input.value.length > 6)
    {
        input.focus();
        return;
    }

    input = input.value.toUpperCase();

    var a = DecValue(input.substring(0, 1));
    var b = DecValue(input.substring(1, 2));
    var c = DecValue(input.substring(2, 3));
    var d = DecValue(input.substring(3, 4));
    var e = DecValue(input.substring(4, 5));
    var f = DecValue(input.substring(5, 6));

    var x = (a * 16) + b;
    var y = (c * 16) + d;
    var z = (e * 16) + f;

    red.value = x;
    green.value = y;
    blue.value = z;

    update_rgb(type);
}

// Converts the RGB values to a Hex string
function ConvertToHex(type)
{
    if (type == 1)
    {
        var red     = window.document.settings.elements['free_red'].value;
        var green   = window.document.settings.elements['free_green'].value;
        var blue    = window.document.settings.elements['free_blue'].value;
        var field   = window.document.settings.elements['free_hex'];
    }
    else
    {
        var red     = window.document.settings.elements['used_red'].value;
        var green   = window.document.settings.elements['used_green'].value;
        var blue    = window.document.settings.elements['used_blue'].value;
        var field   = window.document.settings.elements['used_hex'];
    }

    var a = HexValue(Math.floor(red / 16));
    var b = HexValue(red % 16);
    var c = HexValue(Math.floor(green / 16));
    var d = HexValue(green % 16);
    var e = HexValue(Math.floor(blue / 16));
    var f = HexValue(blue % 16);

    var z = a + b + c + d + e + f;

    while (z.length < 6)
    {
        z = z + "0";
    }

    field.value = z;
}

// A pair of functions to increase the value when the user "holds" the button
var timerID;
function start_timer(method, field, type)
{
    window.clearInterval(timerID); // Ensure the timer has stopped, just in case

    if (method == 1)
    {
        var func = "increase('" + field + "','" + type + "')";
        increase(field, type); // Run the function once before starting the timer
    }
    else
    {
        var func = "decrease('" + field + "','" + type + "')";
        decrease(field, type); // Run the function once before starting the timer
    }
    
    timerID = window.setInterval(func, 100);
}

function stop_timer()
{
    window.clearInterval(timerID);
}

// Creates a popup window
function open_window(url)
{
    if(window.screen)
    {
        var LEFT = (window.screen.width - 650)  / 2;
        var TOP  = (window.screen.height - 500) / 2;
    }

    var NEW_WIN                     = null;
    NEW_WIN                         = window.open("", "Window", "toolbar=no,width=650,height=500,directories=no,status=yes,scrollbars=yes,resize=yes,menubar=no,left=" + LEFT + ",top=" + TOP);
    NEW_WIN.document.location.href  = url;
}