/* ---[ SETUP NAMESPACE ]--- */
if(typeof(mdp) != 'object'){
	var mdp = new Object();
}
/**
 * mdpUploader
 *
 * @author Jeremiah LaBresh
 * @requirements SWFObject, MooTools1.11
 * @classDescription Will allow you to create an upload button utilizing flash.
 *
 * @param referenceObject:String ***REQUIRED***
 * 				Name of the instance of the mdpUploader so call backs can be called appropriately
 *
 * @param flashNameValue:String
 * 				Name of the flash object so that if more than one uploader is on the page there is no conflict
 **/

function mdpUploader(referenceObject, flashNameValue, buttonDivID, formHandlerURL, formHandlerDomain, fileTypes, maxFileSize, maxFileCount){

	/* ---[ CLASS VARIABLES ]--- */
	/* public */
	/* none */

	/* private */
	var _refObject;	/* Name of the reference object (i.e. var refObj = new mdpUploader()...) */
	var _flashName;	/* if you need more than one mdpUploader ona  page, then set this to a unique name for each */
	var _divID;		/* divID is the value of the Div ID attribute that flash gets added to */
	var _flashRef;	/* reference to flash object. This gets set after the flash file is written to the page. */
	var _listeners;	/* this is set by an object that is passed to this.eventListeners */
	var _buttonID;	/* the ID of the main upload button used for disabling and enabling */
	var _fileCount = 0;
	var _formHandlerURL, _formHandlerDomain, _fileTypes, _maxFileSize, _maxFileCount;
    var _self = this;
    var _divRef;

    /* ---[ CONSTRUCTOR ]--- */
	function init(){
	  /* initialization code */
		_refObject = referenceObject;
		_flashName = flashNameValue == undefined || flashNameValue == "" ? "mdpFileUpload" : flashNameValue;
		_divID = "dv" + _flashName;
		_buttonID = buttonDivID;
		_formHandlerURL = formHandlerURL;
		_formHandlerDomain = formHandlerDomain;
		_fileTypes = fileTypes;
		_maxFileSize = maxFileSize;
		_maxFileCount = maxFileCount;

		/* if the divID does not exists, add it to the body */
		if( !$( _divID ) ){
			_divRef = new Element( 'div', { 'id': _divID } ).injectInside( $E( 'body' ) ).setStyles( 'display: hidden;' );
		}

		var errorMessage = "";

		/* check for major errors */
		if(_refObject == undefined || _refObject == "") errorMessage += "There is an error, you need to define the 'referenceObject'\n";
		if(_flashName == undefined || _flashName == "") errorMessage += "There is an error, you need to define the 'flashNameValue'\n";
		if(_divID == undefined || _divID == "dv") errorMessage += "There is an error with 'divID', you need to define 'flashNameValue'\n";

        if( $(buttonDivID) ){
            $( buttonDivID ).setOpacity(0.5);
        }

        if(errorMessage.length > 0) {
			alert("mdpUploader Error (" + _refObject + ") == \n" + errorMessage);
		} else {
			addFlashDiv();
        }
	};

    function addFlashDiv(){

		/* if the divID does not exists, add it to the body */
		if(!$(_divID)){
			_divRef = new Element('div', {'id': _divID}).injectInside($E('body')).setStyles('display: hidden;');
		}
        /* createFlash - build our flash object on the page */
        createFlash( _buttonID );
        _flashRef = thisMovie( _flashName );
    }

    /* ---[ PUBLIC METHODS ]--- */
	this.setEventListeners = function(o){
        _listeners = o;
	};


    var cntr = 0;
	this.flashIsReady = function( s ){
        if( s ) s = s+"";
        if( typeof( _flashRef.flashIsReady ) == "undefined" ){
            $( _divID ).remove();
            if( cntr < 5 ) _self.create();
            cntr++;
        } else {
            _flashRef.flashIsReady( "true" );
            $( buttonDivID ).setOpacity( 1 );
        }
    };

    this.jsReady = function(){return true;};

	this.create = function(){
        addFlashDiv();
	}

	this.returnFileCount = function(i){
		 _fileCount = i;
	}

	this.returnDivID = function(){
		return _divID;
	}

	/* ---[ PRIVATE METHODS ]--- */
	function createFlash( bdid ){
        var flDiv = $(bdid);
		var curDimensions = flDiv.getCoordinates();
		var flDivChild = $(_divID);
		var randNum = Math.random() * 999999999999;
		var ppnav_h = new SWFObject("/web/flash/mdp/app/mdpupload/mdpUploader.swf?" +randNum , _flashName, curDimensions.width, curDimensions.height, "9", "#FFFFFF");

        ppnav_h.addParam("wmode", 'transparent');
		ppnav_h.addParam("scale", "noscale");
		ppnav_h.addParam("allowScriptAccess", "always");
		ppnav_h.addVariable("refObject", _refObject);
		ppnav_h.addVariable("w", curDimensions.width);
		ppnav_h.addVariable("h", curDimensions.height);
		ppnav_h.addVariable("formHandlerURL", _formHandlerURL);
		ppnav_h.addVariable("formHandlerDomain", _formHandlerDomain);
		ppnav_h.addVariable("fileTypes", _fileTypes);
		ppnav_h.addVariable("maxFileSize", _maxFileSize);
		ppnav_h.addVariable("maxFileCount", _maxFileCount);

        ppnav_h.write( _divID);
		curDimensions = flDiv.getCoordinates();
        flDivChild.setStyles("position: absolute; z-index: 1335; width: " + curDimensions.width + "px; height: " + curDimensions.height + "px; top: "+(curDimensions.top)+"px; left: "+ (curDimensions.left+3) +"px; ");
	};

	function thisMovie(movieName) {
		if (navigator.appName.indexOf("Microsoft") != -1) {
			return window[movieName];
		} else {
			return document[movieName];
		}
	}

	/* ---[ EVENT LISTENERS ]--- */
	this.onListComplete = function(o){
		/* --- onListComplete --- */
		/* modify the object if needed before it is sent to the call back */
        if ( _listeners.onListComplete)  _listeners.onListComplete(o);
	};

	this.onFileComplete = function(o){
		/* --- onFileComplete --- */

        if ( _listeners.onFileComplete)  _listeners.onFileComplete(o);
	};

	this.onFileUploadComplete = function(o){
		/* --- onFileUploadComplete --- */
		if ( _listeners.onFileUploadComplete)  _listeners.onFileUploadComplete(o);
	};

	this.onTooManyFiles = function(o){
		/* --- onTooManyFiles --- */
		if ( _listeners.onTooManyFiles)  _listeners.onTooManyFiles(o);
	};

	this.onTooLargeFile = function(o){
		/* --- onTooLargeFile --- */
		if ( _listeners.onTooLargeFile)  _listeners.onTooLargeFile(o);
	};

	this.onFileSelected = function(o){
		/* --- onFileSelected --- */
		if ( _listeners.onFileSelected)  _listeners.onFileSelected(o);
	};

	this.onFileProgressEvent = function(o){
		/* --- onFileProgressEvent --- */
		if ( _listeners.onFileProgressEvent)  _listeners.onFileProgressEvent(o);
	};

	this.onBrowseCancelledEvent = function(o){
		/* --- onBrowseCancelledEvent --- */
		if ( _listeners.onBrowseCancelledEvent)  _listeners.onBrowseCancelledEvent(o);
	};

	this.errorEvent = function(o){
		/* --- errorEvent --- */
		if ( _listeners.errorEvent) {
			 _listeners.errorEvent(o);
		} else {
			alert("Error: " + (o.name ? o.name : "") + ":\n" + o.message);
		}
	};

	/* ---[ RUN ]--- */
	init();
};


