var searchTimer		= 0;
var oldsearch		= "";
var page		= "";
var uploadInterval	= 0;


// shows element
function Show ( id ) {
	var e = document.getElementById(id);
	if ( e ) {
		e.style.display = "block";
	}
	return true;
}

// hides element
function Hide ( id ) {
	var e = document.getElementById(id);
	if ( e ) {
		e.style.display = "none";
	}
	return true;
}


// finds buttons and adds different images for hover and click events
// needs to be called onload
function Buttons() {
	var x = document.getElementsByTagName("img");
	for ( var i=0; i<x.length; i++ ) {
		if (x[i].className != "button") { continue; }
		x[i].onmouseover = function(){ this.src = SwitchButton("hover", this.src); };
		x[i].onmouseout = function(){ this.src = SwitchButton("", this.src); };
		x[i].onmousedown = function(){ this.src = SwitchButton("active", this.src); };
	}
}

// generate new src for button state
function SwitchButton(mode, src) {
	var button = src;
	var path = button.replace(/(_hover|_active)?\.([a-zA-Z]{3})$/i, "");
	var ext  = button.replace(/.*\.([a-zA-Z]{3})$/i, ".$1");

	if ( mode != "" ) { mode = "_" + mode; }
	return path+mode+ext;
}


// // changes the class of an element
// function ChangeClass(id, new_class) {
// 	document.getElementById(id).className = new_class;
// }


// selects everything in an input
function Focus(id) {
	if ( document.getElementById(id).value == "cm" ) {
		document.getElementById(id).value = "";
	}
}


// change location to given destination
function Go( dest ) {
	window.location = dest;
}


// send search request to server and refresh cooliris
function Search( mod, searchtext ) {
	if ( typeof searchtext == "undefined" ) {
		searchtext = document.getElementById("searchtext").value;
	}

	if ( mod == "preview" ) {
		// split searchpattern in single words
		var words = searchtext.split(" ");
		var last = words.length - 1;

		// only use last word save the rest
		oldsearch = "";
		for ( i=0; i<last; i++ ) { oldsearch += words[i] + " "; }
		searchtext = words[last];

		if ( searchtext.length < 3  ) { return false; }

		advAJAX.get({
			url: "index.php",
			parameters: {
				"do" : "ajax_search",
				"mod" : "preview",
				"search" : escape(searchtext)
			},
			onSuccess: function(obj) { SearchPreview(obj); },
			onError: function(obj) { alert("Error: " + obj.status); }
		});
	} else if ( mod == "search" ) {
		SearchHideTT();

		advAJAX.get({
			url: "index.php",
			parameters: {
				"do" : "ajax_search",
				"mod" : "search",
				"search" : escape(searchtext)
			},
			onSuccess: function(obj) {
				var json = eval("("+obj.responseText+")");
				if ( json.success ) {
					if ( page != "gallery" ) {
						// load gallery
						Go("index.php?do=gallery&search=" + escape(json.searchtext));
					} else {
						// refresh cooliris
						RefreshCooliris(escape(root+"index.php?do=cooliris&search="+json.searchtext));
					}
				} else {
					alert(json.msg);
				}
			},
			onError: function(obj) { alert("Error: " + obj.status); }
		});
	}

	return false;
}


// starts timer for suggestions
function SearchTimer() {
	if ( searchTimer ) { window.clearTimeout(searchTimer); }
	searchTimer = window.setTimeout("Search(\"preview\")", 500);
}


// create and show tooltip with search preview
function SearchPreview ( obj ) {
	var json	= eval("("+obj.responseText+")");
	var html	= "";
	var section	= false;
	var tooltip	= document.getElementById("search_tt");

	tooltip.style.visibility = "visible";

	
	for ( var s=0; s<json.sections.length; s++ ) {
		section = false;
		for ( var r=0; r<json.sections[s].length; r++ ) {
			if ( ! section ) { html += "<li class='section'>" + json.names[s] + "</li>"; section = true; }
			html += "<li nowrap='nowrap'><a href='#' onclick='SearchInsert(\"" + json.sections[s][r] + "\");'>" + json.sections[s][r] + "</a></li>";
		}
	}

	tooltip.innerHTML = "<ul id='searchresults'>" + html + "</ul>";
}


