
function $(id){
	if (typeof id === "string") {
		id = document.getElementById(id);
	}
	return id;
}

function ExtractNumber(value) { 
	var n = parseInt(value); 
	return n == null || isNaN(n) ? 0 : n;
} 


function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}
function ltrim(stringToTrim) {
	return stringToTrim.replace(/^\s+/,"");
}
function rtrim(stringToTrim) {
	return stringToTrim.replace(/\s+$/,"");
}

function addEvent(obj, evType, fn) {
	if (obj.addEventListener) {
		obj.addEventListener(evType, fn, false);
		return true;
	} else if (obj.attachEvent) {
		var r = obj.attachEvent("on"+evType, fn);
		return r;
	} else {
		obj["on"+evType]=fn;
		return true;
	}
}

function removeEvent(obj, evType, fn) {
	if (obj.removeEventListener) {
		obj.removeEventListener(evType, fn, false);
		return true;
	} else if (obj.detachEvent) {
		var r = obj.detachEvent("on"+evType, fn);
		return r;
	} else {
		obj["on"+evType]=null;
		return true;
	}
}

function validateProductToBasketForm(FormName,LangISO,LimitedQuantity) {
	// Geht von folgendem Formularaufbau aus:
    // Feld[0] = Menge
	// Feld[1] = Submit
	// Feld[2] = hidden ProductStock maxquan
	// Feld[3] = hidden ProductIdentifier
   if (!document.forms[FormName].elements[0].value) return false;
   var quanText = document.forms[FormName].elements[0].value;
   var maxqText = document.forms[FormName].elements[2].value;
   if (!quanText) { return false;}
   if (quanText=="") { return false;}
   if (quanText.match(/^[0-9]{1,3}$/)) {
	  var quanInt = parseInt(quanText);
	  var maxqInt = parseInt(maxqText);
	  if (quanInt > maxqInt) {
	    var ok=false;
		if (LimitedQuantity) {
		   if (LangISO=="DE") {
	          ok=alert('Ihre gewünschte Menge von diesem Artikel ist leider nicht verfügbar.');
		   } else {
	          ok=alert('Sorry, your requested quantity of this product is not available.');
		   }
           document.forms[FormName].elements[0].value='';
		   return false;
		}
		if (LangISO=="DE") {
	       ok=confirm('Ihre gewünschte Menge ist derzeit nicht auf Lager.\nDie Lieferzeit für Ihre Bestellung könnte sich dadurch verlängern.\nTrotzdem fortfahren?');
		} else {
	       ok=confirm('Your requested quantity is currently not in stock.\nDelivery time for your order might therefore become delayed.\nContinue?');
		}
		if (ok==true) {return true;} else {
            document.forms[FormName].elements[0].value='';
			return false;
		}		
	  } else return true;
   } else {
      document.forms[FormName].elements[0].value='';
      return false;
   }
}

function validateProductVariantsToBasketForm(FormName,LangISO,LimitedQuantity) {
	// Geht von folgendem Formularaufbau aus:
   // Feld[0,4,8...] = Menge
	// Feld[1,5,9...] = Submit 
	// Feld[2,6,10...] = hidden ProductStock = maxquan
	// Feld[3,7,11...] = hidden DisplayNo = CurrentSelection
	// Feld[length-1] = hidden ProductIdentifier
   if (document.forms[FormName].elements.length<5)  return false;
   var numVariants = (document.forms[FormName].elements.length-1)/4;
   var valuefound=false;
   for (var variant = 0; variant <numVariants; variant++) {
      if (!document.forms[FormName].elements[variant*4].value) continue;
      var quanText = document.forms[FormName].elements[variant*4].value;
      var maxqText = document.forms[FormName].elements[(variant*4)+2].value;
      var variantText = document.forms[FormName].elements[(variant*4)+3].name+"\n"+trim(document.forms[FormName].elements[(variant*4)+3].value);
      if (!quanText) continue;
      if (quanText=="") continue;
      if (quanText.match(/^[0-9]{1,3}$/)) {
         valuefound=true;
         var quanInt = parseInt(quanText);
         var maxqInt = parseInt(maxqText);
         if (quanInt > maxqInt) {
            var ok=false;
		    if (LimitedQuantity) {
		       if (LangISO=="DE") {
	              ok=alert(variantText+':\nIhre gewünschte Menge von diesem Artikel ist leider nicht verfügbar.');
		       } else {
	              ok=alert(variantText+':\nSorry, your requested quantity of this product is not available.');
		       }
               document.forms[FormName].elements[variant*4].value='';
		       return false;
		    }
            if (LangISO=="DE") {
               ok=confirm(variantText+':\nIhre gewünschte Menge ist derzeit nicht auf Lager.\nDie Lieferzeit für Ihre Bestellung könnte sich dadurch verlängern.\nTrotzdem fortfahren?');
            } else {
               ok=confirm(variantText+':\nYour requested quantity is currently not in stock.\nDelivery time for your order might therefore become delayed.\nContinue?');
            }
            if (ok==true) {continue;} else {
               document.forms[FormName].elements[variant*4].value='';
               return false;
            }		
        } else continue;
      } else {
         document.forms[FormName].elements[variant*4].value='';
         continue;
      }
   }
   if (valuefound==true) return true;
   else return false;
}

// -------------------------- Imagebox ------------------

