﻿/// <reference path="../ActivityDataAccess.js" />
/// <reference path="../AgilityData.js" />


Agility.RegisterNamespace("Subaru.NewsletterSignup");

(function(NewsletterSignup) {

    var _randomQueryString = "";
    var _thankyouMessage = "";
    var _invalidEmailMessage = "";
    var ActivitySubmissionConfirmationDialog = null;
    var _watermarkLabel = "";

    NewsletterSignup.Init = function(thankyouMessage, watermarkLabel, invalidEmailMessage) {
        _thankyouMessage = thankyouMessage;
        _watermarkLabel = watermarkLabel;
        _invalidEmailMessage = invalidEmailMessage;

        setTimeout("Subaru.NewsletterSignup.SetWatermark()", 2000);
    };

    NewsletterSignup.SetWatermark = function() {
        $("#txtNewsletterSignupEmail").watermark(_watermarkLabel);
    };

    NewsletterSignup.SubmitActivity = function() {
        _showSubmissionDialog();
        Subaru.MapUtils.HideContextMenu();
    };

    $(function() {
        var d = new Date();
        _randomQueryString = d.getFullYear() + d.getMonth() + d.getDate() + d.getHours() + d.getMinutes() + d.getSeconds();

        var lnkLaunchActivitySubmission = $("#lnkLaunchActivitySubmission");
        $("h1", lnkLaunchActivitySubmission.parent()).click(function() {
            if (Subaru.ContextUtil.IsAuthenticated()) {
                _showSubmissionDialog();
            } else {
                Subaru.Controls.Login.OnPopupLogin(null, _showSubmissionDialog);
            }
        });

        lnkLaunchActivitySubmission.click(function() {
            if (Subaru.ContextUtil.IsAuthenticated()) {
                _showSubmissionDialog();
            } else {
                Subaru.Controls.Login.OnPopupLogin(null, _showSubmissionDialog);
            }
        });

        $("#txtNewsletterSignupEmail").keydown(function(event) {
            if (event.keyCode == 13) {
                NewsletterSignup.SubmitEmail();
                return false;
            }
        });

        $("#pnlActivitySubmission").dialog({
            autoOpen: false,
            modal: true,
            closeText: 'hide',
            dialogClass: 'ActivitySubmissionDialog',
            title: "",
            resizable: false
        });

        ActivitySubmissionConfirmationDialog = $("#pnlActivitySubmissionConfirmation").dialog({
            autoOpen: false,
            modal: true,
            closeText: 'hide',
            dialogClass: 'ForgotPasswordDialog Confirmation1',
            title: "",
            resizable: false,
            close: function() {
                location.hash = "#";
            }
        });
    });

    function _showSubmissionDialog() {

        Subaru.TemplateUtils.CloseAllDialogs();

        $("#pnlActivitySubmission").dialog("open");
        setTimeout(function() {
            $(window).resize();
        }, 100);

        $("#pnlActivitySubmission").html('<div class="Spinner"></div>');

        var url = Agility.ResolveUrl("~/Dialogs/ActivitySubmission.aspx?r=" + _randomQueryString);

        $("#pnlActivitySubmission").load(url, function(responseText, textStatus, XMLHttpRequest) {

            if (responseText == "error") {
                //alert(XMLHttpRequest.status + ' ' + textStatus);
                //alert(XMLHttpRequest.responseText);
                return;
            }

            jQuery("#pnlActivitySubmission .SubmitActivity").keydown(function(event) {
                if (event.keyCode == 13) {

                    if (event.originalTarget == null || event.originalTarget.nodeName.toLowerCase() != "textarea") {
                        _doActivitySubmission();
                        return false;
                    }
                }
            });

            $("#pnlActivitySubmission .btnCancel").click(function() {
                _showSubmissionDialog();
            });

            $("#pnlActivitySubmission .btnSubmit").click(function() {
                _doActivitySubmission();
            });

            Agility.UGC.API.GetAllRecordTypes(function(dRecordTypes) {

                if (dRecordTypes.ResponseType == Agility.UGC.API.ResponseType.OK) {

                    var lstRecordTypes = $.grep(dRecordTypes.ResponseData, function(elem, index) {
                        return elem.Name == "ActivityFileMedia";
                    });

                    Agility.UGC.API.GetRecordType(lstRecordTypes[0].ID, function(dRecordType) {
                        if (dRecordType.ResponseType == Agility.UGC.API.ResponseType.OK) {
                            var recordType = dRecordType.ResponseData;
                            //populate the uploads

                            _renderAttachment(recordType.FieldTypes,
								"Image1",
								"txtActivityPhoto1_SubmitActivity",
								"pnlActivityPhoto1_SubmitActivity",
								"pnlActivityPhoto1a_SubmitActivity");

                            _renderAttachment(recordType.FieldTypes,
								"Image2",
								"txtActivityPhoto2_SubmitActivity",
								"pnlActivityPhoto2_SubmitActivity",
								"pnlActivityPhoto2a_SubmitActivity");

                            _renderAttachment(recordType.FieldTypes,
								"Image3",
								"txtActivityPhoto3_SubmitActivity",
								"pnlActivityPhoto3_SubmitActivity",
								"pnlActivityPhoto3a_SubmitActivity");

                            _renderAttachment(recordType.FieldTypes,
								"Image4",
								"txtActivityPhoto4_SubmitActivity",
								"pnlActivityPhoto4_SubmitActivity",
								"pnlActivityPhoto4a_SubmitActivity");

                            //map	
                            _renderAttachment(recordType.FieldTypes,
								"PDFDocument",
								"txtActivityMap_SubmitActivity",
								"pnlActivityMap_SubmitActivity",
								"pnlActivityMapa_SubmitActivity");

                            //video	
                            _renderAttachment(recordType.FieldTypes,
								"Video",
								"txtActivityVideo_SubmitActivity",
								"pnlActivityVideo_SubmitActivity",
								"pnlActivityVideoa_SubmitActivity");
                        }
                    });
                }
            });
        });
    };

    function _renderAttachment(allFieldTypes, fieldName, inputID, panelID, progressPanelID) {

        var fieldTypes = $.grep(allFieldTypes, function(elem, index) {
            return elem.Name == fieldName;
        });

        //fieldName, inputID, fieldType  fieldPanel, swfUploadUrl, beforeUpload, uploadComplete, uploadError, uploadProgress, uploadButtonImageUrl, uploadButtonImageHeight, uploadButtonImageWidth, </param>        
        Agility.UGC.API.GetAmazonS3Form({
            fieldname: fieldName,
            inputID: inputID,
            fieldType: fieldTypes[0],
            fieldPanel: $("#" + panelID),
            swfUploadUrl: Agility.ResolveUrl("~/Scripts/SwfUpload/swfupload.swf"),
            uploadButtonImageUrl: "http://getoutmore.s3.amazonaws.com/Buttons/" + Agility_LanguageCode + "/btnUpload.png",
            uploadButtonImageHeight: 21,
            uploadButtonImageWidth: 98,
            beforeUpload: function(fileName, mime, filesize, uploader) {
                //before upload
                //show the progress...

                $("#" + progressPanelID).html('<div class="UploadProgressContainer"><div class="UploadProgress"></div></div>');

                var percent = "50%";
                if (uploader != undefined && uploader != null) {
                    percent = "0%";
                }

                $("#" + progressPanelID + " .UploadProgress").css("width", percent);

            },
            uploadComplete: function(key, filesize) {
                //upload complete

                //hide the progress...
                var index = key.lastIndexOf("\\");
                if (index == -1) index = key.lastIndexOf("/");
                var fileName = key.substring(index + 1);

                $("#" + inputID).val(key);
                $("#" + progressPanelID).html("&nbsp;&nbsp;" + fileName);

            },
            uploadError: function(file, errorCode, message) {
                //upload error...

                //hide the progress

                var html = "An error occurred.";

                //determine the message...
                switch (errorCode) {
                    case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
                        html = "Please choose a file less than or equal to " + fieldType.MaxLength + "kb";
                        break;
                    case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
                        html = "Please choose a file greater than zero bytes.";
                        break;
                    case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
                    case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED:
                        html = fieldType.ValidationMessage;
                        break;

                    case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:
                    case SWFUpload.UPLOAD_ERROR.IO_ERROR:
                    case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:
                    case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
                    case SWFUpload.UPLOAD_ERROR.SPECIFIED_FILE_ID_NOT_FOUND:
                    case SWFUpload.UPLOAD_ERROR.IO_ERROR:
                        html = "An error occurred while uploading the file.  Please check your connection and try again."
                        break;
                    case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:
                        html = "An error occurred while uploading the file.  You may need to add the crossdomain.xml file to your Amazon S3 bucket.";
                        break;
                    case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
                    case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
                        //ignore these errors...
                        break;
                    default:
                        html = message;
                        break;
                }

                $("#" + progressPanelID).html(html);

            },
            uploadProgress: function(file, bytesLoaded) {

                //progress...
                var percent = Math.ceil((bytesLoaded / file.size) * 100);

                $("#" + progressPanelID + " .UploadProgress").css("width", percent + "%");
            }

        });
    }

    function _doActivitySubmission() {

        var isValid = true;
        var type = $("#ddlActivityType_SubmitActivity").val();
        var title = $("#txtActivityTitle_SubmitActivity").val();
        var desc = $("#txtActivityDesc_SubmitActivity").val();
        var tags = $("#txtActivityTags_SubmitActivity").val();
        var distance = $("#txtActivityDistance_SubmitActivity").val();

        var startAddress = $("#txtActivityStartAddress_SubmitActivity").val();
        var startCity = $("#txtActivityStartCity_SubmitActivity").val();
        var startProv = $("#ddlActivityStartProvince_SubmitActivity").val();
        if (startProv == undefined) startProv = "";
        var startPostalCode = $("#txtActivityStartPostalCode_SubmitActivity").val();

        var endAddress = $("#txtActivityEndAddress_SubmitActivity").val();
        var endCity = $("#txtActivityEndCity_SubmitActivity").val();

        var endProv = $("#ddlActivityEndProvince_SubmitActivity option[selected=true]").attr("text");
        if (endProv == undefined) endProv = "";
        var endPostalCode = $("#txtActivityEndPostalCode_SubmitActivity").val();

        var photo1 = $("#txtActivityPhoto1_SubmitActivity").val();
        var photo2 = $("#txtActivityPhoto2_SubmitActivity").val();
        var photo3 = $("#txtActivityPhoto3_SubmitActivity").val();
        var photo4 = $("#txtActivityPhoto4_SubmitActivity").val();

        var map = $("#txtActivityMap_SubmitActivity").val();

        var video = $("#txtActivityVideo_SubmitActivity").val();


        //validate req fields
        $("#pnlActivitySubmission label[for='ddlActivityType_SubmitActivity']").parent("div").attr("className", "Label");
        if (type == "") {
            isValid = false;
            $("#pnlActivitySubmission label[for='ddlActivityType_SubmitActivity']").parent("div").attr("className", "RequiredLabel");
        }

        $("#pnlActivitySubmission label[for='txtActivityTitle_SubmitActivity']").parent("div").attr("className", "Label");
        if ($.trim(title) == "") {
            isValid = false;
            $("#pnlActivitySubmission label[for='txtActivityTitle_SubmitActivity']").parent("div").attr("className", "RequiredLabel");
        }

        $("#pnlActivitySubmission label[for='txtActivityDesc_SubmitActivity']").parent("div").attr("className", "Label");
        if ($.trim(desc) == "") {
            isValid = false;
            $("#pnlActivitySubmission label[for='txtActivityDesc_SubmitActivity']").parent("div").attr("className", "RequiredLabel");
        }

        $("#pnlActivitySubmission label[for='txtActivityTags_SubmitActivity']").parent("div").attr("className", "Label");
        if ($.trim(tags) == "") {
            isValid = false;
            $("#pnlActivitySubmission label[for='txtActivityTags_SubmitActivity']").parent("div").attr("className", "RequiredLabel");
        }

        $("#pnlActivitySubmission label[for='txtActivityDistance_SubmitActivity']").parent("div").attr("className", "Label");
        if ($.trim(distance) == "" || isNaN(parseFloat(distance))) {
            isValid = false;
            $("#pnlActivitySubmission label[for='txtActivityDistance_SubmitActivity']").parent("div").attr("className", "RequiredLabel");
        }

        $("#pnlActivitySubmission label[for='txtActivityStartCity_SubmitActivity']").parent("div").attr("className", "Label");
        if ($.trim(startCity) == "") {
            isValid = false;
            $("#pnlActivitySubmission label[for='txtActivityStartCity_SubmitActivity']").parent("div").attr("className", "RequiredLabel");
        }

        $("#pnlActivitySubmission label[for='ddlActivityStartProvince_SubmitActivity']").parent("div").attr("className", "Label");
        if ($.trim(startProv) == "") {
            isValid = false;
            $("#pnlActivitySubmission label[for='ddlActivityStartProvince_SubmitActivity']").parent("div").attr("className", "RequiredLabel");
        }

        if (!$("#cbIAgree_SubmitActivity").is(':checked')) {
            isValid = false;
        }

        if (!isValid) {
            $("#pnlBottomValidationMessage_ActivitySubmission").css("visibility", "visible").fadeOut("normal", function() {
                $(this).fadeIn("normal", function() {
                    $(this).fadeOut("normal", function() {
                        $(this).fadeIn("normal", function() {
                        });
                    });
                });
            });

            return;
        }

        //do the actual save
        var activityRecord = {
            RecordTypeName: "Activity",
            Title: title,
            TypeID: type,
            ProvinceID: startProv,
            Tags: tags,
            PrimaryImage: photo1,
            SubmittedBy: $("#pnlLoginArea .Username").html()
        }

        Agility.UGC.API.SaveRecord(activityRecord, function(actSaveData) {
            if (actSaveData.ResponseType != Agility.UGC.API.ResponseType.OK) {
                alert("An error occurred while saving the Activity: " + actSaveData.Message);
                return;
            } else {

                var activityID = actSaveData.ResponseData;

                var additionalData = [
						{ "Label": "End Address", "Value": endAddress },
						{ "Label": "End City", "Value": endCity },
						{ "Label": "End Province", "Value": endProv },
						{ "Label": "End Postal Code", "Value": endPostalCode }
					];

                var detailsRecord = {
                    RecordTypeName: "ActivityDetails",
                    ActivityID: activityID,
                    Description: desc,
                    Distance: parseFloat(distance),
                    Address: startAddress,
                    City: startCity,
                    PostalCode: startPostalCode,
                    AdditionalFieldData: JSON.encode(additionalData)
                };

                Agility.UGC.API.SaveRecord(detailsRecord, function(actdetailsSaveData) {

                    if (actdetailsSaveData.ResponseType != Agility.UGC.API.ResponseType.OK) {
                        alert("An error occurred while saving the Activity Details: " + actdetailsSaveData.Message);
                        return;
                    } else {

                        var mediaRecord = {
                            RecordTypeName: "ActivityFileMedia",
                            ActivityID: activityID,
                            Image1: photo1,
                            Image2: photo2,
                            Image3: photo3,
                            Image4: photo4,
                            Video: video,
                            PDFDocument: map
                        };

                        Agility.UGC.API.SaveRecord(mediaRecord, function(actFileMediaSaveData) {
                            if (actFileMediaSaveData.ResponseType != Agility.UGC.API.ResponseType.OK) {
                                alert("An error occurred while saving the Activity File Media: " + actFileMediaSaveData.Message);
                                return;
                            } else {
                                $("#pnlActivitySubmission").dialog("close");

                                //alert("Thanks for teaching us how to Get Out More.\nYour activity will be posted shortly.");
                                //alert($("div.SubmitActivity div.ThankYouMessage").text());

                                _doActivitySubmissionConfirmation();
                            }
                        });
                    }
                });
            }
        });
    };

    function _doActivitySubmissionConfirmation() {

        location.hash = "#Activity_Entry_Confirmation";

        //show the dialog
        $("#pnlActivitySubmissionConfirmation").html('<div class="Spinner"></div>');

        ActivitySubmissionConfirmationDialog.dialog("open");

        //load the dialog content...
        var d = new Date();
        var url = Agility.ResolveUrl("~/Dialogs/ActivitySubmissionConfirmation.aspx?r=" + d.getTime());
        $("#pnlActivitySubmissionConfirmation").load(url, function() {
            _sendEmail($("#pnlActivitySubmissionConfirmation input:first").val(), "");
        });
    }

    function isValidEmailAddress(emailAddress) {
        var emailRegEx = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
        return emailAddress.match(emailRegEx);
    };

    NewsletterSignup.SubmitEmail = function(thankyouMessage) {
        var txtNewsletterSignupEmail = $("#txtNewsletterSignupEmail");
        var email = $.trim(txtNewsletterSignupEmail.val());

        if (!isValidEmailAddress(email)) {
            alert(_invalidEmailMessage);
            txtNewsletterSignupEmail.focus();
            return;
        }

        var search = "Email = '" + email + "'";

        var searchArg = {
            RecordTypeName: "NewsletterEmailSubmissions",
            PageSize: 1,
            RecordOffset: 0,
            SortedField: "CreatedOn",
            SortDirection: Agility.UGC.API.SortDirection.DESC,
            Search: search
        }

        Agility.UGC.API.SearchRecords(searchArg, function(data) {
            if (data.ResponseType != Agility.UGC.API.ResponseType.OK) {
                alert(data.Message);
            } else {

                if (data.ResponseData.Records.length > 0) {
                    //we already have their info...
                    $("#txtNewsletterSignupEmail").val("");
                    alert(_thankyouMessage);
                } else {
                    //user has not yet submitted their email address

                    var record = {
                        ID: -1,
                        RecordTypeName: "NewsletterEmailSubmissions",
                        Email: email
                    };

                    Agility.UGC.API.SaveRecord(record, function(data) {

                        if (data.ResponseType != Agility.UGC.API.ResponseType.OK) {
                            alert("Error has occured: " + data.Message);
                            return;
                        } else {
                            if (data.ResponseData > 0) {
                                $("#txtNewsletterSignupEmail").val("");
                                alert(_thankyouMessage);
                            }
                        }
                    });
                }
            }
        });
    };

    function _sendEmail(referenceName, email) {
        jQuery.ajax({
            url: Agility.ResolveUrl("~/HTTPHandlers/SendConfirmation.ashx"),
            cache: false,
            data: {
                "email": email,
                "referenceName": referenceName
            },
            dataType: "text",
            complete: function(XMLHttpRequest, textStatus) {
                //alert(XMLHttpRequest.status + ' ' + textStatus);
                //alert(XMLHttpRequest.responseText);
            }
        });
    };

})(Subaru.NewsletterSignup);
