var simpleTabs = new Class({

    initialize: function(triggers, contents) {
        this.triggers = triggers;
        this.contents = contents;

        this.selectTab(triggers[0]);

        this.triggers.each(function(item) {
            item.addEvent('click',
                function(e) {
                    this.selectTab(item);
                }.bind(this));
        }.bind(this));
    },


    selectTab: function(id) {

        this.contents.each(function(item) {
            item.setStyle('display', 'none');

        });

        this.triggers.each(function(item) {
            item.removeClass('active');
        });
		
        if($defined($(id.get('title')))){
            $(id.get('title')).setStyle('display', 'block');
            id.addClass('active');
			
        }

    }





});



function in_array(item,arr) {
for(p=0;p<arr.length;p++) if (item == arr[p]) return true;
return false;
}







function update_filetype(path) {
    if (path != "") {




        var b = path.replace(/^.*[\/\\]/g, '');

        if (typeof(suffix) == 'string' && b.substr(b.length - suffix.length) == suffix) {
            b = b.substr(0, b.length - suffix.length);
        }

        var basename = b;

        var str = path + '';
        var dotP = str.lastIndexOf('.') + 1;
        var ext = str.substr(dotP);


        $('uploaded_name').set('html', basename);

        switch (ext) {
            case 'doc':
                $('file_type_img').set('src', base_url + "public/img/ftypes/doc.png");
                break;

            case 'docx':
                $('file_type_img').set('src', base_url + "public/img/ftypes/doc.png");
                break;

            case 'rtf':
                $('file_type_img').set('src', base_url + "public/img/ftypes/txt.png");
                break;

            case 'pdf':
                $('file_type_img').set('src', base_url + "public/img/ftypes/pdf.png");
                break;

            default:
                $('file_type_img').set('src', base_url + "public/img/ftypes/txt.png");
                break;

        }



    }





}

var uploadedFile = new Class({
	
    initialize:function(filename, id, uploader){
        this.filename = filename;
        this.id = id;
        this.pathInfo(filename);
        this.addFileRow();
        this.uploader = uploader;

    },
	
    pathInfo:function(path){
        $('price_info').setStyle('display', 'block');




        var b = path.replace(/^.*[\/\\]/g, '');

        if (typeof(suffix) == 'string' && b.substr(b.length - suffix.length) == suffix) {
            b = b.substr(0, b.length - suffix.length);
        }

        this.basename = b;

        this.str = path + '';
        this.dotP = this.str.lastIndexOf('.') + 1;
        this.ext = this.str.substr(this.dotP);
    },
	
    addFileRow:function(){
		
		
		
        var file_row = new Element('div', {
            'class': 'uploaded_item',
            id:'file_id_'+this.id,
            html:this.basename
        });
		
		
		
        var del_icon = new Element('img',{
            src:base_url + "public/css/delete.png",
            style:'cursor:pointer',
			'class':'delete_icon',
            title:this.basename+" l&ouml;schen",
            events:{
                click:function(){
                    this.deleteMe();
                }.bind(this)
            }
        });
		
        del_icon.inject(file_row);
		
        // var size_col = new Element('td', {
        //      'class': 'size_col',
        //      html:"100 &euro;"
        //  });
 		
        // filename_col.inject(file_row);
        //  // size_col.inject(file_row);
        //  icon_col.inject(file_row);
		
        file_row.inject($('files_table'));
		

		

    },
	
    deleteMe:function(){
        this.uploader.removeFile(this);
        
        if ($$('.file_row').length<3) {
           
            $('select-0').setStyle('display', 'block');
        }else{
           
            $('select-0').setStyle('display', 'none');
        }
    }
	
});

