if (typeof(SFX) == "undefined") {
    var SFX = {}; //load the SFX var if we don't already have one.
}

SFX.cca = function() {
    var stashCats = [];
    var formNum;
    var categories; 
    var formFields;
     
    return {  
    
        'init': function() {
        
            categories = jQuery('#cca_category_dropdowns_0').html();
            formFields = jQuery('#cca_nomination_form_fields').html();
            formFields = formFields.replace(/name="cca_project_url_0" value=".*"/g, 'name="cca_project_url_0" value=""');
            formFields = formFields.replace(/name="cca_project_name_0" value=".*"/g, 'name="cca_project_name_0" value=""');
            formNum = 0;
            stashCats[formNum] = 0;
            
            if (jQuery.browser.safari || jQuery.browser.mozilla) {
                jQuery('#cca_nomination_help').facebox();
            }
            
            jQuery('#cca_project_url_0').bind('change', function(event){
                return SFX.cca.checkUrl(this, 0);
            });
    
            jQuery('#cca_another_category_anchor_0').bind('click', function(event) {
                event.preventDefault();
                return SFX.cca.addCategoryDropdown(0);
            });
            
            jQuery('#cca_nominate_another_project_anchor').bind('click', function(event) {
                event.preventDefault();
                formNum += 1;
                return SFX.cca.addNominationFormFields(formNum);
            });

            jQuery('#form_email').focus(function(){jQuery(this).val('')});
            jQuery('#form_email').blur(function(){if(jQuery(this).val() == ''){jQuery(this).val('Enter email address');}});


    		SFX.cca.bindCategoryDropdown();
    
    		if (jQuery('#cca_project_url_0').attr('value') != '') {
    			jQuery('#cca_project_url_0').trigger('change');
    		}
    		
    		jQuery('#cca_nominate_comment_0').keyup(function(){
                SFX.cca.limitChars('cca_nominate_comment_0', 140, 'cca_nominate_comment_charlimitinfo_0');
    		});

            jQuery('#cca_nomination_uber_form').validate({
                //debug: true,
                errorClass: "invalid"
            });
        },
        
        
        'bindCategoryDropdown': function() {
        	jQuery('.cca_project_url').bind('change', function(event) {
        		var target_name = jQuery(event.target).attr('name').split('_');
        		var form = target_name[3];
        
        		jQuery('#cca_category_dropdowns_' + form).find('option').remove();
        		jQuery('#cca_category_base').find('option').clone().appendTo(jQuery('#cca_category_dropdowns_' + form).find('select'));
        
        		jQuery.getJSON('/awards/cca/nomination.php?mode=user_projcat_lookup&url=' + jQuery(this).attr('value'), function(data) {
        			var fd = data['feedback_data'];
        			var fdcount = fd.length;
        
        			for(var counter = 0; counter < fdcount; counter++)
        				jQuery('#cca_category_dropdowns_' + form).find('option[value="' + fd[counter]['cat_id'] + '"]').remove();
        		});
        	});
        },
        
        
        'addCategoryDropdown': function(form) {
        
            stashCats[form] += 1;
            i = stashCats[form];

        	var prevCat = ('cca_category_' + form + '_' + (i - 1));
        	var nextCat = ('cca_category_' + form + '_' + i);
            
            if (jQuery('#' + prevCat).html() === null) {
        	   categories = jQuery('#cca_category_base').html();
            } else {
               categories = jQuery('#' + prevCat).html().replace(('/' + prevCat + '/g'), nextCat).replace('selected', '');	
        	}

        	jQuery('#cca_category_dropdowns_'+form).append('<p><label>Category :&nbsp;</label><select id="' + nextCat + '" name="' + nextCat + '"class="required">' + categories + '</select> <a title="Remove this category nomination" class="delete">&nbsp;</a></p>');

        	jQuery('a.delete').bind('click', function(event){
                event.preventDefault();
                jQuery(this).parent().remove();
                
                // now renumber the remaining dropdowns
                jQuery('#cca_category_dropdowns_'+form+' select').each(function(n) {
                    this.id = "cca_category_"+form+"_"+n;
                    this.name = "cca_category_"+form+"_"+n;
                });
                stashCats[form] -= 1;                    
            });

        	return false;
        },
        
        
        'addNominationFormFields':function(formCount) {   
            fields = SFX.cca.applyFormIdToFields(formFields, formCount);
            
            jQuery('#cca_nomination_form_fields').append("<hr noshade=\"noshade\" class=\"cca_divider\"/>\n"+fields);
            jQuery('#cca_project_url_'+formCount).bind('change', function(event){
                return SFX.cca.checkUrl(this, formCount);
            });    

            stashCats[formCount] = 0;
            jQuery('#cca_another_category_anchor_'+formCount).bind('click', function(event) {
                event.preventDefault();
                i = SFX.cca.addCategoryDropdown(formCount);
                return false;
            });
            if (jQuery.browser.safari || jQuery.browser.mozilla) {
                jQuery('#cca_category_description_anchor_'+formCount).facebox();
            }

            SFX.cca.bindCategoryDropdown();
            
    		jQuery('#cca_nominate_comment_'+formCount).keyup(function(){
                SFX.cca.limitChars('cca_nominate_comment_'+formCount, 140, 'cca_nominate_comment_charlimitinfo_'+formCount);
    		});            
            
            return false;
        },
        
        
        'applyFormIdToFields': function(formFields, formCount) {

            // add a form identifier to the fields that need it
            formFields = formFields.replace(/cca_fieldset_0/g, "cca_fieldset_"+formCount);
            formFields = formFields.replace(/cca_category_0_0/g, "cca_category_"+formCount+"_0");       
            formFields = formFields.replace(/urlFeedback_0/g, "urlFeedback_"+formCount);
            formFields = formFields.replace(/cca_project_url_0/g, "cca_project_url_"+formCount);
            formFields = formFields.replace(/cca_project_name_0/g, "cca_project_name_"+formCount);
            formFields = formFields.replace(/cca_nominate_comment_0/g, "cca_nominate_comment_"+formCount);
            formFields = formFields.replace(/cca_nominate_comment_charlimitinfo_0/g, "cca_nominate_comment_charlimitinfo_"+formCount);
            formFields = formFields.replace(/cca_category_dropdowns_0/g, "cca_category_dropdowns_"+formCount);
            formFields = formFields.replace(/cca_another_category_anchor_0/g, "cca_another_category_anchor_"+formCount);
            formFields = formFields.replace(/cca_category_description_anchor_0/g,'cca_category_description_anchor_'+formCount);
            
            return formFields;
        },
                
        'checkUrl': function(urlTextElement, form) {
            var urlFeedback = '#urlFeedback_'+form;
            var projectName = '#cca_project_name_'+form;
            
            var urlRE = /^(?:https?:\/\/)?(?:[\w-]+\.)+[a-z]{2,6}\/?.*/i;
            validUrl = urlRE.exec(urlTextElement.value);
            if (validUrl == null) {
                jQuery(urlFeedback).html("Invalid URL.").removeClass().addClass("error");
            } else {
                jQuery(urlFeedback).html("").removeClass();
                var sfUrlREs = new Array();
                sfUrlREs[0] = /^(?:https?:\/\/)?([\w-]+)\.(?:sourceforge|sf)\.net\/?$/;
                sfUrlREs[1] = /^(?:https?:\/\/)?(?:www\.)?(?:sourceforge|sf)\.net\/projects\/([\w-]+)\/?$/;
                jQuery.each(sfUrlREs, function(){
                    var sfUrlMatch = this.exec(urlTextElement.value);
                    if (!(sfUrlMatch == null)) {
                        var sfUrl = sfUrlMatch[1];
                        jQuery(projectName).attr("readonly", true).blur();
                        jQuery.get("/register-project/validate_unixname.php", {unixname: sfUrl}, function(response){
                            if (jQuery.trim(response).indexOf("Unix name is not available") >-1 ) {
                                jQuery.getJSON("/api/project/name/" + sfUrl + "/json", null, function(data){
                                    jQuery(projectName).val(data.Project.name).attr("readonly", true).blur();
                                });
                            } else {
                                jQuery(projectName).removeAttr("readonly").val("");
                            }
                        });
                        return false;
                    }
                });
                if (jQuery(urlFeedback).html() == '') {
                    jQuery.getJSON("/awards/cca/nomination.php", {url: validUrl, mode: "name_from_url"}, function(response){
                        if(response['feedback_type'] != 'error') {
                            jQuery(projectName).val(response['feedback_data']).attr("readonly", true).blur();
                        } else {
                            jQuery(projectName).removeAttr("readonly").focus();
                        }
                    });
                }
            }
        },
        
        'limitChars': function(textid, limit, infodiv) {
            var text = jQuery('#'+textid).val();
            var textlength = text.length;
            if (textlength > limit) {
                jQuery('#' + infodiv).html('You cannot write more then '+limit+' characters!');
                jQuery('#'+textid).val(text.substr(0,limit));
                return false;
            } else {
                jQuery('#' + infodiv).html((limit - textlength) +' characters left.');
                return true;
            }
        }
    };
}();