// Corre sempre em cada página para aplicar o ajax indicator
jQuery(document).ready(function() {
    jQuery.qualipecas.setupAjaxIndicator();
});

(function($)
{
    $.qualipecas = {
        /* AJAX INDICATOR */
        showAjaxIndicator: function() {
            jQuery.blockUI('A processar...Um momento, por favor...',{ backgroundColor: '#F0F0F0', color:'#404040', padding: '10px', border: 'solid 2px #404040'});
        },
        
        hideAjaxIndicator: function() {
            jQuery('#progress').empty();
            jQuery.unblockUI();
        },

        setupAjaxIndicator: function() {
            jQuery('#progress').ajaxStart($.qualipecas.showAjaxIndicator).ajaxStop($.qualipecas.hideAjaxIndicator);
        },
        
        removeAjaxIndicator: function() {
            jQuery('#progress').unbind("ajaxStart", $.qualipecas.showAjaxIndicator);
            jQuery('#progress').unbind("ajaxStop", $.qualipecas.hideAjaxIndicator);
        },
        
        /* Synchronized AJAX */
        synchronizedAjax: function(url, data, callback, type) { 
            if ( $.isFunction( data ) ) { callback = data; data = null; } 
            return $.ajax({
                type: "GET",
                url: url,
                async: false,
                data: data,
                success: callback,
                dataType: type
            });
        },
        
        /* AJAX without indicator */
        getWithoutAjaxIndicator: function(url, data, callback, type) { 
            if ( $.isFunction( data ) ) { callback = data; data = null; } 
            return $.ajax({
                type: "GET",
                url: url,
                data: data,
                success: callback,
                dataType: type,
                global: false
            });
        },
        
        /* MENU */
        bindEventsMenu: function(){
            $("#menu a").click(function() {
                var url = $(this).attr("url");
                url="partials/" + url;       
                $.qualipecas.getWithoutAjaxIndicator(url, 
                          {'date' : new Date()},
                          function(data) { $('#contents').empty().append(data); },
                          'html');
                return true;
            })
        },
        
        /* Links a carregar na contents */
        bindEventsLinks: function(){
            $("#contents a").click(function() {
                var url = $(this).attr("url");
                if (url!=undefined){
                    url="partials/" + url;       
                    $.qualipecas.getWithoutAjaxIndicator(url, 
                          {'date' : new Date()},
                          function(data) { $('#contents').empty().append(data); },
                          'html');
                }    
                return true;
            })
        }, 
        
        showImage: function(imageUrl){
	        document.image.src = imageUrl;
        },    
        
        controleWithData: function (form, excepcoes, url, errorDiv, intValuesArray, emailsArray){
            var count = form.elements.length;
            var value=true;
            var verifyData=true;
            for (i=0; i<count; i++)
            {
                var element = form.elements[i];
                if ((element.value=="0" || element.value=="") && $.qualipecas.in_array(element.name, excepcoes)==false){
                    value=false;
                }
                if ($.qualipecas.in_array(element.name, intValuesArray)==true){
                    if (element.value!="" && isNaN(element.value)){
                        verifyData=false;
                    }
                }
                if ($.qualipecas.in_array(element.name, emailsArray)==true){
                    if ($.qualipecas.checkEmail(element.value)==false){
                        verifyData=false;
                    }
                }
            }
            if (value==false){
                document.getElementById(errorDiv).innerHTML="preencher campos obrigatórios";
            }
            else{
                if (verifyData==false){
                    document.getElementById(errorDiv).innerHTML="dados mal preenchidos";
                }
                else{
                    document.getElementById(errorDiv).innerHTML="&nbsp;";
                    $.qualipecas.showValues(form, url);
                }
            }    
            return true;
        },
        
        showValues: function(form, url){
            //$.qualipecas.showAjaxIndicator();
	        //var values = url;
	        url="partials/" + url;
	        var len = form.length; //Leave off Submit Button
            var values = "{ 'date' : '"  + new Date() + "'";
            for(i=0; i<len; i++){
		        if(form[i].id.indexOf("selected")!=-1) //Skip objects with name selected and Back Buttons
			        continue;
                if(form[i].type=="checkbox"){
                    if (form[i].checked){
                        values +=", '"
                        values += form[i].id;
    		            values += "' : '";
	        	        values += form[i].value;
	    	            values += "'";
                    }
                }else{
                    values +=", '"
                    values += form[i].id;
    		        values += "' : '";
	    	        values += form[i].value;
	    	        values += "'";
		        }
	        }
	        values += " }";
            //alert(values);
            eval("$.get(url, " + values + " , function(data) { $('#contents').empty().append(data); }, 'html');");
            return true;
        },
        
        /* Marcas */
        bindEventsMarcas : function() {
            // Aqui está a fazer o bind. Usa-se cardinais '#' para os ids e '.' para as classes.
            // Aqui está a aplicar o change ao objecto com o id "comboMarcas" que está dentro do id "marcasContent".
            $('#divConteudoPesquisa #idMarca').change(function() {
                var idMarca = $('#divConteudoPesquisa #idMarca').val(); //o valor seleccionado
                //alert(idMarca); //Mensagem no ecra
                $.qualipecas.getWithoutAjaxIndicator('partials/partialModelo.php',
                        { //vai carregar o partial.html passando os parametros:
                            'date' : new Date(),    //data - deixa sempre este parametro, para não utilizar a cache no IE6
                            'idMarca' : idMarca     //o parametro id
                        }, 
                        function(data) { $('#divConteudoPesquisa #modelosPartialContent').empty().append(data); }, //pega no resultado do get e coloca em marcasPartialContent. Att: o resultado do get não pode trazer <html></html> nem head nem body.
                        "html");
                $.qualipecas.getWithoutAjaxIndicator('partials/partialPorta.php',
                        { //vai carregar o partial.html passando os parametros:
                            'date' : new Date(),    //data - deixa sempre este parametro, para não utilizar a cache no IE6
                            'idMarca' : idMarca     //o parametro id
                        },
                        function(data) { $('#divConteudoPesquisa #portasPartialContent').empty().append(data); },
                        "html");
                //alert(idMarca);
                $.qualipecas.getWithoutAjaxIndicator('partials/partialAno.php',
                        { //vai carregar o partial.html passando os parametros:
                            'date' : new Date(),    //data - deixa sempre este parametro, para não utilizar a cache no IE6
                            'idMarca' : idMarca     //o parametro id
                        },
                        function(data) { $('#divConteudoPesquisa #anosPartialContent').empty().append(data); },
                        "html");
                return false;
            });
		},
        bindEventsModelos : function() {
            // Aqui está a fazer o bind. Usa-se cardinais '#' para os ids e '.' para as classes.
            // Aqui está a aplicar o change ao objecto com o id "comboMarcas" que está dentro do id "marcasContent".
            $('#divConteudoPesquisa #idModelo').change(function() {
                var idModelo = $('#divConteudoPesquisa #idModelo').val(); //o valor seleccionado
                //alert(idModelo); //Mensagem no ecra
                $.qualipecas.getWithoutAjaxIndicator('partials/partialPorta.php',
                        { //vai carregar o partial.html passando os parametros:
                            'date' : new Date(),    //data - deixa sempre este parametro, para não utilizar a cache no IE6
                            'idModelo' : idModelo     //o parametro id
                        },
                        function(data) { $('#divConteudoPesquisa #portasPartialContent').empty().append(data); },
                        "html");
                //alert(idModelo);
                $.qualipecas.getWithoutAjaxIndicator('partials/partialAno.php',
                        { //vai carregar o partial.html passando os parametros:
                            'date' : new Date(),    //data - deixa sempre este parametro, para não utilizar a cache no IE6
                            'idModelo' : idModelo     //o parametro id
                        },
                        function(data) { $('#divConteudoPesquisa #anosPartialContent').empty().append(data); },
                        "html");
                return false;
            });
		},        
		
	    /* função que lança a janela */
	    showBlockUI: function(data){
            jQuery.blockUI(data, {width: '700px', height: '490px', margin:'-290px -350px', border: 'none'});
            //jQuery.blockUI('A processar...Um momento, por favor...',{ backgroundColor: '#F0F0F0', color:'#404040', padding: '10px', border: 'solid 2px #404040'});            
        },
        
	    /* função que fecha a janela */
        hideBlockUI: function(){
            $.unblockUI();
            $.qualipecas.setupAjaxIndicator();
        },

	    /* Exemplo */
	    showImagePopup: function(imageURL){
            $.qualipecas.removeAjaxIndicator(); // ATT: tens que fazer isto senão o ajax indicator aparece por cima!!
            $.get('partials/imagePopup.php', 
                    {'date' : new Date(), 
                    'imageURL' : imageURL},
                    function(data) {
                        $.qualipecas.showBlockUI(data);
                    }, 
                    "html");
        },
        
        /* Links a carregar na contents */
        bindEventsImagePopup: function(){
            $("#contents .imagePopup").click(function() {
                var imageURL = $(this).attr("src");
                $.qualipecas.showImagePopup(imageURL);
                return true;
            })
        }, 
        
        
        runSlideShow: function(imagePos, imageArray, imageDiv){
            var fadeDuration=3;           
            if (document.getElementById(imageDiv)!= null && imagePos!=undefined && imageArray!=undefined && imagePos>0){
                if (document.all){
                    document.getElementById(imageDiv).style.filter="blendTrans(duration=2)";
                    document.getElementById(imageDiv).style.filter="blendTrans(duration=CrossFadeDuration)";
                    document.getElementById(imageDiv).filters.blendTrans.Apply();
                }
        
                document.getElementById(imageDiv).src = imageArray[imagePos-1];
                if (document.all)
                    document.getElementById(imageDiv).filters.blendTrans.Play();
                imagePos = imagePos + 1;
                
                if (imagePos > (imageArray.length)) 
                   imagePos=1;
                
                setTimeout({                
                    run: function() {
                        jQuery.qualipecas.runSlideShow(imagePos, imageArray, imageDiv);
                    }
                  }.run, 5000);
           }//else
              // alert('Nao deu');
        },        
                
        /*verifica timing*/
        runSlideShowStock: function(){
            if (document.getElementById("destaque2")!= null){
                $.qualipecas.getWithoutAjaxIndicator('partials/stockDestaque.php',
                        { //vai carregar o partial.html passando os parametros:
                            'date' : new Date()    //data - deixa sempre este parametro, para não utilizar a cache no IE6
                        },
                        function(data) { $('#destaque2').empty().append(data); },
                        "html");        
                eval("setTimeout('jQuery.qualipecas.runSlideShowStock()',7000);");            
                return true;                   
            }
        },                
                
        in_array: function(needle, haystack, strict) {
            var found = false, key, strict = !!strict;
            for (key in haystack) {
                if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) {
                    found = true;
                    break;
                }
            }
            return found;
        },
        
        checkEmail: function (str) {
		    var at="@";
		    var dot=".";
		    var lat=str.indexOf(at);
		    var lstr=str.length;
		    var ldot=str.indexOf(dot);
		    if (str.indexOf(at)==-1){
		       return false;
		    }

		    if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
		       return false;
		    }

		    if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		        return false;
		    }

		     if (str.indexOf(at,(lat+1))!=-1){
		        return false;
		     }

		     if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		        return false;
		     }

		     if (str.indexOf(dot,(lat+2))==-1){
		        return false;
		     }
    		
		     if (str.indexOf(" ")!=-1){
		        return false;
		     }

 		     return true;					
	    }
        
    }
})(jQuery);
