function show_loading(mssg){
    $('kategorie').addClass('hiden');
    $('loading_msg').set('text', mssg);
    $('content').addClass('hiden');
    $('loading').setStyle('display', 'block');
}

function hide_loading(){
    $('kategorie').removeClass('hiden');
    $('loading').setStyle('display', 'none');
    $('content').removeClass('hiden');

}

function show_msg(msg){
    alert(msg);
}

function dodaj_produkt(produkt){
    var jsonRequest = new Request.JSON({url: main_adres + "/dodaj/" + produkt + '/', onComplete: function(koszyk){
		show_msg(koszyk.msg);
		$('koszyk_ilosc').set('text', koszyk.ilosc);
	    }}).get();
}

var main_adres = 'nowastrona.php';

var ajax_loader = {
 cache: new Hash(),
 setup: function(){
    this.cache = new Hash();
  },

 load: function(url, callback){

  },

 nothin: ''
};

function getFormValues(form){
    var values = new Hash();
    
    form.getElements('input').each(function(pole){
	    values[pole.get('name')] = pole.get('value');
	});
    return values
}

function form_register(form, url){
    var jsonRequest = new Request.JSON({url: main_adres + "/" + url + "/", onComplete: function(register){
		    $$('.errorfield').removeClass('errorfield');
		    var html = '';
		if(register.forward){
		    polgenstrona.gotourl(polgenstrona.create_url('strona/' + register.forward));
		}else{
		    errors=  new Hash(register.errors);
		    errors.each(function(error, pole){
			    $(pole).addClass('errorfield');
			    html += '<li>'+ error + '</li>';
			});
		}
		    $('form_bledy').set('html', html);
	    }}).post(getFormValues($(form.id)));
    return false;
}

