/**
 * project: biopastabonetti
 * author: Chakrit Bhamornsiri
 * file: scripts/scripts.js
 * creation date: 31.08.2009
 * last update: 09.01.2012
 */

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 formDefaultValues(f) {
    var defaultValues = new Array();
    f.select('input[title]').each( function (s) {
        $(s).setStyle({ color: '#999' });
        $(s).observe( 'focus', function () {
            if (!defaultValues[s.id]) {
                defaultValues[s.id] = s.readAttribute('title');
            }
            if (s.value == defaultValues[s.id]) {
                s.value = '';
                $(s).setStyle({ color: '#000' });
            }
            $(s).observe( 'blur', function () {
                if (s.value == '') {
                    $(s).setStyle({ color: '#999' });
                    s.value = defaultValues[s.id];
                }
            });
        });
    });
}

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

	for(var i = e.length - 1; i >= 0; i--) {
		if(!e[i].disabled
			&& e[i].hasClassName('required')
			&& (
				((e[i].type == 'text' || e[i].type == 'textarea') && (e[i].value.strip().empty() || e[i].value.strip() == e[i].readAttribute('title')))
				|| (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;
}

function ajaxSubmitForm(f) {
	var queryString = f.readAttribute('action').split('?').pop();

	new Ajax.Request('ajax.php', {
		method : f.readAttribute('method'),
		parameters : new Hash(f.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
					});
				}
			});
		}
	});
}

/**
 *  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).focus();
						$(f_stadt).value = plz_info[0];
					}
				}
				if(f_kanton) {
					if($(f_kanton)) {
						$(f_kanton).focus();
						$(f_kanton).value = plz_info[1];
					}
				}
				if(f_land && f_land_option) {
					if($(f_land)) {
						$(f_land).focus();
						$(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))
				ajaxSubmitForm(form);
		});
	}

	$$('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() {
	var divs = new Array();
	if($('shop_account_logindata')) {
		divs.push('shop_account_logindata');
	}
	if($('shop_account_address')) {
		divs.push('shop_account_address');
	}

	divs.each(function(el) {
		el = $(el);
		if(el.down('a')) {
			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($('shop_account').down('form')) {
							$('shop_account').down('form').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) {
											form.remove();
											el.down('p').replace(request.responseText);
										}
									});
								}
							});
							form.observe('reset', function() {
								form.remove();
							});
						}
					}
				});
			});
		}
	});
	if( el = $('shop_account_ship_addresses')) {
		// add new shipping 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($('shop_account').down('form')) {
						$('shop_account').down('form').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) {
										form.replace(request.responseText);
									}
								});
							}
						});
						form.observe('reset', function() {
							form.remove();
						});
					}
				}
			});
		});

		el.select('p').each(function(p) {
			// edit shipping 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($('shop_account').down('form')) {
							$('shop_account').down('form').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) {
											form.remove();
											p.replace(request.responseText);
										}
									});
								}
							});
							form.observe('reset', function() {
								form.remove();
							});
						}
					}
				});
			});
			// delete shipping address
			var link_del = p.down('a', 1);
			link_del.stopObserving('click');
			link_del.observe('click', function(event) {
				event.stop();

				if(confirm('Adresse l' + unescape("%F6") + 'schen?')) {
					new Ajax.Request('ajax.php', {
						method : 'post',
						parameters : {
							query_string : link_del.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( form = $('form_shop_checkout')) {
		formDefaultValues(form);
		
		$$('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);
			});
		});
		
		if(div = $('shop_checkout_ship')) {
			if(sAsC = $('s_as_c')) {
				var ipts = div.select('input[type=text], select');
				if(sAsC.checked)
					ipts.each(function(ipt) {
						ipt.disabled = true;
					});
				sAsC.observe('change', function() {
					if(sAsC.checked) {
						ipts.each(function(ipt) {
							ipt.disabled = true;
						});
					}
					else {
						ipts.each(function(ipt) {
							ipt.disabled = false;
						});
						ipts[0].focus();
					}
				});
			}
		}
		
		form.down('input[type=submit]').stopObserving('click');
		
		form.observe('submit', function(event) {
			event.stop();
			if(checkForm(form)) {
				ajaxSubmitForm(form);
			}
		});
	}

	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
 */