// send search request to server and refresh cooliris
function SearchInsert( newword ) {
	document.getElementById("searchtext").value = oldsearch + newword;
}


// hide search preview tooltip
function SearchHideTT () {
	var tooltip = document.getElementById("search_tt");
	if ( tooltip ) { tooltip.style.visibility = "hidden"; }
}


// calculate width/height with aspect ratio
function CalculateRatio( mode ) {
	var ratio = document.getElementById("ratio").value;
	var width = document.getElementById("width");
	var height = document.getElementById("height");

	if ( mode == "height" ) {
		if ( height.value == "cm" ) { return false; }
		height.value = height.value.replace(/\D/g, "");
		width.value = Math.round( ratio * height.value );
		document.getElementById("inserted").value = "height";
	} else {
		if ( width.value == "cm" ) { return false; }
		width.value = width.value.replace(/\D/g, "");
		height.value = Math.round( width.value / ratio );
		document.getElementById("inserted").value = "width";
	}

	var mat = document.getElementById("material").value;
	if ( mat != "" ) {
		var max = document.getElementById("max_"+mat).value;
		if ( ratio > 1  &&  parseInt(height.value) > max ) {
			height.value = max;
			CalculateRatio( "height" );
		} else if ( ratio <= 1  &&  parseInt(width.value) > max ) {
			width.value = max;
			CalculateRatio( "width" );
		}
	}

	CalculatePrice();
}


// change material selection
function ChangeMaterial( id, newmaterial, choosetype ) {
	var a = document.getElementsByTagName("a");

	document.getElementById("type1").style.display = "none";
	document.getElementById("type2").style.display = "none";
	document.getElementById("type3").style.display = "none";

	if ( typeof choosetype != "undefined" ) {
		document.getElementById(choosetype).style.display = "block";
	}

	for ( var i=0; i<a.length; i++ ) {
		if ( a[i].className == "active" ) { a[i].className = "inactive"; }
	}
	
	document.getElementById(id).className = "active";
	document.getElementById("material").value = newmaterial;

	// reset all checkboxes
	document.getElementById("small").src = "/images/checkbox_empty.gif";
	document.getElementById("medium").src = "/images/checkbox_empty.gif";
	document.getElementById("large").src = "/images/checkbox_empty.gif";
	document.getElementById("chrom").src = "/images/checkbox_empty.gif";
	document.getElementById("silver").src = "/images/checkbox_empty.gif";
	document.getElementById("gold").src = "/images/checkbox_empty.gif";
	document.getElementById("without").src = "/images/checkbox_set.gif";
	document.getElementById("alu_dibond").src = "/images/checkbox_empty.gif";

	document.getElementById("option1").value = "without";
	document.getElementById("option2").value = "without";

	CalculateRatio();
	CalculatePrice();
}


// change additional options
function ChangeOptions( group, id ) {
	var option1 = document.getElementById("option1");

	// reset boxes
	document.getElementById("without").src = "/images/checkbox_empty.gif";
	if ( group == "group1"  ||  group == "all" ) {
		document.getElementById("small").src = "/images/checkbox_empty.gif";
		document.getElementById("medium").src = "/images/checkbox_empty.gif";
		document.getElementById("large").src = "/images/checkbox_empty.gif";
		option1.value = id;
	}
	if ( group == "group2"  ||  group == "all" ) {
		document.getElementById("chrom").src = "/images/checkbox_empty.gif";
		document.getElementById("silver").src = "/images/checkbox_empty.gif";
		document.getElementById("gold").src = "/images/checkbox_empty.gif";
		document.getElementById("option2").value = id;
	}

	if ( group == "group3" ) {
		if ( option1.value == "alu_dibond" ) {
			document.getElementById("alu_dibond").src = "/images/checkbox_empty.gif";
			option1.value = "without";
		} else {
			document.getElementById(id).src = "/images/checkbox_set.gif";
			option1.value = id;
		}
	} else {
		document.getElementById(id).src = "/images/checkbox_set.gif";
	}

	CalculatePrice();
}


