var showit = true;
function addArticle( form )
{
  if (showit) 
  {
    var article     = form.article.value;
    var quantity    = form.aantal.value;
    var descr       = form.descr.value;
    text = quantity + " maal artikel '" + descr + "' toegevoegd";
//    text = article + 'aantal'+ quantity;  
    // Here comes the Ajax code for asynchronous sending the article details to the server
    $.get( "add_cart.php", { article: article, quantity: quantity }, showInHeader );
    
    alert(text);
    return false;
  }
  else
  {
    return true;
  }  
}

function doShow( show )
{
   showit = show;
   return true;
}


function showInHeader( response )
{
  var returns = response.split("|");  // Only items and price are sent
  
  $('#totalItems').html(returns[0]);
  $('#totalPrice').html( returns[1]);
}

function displayWarning( formElement )
{
  var warning = document.getElementById('warning');
  if (formElement.checked )
  {
    warning.style.visibility = "visible";
  }
  else
  {
    warning.style.visibility = "hidden";
  }
}

function NewWindow(URL)
{
  alert(URL);
  window.open(URL, "nieuw", "width=450,height=300");
}

$(document).ready(function()
{
  // Scroll to element if specified
  if ( $('#scrollTo').length )
  {
    $(document.getElementById("scrollTo").scrollIntoView(true));
  }
//  

// Stripe odd and even for better visibility
  $('.stripeMe tr:even').addClass("alt");
//  $(".stripeMe tr").mouseover(function() { $(this).addClass("over"); }).mouseout(function(){$(this).removeClass("over");});
 //$("tr.articles >td > img").attr("title", "Klik op de foto om te vergroten");
  $("tr.articles > td > img").click(function()
  {
    var parent = $(this).parent().parent();
    var sibling = $(parent).next('tr'); 
    var myID = $(this).attr("id"); 
    if ( myID != "nopic" )
    {
      if (sibling.is('.picture'))
      { 
        sibling.toggle();
      }
      else
      { 
        parent.after("<tr class='picture'><td colspan='8'><img src="+myID+" title='Klik op de foto om deze te verbergen'></td></tr>" );
        $("tr.picture").click(function()
        {
          $(this).hide();
        });      
      }
    }
  });

// Tooltips
    $(".tooltip").each(function() {
      $(this).qtip({
        content:
        {
            text: 'laden...',
            title: {
                text: 'Extra informatie - ' + $(this).text(),
                button: true
            },
            ajax: {
                url: 'tooltips.php',
                type: 'GET',
                data: { id : $(this).attr('id')  },
                success: function(data, status) {
                    this.set('content.text', data);
                }
            }
        },
        style:
        {
            classes: 'ui-tooltip-shadow extraInfo'
        },
        show: {
            delay: 1000
        },
        position: {
            viewport: $(window),
            my: 'top left',
            at: 'bottom left',
            adjust: { screen: true, scroll: true, mouse: false }
        },
        events: {
            hide: function (event, api) {
                if (event.originalEvent.type !== 'click')
                    return false;
            }
        }
      });
    });
});

/*

Generic Form Validation.
tboland@gmail.com
http://www.techtoolblog.com
License: Free To Use, If Modified/Added
please send updated source to tboland@gmail.com
 
To Validate a Form Element Add the Custom Attribute:
validate="VALIDATEHOW"

Your Current Options Are:
"not_empty"
"integer"
"number" - decimal allowed
"email"
"phone" - includes international phone numbers

Multiple Validation uses the following syntax:
validate="not_empty|integer"

To Add a Message Add the Custom Attribute:
msg="Name is a required field" 

By Default the Messages are shown next to the form element.
To Show Alert Boxes add a Custom Attribute in the form tag (show_alert):
<form action="mypage.aspx" show_alert="1" onSubmit="return Validate(this);">

Examples:
<html>
<head>
<script language="JavaScript" src="gfv.js" type="text/javascript"></script>
</head>
<body>
<form action="mypage.php" show_alert="1" onSubmit="return Validate(this);">
First Name <input type="Text" name="FirstName" maxlength="25" validate="not_empty" msg="First Name is Required" /><br/>
Email <input type="text" name="Email" maxlength="25" validate="email" msg="Email is Required" /><br/>
<input type="submit" value="Go">
</form></body></html>

ADVANCED USERS:
Add Your Own Function Calls to the validate attribute.
It Must return true or false
example:
<input type="text" name="Age" validate="ValidateAge" />
*/