var kategorie_manager = {

 kategorie: '',
 url: '',
 is_mini: false,
 lista: false,
 setup : function(url) {
	this.url = 'kategorie/'
	new Asset.css('./css/nowastrona_hide.css', {});
	this.otwarte = new Hash();
	this.lista = polgen_kategorie;
    },

 otwarte_kategorie_html: '',
 otwarte_kategorie: '',
 is_search: false,
 bind_search: function(lista, url){
	if(!this.is_search){
	    kategorie_manager.otwarte_kategorie_html = $('kategorie').get('html');
	    kategorie_manager.otwarte_kategorie = kategorie_manager.otwarte;
	}
	$('kategorie').set('html', lista);
	this.otwarte = new Hash();
	kategorie_manager.is_search = true;
	var ob = eval($('search_grupy').get('html'));
	kategorie_manager.lista = ob.kategorie;
	;
	$('powrot').setStyle('display', 'block');
	if(ob.redir){
	    kategorie_manager.revert_kat();
	    produkty_load(ob.redir);
	}else if(ob.onlyone){
	    this.url = url;
	    polgenstrona.gotourl(kategorie_manager.open_kategoria(ob.onlyone));
	}else if(ob.error){
	    alert(ob.error);
	    kategorie_manager.revert_kat();
	}else{
	    this.url = url;
	}
	

    },

 revert_kat: function(kat_men){
	$('powrot').setStyle('display', 'none');
	$('kategorie').set('html', kategorie_manager.otwarte_kategorie_html);
	kategorie_manager.otwarte = kategorie_manager.otwarte_kategorie;
	this.url = 'kategorie/'
	this.lista = polgen_kategorie;
	this.is_search = false;
    },
 
 get_kategorie_url: function(aopen){
    var otwarte = new Hash();
    
    kategorie_manager.otwarte.getKeys().each(function(kid){
	kategoria = kategorie_manager.lista[kid];
	if(kategoria.open){
	  if(kategoria.close){
	    kategoria.close = false;
	  } else {
	    if(kategoria.has_produkty){
	      otwarte[kategoria.id]=kategoria.podstrona;
	    }else{
	      otwarte[kategoria.id]=1;
	    }
	  }
	}
      });

    otwarte = aopen.combine(otwarte);

    var adres = new Hash();
    
    otwarte.each(function(podstrona, kategoria){
	if(podstrona != '1'){
	  adres.set(kategoria, kategoria + 'p' + podstrona);
	}else{
	  adres.set(kategoria, kategoria);
	}
      });
    
    return this.url+adres.getValues().join(',');
  },
 

 parse_url: function(string){

    kategorie_manager.otwarte = new Hash();
    if(string!=''){
      string.split(',').each(function(kategoria){
	  if(kategoria.split('p').length == 2){
	    podstrona = kategoria.split('p')[1];
	    kategoria = kategoria.split('p')[0];
	    kategorie_manager.otwarte[kategoria] = podstrona;
	  }else{
	    kategorie_manager.otwarte[kategoria] = 1;
	  }
	});
    }
    
    kategorie_manager.lista.each(function(kat){
	
	if(kat.open && !kategorie_manager.otwarte.has(kat.id)){
	  kat.open = false;
	  kategorie_manager.zwin(kat.id);
	  
	  if(kat.has_produkty){
	    kategorie_manager.zwin_produkty(kat.id);
	  }
	  
	} else if(kategorie_manager.otwarte.has(kat.id)){
	    if(!kat.open){
	      kat.open = true;
	    kategorie_manager.rozwin(kat.id);
	    if(typeof(kat.podstrona)=='undefined'){
		kat.podstrona = '1';
	    }
	    if(kat.has_produkty){
		kategorie_manager.load_produkty(kat.id);
	    }
	  } else if ( kategorie_manager.otwarte[kat.id]!=kat.podstrona && kat.has_produkty){
	      kat.podstrona = kategorie_manager.otwarte[kat.id];
	      kategorie_manager.load_produkty(kat.id);
	  }	  
	} 
      });
    
    if(strona_manager.loaded){
      strona_manager.hide();
      
    }
   if(kategorie_manager.is_mini){
     kategorie_manager.show();
   }
  },

 open_kategoria : function(id_kategorii) {
    var strona = '1';
    var nowa = true;
    if(id_kategorii.split(',').length > 1){
      strona = id_kategorii.split(',')[1];
      nowa = false;
      id_kategorii = id_kategorii.split(',')[0];      
    }

    var aopen = new Hash();
    if(kategorie_manager.lista[id_kategorii + ''].open){
	
      if(kategorie_manager.is_mini){
        return this.get_kategorie_url(new Hash());
	
      }else{
        if(kategorie_manager.lista[id_kategorii].podstrona != strona && ! nowa){
          aopen.set(id_kategorii, strona);
        } else {
          kategorie_manager.lista[id_kategorii + ''].child_list.each(function(kid){
              kategorie_manager.lista[kid].close = true;
            });
        }
      }
    } else {
      kategorie_manager.lista[id_kategorii].parent_list.each(function(kid){
          aopen.set(kid, strona);
        });
    }
    return this.get_kategorie_url(aopen);
  },
  
  zwin: function(id){
    $('grupa_' + id).removeClass('hover');
    if($('podgrupy_' + id)){
	$('podgrupy_'+id).addClass('podgrupy');
	$('podgrupy_'+id).removeClass('rozwiniete');
    }
  },
 
 rozwin: function(id){
    $('grupa_' + id).addClass('hover');
    if($('podgrupy_' + id)){
	$('podgrupy_'+id).removeClass('podgrupy');
	$('podgrupy_'+id).addClass('rozwiniete');
    }
  },
 
 
 load_produkty: function(id){
    podstrona = kategorie_manager.lista[id].podstrona
    $('produkty_' + id).addClass('produkty_rozwiniete');
    if(!this.is_search){
    new Request({evalScripts: true, url: main_adres + '/' + 'produkty/ajaxprodukty/id_g/' + id + '/page/' + podstrona, method: 'get', onSuccess: function(produkty){
	  $('produkty_' + id).set('html', produkty);
	}}).send();
    }
  },
 
 show_produkty: function(id, lista){
    
  },
 
 zwin_produkty: function(id){
    $('produkty_' + id).removeClass('produkty_rozwiniete');
  },

 otwarte: '',
  
 show: function(){
    kategorie_manager.is_mini = false;
    $('kategorie').removeClass('mini');
    $('kategorie').removeClass('parent_mode');
    $$('.parent').removeClass('parent');
    $$('.parent_kategoria').removeClass('parent_kategoria');    
  },

 mini: function(){
    if(!kategorie_manager.is_mini){
      kategorie_manager.show();
      kategorie_manager.is_mini = true;
      $('kategorie').addClass('mini');
    }
  },

 only_parents: function(id){
    var rodzice = new Hash();
    
    $$('.parent').removeClass('parent');
    $$('.parent_kategoria').removeClass('parent_kategoria');
    //    polgenstrona.gotourl(this.open_kategoria(id));
    kategorie_manager.mini();
    
    kategorie_manager.lista[id].parent_list.each(function(kid){
	$('grupa_' + kid).addClass('parent_kategoria');
	if($('podgrupy_' + kid)){
	  $('podgrupy_' + kid).addClass('parent');
	}
      });
    
    $('kategorie').addClass('parent_mode');
    
  },
 
 nothing :''
};
 