// calculate price
function CalculatePrice() {
	var width = document.getElementById("width").value;
	var material = document.getElementById("material").value;
	var price = document.getElementById("price");

	if ( material == ""  &&   (width == 0  ||  width == "cm") ) {
		price.innerHTML = chooseboth;
		return false;
	} else if ( material == "" ) {
		price.innerHTML = choosemat;
		return false;
	} else if ( width == 0  ||  width == "cm" ) {
		price.innerHTML = choosesize;
		return false;
	}

	document.getElementById("ok").value = "yes";

	document.getElementById("price").innerHTML = "<img src='/images/loading.gif' style='width:20px;' />";

	advAJAX.get({
		url: "index.php",
		parameters: {
			"do" : "ajax_price",
			"type" : document.getElementById("type").value,
			"width" : width,
			"height" : document.getElementById("height").value,
			"material" : material,
			"option1" : document.getElementById("option1").value,
			"option2" : document.getElementById("option2").value
		},
		onSuccess: function(obj) {
				document.getElementById("price").innerHTML = obj.responseText;
			},
		onError: function(obj) { alert("Error: " + obj.status); }
	});
}


// check configuration before sending
function CheckConfigForm() {
	var mat = document.getElementById("material").value;
	// check size of picture surface for acryl and alu
	if ( mat.search(/alu_/) != -1  ||  mat.search(/acryl_/) != -1 ) {
		if ( parseInt(document.getElementById("width").value) * parseInt(document.getElementById("height").value) < 3500 ) {
			document.getElementById("area_error").style.display = "block";
			return false;
		}
	}
	if ( document.getElementById("ok").value == "yes" ) { document.getElementById("buyform").submit(); return true; }
	return false;
}


// check rights before uploading a picture
function CheckUpload() {
	if ( ! document.getElementById("certify").checked ) {
		document.getElementById("certify_text").style.color = "#ff0000";
		return false;
	}

	return true;
}


// displays or hides input for delivery address
function BuyDelivery() {
	var e = document.getElementById("delivery");
	var b = document.getElementById("diff_delivery");
	var d = document.getElementById("diff");
	if ( e.style.display != "block" ) {
		e.style.display = "block";
		b.src = "/images/checkbox_set.gif";
		d.value = "yes";
	} else {
		e.style.display = "none";
		b.src = "/images/checkbox_empty.gif";
		d.value = "no";
	}
	return true;
}


// refresh shopping cart
function RefreshCart( mod, id ) {
	Show("loading");

	advAJAX.get({
		url: "index.php",
		parameters: {
			"do" : "ajax_cart",
			"mod" : mod,
			"id" : id,
			"qty" : document.getElementById("qty"+id).value
		},
		onSuccess: function(obj) {
				var list = document.getElementById("list");
				var html_before = "";
				var html_after = "";

				var trs = list.getElementsByTagName("tr");
				for ( var i=0; i<trs.length; i++ ) {
					if ( trs[i].className == "keep_before" ) {
						html_before += "<tr class='keep_before'>" + trs[i].innerHTML + "</tr>";
					} else if ( trs[i].className == "keep_after" ) {
						html_after += "<tr class='keep_after'>" + trs[i].innerHTML + "</tr>";
					}
				}

				list.innerHTML = html_before + obj.responseText + html_after;
				Hide("loading");
			},
		onError: function(obj) { alert("Error: " + obj.status); }
	});
}


// check cart form
function CheckCart() {
	document.getElementById("cartform").submit();
	return true;
}


// update phone prefix
function UpdatePhone( pre ) {
	var country = document.getElementById(pre+"country").value;
	if ( country == "" ) { return; }

	advAJAX.get({
		url: "index.php",
		parameters: {
			"do" : "ajax_phone",
			"pre" : pre,
			"country" : country
		},
		onSuccess: function(obj) {
				var json = eval("("+obj.responseText+")");
				document.getElementById(json.pre+"prefix").value = json.prefix;
			},
		onError: function(obj) { alert("Error: " + obj.status); }
	});	
}


