/**
 * project: biopastabonetti
 * author: Chakrit Bhamornsiri
 * file: scripts/scripts.js
 * creation date: 31.08.2009
 * last update: 04.07.2010
 */
 
Array.prototype.contains = function(obj)
{
	var i, listed = false;
	for(i = 0; i < this.length; i++)
	{
		if(this[i] === obj)
		{
			listed = true;
			break;
		}
	}
	return listed;
};

function checkForm(f)
{
	var submitOK = true;
	var e = $(f).getElements();

	for(var i = e.length-1; i >= 0; i--) {
		if(e[i].hasClassName('required') && (((e[i].type == 'text' || e[i].type == 'textarea') && e[i].value.strip().empty()) || (e[i].type == 'select-one' && e[i].options.selectedIndex == 0 && e[i].options[0].value == 0))) {
			submitOK = false;
			$(e[i]).setStyle({
        backgroundColor: '#FFBFBF'
      });
			$(e[i]).focus();
		}
		else {
			$(e[i]).setStyle({
        backgroundColor: ''
      });
    }
	}
  
  if(!submitOK) {
    alert('Die rot hinterlegten Felder m' + unescape('%FC') + 'ssen angegeben werden');
  }
    
	return submitOK;
}

/**
 *  AJAX IFRAME METHOD (AIM)
 *  http://www.webtoolkit.info/
 */
AIM = {
	frame : function(c) {
		var n = 'f' + Math.floor(Math.random() * 99999);
		var d = document.createElement('DIV');
		d.innerHTML = '<iframe style="display:none" src="about:blank" id="' + n + '" name="' + n + '" onload="AIM.loaded(\'' + n + '\')"></iframe>';
		document.body.appendChild(d);
 
		var i = document.getElementById(n);
		if (c && typeof(c.onComplete) == 'function') {
			i.onComplete = c.onComplete;
		}
 
		return n;
	},
 
	form : function(f, name) {
		f.setAttribute('target', name);
	},
 
	submit : function(fid, c) {
		var f = document.getElementById(fid);
		AIM.form(f, AIM.frame(c));
		if (c && typeof(c.onStart) == 'function') {
			return c.onStart();
		} else {
			f.submit();
		}
	},
 
	loaded : function(id) {
		var i = document.getElementById(id);
		if (i.contentDocument) {
			var d = i.contentDocument;
		} else if (i.contentWindow) {
			var d = i.contentWindow.document;
		} else {
			var d = window.frames[id].document;
		}
		if (d.location.href == "about:blank") {
			return;
		}
 
		if (typeof(i.onComplete) == 'function') {
			i.onComplete(d.body.innerHTML);
		}
	}
}

function sendForm(form, args) {
	if(args && (!args.imageUpload || args.imageUpload == 0)) {
		$(form).request({
			onComplete: function(){
				form.remove();
			}
		});
	}
	else {
		AIM.submit(form)
	}
  return false;
}

function plz_ch(f_plz, f_stadt, f_kanton, f_land, f_land_option) {
  new Ajax.Request('ajax.php', {
    method: 'post',
    parameters: {
      plz_ch: $(f_plz).value
    },
    onSuccess: function(request) {
      if(request.responseText.indexOf(',') > 0) {
        plz_info = request.responseText.split(',');
        if(f_stadt) {
          if($(f_stadt)) {
            $(f_stadt).value = plz_info[0];
          }
        }
        if(f_kanton) {
          if($(f_kanton)) {
            $(f_kanton).value = plz_info[1];
          }
        }
        if(f_land && f_land_option) {
          if($(f_land)) {
            $(f_land).selectedIndex = f_land_option;
          }
        }
      }
    }
  });
}

function shop_register() {
  if(form = $('shop_register').down('form')) {
    form.down('input[type=submit]').stopObserving('click');
    form.observe('submit', function(event) {
      event.stop();
      
      if(checkForm(form)) {
        var queryString = form.readAttribute('action').split('?').pop();
        
        new Ajax.Request('ajax.php', {
          method: form.readAttribute('method'),
          parameters: new Hash(form.serialize(true)).merge({query_string: queryString}),
          onSuccess: function(request) {
            dhtmlHistory.add(queryString, 'link');
            new Effect.Fade('content_wrapper', {
              duration: 0.5,
              afterFinish: function() {
                $('content_wrapper').update(request.responseText);
                ajaxLinks();
                $('content_wrapper').appear({ duration: 0.5 });
              }
            });
          }
        });
      }
    });
  }
  
  $$('input.zip').each(function(input) {
    var x = '';
    if(p = input.identify().lastIndexOf('_')) {
      x = input.identify().substr(0, p+1);
    }
    input.observe('blur', function(event) {
      plz_ch(input, $(x + 'city'), $(x + 'state'), $(x + 'country'), 1);
    });
  });
}

