// prepend js-errors
var FormDefaults = new Array();
var FieldSetCounter = new Array();
var FirstFieldSetCounter = new Array();
var LastFieldSetCounter = new Array();



/*
* form class
*
* general functions for forms on jobzippers platform
* includes, cloning, select based ajax requests and more
*
*/

var space = registerNamespace('JZ');

space.form = {


    /*
    * form::getCountryCode
    *
    * retrieve country code based on iso-db via ajax
    * update country code fields in form with responsed value
    *
    * @param: what object, country string
    * @response: string
    */
    getCountryCode: function(what){

        var country = $(what).val();

        $.get('/ajax/echo_country_code/'+country+'.html', function(data){
            $("input[name='phone_countrycode']").val(data);
            $("input[name='fax_countrycode']").val(data);
            $("input[name='mobile_countrycode']").val(data);
        });

    },



    /*
    * form::cloneInput
    *
    * clone input row
    *
    * @param: what object
    */
    cloneInput: function(what){

        var $what = $(what);
        var $clone = what.clone();

        var $input = $clone.find('input');
        var $button = $what.find('a.button,a.button_small');
        var $button_new = $clone.find('a.button,a.button_small');

        $clone.find('div').remove();
        $button_new.before($input);
        $input.val('');

        // select rename regex
        //var new_name = $input.attr('name').replace(/([a-z_-]+)\[([0-9]+)\]/gi, '$1[]');

        // special case with workxp[0]branches[]
        if($input.attr('name').match(/([a-z_-]+)\[([0-9]+)\]([a-z0-9\]\[_-]+)\[([0-9]*)\]/gi))
        {
            var new_name = $input.attr('name').replace(/([a-z_-]+)\[([0-9]+)\]([a-z0-9\]\[_-]+)\[([0-9]+)\]/gi, '$1[$2]$3[]');
        }
        else // normal case with branches[0]
        {
            var new_name = $input.attr('name').replace(/([a-z0-9\]\[_-]+)\[([0-9]+)\]/gi, '$1[]');
        }

        $input.attr('name', new_name);

        //new_content.
        $(what).after($clone);

        if($button.hasClass('small_add')){
            $button.removeClass('small_add');
            $button.addClass('small_del');
        } else {
            $button.removeClass('add');
            $button.addClass('del');
        }

        $button_new.click(function(){
            JZ.form.cloneInput($(this).parent());
        });

        $button.unbind();

        $button.click(function(){
            $what.remove();
            return false;
        });
    },

    /*
    * form::cloneSelect
    *
    * clone select row
    *
    * @param: what object
    */
    cloneSelect: function(what){

        var $what = $(what);
        var $clone = what.clone();
        var $select = $clone.find('select').clone();
        var $button = $what.find('a.button,a.button_small');
        var $button_new = $clone.find('a.button,a.button_small');

        var $selectwidth = $what.find('select').width();

        sourceZIndex = $what.find('.jNiceWrapper').css('z-index');
        
        $selectwidth = this.fixJNiceSelectCloningWidthBug1($clone, $selectwidth);

        //$what.find('select').width($selectwidth);

        $select.attr('name', new_name);
        var index = $what.find('.jNiceWrapper').css('zIndex');

        $select.removeClass('jNiceHidden');
        $clone.find('div').remove();
        $button_new.before($select);
        $select.attr('selectedIndex', '');

        // select rename regex
        //var new_name = $select.attr('name').replace(/([a-z_-]+)\[([0-9]+)\]/gi, '$1[]');

        // special case with workxp[0]branches[]
        if($select.attr('name').match(/([a-z_-]+)\[([0-9]+)\]([a-z0-9\]\[_-]+)\[([0-9]*)\]/gi))
        {
            var new_name = $select.attr('name').replace(/([a-z_-]+)\[([0-9]+)\]([a-z0-9\]\[_-]+)\[([0-9]+)\]/gi, '$1[$2]$3[]');
        }
        else // normal case with branches[0]
        {
            var new_name = $select.attr('name').replace(/([a-z0-9\]\[_-]+)\[([0-9]+)\]/gi, '$1[]');
        }
       
        $select.attr('name', new_name);

        $clone.jNice();



        this.fixJNiceSelectCloningWidthBug2($clone, $selectwidth);
       //                alert("width = " +$selectwidth);
        
        $clone.find('select').css({width: $selectwidth +'px'});
        targetZIndex = sourceZIndex - 1;
        $clone.find(".jNiceWrapper").css({'z-index': targetZIndex});

        //new_content.
        $(what).after($clone);

        if($button.hasClass('small_add')){
            $button.removeClass('small_add');
            $button.addClass('small_del');
        } else {
            $button.removeClass('add');
            $button.addClass('del');
        }

        $button_new.click(function(){
            if($what.find('td').html()){
                JZ.form.cloneSelect($(this).parents('tr'));

            } else {
            JZ.form.cloneSelect($(this).parent());
            }
        });

        $button.unbind();

        $button.click(function(){
            $what.remove();
            return false;
        });


        // update all selects to prevent z-index bug
        //$button.closest("form").removeClass("jNice").jNice();
    },

    /*
    * form::cloneSelect
    *
    * clone select row
    *
    * @param: what object
    */
    cloneFileInput: function(what){

        var $what = $(what);
        var $clone = what.clone(false);
        var $input = $clone.find('input[type=file]').clone(false);
        var $button = $what.find('a.button,a.button_small');
        var $button_new = $clone.find('a.button,a.button_small');

        $clone.find('div').remove();
        $clone.find('input').remove();
        $input.val('');
        $input.attr('style', '');

        $button_new.before($input);

        $input.filestyle({
            image: "/media/img/site/form/choose-file.gif",
            imageheight : 24,
            imagewidth : 94,
            width : 287
        });


        $(what).after($clone);


        if($button.hasClass('small_add')){
            $button.removeClass('small_add');
            $button.addClass('small_del');
        } else {
            $button.removeClass('add');
            $button.addClass('del');
        }
        $button_new.click(function(){
            JZ.form.cloneFileInput($(this).parent());
        });

        $button.attr('onClick', '');
        $button.unbind();
        $button.click(function(){
            $what.remove();
            //alert('moo');
            return false;
        });

        return false;
    },


    getGrades: function(what, index, type){

        var $fieldset = $(what).parent().parent();


        var $what = $(what);

        var value = $what.val();



        var id = type + '_grades_' + index;

        var $select = $fieldset.find('select#'+id);

        var $clone = $select.clone();

        $clone.removeClass('jNiceHidden');

        $clone.find('option').addClass('hidden');

        $clone.find('option.country_'+value).removeClass('hidden');

        $old_field = $fieldset.find('div.jNiceSelectWrapper.i07');

        $old_field.after($clone);

        $clone.wrap('<div class="tempWrapper"></div>');

        $old_field.remove();

        $clone.parent().jNice();
    },


    /*
    * form::cloneFieldset
    *
    * clone a complete fieldset
    *
    * @param: what object, type string
    * @response: fieldset
    */
    cloneFieldset: function(what){

        //var $first_fieldset = $($(what).parent('div').children('fieldset'));
        var fieldset_array = $(what).parent('div').children('fieldset');

        // show "remove" button in all fieldsets; later on, the button will be hidden in the cloned fieldset
        fieldset_array.find("a.delete.formbutton").removeClass("hidden");

        var $first_fieldset = $(fieldset_array[0]);
        var $last_fieldset = $(fieldset_array[fieldset_array.length-1]);

        // NEW APPROACH FOR PREVENTING IE7 PROBLEMS: clone first fieldset
        var $what = $first_fieldset;
        var $clone = $what.clone();




        var selectWidths = Array();

        $what.find('.jNiceSelectWrapper').each(function(index){
            selectWidths[index] = $(this).width();
        });

        //var $replacements_what = $what.find('input, select');
        var $originals = $what.find('input, select');
        var $replacements = $clone.find('input, select');

        var $counterIndex = $(what).attr('name');

        // if not yet done, set counter variable
        if(!FieldSetCounter[$counterIndex])
        {

            // get name of first element for extracting the counter

            var child_inputs = $last_fieldset.children('input');

            // if no input fields were found, try with selects
            if(child_inputs.length < 1)
            {
                var child_inputs = $last_fieldset.children('select');
            }

            //var first_el_name = $last_fieldset.children('input')[0].name;
            var first_el_name = child_inputs[0].name;


            FieldSetCounter[$counterIndex] = first_el_name.replace(/([a-z_]+)\[([0-9]+)\]([^*]+)/gi, '$2');
            FirstFieldSetCounter[$counterIndex] = FieldSetCounter[$counterIndex];
        }

        FieldSetCounter[$counterIndex]++;


        $replacements.each(function(){
            var name = $(this).attr('name');
            var $element = $(this);

            var count = FieldSetCounter[$counterIndex];

            // enable jNice - for select fields
            if($element.attr('type') == 'select-one' || $element.attr('type') == 'select-multiple')
            {
                
                $element.removeClass('jNiceHidden');


                var $select_new = $element.clone();

                

                $select_new.removeClass('jNiceHidden');

                $select_new.attr('selectedIndex', '');
				
				
				if($select_new.attr('name').indexOf("[year]") != -1 || $select_new.attr('name').indexOf("[month]") != -1 )
				{
					$select_new.removeClass('hidden');
				}
				
                $element.parent('div').after($select_new);
                $element.parent('div').remove();

                

                $element = $select_new;

            }
            // enable jNice - for checkboxes
            else if($element.attr('type') == 'checkbox')
            {

                $element.removeClass('jNiceHidden');

                var $select_new = $element.clone();

                $select_new.removeClass('jNiceHidden');
				
				if($select_new.attr('name').indexOf("date_to_this_day") != -1)
				{
					$select_new.attr('checked', false);
					$clone.find('div.time_span_selector_spacer_container').addClass('hidden');
					$clone.find('div.from_to_container').removeClass('hidden');
					
				}

                //$select_new.attr('selectedIndex', '');
                $element.parent('span').after($select_new);
                $element.parent('span').remove();

                $element = $select_new;

            }

            $element.attr('name', name.replace(/([a-z_]+)\[([0-9]+)\]/gi, '$1['+count+']'));
            $element.val('');

            // enable jNice - for select fields
            if($element.attr('type') == 'select-one' || $element.attr('type') == 'select-multiple')
            {
                $element.attr('style', '');
                var $selectwidth = 123;

                $selectwidth = JZ.form.fixJNiceSelectCloningWidthBug1($element, $selectwidth);


            }

        });

        // add autocompleter to new field
        $autocompleter = $clone.find('input.autocompleter');

        $autocompleter.each(function(){
            $field = $(this);
            var selected_country;
            $field.focus(function(){
                var selected_country = $field.prev('.jNiceWrapper').children('select').val();
                    $field.setOptions({
                        extraParams: {
                            country: selected_country
                        }
                    });
                });


        	$field.autocomplete("/ajax/get_high_schools.html", {
        		width: 331,
        		max: 100,
        		selectFirst: false
        	});



        	$field.result(function(event, data, formatted) {
        		if (data)
        			$(this).next().val(data[1]);
        	});


        });

        $clone.jNice();

        var i = 0;

        $clone.find('.jNiceWrapper').each(function(){
            
            $selElement = $(this).find('select');

            if($selElement.attr('name'))
            {
                $selWidth = selectWidths[i];

                $selElement.css({width: $selWidth +'px'});

                $(this).find('.jNiceSelectWrapper').attr('style', 'width: ' + $selWidth + 'px;');
                jnicetextwidth = $selWidth - 18;
                $(this).find('.jNiceSelectWrapper').find('.jNiceSelectText').attr('style', 'width: ' + jnicetextwidth + 'px;');

                i++;

            }

        });



        // hide "remove" button in cloned fieldset
        $clone.find("a.delete.formbutton").addClass("hidden");



        // add 'to this day' script to checkbox
        $to_this_day = $clone.find(".jNiceCheckbox");

        $to_this_day.click(function(){
            JZ.form.toggleDateToSelectVisibility($(this));
        });

        $(what).before($clone);

        // fix z-index jNice bug
        targetZIndex = 1*$clone.prev('fieldset').find('.jNiceWrapper').last().css('z-index');

        if(targetZIndex < 500) targetZIndex = 500; // default

        $clone.find('.jNiceWrapper').each(function(){

            if($(this).find('select'))
            {
                targetZIndex -= 5;
                $(this).css({'z-index': targetZIndex});
            }

        });

    },


    deleteFieldset: function(what){
        $(what).parent('fieldset').remove();
        return false;
    },


    fixJNiceSelectCloningWidthBug1: function(clone, width){

        $clone = $(clone);

        $selectwidth = width;

        // detect if our browser is safari -> fix another bug there
        is_chrome = /chrome/.test( navigator.userAgent.toLowerCase());
        safari = $.browser.safari; /* We need to check for safari to fix the input:text problem */
        if (safari && !is_chrome) $selectwidth += 25;

        return $selectwidth;

    },

    fixJNiceSelectCloningWidthBug2: function(clone, width){

        $clone = $(clone);

        $selectwidth = width;

        $clone.find('.jNiceWrapper').find('.jNiceSelectWrapper').attr('style', 'width: ' + $selectwidth + 'px;');
        jnicetextwidth = $selectwidth - 18;
        $clone.find('.jNiceWrapper').find('.jNiceSelectWrapper').find('.jNiceSelectText').attr('style', 'width: ' + jnicetextwidth + 'px;');
    },


    /*
    * form::editCVTitle
    *
    * clear high school fields as soon as the corresponding country changed
    *
    */
    clearHighSchoolFields: function(what){

        var field_name = $(what).attr('name');

        var index = field_name.replace(/([a-z_]+)\[([0-9]+)\]([^*]+)/gi, '$2');

        var ac_field = document.getElementById('high_schools_' + index + '_ac');
        var title_field = document.getElementById('high_schools_' + index + '_title');

        if(ac_field != null)
        {
            ac_field.value = "";
        }
        if(title_field != null)
        {
            title_field.value = "";
        }

        return true;

    },
	


    toggleDateToSelectVisibility: function(what){

        //console.log($(what));


        var $spacer = $(what).parent('span').next('span').next('div.time_span_selector_spacer_container');

        var $select_year_wrapper = $(what).parent('span').prev('div.jNiceWrapper').children('.jNiceSelectWrapper');
        var $select_month_wrapper = $select_year_wrapper.parent('.jNiceWrapper').prev('div.jNiceWrapper').children('.jNiceSelectWrapper');
        var $select_year = $select_year_wrapper.parent('.jNiceWrapper').children('select');
        var $select_month = $select_month_wrapper.parent('.jNiceWrapper').children('select');
        var $text_to = $select_month_wrapper.parent('.jNiceWrapper').prev('div.from_to_container');


        $spacer.toggleClass('hidden');
        $select_year_wrapper.toggleClass('hidden');
        $select_month_wrapper.toggleClass('hidden');
        $select_year.toggleClass('hidden');
        $select_month.toggleClass('hidden');
        $text_to.toggleClass('hidden');

        return true;
    },


    toggleFreeFromSelectVisibility: function(what){


        var $select_year_wrapper = $(what).parent('span').prev('div.jNiceWrapper').children('.jNiceSelectWrapper');
        var $select_month_wrapper = $select_year_wrapper.parent('.jNiceWrapper').prev('div.jNiceWrapper').children('.jNiceSelectWrapper');
        var $select_day_wrapper = $select_month_wrapper.parent('.jNiceWrapper').prev('div.jNiceWrapper').children('.jNiceSelectWrapper');
        var $select_year = $select_year_wrapper.parent('.jNiceWrapper').children('select');
        var $select_month = $select_month_wrapper.parent('.jNiceWrapper').children('select');
        var $select_day = $select_day_wrapper.parent('.jNiceWrapper').children('select');

        // IE6 Special Treatment
        if($.browser.msie && $.browser.version.substr(0,1)=="6")
        {
            var $iframe_year = $select_year_wrapper.prev();
            var $iframe_month = $select_month_wrapper.prev();
            var $iframe_day = $select_day_wrapper.prev();

            $iframe_year.toggleClass('hidden');
            $iframe_month.toggleClass('hidden');
            $iframe_day.toggleClass('hidden');
        }

        $select_year_wrapper.toggleClass('hidden');
        $select_month_wrapper.toggleClass('hidden');
        $select_day_wrapper.toggleClass('hidden');
        $select_year.toggleClass('hidden');
        $select_month.toggleClass('hidden');
        $select_day.toggleClass('hidden');

        return true;
    },


    /*
    * form::editCVTitle
    *
    * clone a complete fieldset
    *
    * @param: what object, type string
    * @response: fieldset
    */
    editCVTitle: function(what){

        var $what = $(what);

        if($what.attr('href')){

            $.get('/ajax'+$(what).attr('href'), function(data){

                $what.parent().html(data);

            });

        } else {

        }

    },

    saveCVTitle: function(what){

        var $what = $(what);

        if($what.parent().attr('action')){

            $.post($(what).parent().attr('action'), {title: $what.parent().find("input[name='title']").attr('value')}, function(data){
                $what.parent().parent().html(data);
            });

        } else {

        }

    },

    selectCVImage: function(img){

        var $img = $(img);
        var id = $img.attr('id');

        $img.after('<img src="/media/img/site/form/selected.gif" class="selected">');
        $img.parent().addClass('selected');
        $("input[name='image_id']").val(id);


    },

    adaptPackageDropdown: function(what){

        $index =  $(what).attr('index');

        // special treatment for IE6 (there's an iframe element, which requires an extra prev() call)
        if($.browser.msie && $.browser.version.substr(0,1)=="6")
        {
            $select = $(what).parent().parent().parent().prev().prev();//next();
        }
        else
        {
            $select = $(what).parent().parent().parent().prev();//next();
        }
        
        

        $inner_select = $("select.order");

        $clone = $inner_select.clone();

        $inner_select.parent('div').after($clone);
        $inner_select.parent('div').remove();
        $clone.removeClass('jNiceHidden');

        if($select.find("option").eq($index).hasClass('category_job'))
        {
            $clone.find("option.booking_category_job").removeClass('hidden');
            $clone.find("option.booking_category_internship").addClass('hidden');
            $clone.find("option.booking_category_study_project").addClass('hidden');
        }
        else if($select.find("option").eq($index).hasClass('category_internship'))
        {
            $clone.find("option.booking_category_job").addClass('hidden');
            $clone.find("option.booking_category_internship").removeClass('hidden');
            $clone.find("option.booking_category_study_project").addClass('hidden');
        }
        else if($select.find("option").eq($index).hasClass('category_study_project'))
        {
            $clone.find("option.booking_category_job").addClass('hidden');
            $clone.find("option.booking_category_internship").addClass('hidden');
            $clone.find("option.booking_category_study_project").removeClass('hidden');
        }


        $clone.parent().jNice();

        return false;
    },

    handleInputCloning: function(what){
        if($(what).hasClass('add'))
        {
            JZ.form.cloneInput($(what).parents('div.row'));
        }
        else
        {
            $(what).parents('div.row').remove();
        }
    },

    handleSelectCloning: function(what){
        if($(what).hasClass('add'))
        {
            JZ.form.cloneSelect($(what).parents('div.row'));
        }
        else
        {
            $(what).parents('div.row').remove();
        }
    }


}



$(document).ready(function(){

// clear input function
$("input").focus(function (){
    str = $(this).attr("name");
    if(FormDefaults[str]){

        if($(this).val() == FormDefaults[str]) $(this).val('');

        // create new password input
        if(str == "password" || str == "password_confirm"){
            new_input = $(this).clone();
            new_input.attr("type","password");
            $(this).replaceWith(new_input);
            new_input.focus();
        }

    }
});


$("input").blur(function (){
    str = $(this).attr("name");

    if(FormDefaults[str] && $(this).val() == '') $(this).val(FormDefaults[str]);
});

$("div.row a.add, div.row a.small_add").click(function (){
    if(!$(this).parents('div.row').find('select').attr('name')){
        JZ.form.cloneInput($(this).parents('div.row'));
    } else {
        JZ.form.cloneSelect($(this).parents('div.row'));
    }
    return false;
});

$("div.row a.del, div.row a.small_del").click(function (){
    $(this).parents('div.row').remove();
    return false;
});

// questionmark icons
$("img.questionmark").tooltip({
	bodyHandler: function(){
		//console.log($(this));
		return $(this).attr('name');
	},
	showURL: false
});

});