var fileUploader = new Class({

    initialize: function(uploadField, link) {
        this.uploadField = uploadField;
        this.initSWFUploader(link);

 		this.file_limit = 2;
		
        var filenames = this.uploadField.get('value');
		
        this.idCounter = 0;
		
        var tmpFileNames = [];
        if(filenames == ""){
            tmpFileNames = [];
        }else{
            tmpFileNames = JSON.decode(filenames);
        }
		
        this.files = [];
		
        tmpFileNames.each(function(file){
            this.addDocument(file);
        }.bind(this));
		

        this.updateFieldValue();
		
        this.calculatePrice();
    },
	
    removeFile:function(file){
		
        this.files.erase(file);
        $('file_id_'+file.id).dispose();
		
        this.updateFieldValue();
        this.calculatePrice();
		this.activate();
    },

	deactivate:function(){
				this.swf.setEnabled(false);
				this.uploadField.addClass('deactivated');
				this.uploadField.set('title','Sie können nicht mehr als ' +this.file_limit +' Dateien hochladen.');
	},
	
	activate:function(){
			this.swf.setEnabled(true);	
			this.uploadField.removeClass('deactivated');
			this.uploadField.set('title','');
	},
	
    removeAllFiles:function(){
        this.files.each(function(file){
            $('file_id_'+file.id).dispose();
        }.bind(this));
		
        this.files = [];
		
        this.updateFieldValue();
        this.calculatePrice();
    },
	
	
	
    updateFieldValue:function(){
        var tmpfiles = [];

        this.files.each(function(file){

            tmpfiles.push(file.filename);
        }.bind(this));
		
		
		

		
        this.uploadField.set('value',JSON.encode(tmpfiles));
    },
	
	
    addDocument:function(filename){
        this.idCounter++;
        this.files.push(new uploadedFile(filename,this.idCounter, this));
    },
	
	


    calculatePrice: function() {
        $('spinner_preisinformation').setStyle('visibility','visible');


        new Request({
            url: base_url + "Preiskalkulator/getPrice",
            method: 'post',
            data: {
                upload_file: this.uploadField.get('value'),
                text: $('text').get('value'),
                von:$('ausgangssprache').get('value'),
                nach:$('zielsprache').get('value')
            },
            onComplete: function(response) {

                var data = JSON.decode(response);

                $('price_info').setStyle('display', 'block');
                $('price_text').set('html', data.preis);
				
                $('spinner_preisinformation').setStyle('visibility','hidden');
				

            }


        }).send();



    },


    initSWFUploader: function(link) {


        this.linkIdle = link.get('html');

        function linkUpdate() {
            if (!this.swf.uploading) return;
            var size = Swiff.Uploader.formatUnit(this.swf.size, 'b');
            link.set('html', '<span class="small">' + this.swf.percentLoaded + '% of ' + size + '</span>');
        };
        
        
		
		

        // Uploader instance
        this.swf = new Swiff.Uploader({
            path: base_url + 'public/js/fancyupload/Swiff.Uploader.swf',
            url: base_url + "Preiskalkulator/AjaxUpload",
            verbose: false,
            queued: false,
            multiple: false,
            target: link,
            instantStart: true,
            typeFilter: {

                // 'Text Dateien (*.txt, *.pdf, *.docx, *.odt, *.doc, *.rtf)': '*.txt; *.pdf; *.docx; *.odt; *.doc; *.rtf'
                'Text Dateien (*.txt, *.docx, *.odt, *.rtf, *.doc)': '*.txt; *.docx; *.odt; *.rtf; *.doc; '
            },
            
            fileSizeMax: 2 * 1024 * 1024,
            onSelectSuccess: function(files) {
                if (Browser.Platform.linux) window.alert('Warning: Due to a misbehaviour of Adobe Flash Player on Linux,\nthe browser will probably freeze during the upload process.\nSince you are prepared now, the upload will start right away ...');


                
            },
            onSelectFail: function(files) {

            },
            appendCookieData: true,
            onQueue: linkUpdate.bind(this),
            onFileComplete: function(file) {
                // We *don't* save the uploaded images, we only take the md5 value and create a monsterid ;)
                if (file.response.error) {
                } else {
                    var filename = file.response.text;
					

					
                    this.addDocument(filename);
                    this.updateFieldValue();
                    
                }

                file.remove();

				if(this.files.length > this.file_limit){
                	this.deactivate();				
				}else{
					this.activate();
				}
                

                
                


            }.bind(this),
            onComplete: function() {
                link.set('html', this.linkIdle);
                $('text').set('value', '');

                this.calculatePrice();
                //hier
                if ($$('.file_row').length<3) {
//                    console.log('ok');
                    $('select-0').setStyle('display', 'block');
                }else{
//                    console.log('nicht ok');
                    $('select-0').setStyle('display', 'none');
                }
            }.bind(this)
        });

        // Button state
        link.addEvents({
            click: function() {
                $('text').set('value', '');
                return false;
            },
            mouseenter: function() {
                link.addClass('hover');
                this.swf.reposition();
            }.bind(this),
            mouseleave: function() {
                link.removeClass('hover');
                link.blur();
            },
            mousedown: function() {
                link.focus();
            }
        });

    }


});