function shop_account() {
  if(el = $('shop_account_ship_addresses')) {
    // add new address
    var link = el.down('a');
    link.stopObserving('click');
    link.observe('click', function(event) {
      event.stop();
      
      new Ajax.Request('ajax.php', {
        method: 'post',
        parameters: { query_string: link.readAttribute('href').split('?').pop() },
        onSuccess: function(request) {
          if(el.down('div')) {
            el.down('div').remove();
          }
          el.down('h3').insert({ after: request.responseText });
          el.down('h3').scrollTo();
          
          if(form = el.down('form')) {
            form.observe('submit', function(event) {
              event.stop();
              if(checkForm(form)) {
                new Ajax.Request('ajax.php', {
                  method: form.readAttribute('method'),
                  parameters: new Hash(form.serialize(true)).merge({ query_string: form.readAttribute('action').split('?').pop() }),
                  onSuccess: function(request) {
                    el.down('div').replace(request.responseText);
                  }
                });
              }
            });
          }
        }
      });
    });
  
    el.select('p').each(function(p) {
      // edit address
      var link = p.down('a');
      link.stopObserving('click');
      link.observe('click', function(event) {
        event.stop();
        
        new Ajax.Request('ajax.php', {
          method: 'post',
          parameters: { query_string: link.readAttribute('href').split('?').pop() },
          onSuccess: function(request) {
            if(el.down('div')) {
              el.down('div').remove();
            }
            el.down('h3').insert({ after: request.responseText });
            el.down('h3').scrollTo();
            
            if(form = el.down('form')) {
              form.observe('submit', function(event) {
                event.stop();
                if(checkForm(form)) {
                  new Ajax.Request('ajax.php', {
                    method: form.readAttribute('method'),
                    parameters: new Hash(form.serialize(true)).merge({ query_string: form.readAttribute('action').split('?').pop() }),
                    onSuccess: function(request) {
                      el.down('div').remove();
                      p.replace(request.responseText);
                    }
                  });
                }
              });
            }
          }
        });
      });
      
      // delete address
      var link2 = p.down('a', 1);
      link2.stopObserving('click');
      link2.observe('click', function(event) {
        event.stop();
        
        if(confirm('Adresse l'+unescape("%F6")+'schen?')) {
          new Ajax.Request('ajax.php', {
            method: 'post',
            parameters: { query_string: link2.readAttribute('href').split('?').pop() },
            onSuccess: function(request) {
              p.remove();
            }
          });
        }
      });
    });
  }
}

function shop_checkout() {
  if(div = $('shop_checkout_ship')) {
    if(el = $('ship_address')) {
      el.observe('change', function() {
        if(el.selectedIndex == 0) {
          load('site=onlineshop&show=account');
        }
        else {
          new Ajax.Request('ajax.php', {
            method: 'post',
            parameters: {
              shop_ship_address: el.options[el.selectedIndex].value
            },
            onSuccess: function(request) {
              if(p = div.down('p')) {
                p.remove();
              }
              div.insert({ bottom: request.responseText });
            }
          });
        }
      });
    }
  }
  
  
  if(bt = $('shop_submit')) {
    bt.disable();
  
    if(cb = $('agb_check')) {
     cb.observe('click', function() {
        if(cb.checked) {
          bt.enable();
        }
        else {
          bt.disable();
        }
      });
    }
  }
}

function load(queryString) {
  var el = false;
  
  var s = queryString.match(/site=(\w+)&*/);
  if(s) {
    new Ajax.Request('ajax.php', {
      method: 'post',
      parameters: {
        sitelink: s[1]
      },
      onSuccess: function(request) {
        if(request.responseText && request.responseText != 0) {
          $('navigation_top').select('a.selected').each(function(el) {
            el.removeClassName('selected');
          });
          el = $('nav_'+request.responseText);
          el.addClassName('selected');
          if(!el.hasClassName('lvl1')) {
            el.up('li.top').down('a').addClassName('selected');
          }
        }
      }
    });
  }
  
  s = queryString.match(/show=(\w+)&*/);
  if(s) {
    el = false;
    if(el = $('nav_'+s[1])) {
      $('navigation_top').select('div a.selected').each(function(ele) {
        ele.removeClassName('selected');
      });
      el.addClassName('selected');
    }
  }
        
  new Ajax.Request('ajax.php', {
    method: 'post',
    parameters: {
      query_string: queryString
    },
    onSuccess: function(request) {
      new Effect.Fade('content_wrapper', {
        duration: 0.5,
        afterFinish: function() {
          $('content_wrapper').update(request.responseText);
          ajaxLinks();
          new Effect.Appear('content_wrapper', {
            duration: 0.5,
            afterFinish: function() {
              el = false;
              if(el = $('content_wrapper').down('input[type=text]')) {
                el.focus();
              }
            }
          });
        }
      });
    }
  });
  
  dhtmlHistory.add(queryString);
}

