/**
 * @author syurchuk
 *
 * Depends on JQuery 1.4.2
 */


/**
 * Event registration
 */

//default selected options ids
//SF.ns('EventsWebinars.Options', { 'defaultOptions':  new Array()});
SF.ns('EventsWebinars.Options.RegOptions');

SF.EventsWebinars.Options.EventOptions = function(){
    var attendeeNumber,
        attendeeID,
        eventOptionsTree,
        attendeesOptions, formManager;


    /**
    * Init Events Options object
    * @param {String} attNumber - attendee number
    * @param {Object} treeObj - event's options tree
    * @param {Object} regObj - event's registration object
    */
    this.init = function(attNumber, treeObj, regObj, fManager) {
        eventOptionsTree = treeObj;
        attendeesOptions = regObj;
        formManager = fManager;
        //is any event's options
        if (eventOptionsTree.length){
            $('#attendees .edit_options_box').show();
        }
        this.setDefaultFormValues(attNumber);

    }

    /**
    * Init Events Options form
    * @param {String} attID - attendee's block id
    */
    this.initEventOptions = function(){
        $(attendeeID + " input[type='radio']").bind('change', {'optionObj': this}, function(event){
            event.data.optionObj.changeAndSaveOption(this);
        });

        $(attendeeID + " input[type='text']").bind('change', {'optionObj': this}, function(event){
            event.data.optionObj.changeTextInputs(this);
        });

    }

    /**
    * Change and save options
    * @param {Object} elem - radiobutton
        */
    this.changeAndSaveOption = function(elem){
        var attNum = elem.name.split('][')[2],
            attID = '#options_' + attNum,
            parentId = elem.parentNode.className,
            className = parentId.replace("node_", ""),
            idArr = className.split("_"),
            node = eventOptionsTree[idArr[0]],
            parentArray  = eventOptionsTree,
            context = $(elem.parentNode.parentNode);
            
        for (var i=1; i < idArr.length; i++){
            parentArray = node;
            node = node['subnodes'][idArr[i]];
        }

        var checkedString = '';
        for( var i=0; i < eventOptionsTree.length; i++){
            checkedString += attID + ' .node_' + i + ' > div > input[type="radio"]:checked';
            if ( i !== (eventOptionsTree.length -1))
                checkedString += ', ';
        }

        var selectedNodes = new Array();
        this.getSelectedOptions($(checkedString), selectedNodes, attID);
        jQuery.each(attendeesOptions[attNum]['options'], function(key, value) {
            var val = value;
            if (typeof val === 'object')
                selectedNodes.push(val);
        });
        attendeesOptions[attNum]['options'] = selectedNodes;

        //show or hide  appropriate options
        context.find('.sub').hide();
        context.find('.' + className).show();
        
        this.refreshAllChecks(attID, attNum );
        this.serializeRegistrationObject();
    }


    /**
    * Get all checked IDes
    * @param {Object} arrayChecked - array with checked parent elements
    * @param {Object} selectedNodes - array for setting all IDes
    * @param {String} attID - attendee block ID
    */
    this.getSelectedOptions = function(arrayChecked, selectedNodes, attID){
        var newCheckedArray = [];
        for( var i=0; i < arrayChecked.length; i++){
            var parentID = arrayChecked[i].parentNode.className.slice(5);
            var nodeID = arrayChecked[i].className.slice(3);
            var subArray = $(attID + ' .sub.' + parentID + ' > div input[type="radio"]:checked');
            selectedNodes.push(nodeID);
            if (subArray.length != 0) {
                jQuery.each( subArray, function() {
                    newCheckedArray.push(this);
                });
            }
        }
        if (newCheckedArray.length != 0)
            this.getSelectedOptions(newCheckedArray, selectedNodes);
    }

    /**
    * Refresh all checks due references
    * @param {Object} attID - attendee ID
    * @param {Object} attNum - attendee number
    */
    this.refreshAllChecks = function(attID, attNum){
        jQuery.each(attendeesOptions[attNum]['options'], function(key, value) {
            $(attID + ' .id_' + value).click();
        });
    }

    /**
    * Serialize Event registration form
    * @param {String} operation - add or delete node
    * @param {String} number - attendee index
    */
    this.serializeRegistrationObject = function(operation, number) {
        var command = (typeof operation == 'undefined') ? '' : operation;
        switch (command) {
            case 'remove':{
                delete attendeesOptions[number];
                var newObj = {};
                var index = 1;
                jQuery.each( attendeesOptions, function(key, value) {
                    newObj[index++] = value;
                });
                SF.EventsWebinars.Options.RegOptions['attendees'] = newObj;
                attendeesOptions = SF.EventsWebinars.Options.RegOptions['attendees'];
            }
            case '':{
                break;
            }
        }
        $('input#reg-options').val($.toJSON(SF.EventsWebinars.Options.RegOptions));
    }

    /**
    * Find all references
    * @param {Object} node - tree nodes
    */
    this.setAllReferences = function(node){
        var subNodes = [];
        var subCount = 0;
        for( var i=0; i < node.length; i++){
            if ('Reference' === node[i].type)
                this.getNodeByID(eventOptionsTree, node[i]);
            if ( !jQuery.isEmptyObject(node[i].subnodes) ) {
                for( var j=0; j < node[i].subnodes.length; j++){
                    subNodes[subCount++] = node[i].subnodes[j];
                }
            }
        }
        if (subCount != 0)
            this.setAllReferences(subNodes);
    }


    /**
    * Bind references by adding node
    * @param {Object} node - node tree for searching
    * @param {Object} refNode - reference node
    */
    this.getNodeByID = function (node, refNode) {
        var subNodes = [];
        var subCount = 0;
        for( var i=0; i < node.length; i++){
            if (node[i].uid === refNode.ref){
                refNode.type = node[i].type;
                refNode.title = node[i].title;
                refNode.subnodes = node[i].subnodes;
                refNode.uid = refNode.ref;
                refNode.ref = 0;
                return;
            }
            if ( !jQuery.isEmptyObject(node[i].subnodes) ) {
                for( var j=0; j < node[i].subnodes.length; j++)
                    subNodes[subCount++] = node[i].subnodes[j];
            }
        }
        if (subCount != 0)
            this.getNodeByID(subNodes, refNode);
    }

    /**
    * Set default options for new and previous attendee
    * @param {String} atNum - attendee number
    */
    this.setDefaultFormValues  = function(attNum) {
        var i, option, max;
            
            
        attendeeNumber = attNum,
        attendeeID = '#options_' + attendeeNumber;
        //if new attendee options form
        if (jQuery.isEmptyObject(attendeesOptions[attendeeNumber])) {
            if (1 === attendeeNumber )
                this.renderOptionsForm();
            attendeesOptions[attendeeNumber] = {};
            attendeesOptions[attendeeNumber].options = [];
            jQuery.extend(true, attendeesOptions[attendeeNumber]['options'], SF.EventsWebinars.Options.EventOptionsDefault);
            //event options block
        } else {
            //if (1 === attendeeNumber )
                this.renderOptionsForm();
        }

        //initialization all events for option form
        this.initEventOptions();
        //reset option form
        for (i=0, max=attendeesOptions[attendeeNumber]['options'].length; i<max; i++){
            option = attendeesOptions[attendeeNumber]['options'][i];
            
            if(typeof option !== 'object'){
                $(attendeeID + ' .id_' + option).attr('checked', 'true');
                $(attendeeID + ' .id_' + option).change();
                $(attendeeID + ' .id_' + option).click();
            }else
                $(attendeeID + ' .id_' + option['id']).attr('value', option['value']);
        }

        formManager.refreshOptions(null, 'id_' + attendeeNumber, true);
        this.serializeRegistrationObject();
    }

    /**
    * Display Events Options form
    * @param {String} attendeeNumber - number attendee
    */
    this.renderOptionsForm = function(){
        var subNodes = [];
        var subCount = 0;
        if ( eventOptionsTree.length ) {
            this.setAllReferences(eventOptionsTree);
            //tree rendering
            for( var i=0; i < eventOptionsTree.length; i++){
                $(attendeeID + ' .info-options .content').append(this.renderOptionNode(eventOptionsTree[i], i));
                if ( !jQuery.isEmptyObject(eventOptionsTree[i].subnodes) ) {
                    for( var j=0; j < eventOptionsTree[i].subnodes.length; j++){
                        var nodeID = i + '_' + j;
                        subNodes[subCount++] = { 'id': nodeID, 'parentId': i, 'parentUid':eventOptionsTree[i].uid, 'el': eventOptionsTree[i].subnodes[j]};
                    }
                }
            }
            if (subCount != 0)
                this.renderTreeLevel(subNodes);
        }
    }


    /**
    * Renders Tree Options level
    * @param {Object} nodesArr subnodes array
    */
    this.renderTreeLevel = function(nodesArr) {
        var newNodes = [];
        var subCount = 0;
        for( var i=0; i < nodesArr.length; i++){
            var parentId = '.node_' + nodesArr[i].parentId ;
            var typeSelection = ('Category' === nodesArr[i].el.type) ? 'sub ' + nodesArr[i].parentId : '';
            $(parentId).append(this.renderOptionNode(nodesArr[i].el, nodesArr[i].id, typeSelection, nodesArr[i].parentId));
            if ( !jQuery.isEmptyObject(nodesArr[i].el.subnodes) ) {
                for( var j=0; j < nodesArr[i].el.subnodes.length; j++){
                    var nodeID = nodesArr[i].id + "_" + j;
                    newNodes[subCount++] = { 'id': nodeID, 'parentId': nodesArr[i].id, 'el': nodesArr[i].el.subnodes[j]};
                }
            }
        }
        if (subCount != 0)
            this.renderTreeLevel(newNodes);
    }


    /**
    * Renders Events Options node
    * @param {Object} node - option tree node
    * @param {String} nodeID - id for new node
    * @param {String} selectionClass - class for new node
    * @param {String} parentID - parent node ID
    */
    this.renderOptionNode = function(node, nodeID, selectionClass, parentID) {
        var nodeEl = $(document.createElement('div')).addClass("node_" + nodeID);
        var price = (typeof node.price == 'undefined') ? '' : " (" + node.price + "$)";
        var checked = (typeof(node.checked) != 'undefined' && 'true' == node.checked) ? "checked='true'" : "";
        switch (node.type) {
            case 'Category':{
                nodeEl.addClass(selectionClass);
                nodeEl.append("<div class='form-header'><h5>" + node.title + price + "</h5></div>");
                break;
            }
            case 'Radiobutton':{
                /*if ("" != checked){
                    if (jQuery.inArray(node.uid, SF.EventsWebinars.Options.defaultOptions) == -1)
                       SF.EventsWebinars.Options.defaultOptions.push(node.uid);
                }*/
                nodeEl.append("<input class='id_" + node.uid + "' name='tx_sfeventswebinars_pi2[data][attendees][" + attendeeNumber + "][options][" + parentID + "]' type='radio' value='" + node.title + "'"  + checked + "/>" + node.title +  price + "<br/>");
                break;
            }
            case 'Text input':{
                nodeEl.append("<div class='form-l'><b>" + node.title + "  </b><input type='text' class='id_" + node.uid + "' maxlength='20' size='20'  value='0' name='tx_sfeventswebinars_pi2[data][attendees][" + attendeeNumber + "][options][" + node.selecttype + "_" + nodeID + "]'></div>");
                /*var obj = {};
                obj['id'] = node.uid;
                obj['value'] = 0;
                SF.EventsWebinars.Options.defaultOptions.push(obj);*/
                break;
            }
            default:
                break;
        }
        return nodeEl;
    }

    /**
    * Bind changes in text inputs
    * @param {Object} elem - input element
    */
    this.changeTextInputs = function(elem) {
        $(elem).removeClass('valid');
        var attNum = elem.name.split('][')[2];
        var elemID = elem.className.slice(3);
        if (/^-?((\d+\.?\d?)|(\.\d+))$/.test(elem.value)){
            jQuery.each(attendeesOptions[attNum]['options'], function(key, value) {
                if(typeof value === 'object' && (elemID == value['id']))
                    value['value'] = elem.value;
            });
        } else
            return false;
        this.serializeRegistrationObject();
    }
};

