var autocomplete = function(){
    
    this.location = function(element,elementOut,elementCountry){
        
        var params = { element : element , elementOut : elementOut , elementCountry : elementCountry }; 
        
        $(element+", "+elementCountry).live('focus',function(){
            
            
            if($(element).attr("processed") == "true") return true;
            $(element).attr("processed","true");
            

            $(element).autocomplete(PH_R+'autocomplete/geoname.php',{
                                                lineSeparator: '\r\n',
                                                cellSeparator: '|',
                                                delay: 100,
                                                width: 300,
                                                multiple: false,
                                                matchContains: true,
                                                selectFirst: true,
                                                max: 10,
                                                formatItem: function(data,i,total)
                                                {
                                                    return data[1];    
                                                },
                                                formatResult: function(data,value){
                                                    return data[2];
                                                }, 
                                                scroll: true,        
                                                scrollHeight: 400, 
                                                selectOnly: 1,
                                                extraParams: { }                
            });
            
            $(element).result(function(event, data, formatted)
                                            {   
                                                $(elementOut).val(data[0]);
                                            }
                                            ); 
                                            
            // Country correlato
                            
            if(elementCountry){

                $(elementCountry).bind("change",function(){
                    if($(elementCountry).val())
                    {
                        $(element+','+elementOut).val("");
                        $(element).attr("disabled",false);
                        $(element).removeClass("bg-oblique-transparent");
                        $(element).setOptions({extraParams : { country : $(elementCountry).val() }});
                    }
                    else
                    {
                        $(element+','+elementOut).val("");
                        $(element).attr("disabled",true);
                        $(element).addClass("bg-oblique-transparent");
                        $(element).val("scegli il paese");
                        $(element).setOptions({extraParams : { country : '' }});
                    }    
                });
                
                if($(elementCountry).val())
                {
                    $(element).attr("disabled",false);
                    $(element).removeClass("bg-oblique-transparent");
                    $(element).setOptions({extraParams : { country : $(elementCountry).val() }});
                }
                else
                {
                    $(element+','+elementOut).val("");
                    $(element).attr("disabled",true);
                    $(element).addClass("bg-oblique-transparent");
                    $(element).val("scegli il paese");
                    $(element).setOptions({extraParams : { country : '' }});
                }  
                
                $(elementCountry).bind("keypress", { elementCountry : elementCountry },function(event) {
                  if (event.keyCode == 13 || event.keyCode == 9) { // ENTER O TAB
                      $(event.data.elementCountry).change();
                   }
                });
                
            } 
        
        });
        
    }   
    
    this.country = function(element,elementOut){
        
        $(element).autocomplete(PH_R+'autocomplete/country.php',{
                                            lineSeparator: '\r\n',
                                            cellSeparator: '|',
                                            delay: 100,
                                            width: 300,
                                            multiple: false,
                                            matchContains: true,
                                            selectFirst: true,
                                            autoFill: true,
                                            max: 10,
                                            formatItem: function(data,i,total)
                                            {
                                                return data[1];    
                                            },
                                            formatResult: function(data,value){
                                                return data[2];
                                            }, 
                                            scroll: true,        
                                            scrollHeight: 400, 
                                            selectOnly: 1             
        });
        
        $(element).result(function(event, data, formatted)
                                        {   
                                            $(element+'-geoname').unbind();
                                            core.autocomplete.location(element+'-geoname',elementOut+'-geoname',{country : data[0]}); 
                                            $(elementOut).val(data[0]);
                                        }
                                        ); 
        
    }  
    
    this.attrvalue = function(element,elementOut,extraData){
    
        
        
        var getData = function(){
                    
            extraData = jQuery.extend({ 
            
                id_parent : $(element).val()
            
            },extraData);
            
            extraData.id_parent = $(element).val();
        
            $.ajax({
                        url : PH_R+'autocomplete/attrvalue.php',
                        type : 'POST',
                        data : extraData,
                        dataType : 'json',
                        beforeSend : function(){
                            $(elementOut).attr("disabled",true);
                            $(elementOut).html("<option class='loading' value=\"\">loading ..</option>");
                        },
                        success : function(data){
                            
                            console.log(data);
                            
                            if(data.length > 0){
                                
                                $(elementOut).html("<option class='loading' value=\"\">loading ....</option>");
                                
                                for(var i = 0; i < data.length; i++){
                                    if($(elementOut).val() == data[i].value){
                                        $(elementOut).append("<option value=\""+data[i].value+"\" selected=\"selected\">"+data[i].name+"</option>");
                                    }
                                    else{
                                        $(elementOut).append("<option value=\""+data[i].value+"\">"+data[i].name+"</option>");
                                    }
                                }
                                
                                
                                $(elementOut).prepend("<option value=\"\">Select</option>");
                                $(elementOut +' > option[class=loading]').remove();
                                $(elementOut).attr("disabled",false);
                                
                            }
                            else{
                                $(elementOut).attr("disabled",true);
                                $(elementOut).html("<option value=\"\">--</option>");
                            }
                            
                        }
            });
        
        }
        
        $(element).bind('change',function(){
        
            getData();
            
        });
        
        
    } 
    
    this.selectTblobjectsComboJson = function(params){
        
        params = jQuery.extend({ 
            
            selectCountry : '#country',
            selectState : '#admin1',
            selectCity : '#admin2',
            valueCountry : false,
            valueState : false,
            valueCity : false
                
        },params);
        
        
        // Carica i country
        
        $.ajax({
                    url : PH_R+'autocomplete/tblobjects-splitted.php',
                    type : 'POST',
                    data : { type : 'country' },
                    dataType : 'json',
                    beforeSend : function(){
                        $(params.selectCountry).html("<option class='loading' value=\"\">...</option>"); 
                    },
                    success : function(data){
                        if(data.length > 0){
                                                        
                            for(var i = 0; i < data.length; i++){
                                if(params.valueCountry == data[i].tblobjects_id){
                                    $(params.selectCountry).append("<option value=\""+data[i].tblobjects_id+"\" selected=\"selected\">"+data[i].name+"</option>");
                                }
                                else{
                                    $(params.selectCountry).append("<option value=\""+data[i].tblobjects_id+"\">"+data[i].name+"</option>");
                                }
                            }
                            
                            
                            $(params.selectCountry).prepend("<option value=\"\">---</option>");
                            $(params.selectCountry +' > option[class=loading]').remove();
                            
                        }
                        else{
                            $(params.selectCountry).html("<option value=\"\">---</option>");
                        }
                        
                                                
                        // Se c'è il country preimpostato invia il cambianto change automatico all'avvio
                        
                        if(params.valueCountry){
                            $(params.selectCountry).change();
                        }
                        
                    }
        });
        
        // Onchange sulle select
        
        if(params.selectState){

            $(params.selectCountry).bind("change",function(){
                    
                    $.ajax({
                        url : PH_R+'autocomplete/tblobjects-splitted.php',
                        type : 'POST',
                        data : { tblobjects_id : $(params.selectCountry).val() },
                        dataType : 'json',
                        beforeSend : function(){
                            $(params.selectState +','+params.selectCity).attr("disabled",true);
                            $(params.selectState +','+params.selectCity).html("<option value=\"\">---</option>");
                            $(params.selectState).html("<option class='loading' value=\"\">...</option>");

                        },
                        success : function(data){
                            if(data.length > 0){

                                $(params.selectState).html("<option class='loading' value=\"\">...</option>");
                                
                                for(var i = 0; i < data.length; i++){
                                    if(params.valueState == data[i].tblobjects_id){
                                        $(params.selectState).append("<option value=\""+data[i].tblobjects_id+"\" selected=\"selected\">"+data[i].name+"</option>");
                                    }
                                    else{
                                        $(params.selectState).append("<option value=\""+data[i].tblobjects_id+"\">"+data[i].name+"</option>");
                                    }
                                }
                                
                                $(params.selectState).prepend("<option value=\"\">---</option>");
                                $(params.selectState +' > option[class=loading]').remove();
                                $(params.selectState).attr("disabled",false);
                            }
                            else{
                                $(params.selectState).change();
                                $(params.selectState).attr("disabled",true);
                                $(params.selectState).html("<option value=\"\">---</option>");
                            }
                            
                            if($(params.selectState).val()){
                                $(params.selectState).change();
                            }
                            
                        }
                    });   
                
            })
        
        }
        
        if(params.selectCity){
        
            $(params.selectState).bind("change",function(){
                
                    $.ajax({
                        url : PH_R+'autocomplete/tblobjects-splitted.php',
                        type : 'POST',
                        data : { tblobjects_id : $(params.selectState).val() },
                        dataType : 'json',
                        beforeSend : function(){
                            $(params.selectCity).attr("disabled",true);
                            $(params.selectCity).html("<option class='loading' value=\"\">...</option>");;
                        },
                        success : function(data){
                            if(data.length > 0){

                                $(params.selectCity).html("<option value=\"\">---</option>"); 
                                
                                for(var i = 0; i < data.length; i++){
                                    if(params.valueCity == data[i].tblobjects_id){
                                        $(params.selectCity).append("<option value=\""+data[i].tblobjects_id+"\" selected=\"selected\">"+data[i].name+"</option>");
                                    }
                                    else{
                                        $(params.selectCity).append("<option value=\""+data[i].tblobjects_id+"\">"+data[i].name+"</option>");
                                    }
                                }
                                
                                $(params.selectCity).prepend("<option value=\"\">---</option>");
                                $(params.selectCity +' > option[class=loading]').remove();
                                $(params.selectCity).attr("disabled",false);
                                
                            }
                            else{
                                $(params.selectCity).change();
                                $(params.selectCity).attr("disabled",true);
                                $(params.selectCity).html("<option value=\"\">---</option>");
                            }
                        }
                    });
                
            })
        
        }
        
        
        
    } 
            
    this.selectLocationComboJson = function(params){
        
        params = jQuery.extend({ 
            
            selectCountry : '#country',
            selectAdmin1 : '#admin1',
            selectAdmin2 : '#admin2',
            selectCity : '#city'
            
        },params);
        
        
        
        
        $(params.selectAdmin1).attr("disabled","disabled");
        $(params.selectAdmin2).attr("disabled","disabled");
        $(params.selectCity).attr("disabled","disabled"); 
        
        
        // Carica i country
        
        $.ajax({
                    url : PH_R+'autocomplete/geoname-splitted.php',
                    type : 'POST',
                    data : { type : 'country' },
                    dataType : 'json',
                    beforeSend : function(){
                        $(params.selectCountry).attr("disabled",true);
                        $(params.selectCountry).html("<option class='loading' value=\"\">loading ..</option>");
                    },
                    success : function(data){
                        if(data.length > 0){
                            
                            $(params.selectCountry).html("<option class='loading' value=\"\">loading ....</option>");
                            
                            for(var i = 0; i < data.length; i++){
                                if(params.valueCountry == data[i].value){
                                    $(params.selectCountry).append("<option value=\""+data[i].value+"\" selected=\"selected\">"+data[i].name+"</option>");
                                }
                                else{
                                    $(params.selectCountry).append("<option value=\""+data[i].value+"\">"+data[i].name+"</option>");
                                }
                            }
                            
                            
                            $(params.selectCountry).prepend("<option value=\"\">Select</option>");
                            $(params.selectCountry +' > option[class=loading]').remove();
                            $(params.selectCountry).attr("disabled",false);
                            
                        }
                        else{
                            $(params.selectCountry).attr("disabled",true);
                            $(params.selectCountry).html("<option value=\"\">--</option>");
                        }
                        
                                                
                        // Se c'è il country preimpostato invia il cambianto change automatico all'avvio
                        
                        if(params.valueCountry){
                            $(params.selectCountry).change();
                        }
                        
                    }
        });
        
        // Onchange sulle select
        
        if(params.selectAdmin1){

            $(params.selectCountry).bind("change",function(){
                    
                    $.ajax({
                        url : PH_R+'autocomplete/geoname-splitted.php',
                        type : 'POST',
                        data : { type : 'admin1', country_code : $(params.selectCountry).val() },
                        dataType : 'json',
                        beforeSend : function(){
                            $(params.selectAdmin1 +','+params.selectAdmin2+','+params.selectCity).attr("disabled",true);
                            $(params.selectAdmin1 +','+params.selectAdmin2+','+params.selectCity).html("<option value=\"\">--</option>");
                            $(params.selectAdmin1).html("<option class='loading' value=\"\">loading ..</option>");

                        },
                        success : function(data){
                            if(data.length > 0){

                                $(params.selectAdmin1).html("<option class='loading' value=\"\">loading ....</option>");
                                
                                for(var i = 0; i < data.length; i++){
                                    if(params.valueAdmin1 == data[i].value){
                                        $(params.selectAdmin1).append("<option value=\""+data[i].value+"\" selected=\"selected\">"+data[i].name+"</option>");
                                    }
                                    else{
                                        $(params.selectAdmin1).append("<option value=\""+data[i].value+"\">"+data[i].name+"</option>");
                                    }
                                }
                                
                                $(params.selectAdmin1).prepend("<option value=\"\">Select</option>");
                                $(params.selectAdmin1 +' > option[class=loading]').remove();
                                $(params.selectAdmin1).attr("disabled",false);
                            }
                            else{
                                $(params.selectAdmin1).change();
                                $(params.selectAdmin1).attr("disabled",true);
                                $(params.selectAdmin1).html("<option value=\"\">--</option>");
                            }
                            
                            if($(params.selectAdmin1).val()){
                                $(params.selectAdmin1).change();
                            }
                            
                        }
                    });
                
            })
        
        }
        
        if(params.selectAdmin2){
        
            $(params.selectAdmin1).bind("change",function(){
                
                    $.ajax({
                        url : PH_R+'autocomplete/geoname-splitted.php',
                        type : 'POST',
                        data : { type : 'admin2', country_code : $(params.selectCountry).val(), admin1 : $(params.selectAdmin1).val() },
                        dataType : 'json',
                        beforeSend : function(){
                            $(params.selectAdmin2+','+params.selectCity).attr("disabled",true);
                            $(params.selectAdmin2+','+params.selectCity).html("<option value=\"\">--</option>");
                            $(params.selectAdmin2).html("<option class='loading' value=\"\">loading ..</option>");;
                        },
                        success : function(data){
                            if(data.length > 0){

                                $(params.selectAdmin2).html("<option class='loading' value=\"\">loading ....</option>"); 
                                
                                for(var i = 0; i < data.length; i++){
                                    if(params.valueAdmin2 == data[i].value){
                                        $(params.selectAdmin2).append("<option value=\""+data[i].value+"\" selected=\"selected\">"+data[i].name+"</option>");
                                    }
                                    else{
                                        $(params.selectAdmin2).append("<option value=\""+data[i].value+"\">"+data[i].name+"</option>");
                                    }
                                }
                                
                                $(params.selectAdmin2).prepend("<option value=\"\">Select</option>");
                                $(params.selectAdmin2 +' > option[class=loading]').remove();
                                $(params.selectAdmin2).attr("disabled",false);
                                
                            }
                            else{
                                $(params.selectAdmin2).change();
                                $(params.selectAdmin2).attr("disabled",true);
                                $(params.selectAdmin2).html("<option value=\"\">--</option>");
                            }
                            
                            if($(params.selectAdmin2).val()){
                                $(params.selectAdmin2).change();
                            }
                        }
                    });
                
            })
        
        }
        
        if(params.selectCity){
        
            $(params.selectAdmin2).bind("change",function(){
                
                    $.ajax({
                        url : PH_R+'autocomplete/geoname-splitted.php',
                        type : 'POST',
                        data : { type : 'city', country_code : $(params.selectCountry).val(), admin1 : $(params.selectAdmin1).val(), admin2 : $(params.selectAdmin2).val() },
                        dataType : 'json',
                        beforeSend : function(){
                            $(params.selectCity).attr("disabled",true);
                            $(params.selectCity).html("<option value=\"\">--</option>");
                            $(params.selectCity).html("<option class='loading' value=\"\">loading ..</option>");;
                        },
                        success : function(data){
                            if(data.length > 0){
                                
                                $(params.selectCity).html("<option class='loading' value=\"\">loading ....</option>");
                                
                                for(var i = 0; i < data.length; i++){
                                    if(params.valueCity == data[i].value){
                                        $(params.selectCity).append("<option value=\""+data[i].value+"\" selected=\"selected\">"+data[i].name+"</option>");
                                    }
                                    else{
                                        $(params.selectCity).append("<option value=\""+data[i].value+"\">"+data[i].name+"</option>");
                                    }
                                }
                                
                                $(params.selectCity).prepend("<option value=\"\">Select</option>");
                                $(params.selectCity +' > option[class=loading]').remove();
                                $(params.selectCity).attr("disabled",false);
                            }
                            else{
                                $(params.selectCity).attr("disabled",true);
                                $(params.selectCity).html("<option value=\"\">--</option>");
                            }
                        }
                    });
                
            })
        
        }
        
        

        
    }
    
    this.tblobjects = function(first_element,onComplete){
            
            if(onComplete === undefined) onComplete = function(){}
            
            $(first_element).live("mouseover change click",function(event){
            
               var el = this;
               var count = $(first_element).length;
               var next = false;
               
               if(event.type == 'mouseover' && $(el).attr('loaded') === undefined){
                                             
                    $.ajax({
                            url : PH_R+'autocomplete/tblobjects.php',
                            type : 'POST',
                            data : { parentid : $(this).attr('parentid') },
                            dataType : 'json',
                            async : false,
                            beforeSend : function(){

                                $(el).html("<option class='loading' value=\""+$(el).val()+"\">...loading...</option>");
                                
                                
                            },
                            success : function(data){ 

                                populate(el,data);
                                $(el).attr("loaded",'1');
                                $(el).click();
                            }
                        });
                        
               }
               else if(event.type == 'change' || event.type == 'click'){
                              
                        $.ajax({
                            url : PH_R+'autocomplete/tblobjects-haschild.php',
                            type : 'POST',
                            data : { parentid : $(this).val() },
                            dataType : 'json',
                            beforeSend : function(){
                            
                                
                                
                            },
                            success : function(data){                                                    
                                
                                $(el).nextAll().remove();
                                  
                                if(data.length){               
                                $(el).parent().append("<br><select name=\""+$(el).attr('name')+"\" num=\""+count+"\" class=\""+$(el).attr('class')+" validate[required]\" id =\""+$(el).attr("id")+"\" parentid=\""+$(el).val()+"\"><option value=\"\">select</option></select>");
                                }
                                
                                
                            }
                        });
                                       
               }

                
                
            });
            
            
            var populate = function(el,data){
            
                    var value = $(el).val();         
                    
                    for(var i = 0; i < data.length; i++){
                            if(value == data[i].tblobjects_id){
                                $(el).append("<option value=\""+data[i].tblobjects_id+"\" selected=\"selected\">"+data[i].name+"</option>");
                            }
                    }
                    
                   $(el).append("<option value=\"\">select</option>"); 
                    
                    for(var i = 0; i < data.length; i++){

                                $(el).append("<option value=\""+data[i].tblobjects_id+"\">"+data[i].name+"</option>");

                    }

                                
                    $('option[class=loading]').remove();
                    
                    onComplete();
                
            }
        
    }
    
    this.lblgrp = function(element,elementOut){
        
        $(element).autocomplete(PH_R+'autocomplete/lblgrp.php',{
                                            lineSeparator: '\r\n',
                                            cellSeparator: '|',
                                            delay: 100,
                                            width: 300,
                                            multiple: false,
                                            matchContains: true,
                                            selectFirst: true,
                                            max: 20,
                                            formatItem: function(data,i,total)
                                            {
                                                return data[1];    
                                            },
                                            formatResult: function(data,value){
                                                return data[2];
                                            }, 
                                            scroll: true,        
                                            scrollHeight: 400, 
                                            selectOnly: 1,
                                            extraParams: { iso_alpha2: '' }                
        });
        
        $(element).result(function(event, data, formatted)
                                        {   
                                            $(elementOut).val(data[0]);
                                        }
                                        ); 
        
    }
    
    this.profileUrl = function(element,elementOut){ 
       
       var url = $(element).val()+"."+HOST;
       $(elementOut).html("<b>"+url+"</b>");
       
       $(element).unbind('keyup'); 
       $(element).keyup(function(){
           core.autocomplete.profileUrl(element,elementOut); 
       });     
                
    }   
        
}