function makeProductImageBox() {
	var imgbox=$("f24_libox");
	if (imgbox) return true;
	imgbox = document.createElement('div');
	imgbox.setAttribute("id","f24_libox");
	document.getElementsByTagName("body")[0].appendChild(imgbox);
	imgbox.innerHTML='<div id="f24_liboxh">Detail</div><div id="f24_liboxb"><div id="f24_liboxp"><img id="f24_liboxi" src="Media/Design/f24_libox_close.gif"/></div><div id="f24_liboxt"></div></div>';
	addEvent(imgbox,"mousedown",whenMouseDown);
	addEvent($("f24_liboxi"),"mousedown",closeProductImageBox);
	imgbox.style.cursor="move";
	$("f24_liboxi").style.cursor="pointer";
	return true;
}

function displayProductImageBox(imgpath,width, height, text) {
	var imgbox=$("f24_libox");
	var imghead=$("f24_liboxh");
	var imgbody=$("f24_liboxb");
	var imgpane=$("f24_liboxp");
	var imgtext=$("f24_liboxt");
	if (!imgbox) return false;
	if (!imgbody) return false;
	imgbox.style.width=""+(width+20)+"px";
	imgbox.style.height=""+(height+38)+"px";
	imghead.style.width=""+(width+20)+"px";
	imgbody.style.width=""+(width+20)+"px";
	imgbody.style.height=""+(height+20)+"px";
	imgpane.style.width=""+(width+10)+"px";
	imgpane.style.height=""+(height+10)+"px";
	imgpane.style.backgroundImage="url("+imgpath+")";
	imgbox.style.top="200px";
	imgbox.style.left="470px";
	imgbox.style.marginLeft="-"+((Math.round(width/2))+5)+"px";
	imgbox.style.display="block";
	imgbox.style.zIndex=100000;
	imgbox.setAttribute('draggable', true);
	imgtext.style.top=""+(height+10)+"px";
	if (text) {
		var textheight;
		imgtext.innerHTML=text;
		imgtext.style.display="block";
		imgtext.style.width=""+width+"px";
		textheight=imgtext.offsetHeight;
		imgbox.style.height=""+(height+38+textheight)+"px";
		imgbody.style.height=""+(height+20+textheight)+"px";
	} else {
		imgtext.innerHTML="";
		//imgtext.style.display="none";
	}
	return true;
}

function closeProductImageBox() {
	var imgbox=$("f24_libox");
	if (!imgbox) return false;
	imgbox.style.display="none";
	return true;
}

//  ---------------------- Dragging ------------------

var _drag = {
 _startX : 0, // mouse starting positions 
 _startY : 0, 
 _offsetX : 0, // current element offset 
 _offsetY : 0,
 _dragElement:null // needs to be passed from OnMouseDown to OnMouseMove 
}

if (!$("f24_libox")) {
	makeProductImageBox();
}

//if ($("f24_libox")) addEvent($("f24_libox"),"mousedown",whenMouseDown);

function whenMouseDown(e) {

	if (e == null) e = window.event; 
	var target = e.target != null ? e.target : e.srcElement; 

	target=$("f24_libox");

	// for IE, left click == 1 
	// for Firefox, left click == 0 
	// if (e.button == 1 && window.event != null || e.button == 0) {

		// grab the mouse position 
		_drag._startX = e.clientX; 
		_drag._startY = e.clientY; 

		if (e.pageX || e.pageY) 	{
			_drag._startX = e.pageX;
			_drag._startY = e.pageY;
		} else {
			_drag._startX = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
			_drag._startY = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
		}

		// grab the clicked element's position 
		_drag._offsetX = ExtractNumber(target.style.left); 
		_drag._offsetY = ExtractNumber(target.style.top); 

		// we need to access the element in OnMouseMove 
		_drag._dragElement = target; 

		// tell our code to start moving the element with the mouse 
		document.onmousemove = whenMouseMove; 
		document.onmouseup = whenMouseUp; 

		// cancel out any text selections 
	//	document.body.focus(); 

		// prevent text selection in IE 
		document.onselectstart = function () { return false; }; 

		// prevent IE from trying to drag an image 
	//	target.ondragstart = function() { return false; };

		// prevent text selection (except IE) 
		return false; 
	//} 

}

function whenMouseMove(e) { 
	
	if (e == null) var e = window.event; 

	var currX, currY;
	if (e.pageX || e.pageY) {
		currX = e.pageX;
		currY = e.pageY;
	} else {
		currX = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
		currY = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
	}
	
	// this is the actual "drag code" 
	_drag._dragElement.style.left = (_drag._offsetX + currX - _drag._startX) + 'px'; 
	_drag._dragElement.style.top = (_drag._offsetY + currY - _drag._startY) + 'px'; 

}


function whenMouseUp(e) { 
	
	if (e == null) var e = window.event; 

	if (_drag._dragElement != null) {
	
		var currX, currY;
		if (e.pageX || e.pageY) {
			currX = e.pageX;
			currY = e.pageY;
		} else {
			currX = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
			currY = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
		}
		// dragged oder clicked?
		/*
		if ((Math.abs(_drag._startX-currX )<2) && (Math.abs(_drag._startY-currY )<2)){
			closeProductImageBox();
		}*/

		// we're done with these events until the next OnMouseDown 
		document.onmousemove = null; 
		document.onmouseup = null; 
		document.onselectstart = null; 
		_drag._dragElement.ondragstart = null; // this is how we know we're not dragging 
		_drag._dragElement = null; 
	}

}