SF.ns('EventsWebinars.Form', function(){
    var attendeeCount,
        //event options object
        eventOptions = new SF.EventsWebinars.Options.EventOptions();
        attEventOptions = [];

    /**
    * Init all events for
    * event registration page
    */
    function initAllEvents(){
        SF.ns('RequestForm').initForm('#event-registration');
        attendeeCount = 1;
        initAttendee(attendeeCount);
        //event description
        $('.desc-btn').click(function(e){
            var context = $(this.parentNode).find('.desc');
            var elem = $(this);
            if(elem.hasClass('close'))
                elem.removeClass('close').addClass('open');
            else
                elem.removeClass('open').addClass('close');
            context.slideToggle();
        });

        //add another attendee
        $('#add-attendee').click(function(e){
            addNewAttendee(true);
        });

        $('#event-registration input:[type=submit]').click(function() {
            var i, inputs, field, max;

            //check all form fields
            if (!checkAllFields()){
                return false;
            }
            //cleanup optional elements
            inputs = $('#attendees input[type="text"],  #attendees textarea');

            for (i = 0, max = inputs.length; i< max; i++){
                field = inputs[i];
                if (field.value == field.title){
                    field.value = '';
                }
            }

            eventOptions.serializeRegistrationObject();
        });

        $('#formWindow .close-btn').click(function(ev){
            $('#formWindow').removeClass('ev-options-popup').jqmHide();
            SF.EventsWebinars.Form.refreshOptions(ev, this, false);
        });

    }
    /**
    * Close all attendee blocks
    */
    function closeAllAttendees(){
        $('#attendees .info-block .arrow').each(function(index){
            if($(this).hasClass('arrow-open')){
                var context = $(this.parentNode.parentNode).find('.main-part');
                var removeBtn = $(this.parentNode).find('.remove-btn');
                $(this).removeClass('arrow-open').addClass('arrow-close');
                removeBtn.hide();
                context.slideToggle();
                var atNum = index + 1;
                attendeeCaption(atNum, 0, false);
                //for saving input value
                $('#attendee_' + atNum +' .info-options input[type="text"]').blur();
            }
        });
    }

    /**
    * Init attendee events
    * @param {String} attendeeID - attendee number
    */
    function initAttendee(attendeeID){
        var parentID = '#attendee_' + attendeeID;
        var attendeeEl =  $(parentID);
        //attendee information
        attendeeEl.find('.arrow').click(function(e){
            var context = $(this.parentNode.parentNode).find('.main-part');
            var removeBtn = $(this.parentNode).find('.remove-btn');
            var attNum = removeBtn.attr('id').slice(4);
            var elem = $(this);
            if(elem.hasClass('arrow-close')) {
                //closeAllAttendees();
                elem.removeClass('arrow-close').addClass('arrow-open');
                if (1 != attendeeCount)
                    removeBtn.show();
                attendeeCaption(attNum, 1, false);
                eventOptions.setDefaultFormValues(attNum);
            } else {
                elem.removeClass('arrow-open').addClass('arrow-close');
                removeBtn.hide();
                attendeeCaption(attNum, 0, false);
            }
            context.slideToggle();
            var arrows = $('#attendees .info-block .arrow');
        });

        //some styling stuff
        attendeeEl.find(".form-field :input").focus(function(){
            thisID = $(this).attr('id');
            $(this).parent('div.formfield, div.form-field').addClass("focused");
            fieldLabel = $(this).attr("title");
            if ($(this).val() == fieldLabel) {
                $(this).val("");
            }
        }).blur(function(){
            if (!this.value.length) {
                $(this).val(fieldLabel);
            }
            $(this).parent('div.formfield, div.form-field').removeClass("focused");
        });

        //edit options
        attendeeEl.find(".edit_options").click(function(ev){
            SF.EventsWebinars.Form.editEventOptions(ev, this);
        });

        //clear all inputs and errors
        var inputs = attendeeEl.find('input, select');
        inputs.each(function(key, el){
            el.value = (el.type == 'select-one') ? '': el.title;
        });

        //remove button
        var button = attendeeEl.find('.remove-btn');
        if (1 != attendeeCount)
            button.show();

        button.click(function(e){
            removeAttendee(this);
        });


        //validation rules
        setValidationRules(attendeeEl);
    }

    function editEventOptions (ev, obj){
        var a = $('#formWindow'),
            b = a.find('#formContent'),
            tmpl = $(".form-box .options-box"),
            optObj, arr = obj.id.split("_"), atNum = parseInt(arr[1]);

        optObj = tmpl.clone();
        optObj.attr('id', 'options_' + atNum);
        optObj.find('.btn-close').attr('id', 'evpopup_' + atNum);
        optObj.find('.atname').text(attendeeCaption(atNum, 0, true));
        optObj.show();

        a.addClass('ev-options-popup');
        a.find('.close-btn').attr('id', 'clsbtn_' + atNum);
        b.append(optObj);
        attEventOptions = SF.EventsWebinars.Options.RegOptions['attendees'][atNum]['options'];
        //init events
        b.find('#evpopup_'+atNum).click(function(ev){
            $('#formWindow').removeClass('ev-options-popup').jqmHide();
            SF.EventsWebinars.Form.refreshOptions(ev, this, true);
        });

        eventOptions.setDefaultFormValues(atNum);
        $('#formWindow').jqmShow();

    }

    /**
    * Rename attendee block
    * @param {Object} elem - attendee block
    * @param {String} number - attendee number
    * @param {String} curNumber - old attendee number
    */
    function renameAttendeeBlock(elem, number, curNumber) {
        elem.find('input, select').each(function(){
            var name = renameElements(this.name, number, curNumber);
            if (!$.browser.msie || parseInt($.browser.version) > 7) {
                this.name = name;
            }else {
                //fix for IE6, IE7
                if (this.tagName == 'INPUT'){
                    var checked = (this.checked) ? 'checked=' + this.checked : '';
                    $(this).attr("outerHTML", "<input type=" + this.type + " title='" + $(this).attr('title') + "' class=" + this.className + " name='" + name + "' value='" + this.value +"' " + checked + " />");
                }
                if (this.tagName == 'SELECT'){
                    this.name = name;
                }
            }
        });
        elem.find('label.error').each( function(){
            $(this).attr('for', renameElements($(this).attr('for'), number, curNumber));
        });
        elem.find('.remove-btn').attr('id', 'btn_' + number);
        elem.attr('id', 'attendee_' + number);
        elem.find('.edit_options').attr('id', 'editopt_' + number);
    }


    /**
    * Set validation rules for inputs and selects
    * @param {Object} attenddeBlock - html attendee block
    */
    function setValidationRules(attenddeBlock){
        var elems = attenddeBlock.find('input, select');
        var rules = SF.RequestFormValues.rules;
        var messages = SF.RequestFormValues.messages;

        for(var key in rules){
            var newAttendeeName = renameElements(key, attendeeCount, 1);
            elems.each(function(){
                var elem = $(this);
                if (elem.attr('name') === newAttendeeName) {
                    if (elem.attr('name').indexOf('email') === -1){
                    elem.rules('add', {
                        required: true,
                        messages: {
                          required: messages[key]
                        }
                    });
                    } else {
                        elem.rules('add', {
                            required: true,
                            email: true,
                            messages: {
                              required: messages[key],
                              email: messages[key]
                            }
                        });
                    }
               }
            });
        }
    }

    /**
    * Rename elemnts
    * @param {String} name - elem attribute
    * @param {String} attendeeNum - attendee number
    */
    function renameElements(name, attendeeNum, curNumber){
        return name.replace('[' + curNumber + ']', '[' + attendeeNum + ']');
    }

    /**
    * Checks all required form fields
    * for all attendee blocks
    */
    function checkAllFields(){
        var result = true;
        if (!$('#event-registration').validate().form())
            for( var i=1; i <= attendeeCount; i++ ){
                var attBlock = $('#attendee_' + i);
                if(attBlock.find('input, select, textarea').filter('.error').length > 0){
                    //if previous attendee block is closed
                    var prevAttArrowEl = $('#attendees  #attendee_' + i + ' .arrow');
                    if (prevAttArrowEl.hasClass('arrow-close'))
                        prevAttArrowEl.click();
                    result = false;
                }
            }
        return result;
    }

    /**
    * Add another attendee
    * @param {String} toCollapse - to collapse previous blocks
    */
    function addNewAttendee(toCollapse) {
        var newAtt, tempAttendee,
            mainBlock = $('#attendees');

        if (!checkAllFields()){
            return;
        }
        attendeeCount++;
        tempAttendee = mainBlock.find('.info-block::nth-child(2)').clone();
        tempAttendee.attr('id', 'attendee_' + attendeeCount);
        tempAttendee.find('.edit_options').attr('id', 'editopt_' + attendeeCount);
        renameAttendeeBlock(tempAttendee, attendeeCount, 1);
        $('#attendees').append(tempAttendee);
        //close other attendee blocks
        if (toCollapse)
            closeAllAttendees();

        newAtt = mainBlock.find('#attendee_'+attendeeCount);
        if( newAtt.find('.arrow').hasClass('arrow-close') ){
            newAtt.find('.main-part').slideToggle();
            newAtt.find('.arrow').removeClass('arrow-close').addClass('arrow-open');
        }
        newAtt.find('.valid').removeClass('valid');
        initAttendee(attendeeCount);
        attendeeCaption(attendeeCount, 1, false);

        //remove buttons
        var blocksEls =  mainBlock.find('.info-block');
        if ( blocksEls.find('.arrow-open').length > 1 )
            blocksEls.find('.remove-btn').show();

        //init options for attendee
        eventOptions.setDefaultFormValues(attendeeCount);
    }

    /**
    * Show attendee name after closing
    * @param {String} number - attendee number
    * @param {String} command - show or hide
    * @param {String} bRet - return or not all record
    */
    function attendeeCaption(number, command, bRet) {
        var parentID = '#attendee_' + number,
            fNameField = $(parentID + ' .first_name'),
            lNameField = $(parentID + ' .last_name'),
            caption = $(parentID + ' .form-top .at-top'),
            elCaptionName =  $(parentID + ' .form-top .at-top .at-name'),
            DEF_NAME = 'Attendee', name = DEF_NAME;

			if($('#attendee_disp')){
				DEF_NAME = $('#attendee_disp').attr('value');
				name = DEF_NAME;
			}

        if (command){
            caption.addClass('active');
            elCaptionName.text(DEF_NAME);
        } else {
            if (fNameField.attr('title') !== fNameField.val())
                name = fNameField.val() + ' ';

            if (lNameField.attr('title') !== lNameField.val())
                name = (name !== DEF_NAME) ? (name + lNameField.val()) : lNameField.val();

            if (bRet)
                return name;

            caption.removeClass('active');
            elCaptionName.text(name);

        }
    }


     /**
    * Refresh attendee options list
    * @param {Object} ev - event
    * @param {Object} obj - triggered element
    * @param {boolean} bSave - save changes
    */
    function refreshEventOptions (ev, obj, bSave) {
        var i, max, el, title, value,
            arr = (obj.id) ? obj.id.split("_") : obj.split("_"),
            atNum = parseInt(arr[1]),
            optionsList = $("#attendee_" + atNum + " ul.opt-list"), liEl,
            newList = SF.EventsWebinars.Options.RegOptions['attendees'][atNum]['options'],
            optionsMap = SF.EventsWebinars.Options.EventOptionsMap;

         //save options
         if (bSave) {
             optionsList.empty();
             //optionsList
             for(i=0, max = newList.length; i<max; i++ ){
                 //if text input
                 if (typeof(newList[i]) === 'object'){
                    el = newList[i]['id'];
                    title = optionsMap['id_' + el]['title'];
                    value = newList[i]['value'];
                 } else {
                    el = newList[i];
                    title = optionsMap['id_' + el]['parent'];
                    value = optionsMap['id_' + el]['title'];
                 }

                 liEl = '<li>' + title + ' - ' + value + '</li>';

                 optionsList.append(liEl);
             }

         }else{
             //revert options
             SF.EventsWebinars.Options.RegOptions['attendees'][atNum]['options'] = attEventOptions;
             attendeesOptions = [];
         }
    }

    /**
    * Remove attendee
    * @param {Object} elem - button
    */
    function removeAttendee(elem) {
        var number = elem.id.slice(4);
        var attedeeID = '#attendee_' + number;
        $(attedeeID).remove();
        attendeeCount = 0;
        $('#attendees .info-block').each(function(i){
            var oldID = this.id.slice(9);
            renameAttendeeBlock($(this), i+1, oldID);
            attendeeCount++;
        });
        eventOptions.serializeRegistrationObject('remove', number);

        if (1 == attendeeCount)
            $('#attendee_1').find('.remove-btn').hide();
    }

    SF.addToDOMReady(function(){
        if (SF.ns('EventsWebinars.Options').ready){
            initAllEvents();
            if (SF.ns('EventsWebinars.Options.Tree').ready) {
                eventOptions.init(attendeeCount, SF.EventsWebinars.Options.EventOptionsTree, SF.EventsWebinars.Options.RegOptions['attendees'], SF.EventsWebinars.Form);
                //display another attendees if exist and their form values
                jQuery.each(SF.EventsWebinars.Options.RegOptions['attendees'], function(key, value) {
                    if (key != 1)
                        addNewAttendee(false);
                    var attObj = value;
                    var attBlock = $("#attendee_" + key);
                    jQuery.each(attObj, function(key, value) {
                        if (value != ''){
                            attBlock.find('.' + key).val(value);
                            //attBlock.find('.' + key).addClass('valid');
                        }
                    });
                });
            }
        }

    });

    return {
        'editEventOptions' : editEventOptions,
        'refreshOptions' : refreshEventOptions
    }
}());


SF.ns('EventsWebinars.Registration', function(){
    function init() {
        //coupon box
        $('.ec_coupon_link').click(function(ev){
            var box = $(this),
                content = box.next();
            
            if (box.hasClass('c-opened')){
                box.removeClass('c-opened');
                content.slideUp();
            }else{
                box.addClass('c-opened');
                content.slideDown();
            }
        });
        $('#ec_description').hide();
        $('#ec_open_desc').click(function(e){
            var desc = $('#ec_description'),
                arrow = $(this);
                
              if(arrow.hasClass('arrow-closed')) {
                arrow.removeClass('arrow-closed').addClass('arrow-opened');
                desc.show();
              }else{
                arrow.removeClass('arrow-opened').addClass('arrow-closed');
                desc.hide();
              }
        });
        
        //doesn't allow to "Apply" empty coupon code
        $("#apply_coupon").click(function (e){
            if ($("#sf_coupon").val() === ""){
                e.preventDefault();
            }
        });
    }

    SF.addToDOMReady(init);
});