function produkty_load(id_produktu, dzial){
  url = 'strona/produkt:' + id_produktu;
  if(dzial){
    url = url + ':' + dzial;
  }
  polgenstrona.gotourl(url);
  return false;
}

var szukaj_manager = {
    setup: function(){
	$('search_form').addEvent('submit', function(){
		szukaj_manager.szukaj();
		return false;
	    });
    },

    search_nazwa: '',
    search_producent: '',
    search_url: '',


    szukaj: function(){
		url = 'szukaj/'
		prod = $('search_producent').get('value');
		if(prod.length == 0){
		    prod = 0;
		}
		url += prod + '/';
		kod = $('search_kod').get('value');
		if(kod == ''){
		    kod = 'brak'
		}
		url += kod + '/';
		
		polgenstrona.gotourl(url);
		return false;
    },
    
    url: '',

    bind_search: function(kategorie){
	kategorie_manager.bind_search(kategorie, this.url);
    },
    
    load_search: function(){
	strona_manager.hide();
	show_loading('Trwa wyszukiwanie produktu');
	new Request({
		url: main_adres + '/ajax/' + this.url,
		    
		    method: 'get',
		    evalScripts: true,
		    
		    onSuccess: function(tresc){
		    hide_loading();
		    szukaj_manager.bind_search(tresc);
		},
		    
		    onException: function(a, b){
		    strona_manager.show_strona(strona, 'Nie mozna wyswietlic strony <br />'+a+'<br />'+b);
		    hide_loading();
		},
		    onFailure: function(a){
		    strona_manager.show_strona(strona, 'Nie mozna wyswietlic strony przekroczono czas polaczenia');
		    hide_loading();
		}
	}).send();
	
    },
    
    hide: function(){
	this.search_nazwa = '';
	this.search_producent  = '';
	this.url = '';
    },
    
    parse_url: function(string){

	var producent = false;
	var szukaj = false;
	var kategorie = '';
	
	var d = string.split('/');
	
	switch(d.length){
	    
	case 3:
	producent = d[0]; szukaj = d[1]; kategorie = d[2];
	break;
	
	case 2:
	szukaj = d[0];	kategorie = d[1];
	break;
	
	default:
	szukaj = d[0];
	break;
	
	}
	
	if(this.search_nazwa != szukaj || this.search_producent != producent){    
	    this.search_nazwa = szukaj;
	    this.search_producent = producent;
	    if(producent){
		this.url = 'szukaj/' + producent + '/' + szukaj + '/';
	    }else{
		this.url = 'szukaj/' + szukaj + '/';
	    }
	    this.load_search();
	}else{
	    kategorie_manager.parse_url(kategorie);
	}
    },
 
 nothing: ''
}

var strona_manager = {
 loaded: true,
 parse_url: function(string){
    if(!this.loaded){
      this.loaded = true;
      kategorie_manager.mini();
      this.pokaz_ramke();
    }

    string = string.replace(/:/g, '/')
    this.load_strona(string);
  },

 show_strona: function(strona, tresc){
    this.pokaz_ramke();
    kategorie_manager.mini();
    if(strona==this.current_load){
	$('content').set('html', tresc);
	Shadowbox.setup($$('#content a[rel=shadowbox]'));
    }
  },

 current_load: '',
 load_strona: function(strona){
    this.current_load = strona;
	  $('content').set('html', "Ładowanie ...");
    
    new Request({url: main_adres + '/ajax/' + strona + '/', method: 'get',
	  evalScripts: true,
	  onSuccess: function(tresc){		
		strona_manager.show_strona(strona, tresc);
	},

	  onException: function(a, b){
	  strona_manager.show_strona(strona, 'Nie mozna wyswietlic strony ' + strona + '<br />'+a+'<br />'+b);
	},
	onFailure: function(a){
	  strona_manager.show_strona(strona, 'Nie mozna wyswietlic strony ' + strona + ' przekroczono czas polaczenia');
	}
      }).send();
  },

 pokaz_ramke: function(){
    $('content').setStyle('display', 'block');
  },

 hide: function(){
    this.loaded = false;
    $('content').setStyle('display', 'none');
  },

 nothing :''

}