/**
 * mdpThumbnailHandler
 *
 * @author Jeremiah LaBresh
 * @requirements SWFObject, MooTools1.11
 * @classDescription This will allow you add a thumbnail creator to a form. Works with share my, may need some adjustments to work in any environment
 *
 * @param mdpThumbnailInstance:String ***REQUIRED***
 * 				Name of the instance of the mdpThumbnailHandler so call backs can be called appropriately
 *
 * @param parentDivID:String
 * 				The id of the parent div of the form
 *
 * @param fullImagePath:String
 * 				Full path of the image. Preferably same domain as flash.
 **/

	function mdpThumbnailHandler(mdpThumbnailInstance, parentDivID, fullImagePath, createOnImagesLoad, mdpFormHandler, justThumb){
		/* no private vars */
		var self = "";
		var parent = "";
		var fullImage = "";
		var flashName = "";
		var flashRef = "";
		var fullImageField = "";
		var createOnLoad = "";
        var flashDiv = "";
        var dataForm;
        var currentSlide;
        var formHandler;
        var justThumbnail;

        function init(){
            justThumbnail = !justThumb ? false : justThumb ;
            self = mdpThumbnailInstance;
			parent = parentDivID;
			fullImage = fullImagePath;
			flashDiv = parent + "thumbnail";
			createOnLoad = createOnImagesLoad;
			flashName = "flashThumbnail_"+parent;
            dataForm = ($$("div[id=" + parent + "dataform]"));
            currentSlide = new Fx.Elements(dataForm);
            formHandler = mdpFormHandler;
            /*thumbnailObject
			alert("self:" + self + "\n" + "parent:" + parent + "\n" + "fullImage:" + fullImage + "\n" + "flashDiv:" + flashDiv + "\n");
			*/
			fullImageField = $(parent).getElement("input[name$=fullImagePath]");
			fullImageField.value = fullImage.replace(getDomain(),"");

		    var randNum = Math.random() * 999999999999;
			var thb = new SWFObject("/web/flash/mdp/app/createthumbnail/CreateThumbnail.swf?randNum=" + randNum, flashName, "310", "150", "9", "#FFFFFF");
			thb.addParam("wmode", 'transparent');
			thb.addParam("scale", "noscale");
			thb.addParam("allowScriptAccess", "always");
			thb.addVariable("f", fullImage);
			thb.addVariable("s", "/servlet/ShareMyGalleryImageUploadServlet.dyn");
			thb.addVariable("r", "550x550x_large,380x380x_slideshow");
			thb.addVariable("c", createOnLoad);
			thb.addVariable("j", self);
			thb.addVariable("jt", justThumbnail);
			thb.write(flashDiv);

            flashRef = thisMovie(flashName);
		}

		function thisMovie(movieName) {
			if (navigator.appName.indexOf("Microsoft") != -1) {
				return window[movieName];
			} else {
				return document[movieName];
			}
		}

		function getDomain(){

			if(!mdp.pageVars) {mdp.pageVars = new Object();}
			if(!mdp.pageVars.currentLocation) {mdp.pageVars.currentLocation = document.location + "";}
			if(!mdp.pageVars.domainName) {mdp.pageVars.domainName = mdp.pageVars.currentLocation.substring(0,mdp.pageVars.currentLocation.indexOf("/",mdp.pageVars.currentLocation.indexOf("//")+2));} /* we assume that the domain is http://DOMAINNAME.com/something */
			return mdp.pageVars.domainName;
		}


		this.flashIsReady = function(s){
            
            flashRef.flashIsReady("true");
		};

		this.jsReady = function(){ return true;};

		this.onImageCreated = function(o){
            var d ="";
            for (var i in o) {d += "o[" + i + "] == " + o[i] + "<br />";}
            if($("tempMessageCenter")){
                $("tempMessageCenter").innerHTML += "inside - onImageCreated:<br />" + d + "<hr /><br />";
            }
            
            var newJSON = o.file;
            var jsonObject = Json.evaluate( newJSON );

            if(jsonObject.statusMessage == "OK"){
                                             
                if(jsonObject.result && o.type){
                    var elem;
                    switch(o.type){
                    case "_thumb":
                        elem = $(parent).getElement("input[name$=thumbImagePath]");
                        break;
                    case "_large":
                        elem = $(parent).getElement("input[name$=largeImagePath]");
                        break;
                    case "_slideshow":
                        elem = $(parent).getElement("input[name$=slideImagePath]");
                        break;
                    case "_orig":
                        elem = $(parent).getElement("input[name$=origImagePath]");
                        break;
                    }
                    if(elem) {
                        elem.value = jsonObject.result;

                        if($("tempMessageCenter")){
                            $("tempMessageCenter").innerHTML += "inside - onImageCreated - value set for :" + elem.name + ":<br />" + elem.value + "<hr /><br />";
                        }
                    }
                } else {
                    /*
                    alert("we recieved no thumbnail data");
                     */
                }
            } else {
                alert( "error creating thumbnails: " + jsonObject.statusMessage );
            }

		}

		this.errorEvent = function(o){
			/* --- errorEvent --- */
            var d ="";
            for (var i in o) {d += "o[" + i + "] == " + o[i] + "<br />";}
            if($("tempMessageCenter")){
                $("tempMessageCenter").innerHTML += "inside - errorEvent:<br />" + d + "<hr /><br />";
            }
		};

		this.thumbnailSaved = function(o){
			/* --- thumbnailSaved --- */
            var d ="";
            for (var i in o) {d += "o[" + i + "] == " + o[i] + "<br />";}
            if($("tempMessageCenter")){
                $("tempMessageCenter").innerHTML += "inside - thumbnailSaved:<br />" + d + "<hr /><br />";
            }

            $(flashDiv).setStyle("width",105 + "px");
            currentSlide.start({
                '0': {
                    'opacity': [dataForm[0].getStyle("opacity"),1]
                }
            });
            /*
            currentSlide.slideIn();
            */

            mdp[formHandler].hideShowHelpBoxes(parent, false);
            if($(mdp.moveToStep2Function.id)) {$(mdp.moveToStep2Function.id).setOpacity(1);}
		};

		this.thumbnailModified = function(o){
			/* --- thumbnailModified --- */
            var d ="";
            for (var i in o) {d += "o[" + i + "] == " + o[i] + "<br />";}
            if($("tempMessageCenter")){
                $("tempMessageCenter").innerHTML += "inside - thumbnailModified:<br />" + d + "<hr /><br />";
            }

            mdp[formHandler].hideShowHelpBoxes(parent, true);
			var elem = $(parent).getElement("input[name$=thumbImagePath]");
                elem.value = "";

            currentSlide.start({
                '0': {
                    'opacity': [dataForm[0].getStyle("opacity"),0]
                }
            });
            /*
            currentSlide.slideOut();
            */
            var curPosLeft = $(flashDiv).getLeft();
            var curPosTop = $(flashDiv).getTop();

            $(flashDiv).setStyle("position","absolute");
            $(flashDiv).setStyle("z-index",1330);
            $(flashDiv).setStyle("width",310 + "px");
            $(flashDiv).setStyle("height",150 + "px");

            if($(mdp.moveToStep2Function.id)) {$(mdp.moveToStep2Function.id).setOpacity(0);}
        };

		this.messageEvent = function(o){
			/* --- messageEvent --- */
            var d ="";
            for (var i in o) {d += "o[" + i + "] == " + o[i] + "<br />";}
            if($("tempMessageCenter")){
                $("tempMessageCenter").innerHTML += "inside - messageEvent:<br />" + d + "<hr /><br />";
            }


		};

		init();

	}



	/**
	 * uploadFormHandler
	 *
	 * @author Jeremiah LaBresh
	 * @requirements MooTools1.11, mdpThumbnailHandler, mdpUploader
	 * @classDescription This will help in the communication between the uploader and the form
	 *
	 * @param form:String ***REQUIRED***
	 * 				ID of the form the uploader and thumbnails are attached to.
	 *
	 * @param statusArray:String
	 * 				object of IDs to display status
	 *
	 * @param mdpUploaderInstance:String
	 * 				Reference to the mdpUplaoder object
	 **/
	function uploadFormHandler(form, statusArray, mdpUploaderInstance,numForms,mdpFormHandlerReference,step2, mess){

        /* VARIABLES */

		var formID; /* formID we are handling */
		var statusArea; /* object of IDs to display status */
		var currentMessage; /* var to store the orgional message */
		var mdpUpload; /* var to store the orgional message */
		var formOptions; /* var to store some options */
		var totalForms ;
		var usedForms ;
		var selfish;
		var messages;

		this.formIDs = new Array();
		this.thumbnailObject = new Object();

        /* CONSTRUCTOR */

		function init(){
			formID = form;
			statusArea = statusArray;
			currentMessage = new Array();
			mdpUpload = mdpUploaderInstance;
			thumbnailObject = new Object();
			totalForms = (numForms == undefined ? 6 : numForms);
			usedForms = 0;
			selfish = mdpFormHandlerReference;
            messages = mess;

            addExitEvent();

			$(mdp.moveToStep2Function.id).setOpacity(0);
		}

        function exitHandler( e ){
		 e.returnValue = "If you leave, your Album will not be saved.";
        }

        function addExitEvent(){
            window.addEvent('beforeunload', exitHandler );
        }

        function removeExitEvent(){
            window.removeEvent('beforeunload', exitHandler );
        }

        /* GETTERS/SETTERS */

		this.getMdpUploadDivId = function(){
			return "" + mdpUpload.returnDivID();
		}

		this.setOrigionalStatus = function(){
			for(var i=0; i<statusArea.length; i++) {
				if ($(statusArea[i])) {
					$(statusArea[i]).innerHTML = "";
					/*$(statusArea[i]).innerHTML = currentMessage[statusArea[i]];*/
				}
			}
		};

		this.setStatus = function(txt){
			for(var i=0; i<statusArea.length; i++) {
				if ($(statusArea[i])) {
					currentMessage[statusArea[i]] = $(statusArea[i]).innerHTML;
					$(statusArea[i]).innerHTML = "";
					/*$(statusArea[i]).innerHTML = txt;*/
				}
			}
		};
        
        this.getUsedFormCount = function(){
			return usedForms;
		}

		this.availableForms = function(){
			return totalForms - getUsedFormCount();
		}

        /* PUBLIC */

        this.addThumbnail = function(id,imgPath,mdpUploadFormReference,createOnload, justThumb){
			if(createOnload == undefined) {createOnload = "true";}
			if(justThumb == undefined) {justThumb = "false";}
            mdp[mdpUploadFormReference]["thumbnailObject"][id] = new mdpThumbnailHandler( "mdp." + mdpUploadFormReference + ".thumbnailObject." + id, id, imgPath, createOnload, mdpUploadFormReference, justThumb );
		};

        /* begin dialog */
        this.dialog = function(msg,type,opt){
			verify(msg,type,opt);
		};

		this.dialogEnd = function(){
			unBlockWindow();
		};

		function unBlockWindow(){
			Window.unblock();
		}
        /* end dialog */

        /* begin free forms */
        this.getFreeUploadForm = function(){
			var uploadForm = $$("div.uploadForm");

            hideShowHelpBoxes( "step1", false, true );
            
            for(var t=0; t<uploadForm.length; t++){
				if ($(uploadForm[t].id).hasClass('invisible')) {
					$(uploadForm[t].id).removeClass("invisible");
					this.formIDs = t;
					$(uploadForm[t].id).getElements('input').each(function(e){
						e.toggleClass("required");
						e.toggleClass("invisible");
						$$("." + e.name.replace(/[^a-zA-Z 0-9]+/g,'')).each(function(e){
                            e.value = "";
                            if(e.hasClass("invisible")) e.toggleClass('invisible');
						});
                        e.addEvent( "change", function(){validateTextField($(this));} );
                        
                        e.addEvent( "keyup" , function(){validateTextField($(this));} );
                    });

					$(uploadForm[t].id).getElements('textarea').each(function(e){
						e.toggleClass("required");
                        e.value = "";
						e.toggleClass("invisible");
						$$("." + e.name.replace(/[^a-zA-Z 0-9]+/g,'')).each(function(e){
							if(e.hasClass("invisible")) e.toggleClass('invisible');
						});
                        e.addEvent( "change", function(){validateTextArea($(this));} );

                        e.addEvent("keyup" , function(){validateTextArea($(this));} );
					});

					$(uploadForm[t].id).getElement('button[id$=remove]').addEvent("click",function(e){

						verify("Are you sure you want to remove this photo?","delete",{id:uploadForm[t].id + ""});

					});
                    /*
					$(uploadForm[t].id).getElement('button[id$=remove]').addEvent("focus",function(e){
						var getID = this.id;
						checkFocus(getID);
					});
                    */
                    $("step1").getElements("div[id^=uploadForm]").each(function(e){
                        if((!e.hasClass("invisible")) && (e.hasClass("uploadForm"))) {
                            if(e.id) hideShowHelpBoxes(e.id, false);
                        }
                    });
                    return $(uploadForm[t].id);
				}
			}

            $("step1").getElements("div[id^=uploadForm]").each(function(e){
                if((!e.hasClass("invisible")) && (e.hasClass("uploadForm"))) {
                    if(e.id) hideShowHelpBoxes(e.id, false);
                }
            });
			return false;
		};

		this.getLoadedUploadForm = function(mdpUploadFormReference,messageDivID,messages){

			var uploadForm = $$("div.uploadForm");
			for(var t=0; t<uploadForm.length; t++){
				var currentFormID = uploadForm[t].id;

                if($(currentFormID)) {
                    if ($(currentFormID).hasClass('loaded')) {
                        $(currentFormID).removeClass("loaded");
                        this.formIDs = t;

                        $(currentFormID).getElements('input').each(function(e){
                            e.toggleClass("required");
                            e.toggleClass("invisible");
                            $$("." + e.name.replace(/[^a-zA-Z 0-9]+/g,'')).each(function(e){
                                if(e.hasClass("invisible")) e.toggleClass('invisible');
                            });
                        });

                        $(currentFormID).getElements('textarea').each(function(e){
                            e.toggleClass("required");
                            e.toggleClass("invisible");
                            $$("." + e.name.replace(/[^a-zA-Z 0-9]+/g,'')).each(function(e){
                                if(e.hasClass("invisible")) e.toggleClass('invisible');
                            });
                        });

                        $(currentFormID).getElement('button[id$=remove]').addEvent("click",function(e){

                            this.removeEvents("focus");
                            var getID = this.id;
                            getID = getID.replace("button","uploadForm");
                            getID = getID.replace("remove","");

                            verify("Are you sure you want to remove this photo?","delete",{id:getID});

                        });
                        /*
                        $(currentFormID).getElement('button[id$=remove]').addEvent("focus",function(e){
                            var getID = this.id;
                            checkFocus(getID);
                        });
                        */
                        var thumbFull = $(currentFormID).getElement("input[name$=fullImagePath]").value;
                        mdp[mdpUploadFormReference].addThumbnail(currentFormID,thumbFull,mdpUploadFormReference,"false","true");
                    }
                }
            }

            mdp[mdpUploadFormReference].updateCountMessage(messageDivID);

            $("step1").getElements("div[id^=uploadForm]").each(function(e){
                if((!e.hasClass("invisible")) && (e.hasClass("uploadForm"))) {
                    if(e.id) hideShowHelpBoxes(e.id, false);
                }
            });

		};
        /* end free forms */

        /* begin delete image */
		function verify(msg,type,opt){

			var div = new Element('div').setHTML(msg + "<br /><br />");
			if(!type) type ="";
			switch(type){
				case "delete":
					/* to use delete pass in {id:DIV_ID} to set that div to empty */
					new Element ('button',{'class':'M4','events':{ 'click': function(){ if(opt.id){removeForm(opt.id);}} }}).setHTML('Yes, Remove').injectInside(div);
					new Element ('button',{'class':'M4','events':{ 'click': function(){ Window.unblock();} }}).setHTML('No, Cancel').injectInside(div);
					break;
				case "processing":
					break;
				default:
					new Element ('button',{'events':{ 'click': function(){ Window.unblock();} }}).setHTML('Close Window').injectInside(div);
					break;
			}

			Window.block(div,'#000');
		}

		function removeForm(idStr){
			if (!$(idStr).hasClass('invisible')) {
                /* remove help boxes */
                hideShowHelpBoxes("step1",false,true);

                /* set class to invisible so we cant see it */
				$(idStr).addClass("invisible");
				/* set forms value to "" and toggle required */
				$(idStr).getElements('input').each(function(e){
					e.toggleClass("required");
					e.value = "";
					$$("." + e.name.replace(/[^a-zA-Z 0-9]+/g,'')).each(function(e){
						if(e.hasClass("invisible")) e.toggleClass('invisible');
					});
				});

                /* set forms value to "" and toggle required */
				$(idStr).getElements('textarea').each(function(e){
					e.toggleClass("required");
					e.value = "";
					$$("." + e.name.replace(/[^a-zA-Z 0-9]+/g,'')).each(function(e){
						if(e.hasClass("invisible")) e.toggleClass('invisible');
					});
				});

				/* clear out thumbnail */
				$(idStr).getElement("div[id$=thumbnail]").innerHTML = "&nbsp;";

				/* set image values to ""   */
				$(idStr).getElements("input[name$=photoId]").value = "";
				$(idStr).getElements("input[name$=thumbImagePath]").value = "";
				$(idStr).getElements("input[name$=fullImagePath]").value = "";
				$(idStr).getElements("input[name$=largeImagePath]").value = "";
				$(idStr).getElements("input[name$=slideImagePath]").value = "";
				updateCountMessage("statusMessageTop");

                /* move help boxes */

                $("step1").getElements("div[id^=uploadForm]").each(function(e){
                    if((!e.hasClass("invisible")) && (e.hasClass("uploadForm"))) {
                        if(e.id) hideShowHelpBoxes(e.id, false);
                    }
                });

                unBlockWindow();
			}

		};
        /* end delete image */

        /* begin form focus */
		function checkFocus(eleID){
			/*
			 * I don't really like writing form specific code, but this will only work for the upload form
			 */
			if(eleID){
				var count = eleID.replace("button","").replace("remove","");
				var nextForm = $("uploadForm" + ((count * 1) + 1));
				if(nextForm){
					if(nextForm.hasClass("invisible")){
						/*
						 * Go to submit button?
						 */
						$("moveToStep2").focus();
					} else {
						var nextField = $ES("input[id^=title]",nextForm.id);
						if(nextField[0]){
                            nextField[0].focus();
						}

					}
				}
			}
		}
        /* end form focus */

        /* begin messaging */
		function updateCountMessage(divID){

            var left = ($(mdp.mdpUploader.returnDivID()).getStyle("left").substr(0,($(mdp.mdpUploader.returnDivID()).getStyle("left").length-2))) * 1;
            $(divID).setHTML("You may choose up to " + mdp.mdpUploadFormHandler.checkUsedFormCount() + " photos for your album.");

            if(mdp.mdpUploadFormHandler.checkUsedFormCount() == 0){
                if(!$(mdp.mdpUploader.returnDivID()).getProperty("templeft")){
                    $(mdp.mdpUploader.returnDivID()).setProperty("templeft",(left));
                }
                $(mdp.mdpUploader.returnDivID()).setStyle("left",(left-10000) + "px");
            } else {
                if($(mdp.mdpUploader.returnDivID()).getProperty("templeft")){
                    $(mdp.mdpUploader.returnDivID()).setStyle("left",($(mdp.mdpUploader.returnDivID()).getProperty("templeft")) + "px");
                }
            }

        }

		this.updateCountMessage = function(divID){
			updateCountMessage(divID);
		}

		this.checkUsedFormCount = function(){

            var availableForms = 0;
			var uploadForm = $$("div.uploadForm");

			for(var t=0; t<uploadForm.length; t++){
                if($(uploadForm[t].id)){
                    if ($(uploadForm[t].id).hasClass('invisible')) {
                        availableForms++;
                    }
                }
            }

			/* move to step 2 */
			if(availableForms == 6){
				$(mdp.moveToStep2Function.id).setOpacity(0.0);
                if($("nextMessage")) $("nextMessage").innerHTML = "";
            } else {
				$(mdp.moveToStep2Function.id).addEvent("click",function(ev){mdp.moveToStep2Function.click(ev)}).setOpacity(1);
			}

			return availableForms;
		};
        /* end messaging */

        function validateTextField( e ){
            /**
             * pass in a text field
             */

            if(typeof(e.preventDefault) == "function"){
                e = $(this);
            }


            if( e.value != null ){
                var val = ( e.value.replace(/^\W+/,'')).replace(/\W+$/, '' );
                if( val == "" ){
                    e.removeClass( "validation-passed" );
                    e.addClass( "validation-failed" );
                } else if( val != "" ){
                    if( e.hasClass( "phone" ) ){
                        var regex = /^(\d{3})-(\d{3})-(\d{4})$/;
                        if ( !regex.test( e.value ) ) {
                            e.removeClass( "validation-passed" );
                            e.addClass( "validation-failed" );
                        } else {
                            e.removeClass( "validation-failed" );
                            e.addClass( "validation-passed" );
                        }
                    } else {
                        e.removeClass( "validation-failed" );
                        e.addClass( "validation-passed" );
                    }
                }
            } else {
                /* do nothing */
            }


        }

        function validateTextArea( e ){
            /**
             * pass in a textarea
             */
            if(typeof(e.preventDefault) == "function"){
                e = $(this);
            }


            if( e.value != null ){

                var val = (e.value.replace(/^\W+/,'')).replace(/\W+$/,'');
                if(val == ""){
                    e.removeClass("validation-passed");
                    e.addClass("validation-failed");
                } else if(val != ""){
                    if(val.length <= 1000){
                        e.removeClass("validation-failed");
                        e.addClass("validation-passed");
                    } else {
                        e.removeClass("validation-passed");
                        e.addClass("validation-failed");
                    }
                }
            } else {
                /* do nothing */
            }


        }

        function getHelpIcon(e){

            var next = $(e).getNext();
            while(next != null && !next.hasClass("helpIcon")){
                next = next.getNext();
            }

            return next;
        }

        function validateCheckbox( e ){
            /**
             * pass in a checkbox
             */
            e = $(e);
            var helpIcon = getHelpIcon(e);
            if(e.checked){
                e.removeClass("validation-failed");
                e.addClass("validation-passed");
                if(helpIcon != null && helpIcon.hasClass("validation-failed")){
                    helpIcon.removeClass("validation-failed");
                    helpIcon.addClass("validation-passed");
                }
            } else{
                e.removeClass("validation-passed");
                e.addClass("validation-failed");
                if(helpIcon != null && helpIcon.hasClass("validation-passed")){
                    helpIcon.removeClass("validation-passed");
                    helpIcon.addClass("validation-failed");
                }
            }

        }

        function validateCombobox( e ){
            /**
             * pass in a combo/select box
             */

            var val = ( e.value.replace(/^\W+/,'')).replace(/\W+$/, '' );
            if( val == "" ){
                e.removeClass( "validation-passed" );
                e.addClass( "validation-failed" );
            } else if(val != ""){
                e.removeClass( "validation-failed" );
                e.addClass( "validation-passed" );
            }

        }

        /* begin validation */

        this.validateUploadForms = function( returnObject ){
            /* validates step 1 */
            var passed = true;
            var returnObj = returnObject ? returnObject : false;
            var errorObj = new Object();

            $("step1").getElements("div[id^=uploadForm]").each(function(e){
                if((!e.hasClass("invisible")) && (e.hasClass("uploadForm"))) {
                    /* set forms value to "" and toggle required */
                    $(e.id).getElements('input[type=text]').each( function( el ){
                        validateTextField( el );
                        if( el.hasClass( "validation-failed" ) ) {
                            passed = false;
                            errorObj[ el.name ] = el.value;
                        }

                    });

                    /* set forms value to "" and toggle required */
                    $(e.id).getElements('textarea').each(function(el){
                        validateTextArea( el );
                        if( el.hasClass( "validation-failed" ) ) {
                            passed = false;
                            errorObj[ el.name ] = el.value;
                        }
                    });
                }
            });

            if(!passed){
                if(returnObj){
                    return errorObj;
                } else {
                    removeExitEvent();
                    return passed;
                }
            } else {
                return passed;
            }
        };

        this.validateContestForms = function( returnObject, continueObject, onChangeEvent ){
            /* validates step 2 */
            var passed = true;
            var returnObj = returnObject ? returnObject : false;
            var errorObj = new Object();
            var continueObj = continueObject ? continueObject : null;

            $("step2").getElements("div[class=uploadCategoryGroup]").each(function(e){
                    /* set forms value to "" and toggle required */
                    e.getElements('input[type=text]').each(function(el){

                        if(el.hasClass("required")){

                            validateTextField( el );
                            if( el.hasClass( "validation-failed" ) ) {
                                passed = false;
                                errorObj[ el.name ] = el.value;
                            }
                            
                        }
                    });

                    e.getElements('input[type=checkbox]').each(function(el){
                        if(el.hasClass("required")){
                            
                            validateCheckbox( el );

                            if( el.hasClass( "validation-failed" ) ){
                                passed = false;
                                errorObj[el.name] = el.value;
                            }
                        }
                    });

                    e.getElements('select').each(function(el){
                        if(el.hasClass("required")){
                            validateCombobox( el );

                            if( el.hasClass( "validation-failed" ) ){
                                passed = false;
                                errorObj[el.name] = el.value;
                            }
                        }
                    });

            });

            if(!passed){
                if(returnObj){
                    /* return a error object */
                    return errorObj;
                } else {
                    /* return a error boolean */
                    return passed;
                }
            } else {
                if( continueObj ){
                    return continueObj;
                } else {
                    removeExitEvent();
                    return passed;
                }
            }
        };

        this.checkIfContest = function( updateEvent ) {
			/*
			 * this is based on the following structure
			 * div[id=categorySelect]
			 *
			 * */
            mdp.mdpUploadFormHandler.hideShowHelpBoxes ("contestDiv", false, true);
			var categorySelect = $("categorySelect");
			var selectedCategory = "sc" + categorySelect.options[categorySelect.selectedIndex].value;
			var contestCheckbox = $('contestCheckbox');
			if(contestCheckbox != null) {contestCheckbox.checked = false; }
			var show = false;

			var contestDiv = $('contestDiv');
            if(mdp.sharemyCatObj[selectedCategory]) {
				if (mdp.sharemyCatObj[selectedCategory].photoContestFlag) {
					$('rulesLink').setAttribute("href",mdp.sharemyCatObj[selectedCategory].contestRulesURL);
                    
                    contestCheckbox.addClass("required");
                    contestCheckbox.removeClass("validation-passed");
                    contestCheckbox.removeClass("invisible");

                    show = true;

					if (mdp.sharemyCatObj[selectedCategory].phoneRequiredFlag) {
						$('phoneRequiredDiv').setStyle("display",'block');
                        $('contestPhone').addClass("required");
                        $('contestPhone').removeClass("validation-passed");
                        $('contestPhone').removeClass("invisible");
                        $('phoneRequiredTxt').setStyle("display",'block');

                    } else {
                        $('phoneRequiredDiv').addClass("required");
						$('phoneRequiredDiv').setStyle("display",'none');
                        $('contestPhone').removeClass("required");
                        $('contestPhone').addClass("invisible");
						$('phoneRequiredTxt').setStyle("display",'none');
                        
                    };

					if (mdp.sharemyCatObj[selectedCategory].contestCheckboxText != "") {
						$('contestExtraBoxText').innerHTML = mdp.sharemyCatObj[selectedCategory].contestCheckboxText;
						$('contestExtraBoxDiv').setStyle("display",'block');
                        $('contestExtraBox').addClass("required");
                        $('contestExtraBox').removeClass("invisible");
                        $('contestExtraBox').removeClass("validation-passed");
                        $('contestExtraBox').setProperty("checked",false);


					} else {
						$('contestExtraBoxDiv').setStyle("display",'none');
                        $('contestExtraBox').removeClass("required");
                        $('contestExtraBox').addClass("invisible");
                        $('contestExtraBox').setProperty("checked",false);
					};

					if (mdp.sharemyCatObj[selectedCategory].optinText != "") {
						$('optinTextDiv').innerHTML = mdp.sharemyCatObj[selectedCategory].optinText;
                        $('optinBoxDiv').setStyle("display",'block');
                        $('optinBox').removeClass("validation-passed");
                        $('optinBox').removeClass("invisible");
                        $('optinBox').setProperty("checked",false);
					} else {
						$('optinBoxDiv').setStyle("display",'none');
                        $('optinBox').addClass("invisible");
                        $('optinBox').setProperty("checked",false);
					};
				} else {
                    contestCheckbox.removeClass("required");
					show = false;
				}
			} else {
                contestCheckbox.addClass("invisible");
                contestCheckbox.removeClass("required");
				show = false;
			}

            mdp.mdpUploadFormHandler.hideShowHelpBoxes ("contestDiv", false);

            if(show){
				$(contestDiv.id).setStyle("display",'block');
                return true;
			} else {
				$(contestDiv.id).setStyle("display",'none');
                return false;
            }
		}

        this.hideShowHelpBoxes = function(optionalID, hide, remove){hideShowHelpBoxes(optionalID, hide, remove);};

        function hideShowHelpBoxes (optionalID, hide, remove){
            var parentDivID, removeBox, hideBoxes, ele, cnt;
            if(remove){
                removeBox = true;
            } else {
                removeBox = false;
            }

            if(hide){
                hideBoxes = hide == true ? true : false;
            } else {
                hideBoxes = false;
            }

            if(!optionalID) {
                parentDivID = formID;/* from constructor */
            } else {
                if($(optionalID)){
                    parentDivID = optionalID;
                } else {
                    parentDivID = formID;/* from constructor */
                }
            }

            /* set forms value to "" and toggle required */
            $(parentDivID).getElements('input[type=text]').each(function(e){
                ele = createHelpBoxes(e);
                if(ele){
                    if(removeBox){
                        ele.remove();
                    } else {
                        if(hideBoxes){
                            ele.addClass('invisible');
                        } else {
                            ele.removeClass('invisible');
                        }
                    }
                }
            });

            /* set forms value to "" and toggle required */
            $(parentDivID).getElements('textarea').each(function(e){
                ele = createHelpBoxes(e);
                if(ele){
                    if(removeBox){
                        ele.remove();
                    } else {
                        if(hideBoxes){
                            ele.addClass('invisible');
                        } else {
                            ele.removeClass('invisible');
                        }
                    }
                }
            });
        }

        function createHelpBoxes(el,msg){
            if(!msg) {
                msg = new Object();
                msg.message = "";
            }

            /*if(el.getStyle("visibility") != "hidden" && el.getStyle("display") != "none"){*/
                /*
                 * IE6 reports these as 'inherit' if the parent is hidden, FF2+ reports these as expected
                 */
                var className = el.getAttribute("name").replace(/[^a-zA-Z 0-9]+/g,'');
                var elementExists = false;
                var checkForElement = $ES("div[class^="+ className + "]", "body");
                if(checkForElement.length < 1){
                   var boxSize = {x:20 , y:20};
                   var offsetX = 20;
                   var offsetY = 0;
                   if(window.ie) {
                       switch(el.nodeName){
                        case "TEXTAREA" :
                            offsetX = 40;
                            break;
                        case "INPUT" :
                            offsetX = 20;
                            break;
                       }
                   }

                   el.setStyle( 'padding-right', boxSize.x + 'px' );

                   var cls = $$( className );
                   el.addClass( className );

                    if(msg.message == "") {
                        if( messages.help ){
                            var classes = el.className;
                            var classArray = classes.split(" ");
                            for(var i=0; i<classArray.length; i++){
                                var currentClass = classArray[i];
                                for(var s in messages.help){
                                    if(messages.help[s].cls){
                                        if(messages.help[s].cls == currentClass){
                                            msg.message = messages.help[s].message ? messages.help[s].message : "";
                                        }
                                    }
                                }
                            }
                        } else {
                            msg.message = "";
                        }
                    }

                   var ele = new Element('div',{	'class':className + ' helpmessage ',
                                        'events':{	'mouseover':function(e){
                                            var toolTip = $E("div.tool-tip","body");
                                            if(!toolTip){
                                                toolTip = new Element('div',{'class':'tool-tip '}).injectInside(document.body);
                                            }

                                            var toolDiv = toolTip.getElement("div");
                                            if(!toolDiv){
                                                toolDiv = new Element('div').injectInside(toolTip);
                                                toolDiv = toolTip.getElement("div");
                                            }

                                            var toolTitle = toolDiv.getElement(".tool-title");
                                            if(!toolTitle){
                                                toolTitle = new Element('div',{'class':'tool-title '}).injectInside(toolDiv);
                                                toolTitle = toolDiv.getElement(".tool-title");
                                            }
                                            toolTitle.setText("");

                                            var toolText = toolDiv.getElement(".tool-text");
                                            if(!toolText){
                                                toolText = new Element('div',{'class':'tool-text '}).injectInside(toolDiv);
                                                toolText = toolDiv.getElement(".tool-text");
                                            }

                                            toolText.setText(this.title);
                                            this.title = "";

                                            var thisCoords = this.getPosition();
                                            toolTip.setStyles({	position: 'absolute',
                                                                top: (thisCoords.y - (window.ie ? 15 : 0)) + 'px',
                                                                left: (thisCoords.x + 20) + 'px',
                                                                visibility: 'visible'});

                                        },'mouseout':function(e){
                                            var toolTip = $E("div.tool-tip","body");
                                            toolTip.setStyles({	position: 'absolute',
                                                                    top: -10000 + 'px',
                                                                    left: -10000 + 'px',
                                                                    visibility: 'hidden'});
                                            var toolDiv = toolTip.getElement("div");
                                            var toolTitle = toolDiv.getElement(".tool-title");
                                            toolTitle.setText("");
                                            var toolText = toolDiv.getElement(".tool-text");
                                            this.title = toolText.getText();
                                            toolText.setText("");
                                        }},
                                        'title':msg.message}
                                ).setStyles({	position:'absolute',
                                                top: (el.getPosition().y - offsetY) + 'px' ,
                                                left: (el.getPosition().x + el.getSize().size.x - offsetX)  + 'px',
                                                width: '20px',
                                                height:'20px'}
                                ).injectInside(document.body);
                    return ele;
                } else {

                    return checkForElement[0];
                }

            /*}*/
        }
        /* end form validation */

        /* deprecating */
		this.setUsedFormCount = function(i){
			mdpUpload.setPossibleUpload(i);
			usedForms = i;
		}
        /* deprecating */



        init();
	}

/* EOF */