input = {
    clear: function(inputObj)
    {
        if (inputObj.value == inputObj.defaultValue)
        {
            inputObj.value = '';
            inputObj.style.color = 'black';
        }
    },

    restore: function(inputObj)
    {
        if (inputObj.value == '')
        {
            inputObj.style.color = '#B0B0B0';
            inputObj.value = inputObj.defaultValue;
        }
    }
}

imageInfo = {
    onEdit: function(inputObj)
    {
        var alt = document.getElementsByName('alt')[0];
        var caption = document.getElementsByName('caption')[0];
        var submit = document.getElementsByName('submit')[0];

        // Limitation: The default values can't be submitted...not that anyone wants to...

        if ( (alt.value == '') || (caption.value == '') || (alt.value == alt.defaultValue) || (caption.value == caption.defaultValue) )
            submit.disabled = true;
        else
            submit.disabled = false;
    },

    endCallback: function(formID, response)
    {
        document.getElementById(formID).parentNode.innerHTML = response;
    }
}

function disableSelect(input)
{
    var select = document.getElementsByName("user");

    if (input.value.length == 0)
    {
        select[0].disabled = false;
    }
    else
    {
        select[0].disabled = true;
    }
}

upload = {
    // Heavily inspired by 
    // http://www.webtoolkit.info/ajax-file-upload.html

    // uses hidden <iframe> technique, not pure AJAX

    beginCallback: function()
    {
        document.getElementById('uploadStatus').innerHTML = 'Uploading file...';
        return true;
    },

    endCallback: function(formID, response)
    {
        document.getElementById('uploadStatus').innerHTML = '';

        //document.getElementById('uploadResponse').innerHTML += response;
        uploadAjax.getFiles();
    },

	frame: function(formID, callbacks)
    {
        var n = 0;
        while (document.getElementById('upload' + n))
        {
            n++;
        }

        var frameID = 'upload' + n;
		var div = document.createElement('div');

		div.innerHTML = '<iframe style="display:none" src="about:blank" id="'+frameID+'" name="'+frameID+'" onload="upload.frameLoaded(\''+formID+'\',\''+frameID+'\')"></iframe>';
		document.body.appendChild(div);

		var frame = document.getElementById(frameID);

		if (callbacks && typeof(callbacks.END) == 'function')
        {
			frame.END = callbacks.END;
		}

		return frameID;
	},

	formTarget : function(form, frameID) {
        // The frame ID is also the frame name
		form.setAttribute('target', frameID);
	},

	submit: function(form, callbacks)
    {
        var formID = form.id;

		upload.formTarget(form, upload.frame(formID, callbacks));
		if (callbacks && typeof(callbacks.BEGIN) == 'function')
        {
			return callbacks.BEGIN();
		}
        else
        {
			return true;
		}
	},

	frameLoaded: function(formID, frameID)
    {
		var frame = document.getElementById(frameID);

		if (frame.contentDocument) { var frameDocument = frame.contentDocument; }
        else if (frame.contentWindow) { var frameDocument = frame.contentWindow.document; }
        else { var frameDocument = window.frames[frameID].document; }

		if (frameDocument.location.href == "about:blank")
        {
			return;
		}

		if (typeof(frame.END) == 'function') {
			frame.END(formID, frameDocument.getElementById('content').innerHTML);
		}
	}
}

ajax = {
    create: function()
    {
        // taken from http://ajaxpatterns.org/XMLHttpRequest_Call

        try { return new XMLHttpRequest(); } catch(e) {}
        try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
        try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
        return null;
    }
}

uploadAjax = {
    // Unlike the previous upload functions, these ones
    // use AJAX and are run upon page load to make sure
    // all uploaded files are listed.

    // uploadAjax.args stores the arguments needed to call
    // upload.php and get the list of uploaded files.

    getFiles: function()
    {
        // based on http://ajaxpatterns.org/XMLHttpRequest_Call

        var ajaxObj = ajax.create();
        ajaxObj.open("GET", "/upload.php?getlist=true&" + uploadAjax.args + "&cachekiller=" + new Date().getTime(), true);
        ajaxObj.onreadystatechange = function()
        {
            if (ajaxObj.readyState != 4)  { return; }
            document.getElementById('uploadResponse').innerHTML = ajaxObj.responseText;
        };
        ajaxObj.send(null);
    },

    delete: function(boxId, args)
    {
        var box = document.getElementById(boxId);
        box.innerHTML = 'Deleting file...';

        var ajaxObj = ajax.create();
        ajaxObj.open("GET", "/upload.php?" + args, true);
        ajaxObj.onreadystatechange = function()
        {
            if (ajaxObj.readyState != 4)  { return; }
            if (ajaxObj.responseText == 'DELETED')
            {
                box.parentNode.removeChild(box);
            }
            else
            {
                box.innerHTML = 'Deletion failed.';
            }
        };
        ajaxObj.send(null);
    }
}
