(function () {
    var app = angular.module('cross', ['ui.bootstrap']);
    
    app.controller('CrosswordController', function ($scope, $modal){

        this.test = 'disbled';
        this.crossword_solution = crossword_solution;
        this.modalInstance = null;
        /*isOk dynamic array*/
        $scope.rowsOk = [];
        $scope.rowsFilled = [];
        $scope.successShowed = false;
        $scope.view = 1;
        for(var i=0; i< crossword_solution.rows.length; i++) {
            $scope.rowsOk.push(false);
        }
        //crossword generator
        var idx = 0;
        var crossword2 = {
            solution_row : crossword_solution.solution_row,
            rows : []
        }        
        var rowsNum = crossword_solution.rows.length;
        for (var i = 0; i < rowsNum; i++) {
            var cells = {cells: []};
            var cellsNum = crossword_solution.rows[i].cells.length;
            for (var j = 0; j < cellsNum; j++) {
                var letter = crossword_solution.rows[i].cells[j].l;
                var currentIndex = -1;
                if ((letter != null) && (letter != ' ') && (letter != '')) {
                    idx = idx + 1;
                    currentIndex = idx;
                    letter = '';
                }
                var cell = {l: letter, index: currentIndex};
                cells.cells.push(cell);        
            }
            crossword2.rows.push(cells);
        }
        this.crossword2 = crossword2;
        
        this.nextView = function() {
            $scope.view++;
        };
        
        this.checkRows = function() {
            var SolutionIsOk = true;
            var rowNumber = crossword2.rows.length;
            for (var i = 0; i < rowNumber; i++) {
                
                var rowIsOk = true;
                var rowFilled = true;
                var cellsNumber = crossword2.rows[i].cells.length;
                
                for (var j = 0; j < cellsNumber; j++) {
                    if (crossword_solution.rows[i].cells[j].l != null) {
                        if (crossword_solution.rows[i].cells[j].l != '') {
                            //rowIsOk = crossword_solution.rows[i].cells[j].l;
                            if (crossword2.rows[i].cells[j].l.toUpperCase() != crossword_solution.rows[i].cells[j].l) {
                                rowIsOk = false;
                            }
                            if (!crossword2.rows[i].cells[j].l != '') {
                                rowFilled = false;
                            }
                        }
                    }                      
                }
                $scope.rowsFilled[i] = rowFilled;
                $scope.rowsOk[i] = rowIsOk;
                if (!rowIsOk) {
                    SolutionIsOk = false;
                }
            }
            if (SolutionIsOk) {
                this.nextView();
            }
        }        
    });

    
    app.directive('keyFocus', function() {
      return {
        restrict: 'A',
        link: function(scope, elem, attrs) {
          elem.bind('keyup', function (e) {
              if ((e.keyCode >= 48) && (e.keyCode)) {  
                elem[0].nextElementSibling.focus();

              }
          });
        }
      };
    });
    
    app.directive('autoTabTo', [function () {
      return {
          restrict: "A",
          link: function (scope, el, attrs) {
              el.bind('keyup', function(e) {
                if ((this.value.length === 1) && (e.keyCode > 47) && (e.keyCode < 91)) {
                  var element = document.getElementById(attrs.autoTabTo);
                  if (element)
                    element.focus();
                }
              });
          }
      }
    }]);
    
   app.directive('selectOnFocus', function () {
       // Linker function
       return function (scope, element, attrs) {
           element.bind('focus', function () {
               this.select();
           });
       };
   });
    
    app.directive('myModal', function() {
       return {
         restrict: 'A',
         link: function(scope, element, attr) {
           scope.dismiss = function() {
               element.modal('hide');
           };
         }
       } 
    });
    
    app.filter('capitalize', function() {
        return function(input, scope) {
            return input.substring(0,1).toUpperCase();
        }
    });
    
    var crossword_solution = {
        solution_row: 6,
        questions: [
            {question: '1. Prawa autorskie, które są ograniczone w czasie i uprawniają do pobierania korzyści z utworu, rozporządzania nim czy korzystania z niego to inaczej – autorskie prawa...'},
            {question: '2. Odpowiedzialność, która polega na tym, że twórca, którego prawo zostało naruszone może domagać się usunięcia skutków naruszeń czy zapłaty odszkodowania pieniężnego, to odpowiedzialność...'},
            {question: '3. Książka, komiks, piosenka zgodnie z prawem autorskim to...'},
            {question: '4. Uprawnienie do nieodpłatnego korzystania na własne potrzeby z utworu wcześniej rozpowszechnionego to dozwolony użytek...'},
            {question: '5. Miejsce, gdzie sąd rodzinny może umieścić nastolatków pomiędzy 13 a 17 rokiem życia, które dopuściły się czynu karalnego to zakład...'},
            {question: '6. Uporczywe nękanie bądź prześladowanie ofiary, które wzbudza u niej uzasadnione poczucie zagrożenia lub istotnie narusza jej prywatność to...'}
        ],
        rows: [
            {cells: [{l:null},{l:null},{l:'M'},{l:'A'},{l:'J'},{l:'Ą'},{l:'T'},{l:'K'},{l:'O'},{l:'W'},{l:'E'}], question:'asfasf'},
            {cells: [{l:null},{l:null},{l:null},{l:null},{l:'C'},{l:'Y'},{l:'W'},{l:'I'},{l:'L'},{l:'N'},{l:'A'}]},
            {cells: [{l:null},{l:null},{l:null},{l:'U'},{l:'T'},{l:'W'},{l:'Ó'},{l:'R'}]},
            {cells: [{l:null},{l:null},{l:null},{l:null},{l:null},{l:'P'},{l:'R'},{l:'Y'},{l:'W'},{l:'A'},{l:'T'},{l:'N'},{l:'Y'}]},
            {cells: [{l:'P'},{l:'O'},{l:'P'},{l:'R'},{l:'A'},{l:'W'},{l:'C'},{l:'Z'},{l:'Y'}]},
            {cells: [{l:null},{l:null},{l:null},{l:null},{l:'S'},{l:'T'},{l:'A'},{l:'L'},{l:'K'},{l:'I'},{l:'N'},{l:'G'}]},
        ]       
    };
    
 
})();