// set up timer to refresh uploadbar
function UploadSetInterval()
{
	document.getElementById("progress").style.display = "block";
	uploadInterval = window.setInterval("UploadUpdate()", 1000);
}


// update mb counter
function UploadUpdate()
{
	advAJAX.get({
		url: "index.php",
		parameters: {
			"do" : "ajax_upload"
		},
		onSuccess: function(obj) {
				document.getElementById("megabyte").innerHTML = obj.responseText;
			},
		onError: function(obj) { alert("Error: " + obj.status); }
	});
}


// turns the timer off if there is an error or a user-abort action
window.onAbort = clearInterval(uploadInterval);
window.onError = clearInterval(uploadInterval);


// change sticker options
function StickerOptions( group, id ) {
	if ( group == "group1" ) {
		document.getElementById("picture").src = "/images/checkbox_empty.gif";
		document.getElementById("mirrored").src = "/images/checkbox_empty.gif";
		document.getElementById(id).src = "/images/checkbox_set.gif";
		document.getElementById("option1").value = id;
	} else if ( group == "group2" ) {
		document.getElementById("matte").src = "/images/checkbox_empty.gif";
		document.getElementById("bright").src = "/images/checkbox_empty.gif";
		document.getElementById(id).src = "/images/checkbox_set.gif";
		document.getElementById("option2").value = id;
	}
}


// change quantity
function StickerQty( mode ) {
	var domqty = document.getElementById("qty");
	var qty = parseInt(domqty.value);

	if ( mode == "add" ) {
		qty = qty + 1;
	} else {
		var i = qty - 1;
		qty = ( i < 1  ?  1  :  i );
	}
	domqty.value = qty;
	document.getElementById("qtytext").innerHTML = qty;

	StickerPrice();
}


// change background-color in sticker simulator
function StickerColor( rgb ) {
	document.getElementById("simsticker").style.backgroundColor = rgb;
	document.getElementById("color").value = rgb;
}


// change size of sticker
function StickerSize( id ) {
	// change size
	document.getElementById("size").value = id;
	document.getElementById("visiblesize").innerHTML = document.getElementById("size"+id).innerHTML;

	document.getElementById("ok").value = "yes";

	Hide("sizesdropdown");
	StickerPrice();
}


// change background of sticker
function StickerBackground( bg ) {
	var sticker = document.getElementById("simsticker");
	if ( bg == "light" ) {
		sticker.src = sticker.alt + "_light.gif";
	} else {
		sticker.src = sticker.alt + "_dark.gif";
	}

	document.getElementById("visiblebg").innerHTML = bg;

	Hide("backgrounddropdown");
}


// get price from server
function StickerPrice() {
	var sizeid = document.getElementById("size").value;
	if ( sizeid == "none" ) { return; }

	document.getElementById("price").innerHTML = "<img src='/images/loading.gif' style='width:20px;' />";

	advAJAX.get({
		url: "index.php",
		parameters: {
			"do" : "ajax_sticker_price",
			"id" : document.getElementById("pic").value,
			"size" : sizeid,
			"qty" : document.getElementById("qty").value
		},
		onSuccess: function(obj) {
				document.getElementById("price").innerHTML = obj.responseText;
			},
		onError: function(obj) { alert("Error: " + obj.status); }
	});

}


// check sticker form and send it
function StickerCheckForm() {
	if ( document.getElementById("ok").value == "yes" ) { document.getElementById("stickerform").submit(); return true; }
	return false;
}


// change checkbox
function RegisterTerms() {
	if ( document.getElementById("terms").value == "yes" ) {
		document.getElementById("checkterms").src = "/images/checkbox_empty.gif";
		document.getElementById("terms").value = "no";
	} else {
		document.getElementById("checkterms").src = "/images/checkbox_set.gif";
		document.getElementById("terms").value = "yes";
	}
}


// remove nondigits from invoking input
function AllowDigits( id ) {
	var val = document.getElementById(id).value;
	val = val.replace(/\D/g, "");
	document.getElementById(id).value = val;
}


// keep it the last function
function Init() {
 	Buttons();
}
