/**
 * @author: Stefan Heckler
 **/

// 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[]');


        $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 index = $what.find('.jNiceSelectWrapper').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[]');

        $select.attr('name', new_name);
        $clone.jNice();
        $clone.find('.jNiceSelectWrapper').css({zIndex: index-1 });

        //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;
        });
    },

    /*
    * 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();





          /*$("div.i03 ul li a").click(function(){


            var value = $("select#country").val();

            alert(value);

            return false;


            var $what = $("div.high_school");
            var $select = $what.find('select');

            var $clone = $select.clone();

            $clone.removeClass('jNiceHidden');

            $clone.find('option').addClass('hidden');

            $clone.find('option.country_'+value).removeClass('hidden');

            $what.after($clone);

            $clone.wrap('<div class="tempWrapper"></div>');

            $what.remove();

            $clone.parent().jNice();

            //console.log($select);

            //alert("fertig; value = " + value);

            return false;

        });


        $("div.country ul").change(function(){

            alert("hallo change");

            return false;

        });*/
    },


    /*
    * form::cloneFieldset
    *
    * clone a complete fieldset
    *
    * @param: what object, type string
    * @response: fieldset
    */
    cloneFieldset: function(what){



        //var $parent_div = $($(what).parent('div'));

        // not needed anymore; first fieldset is extracted directly from parent div
        //var $fieldsets = $($parent_div.html());

        // get first fieldset
        //var $first_fieldset = $($parent_div[0]); // #.html()

        //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]);

        // OLD APPROACH: clone last fieldset
        //var $what = $(what).prev('fieldset');

        // NEW APPROACH FOR PREVENTING IE7 PROBLEMS: clone first fieldset
        var $what = $first_fieldset;
        var $clone = $what.clone();


        //var $replacements_what = $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();

                var $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();

                var $element = $select_new;

            }

            $element.attr('name', name.replace(/([a-z_]+)\[([0-9]+)\]/gi, '$1['+count+']'));

            $element.val('');

        });

        // 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('.jNiceSelectWrapper').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();

        // 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("a.jNiceCheckbox");

        $to_this_day.click(function(){
            JZ.form.toggleDateToSelectVisibility($(this));
        });

        $(what).before($clone);

    },


    deleteFieldset: function(what){



        //var $parent_div = $($(what).parent('div'));

        // not needed anymore; first fieldset is extracted directly from parent div
        //var $fieldsets = $($parent_div.html());

        // get first fieldset
        //var $first_fieldset = $($parent_div[0]); // #.html()

        $(what).parent('fieldset').remove();
        return false;

        /*

                var $select_new = $element.clone();

                $select_new.removeClass('jNiceHidden');

                //$select_new.attr('selectedIndex', '');
                $element.parent('span').after($select_new);
                $element.parent('span').remove();

   */

    },

    /*
    * 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 = $(what).parent('span').prev('div.jNiceSelectWrapper');
        var $select_month = $select_year.prev('div.jNiceSelectWrapper');
        var $text_to = $select_month.prev('div.from_to_container');


        $spacer.toggleClass('hidden');
        $select_year.toggleClass('hidden');
        $select_month.toggleClass('hidden');
        $text_to.toggleClass('hidden');

        return true;
    },


    toggleFreeFromSelectVisibility: function(what){


        var $select_year = $(what).parent('span').prev('div.jNiceSelectWrapper');
        var $select_month = $select_year.prev('div.jNiceSelectWrapper');
        var $select_day = $select_month.prev('div.jNiceSelectWrapper');

        $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);


    }


}



$(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);
            $(this).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
});

//$("form.company_search select[name='high_school']").click(function(){
    //var options = $(this).children('option');
    //console.log(options);
    //var fieldset_array = $(what).parent('div').children('fieldset');
    //alert("test");
//});

});