function ValidateForm(objForm) {
	
	var arrValidated=new Array();
	
	for (var i=0; i<objForm.elements.length; i++) {
		var element=objForm.elements[i];
		var elName=element.name;
		if ((!elName)||(elName.length == 0)||(arrValidated[elName]))
			continue;
		arrValidated[elName] = true;
		var validationType = element.getAttribute("validate");
		if ((!validationType)||(validationType.length == 0))
			continue;
		var strMessages=element.getAttribute("msg");
		if (!strMessages)
			strMessages = "";
		var arrMessages = strMessages.split("|");
		var arrValidationTypes = validationType.split("|");		
		for (var j=0; j<arrValidationTypes.length; j++) {
			var curValidationType = arrValidationTypes[j];
			var blnValid=true;
			switch (curValidationType) {
				case "not_empty":
					blnValid = ValidateNotEmpty(element);
					break;
				case "integer":
					blnValid = ValidateInteger(element);
					break;
				case "number":
					blnValid = ValidateNumber(element);
					break;
				case "email":
					blnValid = ValidateEmail(element);
					break;
				case "phone":
					blnValid = ValidatePhone(element);
					break;
				default:
					try {
						blnValid = eval(curValidationType+"(element)");
					}
					catch (ex) {
						blnValid = true;
					}
			}
			if (blnValid == false) {
				var message="invalid value for "+element.name;
				if ((j < arrMessages.length)&&(arrMessages[j].length > 0))
					message = arrMessages[j];
				InsertError(element, message);
				if ((typeof element.focus == "function")||(element.focus)) {
					element.focus();
				}
				return false;
			}
			else
				ClearError(element);
		}
		
	}
	return true;
}

//Empty Validation
function ValidateNotEmpty(objElement) {
	var strValue = GetElementValue(objElement);
	var blnResult = true;
	if(allTrim(strValue) == "") //check for nothing
	{
	blnResult = false;
	}
	return blnResult;
}

//Integer Validation
function  ValidateInteger(objElement)
   //  check for valid numeric strings	
   {
   var strString = GetElementValue(objElement);
   var strValidChars = "0123456789";
   var strChar;
   var blnResult = true;
  
   //  test strString consists of valid characters listed above
   for (i = 0; i < strString.length && blnResult == true; i++)
      {
      strChar = strString.charAt(i);
      if (strValidChars.indexOf(strChar) == -1)
         {
         blnResult = false;
         }
      }
   return blnResult;
   }

//Number Validation
function  ValidateNumber(objElement)
   //  check for valid numeric strings	
   {
   var strString = GetElementValue(objElement);
   var strValidChars = ".0123456789"; //decimal ok
   var strChar;
   var blnResult = true;

   //  test strString consists of valid characters listed above
   for (i = 0; i < strString.length && blnResult == true; i++)
      {
      strChar = strString.charAt(i);
      if (strValidChars.indexOf(strChar) == -1)
         {
         blnResult = false;
         }
      }
   return blnResult;
   }
   
   //Email Validation
   function ValidateEmail(objElement) {
	//  Will check for @, period after @ and text in between
	var strValue = GetElementValue(objElement);
	var in_space = strValue.indexOf(" ");
	if (in_space != -1)
	{ return false;  }

	var len = strValue.length;
	var alpha = strValue.indexOf("@");
	var last_alpha = strValue.lastIndexOf("@");

	if (alpha != last_alpha)
	 { return false; }

	// No @, in first position, or name too short
	if (alpha == -1 || alpha == 0 || len<6 )
	 { return false; }

	var last_p = strValue.lastIndexOf(".");
			// Be sure period at least two spaces after @, but not last char.
			
	if (last_p - alpha < 2 || last_p == (len - 1) )
		{ return false; }
	}
	

	
	//Valid PhoneNumber
	function ValidatePhone(objElement){
	// non-digit characters which are allowed in phone numbers
	var phoneNumberDelimiters = "()- ";
	// characters which are allowed in international phone numbers
	// (a leading + is OK)
	var validWorldPhoneChars = phoneNumberDelimiters + "+";
	// Minimum no of digits in an international phone no.
	var minDigitsInIPhoneNumber = 10;
	
	var strValue = GetElementValue(objElement);
	s=stripCharsInBag(strValue,validWorldPhoneChars);
	return (ValidateInteger(s) && s.length >= minDigitsInIPhoneNumber);
	}


function GetElementValue(objElement) {
	var result="";
	switch (objElement.type) {
		case "text":
		case "hidden":
		case "textarea":
		case "password":
			result = objElement.value;
			break;
		case "select-one":
		case "select":
			if (objElement.selectedIndex >= 0)
				result = objElement.options[objElement.selectedIndex].value;
			break;
		case "radio":
		case "checkbox":
			for (var i=0; i<objElement.form.elements.length; i++) {
				if (objElement.form.elements[i].name == objElement.name) {
					if (objElement.form.elements[i].checked)
						result += objElement.form.elements[i].value+",";
				}
			}
			break;
	}
	return result;
}

