function createCookie(name,value,days) {
    if (days) {
	var date = new Date();
	date.setTime(date.getTime()+(days*24*60*60*1000));
	var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
	var c = ca[i];
	while (c.charAt(0)==' ') c = c.substring(1,c.length);
	if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

function initUpload () {
    if (window['uploadInitialized']) return;
    window.uploadInitialized = true;
    
    $('#upload_email').val(readCookie('upload_email'));
    (function($){
        $.extend($.fn,{
            fileUploadStartCheck:function(queueID) {
		var $this = $(this);
                createCookie('upload_email', $('#upload_email').val(), 1);
                // Get other fields
                var o = {
                    email: $('#upload_email').val(),
                    customer: $('#upload_customer').val(),
                    comment: $('#upload_comment').val(),
                    csession: $('#upload_captcha_session').val(),
                    captcha: $('#upload_captcha').val(),
                    session: $('#upload_session').val(),
		    key: uploadSettings['validatedKey'] || ''
                };
                if (!o.email) {
                    alert(Drupal.t('You must enter an email address.'));
                    return;
                }
                if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test( o.email )) {
                    alert(Drupal.t('Invalid email address.'));
                    return;
                }
		// posting function
		function doUpload ()
		{
		    try {
			uploadSettings.hasInvalidCAPTCHA = false;
			$this.fileUploadSettings('postData', o);
			$this.fileUploadStart(queueID);
		    } catch (e) {
			if (typeof(console)!='undefined' && console['log']) console.log(e);
			alert(Drupal.t('An unkown error occured.'));
		    }
		}
		// validate captcha
		if (!o.key) {
		    $.get(Drupal.settings.basePath+'upload/captcha/validate', o, function(r) {
			if (String(r.code) == '401') {
			    uas.invalidCAPTCHA();
			}
			else if (String(r.code) == '200') {
			    $(".upload_input.captcha").slideUp();
			    o.key = uploadSettings.validatedKey = r.key;
			    doUpload();
			}
		    }, 'json');
		}
		else {
		    doUpload();
		}
		return;
                /*
		$.get(uploadSettings.url, o, function(r) {
                    if (String(r.code) == '401') uas.invalidCAPTCHA();
		    else if (String(r.code) == '200') $(".upload_input.captcha").slideUp();
                }, 'jsonp');
                try {
                    uploadSettings.hasInvalidCAPTCHA = false;
                    $(this).fileUploadSettings('postData', o);
                    $(this).fileUploadStart(queueID);
                } catch (e) {
                    if (typeof(console)!='undefined' && console['log']) console.log(e);
                    alert(Drupal.t('An unkown error occured.'));
                }
		*/
            }
        });
        $.fn.fileUploadI18n.decimal = Drupal.t('.');
    })(jQuery);
    var ua = $('#'+uploadSettings.name);
    var uas = {
	'uploader':   uploadSettings.flash,
	'script':     uploadSettings.url,
	//'scriptAccess': 'always',
	//'folder':     '/sites/default/files/uploadify',
	'buttonImg':  uploadSettings.buttonImg,
	'cancelImg':  uploadSettings.cancelImg,
	'buttonText': uploadSettings.buttonText,
	'width':      uploadSettings.width,
	'height':     uploadSettings.height,
	'multi':      true,
	'onSelect': function (event, queueID, fileObj) {
	    if (fileObj.size > uploadSettings.maxFileMB*1024*1024) {
		alert(Drupal.t('The selected file (@name) is too large. Maximum allowed size is @max MB.', {'@name':fileObj.name, '@max':uploadSettings.maxFileMB}));
		return false;
	    }
	    return true;
	},
	'onComplete': function (event, queueID, fileObj, response, data) {
	    if (String(response).replace(/[ \r\n\t]/, '') == '200') {
		$(".upload_input.captcha").slideUp();
		$("#"+uploadSettings.name + queueID).addClass('done');
                window.setTimeout(function(){ alert(Drupal.t('Your files have now been uploaded.')); });
	    } else {
		alert(Drupal.t('An error occured. Please try again.'+response));
		$("#"+uploadSettings.name + queueID).addClass('error');
	    }
	    return false;
	},
	'onError': function(event, queueID, fileObj, errorObj) {
	    $("#"+uploadSettings.name + queueID).addClass('error');
	    //console.log(errorObj);
	    if (errorObj['status'] == 401) uas.invalidCAPTCHA();
	    $("#"+uploadSettings.name + queueID + " .fileName").text(Drupal.t('An error occured for @name', {'@name':fileObj.name}));
	    return false;
	},
	'onCancel': function(event, queueID, fileObj, data) {
	    //if (!uploadSettings.noRemoveCancelled) return true;
	    $("#"+uploadSettings.name + queueID).addClass('error');
	    return false;
	},
	'displayData': 'speed',
	
	invalidCAPTCHA: function () {
	    $(".upload_input.captcha").slideDown();
	    //uploadSettings.noRemoveCancelled = true;
	    //$("#"+uploadSettings.name).fileUploadClearQueue();
	    if (!uploadSettings.hasInvalidCAPTCHA) alert(Drupal.t('Invalid CAPTCHA code. Please try again.'));
	    uploadSettings.hasInvalidCAPTCHA = true;
	    uas.reloadCAPTCHA();
	},
	reloadCAPTCHA: function () {
	    $.get(Drupal.settings.basePath+'upload/captcha/get', {v:(new Date()).getTime()}, function(r) {
		$(".upload_captcha").empty().append(r);
	    });
	    //$(".upload_captcha").load(window.location+" .upload_captcha");
	},
	beginUpload: function () {
	    this.fileUploadStartCheck();
	}
    };
    ua.fileUpload(uas);
    uas.reloadCAPTCHA();
    $("#reload_captcha").bind("click", function () {
	uas.reloadCAPTCHA();
	return false;
    });
    $('#upload_buttons a').click(function(){
	uas.beginUpload.call(ua);
	return false;
    });
};