var polgenstrona = {
 setup_urls : function() {
    $$('a[rel]').each( function(lnk) {
	var rel = lnk.get('rel')
	lnk.addEvent('click', function() {
	    polgenstrona.gotourl(polgenstrona.create_url(rel));
	    return false;
	  });
      });
  },
 
 doclick : function(link) {
    url = this.create_url(link.get('rel'));
		if (url) {
		  this.gotourl(url);
		}
    return false;
  },
 
 setup : function() {
    this.setup_urls();
    if (Browser.Engine.trident) {
      this.check_url(true);
      setTimeout('polgenstrona.check_url(false, true)', 1000);
    } else {
      this.check_url(true, true);
    }
  },
 
 gotourl : function(adres) {
    if (Browser.Engine.trident) {
      $('ramka').src = './adres.php?a=' + adres;
    }
    document.location.hash = '#' + adres;
    return false;
  },
 
 current_url :'',
 
 get_hash_url : function() {
    return document.location.hash.substr('1')
  },
 
 set_hash_url : function(adres) {
    document.location.hash = '#' + adres
  },
 get_frame_url : function() {
    return document.frames['ramka'].location.href.split('adres.php?a=')[1]
  },
 set_frame_url : function(adres) {
    $('ramka').src = './adres.php?a=' + adres
  },
 
 current_url :'polenik',
 
 counter : 1,
 
 check_url : function(method, rec) {
    this.counter = this.counter +1;
    if (method) {
      test = this.get_hash_url();
    } else {
      test = this.get_frame_url();
    }
    if (test != this.current_url) {
      this.current_url = test;
      this.load_url(test);
    }
    
    if (rec) {
      setTimeout('polgenstrona.check_url(' + method + ', true)', 300);
    }
  },
 
 load_url : function(adres) {
    
    if (Browser.Engine.trident){
      if(this.get_hash_url() != this.current_url) {
	this.set_hash_url(this.current_url);
      } else if(this.get_frame_url()!=this.current_url) {
	this.set_frame_url(this.current_url);
      }
    }
    
    var t = adres.split('/');
    var zasob = t.slice(1).join('/');
    var typ = t[0];

    
    switch (typ) {
    case 'kategorie':
      kategorie_manager.parse_url(zasob);
      break;
      
    case 'strona':
      strona_manager.parse_url(zasob);
      break;
      
    case 'szukaj':
      szukaj_manager.parse_url(zasob);
      break;
      
    default :
      kategorie_manager.mini();
      break;
    
    }
  },
 
 create_url : function(rel) {
    t = rel.split('/');
    var typ = t[0];
    var zasob = t.slice(1).join('/');
    
    switch (typ) {
    case 'kategoria':
      return kategorie_manager.open_kategoria(zasob);
      break;

    case 'strona':
      return rel;
      break;

    case 'szukaj':
      return rel;
      break;
      
    default:
      return false;
      break;
    }
  },
 
 nothing :''
 
}

function setup_search_form() {
    $('search_form').addEvent('submit', function(){
	    url = 'strona/szukaj:'+$('search_kod').get('value')
	    prod = $('search_producent').get('value');
	    if(prod.length > 0){
		url += ':' + prod;
	    }
	    
	    polgenstrona.gotourl(url);
	    return false;
	});
}

window.addEvent('domready', function(){
	kategorie_manager.setup();
	polgenstrona.setup();
	szukaj_manager.setup();
	//	Shadowbox.loadLanguage('pl', '/shadowbox/lang/');
	Shadowbox.init({
		skipSetup: true // skip the automatic setup
	});
});


function pelny_opis(){
    $('opis_produktu').addClass('opisowefull');
}

function szukaj_producenta(producent){
    $('search_kod').set('value', '');
    $('search_producent').set('value', producent);
    szukaj_manager.szukaj();
    return false;
}