function InsertError(element, strMessage) {
	if ((element.form.getAttribute("show_alert")) && (element.form.getAttribute("show_alert") != "0")) {
		alert(strMessage);
		return;
	}
	
	var strSpanID = element.name+"_val_error";
	var objSpan = document.getElementById(strSpanID);
	if (!objSpan) {
		if ((element.type == "radio")||(element.type == "checkbox")) {
			for (var i=0; i<element.form.elements.length; i++) {
				if (element.form.elements[i].name == element.name) {
					element = element.form.elements[i];
				}
			}
		}
		objSpan = document.createElement("span");
		objSpan.id = strSpanID;
		objSpan.className = "validation_error";
		var nodeAfter=0;
		var nodeParent = element.parentNode;
		for (var i=0; i<nodeParent.childNodes.length; i++) {
			if (nodeParent.childNodes[i] == element) {
				if (i < (nodeParent.childNodes.length-1))
					nodeAfter = nodeParent.childNodes[i+1];
				break;
			}
		}
		if ((!nodeAfter)&&(nodeParent.parentNode)) {
			nodeParent = nodeParent.parentNode;
			for (var i=0; i<nodeParent.childNodes.length; i++) {
				if (nodeParent.childNodes[i] == element.parentNode) {
					if (i < (nodeParent.childNodes.length-1))
						nodeAfter = nodeParent.childNodes[i+1];
					break;
				}
			}
		}
		if (nodeAfter)
			nodeParent.insertBefore(objSpan, nodeAfter);
		else
			document.body.appendChild(objSpan);
	}
	objSpan.innerHTML = strMessage;
}

function ClearError(element) {
	var strSpanID = element.name+"_val_error";
	var objSpan = document.getElementById(strSpanID);
	if (objSpan) {
		objSpan.innerHTML = "";
	}
}

function allTrim(cValue){
 var lDone=false;
 while (lDone==false){
  if (cValue.length==0) {return cValue;}
  if (cValue.indexOf(' ')==0){cValue=cValue.substring(1);lDone=false; continue;}
  else {lDone=true;}
  if (cValue.lastIndexOf(' ')==cValue.length-1){cValue=cValue.substring(0, cValue.length-1);lDone=false;continue;}
  else {lDone=true;}
 }
 return cValue;
}

function stripCharsInBag(s, bag)
{   var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}


function validate_form( form )
{
}

function ValidateSend( objElement )
//  check for if a valid valid numeric strings
{
   var strString = GetElementValue(objElement);
   if ( strString == 0 )
   {
       return false;
   }
   else
   {
       return true;
   }
}


function recalc(){
  // run the calc() method on each of the "total" fields
   $("[@id^=total_item]").calc(
      // the equation to use for the calculation
      "qty * price",
      // we now define the values for the variables defined in the equation above
      {
         // instead of using a static value, we use a jQuery object which grabs all the quantities
         qty: $("input[@id^=qty_item_]"),
         // now we define the jQuery object which reads in the "price" from the table cell
         price: $("[@id^=price_item_]")
      },
      // this function is execute after the calculation is completed, which allows us to
      // add formatting to our value
      function (s){
         return number_format(s/100, 2, ',','');
      },
      // once all calculations are completed, we execute the code below
      function ($this){
         // now we get the sum() of all the values we just calculated
         var sum = $this.sum();
         var formatted_sum = number_format(sum/100, 2, ',','.');
         // now that we have the grand total, we must update the screen
         $("#grandTotal").text(
            // round the results to 2 digits
            "\u20AC " + formatted_sum
         );
         addShippingCosts();
      }
   );
}

function number_format(a, b, c, d) {
 a = Math.round(a * Math.pow(10, b)) / Math.pow(10, b);
 e = a + '';
 f = e.split('.');
 if (!f[0]) {
  f[0] = '0';
 }
 if (!f[1]) {
  f[1] = '';
 }
 if (f[1].length < b) {
  g = f[1];
  for (i=f[1].length + 1; i <= b; i++) {
   g += '0';
  }
  f[1] = g;
 }
 if(d != '' && f[0].length > 3) {
  h = f[0];
  f[0] = '';
  for(j = 3; j < h.length; j+=3) {
   i = h.slice(h.length - j, h.length - j + 3);
   f[0] = d + i +  f[0] + '';
  }
  j = h.substr(0, (h.length % 3 == 0) ? 3 : (h.length % 3));
  f[0] = j + f[0];
 }
 c = (b <= 0) ? '' : c;
 return f[0] + c + f[1];
}