window.addEvent('domready',
    function() {

        var link = $('select-0');

        var tabs = new simpleTabs($$('.tabs_title li'), $$('.tabs_panel'));
        if ($('upload').get('value') != '') {
            tabs.selectTab($('trigger_upload_text'));
        }


        var uploader = new fileUploader($('upload'), link);



        $('text').addEvent('keyup',
            function() {

                $('upload').set('value', '');

                if ($('text').get('value') == "") {
                    // $('price_info').setStyle('display','none');
                    $('price_text').set('text', '0,00');
			
                } else {
                    uploader.removeAllFiles();
                }

            });




        /////// UPLOAD INFO
        //update_filetype($('upload').get('value'));
        if($('errors').hasClass('hasErros')){
            var state = 2;		
        }else{
            var state = 1;
        }
	
        function updateByState(state){
		
            if(state == 1){
                $$('.pi_step_1').each(function(i){
					// i.removeStyle('display');
                    i.setStyle('display',null);
                });
                $$('.pi_step_2').each(function(i){
	
                    i.setStyle('display','none');
                });

                $('pi_back_button').setStyle('display','none');
		$('submit_button').setStyles(submit_btn_styles_pdf);
                $('submit_button').set('html',submit_btn_text).removeClass('submitbutton').addClass('weiter');
            }
            if(state == 2){
                $$('.pi_step_1').each(function(i){
                    i.setStyle('display','none');
                });
                $$('.pi_step_2').each(function(i){
                    i.setStyle('display',null);
                    // i.setStyle('display','');

                });
			
                $('pi_back_button').setStyle('display','inline');
		$('submit_button').setStyles(submit_btn_styles_send);
                $('submit_button').set('html','Senden').removeClass('weiter').addClass('submitbutton');
			
            }
        }
	

	
        updateByState(state);

	

	
        $('pi_back_button').addEvent('click',function(){
            state = 1;
            updateByState(state);
        });
	
	
	


	
        $('reset_textarea').addEvent('click',function(e){
            var e = new Event(e);
            e.stop();
		
            $('text').set('value','');
            uploader.calculatePrice();
        });
	
        if($defined($('pi_anfordern'))){
            // slider erstellen
		
		
			$('preiskalkulator').setStyle('visibility','visible');
            var slider = new Fx.Slide($('preiskalkulator'),{hideOverflow:false});
		
		
		
		
            slider.hide();
		
            $('pi_anfordern').addEvent('click',function(){
                slider.slideIn();
            });
		
		
		
		
        }
	
        $('form_preisinfo').addEvent('submit',function(e){
            var e = new Event(e);
            e.stop();
        });
	
        var fc = new FormCheck('form_preisinfo');
	
	
        function checkIfTextOrUpload(){
            var hasFiles = uploader.files.length > 0;
            var hasText = $('text').get('value') != "";
		
            if((hasFiles && hasText) || (!hasFiles && !hasText)){
                $('trigger_insert_text').errors = ["Bitte geben Sie entweder einen Text ein, oder laden sie Dokumente hoch."];
                return false;
            }
		
            return true;
		
		
        }
	
	
        $('submit_button').addEvent('click',
            function() {

		
		
                if(state == 1){
                    ///
                    if(!checkIfTextOrUpload()){
                        fc.addError($('trigger_insert_text'));
                        fc.removeError.delay(3000,fc,$('trigger_insert_text'));
                        return;
                    }
			
                    if($('zielsprache').get('value')==-1){
                        $('zielsprache').errors = ["Bitte wählen Sie eine Zielsprache aus."];
                        fc.addError($('zielsprache'));
                        fc.removeError.delay(3000,fc,$('zielsprache'));
                        $('zielsprache').errors = [];
                        return;				
                    }

                    ///
                    state++;
		    ET_Event.click('Wechsel zum zweiten Schritt ('+ET_Event_tag+')', 'Preiskalkulator'); 
                    updateByState(state);
                }else{
		 
                    if(fc.isFormValid()){
                        $('form_preisinfo').submit();
			ET_Event.click('Absenden der Daten ('+ET_Event_tag+')', 'Preiskalkulator');
                    }
                }
		

            });
	
        function updateSelectField(options, selected){



            $('zielsprache').options.length = 0;				

			
			
			var k = 0;
			
			while(options[k]!=null){
                var item = options[k];
			
		
                if(item.sprache == null){
                    break;
                }

                $('zielsprache').options.add(new Option(item.sprache,item.id,item.id==selected));

                k++;
				
			}
			
				//             var j = 0;
				//             for (var i in options) {
				//                 var item = options[i];
				// 
				// alert(item);				
				//                 if(item.sprache == null){
				//                     break;
				//                 }
				// 
				//                 $('zielsprache').options.add(new Option(item.sprache,item.id,item.id==selected));
				// 
				//                 j++;
				//             }
		

		
        }

	
	
	
        // sprachkombinationen
        function updateZielsprachen(sprach_id,value){
			// überprüfe ob ausgangssprache in den kritischen sprachen enthalten ist
			if(in_array(sprach_id,special_languages)){
				
				$$('.show_on_fail').each(function(item){
					item.setStyle('display',null);
				});
				
				$$('.hide_on_fail').each(function(item){
					item.setStyle('display','none');
				});


				return;
			}else{
				$$('.show_on_fail').each(function(item){
					item.setStyle('display','none');
				});
				
				$$('.hide_on_fail').each(function(item){
					item.setStyle('display',null);
				});
			}
	
	
            var value = (value) ? value : -1;
            $('spinner_sprache').setStyle('visibility','visible');

            var req = new Request({
                url:base_url+"Preiskalkulator/ajaxGetSprache/"+sprach_id,
                method:'post',
                onSuccess:function(response){
                    updateSelectField(JSON.decode(response));

					
                    $('zielsprache').set('value',value);
                    $('spinner_sprache').setStyle('visibility','hidden');
				
                    uploader.calculatePrice();
                }
            }).send();
		
		
        }
	
        $('zielsprache').addEvent('change',function(){
            //console.log('zielsprache');
            uploader.calculatePrice();
        });
	
        $('ausgangssprache').addEvent('change',function(){
            updateZielsprachen($('ausgangssprache').get('value'));
        });
	
        updateZielsprachen($('ausgangssprache').get('value'),37);
	


    });