function navigation_update_shop() {
  if(el = $('navigation_update_shop')) {
    if(el.hasClassName('login')) {
      $('navigation_top').select('li.loggedin').each(function(e) {
        e.setStyle({ display: 'block' });
      });
      $('navigation_top').select('li.loggedout').each(function(e) {
        e.setStyle({ display: 'none' });
      });
    }
    else if(el.hasClassName('logout')) {
      $('navigation_top').select('li.loggedin').each(function(e) {
        e.setStyle({ display: 'none' });
      });
      $('navigation_top').select('li.loggedout').each(function(e) {
        e.setStyle({ display: 'block' });
      });
    }
  }
}

function navigationLinks() {
  $('navigation_top').select('a').each(function(link) {
    link.observe('click', function(event) {
      var href = event.element().readAttribute('href');
      if(href.substr(0,7) == 'http://') {
        return;
      }
      else {
        queryString = href.split('?').pop()
      }
      
      event.stop();
      
      load(queryString);
    });
  });
}

function ajaxLinks(scope) {
  if(!scope) {
    var links = $('content_wrapper').select('a');
  }
  else {
    var links = scope.select('a');
  }
  
  links.each(function(link) {
    var href = link.readAttribute('href');
    if(href.substr(0,7) == 'http://') {
      return;
    }
    else {
      var queryString = href.split('?').pop();
    }
    
    link.observe('click', function(event) {
      event.stop();
      
      if(link.up('#shop_categories')) {
        new Ajax.Request('ajax.php', {
          method: 'post',
          parameters: {
            query_string: queryString,
            subonly: 'shop_items'
          },
          onSuccess: function(request) {
            dhtmlHistory.add(queryString, 'link');
            $('shop_categories').down('li.selected').removeClassName('selected');
            link.up('li').addClassName('selected');
            new Effect.Fade('shop_items', {
              duration: 0.5,
              afterFinish: function() {
                $('shop_items').update(request.responseText);
                ajaxLinks($('shop_items'));
                new Effect.Appear('shop_items', {
                  duration: 0.5,
                  afterFinish: function() {
                    var el = false;
                    if(el = $('content_wrapper').down('input[type=text]')) {
                      el.focus();
                    }
                  }
                });
              }
            });
          }
        });
      }
      else if(link.up('#recipes')) {
        new Ajax.Request('ajax.php', {
          method: 'post',
          parameters: {
            query_string: queryString,
            subonly: 'recipe'
          },
          onSuccess: function(request) {
            dhtmlHistory.add(queryString, 'link');
            $('recipes').down('li.selected').removeClassName('selected');
            link.up('li').addClassName('selected');
            new Effect.Fade('recipe', {
              duration: 0.5,
              afterFinish: function() {
                $('recipe').update(request.responseText);
                ajaxLinks($('recipe'));
                new Effect.Appear('recipe', {
                  duration: 0.5,
                  afterFinish: function() {
                    var el = false;
                    if(el = $('content_wrapper').down('input[type=text]')) {
                      el.focus();
                    }
                  }
                });
              }
            });
          }
        });
      }
      else {
        load(queryString);
      }
    });
  });
  
  if(!scope) {
    var buttons = $('content_wrapper').select('input[type="submit"]');
  }
  else {
    var buttons = scope.select('input[type="submit"]');
  }
  
  buttons.each(function(button) {
    button.observe('click', function(event) {
      event.stop();
      
      var form = event.element().up('form');
      var queryString = form.readAttribute('action').split('?').pop();
      
      new Ajax.Request('ajax.php', {
        method: form.readAttribute('method'),
        parameters: new Hash(form.serialize(true, event.element().identify())).merge({query_string: queryString}),
        onSuccess: function(request) {
          dhtmlHistory.add(queryString, 'link');
          new Effect.Fade('content_wrapper', {
            duration: 0.5,
            afterFinish: function() {
              $('content_wrapper').update(request.responseText);
              ajaxLinks();
              new Effect.Appear('content_wrapper', {
                duration: 0.5,
                afterFinish: function() {
                  var el = false;
                  if(el = $('content_wrapper').down('input[type=text]')) {
                    el.focus();
                  }
                }
              });
            }
          });
        }
      });
    });
  });
  
  if($('shop_register')) {
    shop_register();
  }
  
  if($('shop_account')) {
    shop_account();
  }

  if($('shop_checkout_cart')) {
    shop_checkout();
  }
  
  if($('navigation_update_shop')) {
    navigation_update_shop();
  }
}

document.observe('dom:loaded', function() {
  navigationLinks();
  ajaxLinks();
});

Event.observe(window, 'load', function() {
  dhtmlHistory.initialize();
  dhtmlHistory.addListener(load);
  
  var queryString = document.location.toString().split('#');
  if(queryString.length > 1) {
    load(queryString[1]);
  }
});

/**
 * EoF
 */
 