// http://swip.codylindley.com/popupWindowDemo.html
(function($){$.fn.popupWindow=function(instanceSettings){return this.each(function(){$(this).click(function(){$.fn.popupWindow.defaultSettings={centerBrowser:0,centerScreen:0,height:500,left:0,location:0,menubar:0,resizable:0,scrollbars:0,status:0,width:500,windowName:null,windowURL:null,top:0,toolbar:0};settings=$.extend({},$.fn.popupWindow.defaultSettings,instanceSettings||{});var windowFeatures='height='+settings.height+',width='+settings.width+',toolbar='+settings.toolbar+',scrollbars='+settings.scrollbars+',status='+settings.status+',resizable='+settings.resizable+',location='+settings.location+',menuBar='+settings.menubar;settings.windowName=this.name||settings.windowName;settings.windowURL=this.href||settings.windowURL;var centeredY,centeredX;if(settings.centerBrowser){if($.browser.msie){centeredY=(window.screenTop-120)+((((document.documentElement.clientHeight+120)/2)-(settings.height/2)));centeredX=window.screenLeft+((((document.body.offsetWidth+20)/2)-(settings.width/2)));}else{centeredY=window.screenY+(((window.outerHeight/2)-(settings.height/2)));centeredX=window.screenX+(((window.outerWidth/2)-(settings.width/2)));}
window.open(settings.windowURL,settings.windowName,windowFeatures+',left='+centeredX+',top='+centeredY).focus();}else if(settings.centerScreen){centeredY=(screen.height-settings.height)/2;centeredX=(screen.width-settings.width)/2;window.open(settings.windowURL,settings.windowName,windowFeatures+',left='+centeredX+',top='+centeredY).focus();}else{window.open(settings.windowURL,settings.windowName,windowFeatures+',left='+settings.left+',top='+settings.top).focus();}
return false;});});};})(jQuery);

$(document).ready(function() {
//    $('#header').pngfix();
    $('#basketdrop a').pngfix();
	var initHeight = $('#basketdrop').height();
	var $content = $('#basketdrop .content');
	$content.hide();
	var contentHeight = $content.height();
	$('#basketdrop').mouseover(function(e){
		var t = (contentHeight + $('a', this).height());
		//alert($(this).css('margin-bottom'));
		$(this).css('height', t + 'px');
		$(this).css('margin-bottom', (t*-1) + 'px');
		$content.show();
	});
	// Stuff to do as soon as the DOM is ready;
	
	
	var loc = $(location).attr('href');
	if (loc.indexOf("basket.php") != -1){

		$('#lzip').change(function(event){
			$('#lcity').val(getCity($(event.target).val()));	
		});
		
		$('#kundetype-privat').add('#kundetype-erhverv').click(function(event){
			if ($(event.target).val() == 'privat'){
				$(document.forms.info).attr('action', 'basket.php?u=p#recipient');
			} else {
				$(document.forms.info).attr('action', 'basket.php?u=b#recipient');
			}
			document.forms.info.submit();
		});
		
		
		// GLS delivery options
		if ( $('#lgade1').val() != '' && $('#lzip').val() != '') {
			updateGLSoption();
		}
		$('#lname').change(function(e){ $('#delivery-option-door .address .name strong').text($(e.target).val()); });		
		$('#lzip').change(function(e){ 
			$('#delivery-option-door .address .zipcode').text($(e.target).val()); 
			$('#delivery-option-door .address .city').text($('#lcity').val());
		});
	
		$('#lcity').change(function(e){ $('#delivery-option-door .address .city').text($(e.target).val()); });
		$('#lgade1').change(function(e){ $('#delivery-option-door .address .street').text($(e.target).val()); });
	
		$('#lzip').add('#lgade1').change(function(){			
			updateGLSoption();
		});
		// 
		// $('#lzip').add('#lgade1').change(function(event) {
		//         var id = $(this).attr('for');
		//         $('#'+id).click();
		//     });

	
		// Continue payment
		$('#kreditkort').add('#edankort').add('#efterkrav').click(function(e){
			var deliveryoption = this;
			var payment_metod = $(this).attr('paymentmethod');
			$('input[name=paymentmethod]').val(payment_metod);
			if (payment_metod == 'topay' || payment_metod == 'topayedankort') {
				if (validatorkredit(document.forms.info)) {
					document.forms.info.submit();
					return false;
				}				
			} else if (payment_metod == 'topaycod') {
				valid = validatorkredit(document.forms.info);
				if ($('#cod-notice-displayed').length == 1 && valid) {
					document.forms.info.submit();
				} else if(valid) {
					displayPaymentSuggestion();
					return false;
				}
			}
			return false;
		});
	}
});

function displayPaymentSuggestion(){
	if ($('#cod-notice-displayed').length == 0) {
		result = $('#cod-modal-template').html();
		$('#cod-modal-template').remove();
		var height = 290;
		var width = 420;
		var modal = "";
		modal += '<div class="modal-overlay"></div>';  
		modal += '<div class="modal-window" id="cod-modal" style="z-index:100; width:' + width + 'px; height:' + height + 'px; margin-top:-' + (height / 2) + 'px; margin-left:-' + (width / 2) + 'px;">';
		modal += result;
		modal += "</div>";
		
		$("body").append(modal);
		$('<div style="display:none;" id="cod-notice-displayed"></div>').appendTo("body");
		
		// Activate continue
		$('#cod-continue').click(function(e){
			setTimeout("continueCod()", 1000);
			return false;
		});
		$('#credit-continue').click(function(e){
			closeModal();
			setTimeout("continueCredit()", 1000);
			return false;
		});
		valid = false;
	}
}
function continueCredit(){
	//$('#cod-notice-displayed').remove();
	$('#kreditkort').click();
}
function continueCod(){
	$('#efterkrav').click();
}
function closeModal()
{
	$(".modal-overlay").remove(); $(".modal-window").remove();
}


// returns longlat and name of options
function activateGLSOptions(street, zipcode, callback) {
		$.get(
			'funktioner/gls_proxy.php', 
			{
				street: street,
				zipcode: zipcode,
				Amount: 3
			},
			function(json){
				if (json == false) {
					// TODO redirect to error page
					alert('Beklager der opstod en fejl - prøv venligst igen om et øjeblik (GLS)');
					return;
				}

				// Build options HTML
				var options = '';
				for (var i = 0, json_len = json.length; i < json_len; i++) {
					var shop = json[i];
					var option_value = shop.Number;
					var option_content = '<strong>' + shop.CompanyName + '</strong><br/>';
					option_content += shop.Streetname + '<br/>';
					option_content += shop.Streetname2 + '<br/>';
					option_content += shop.ZipCode + ' ' + shop.CityName + '<br/>';
					option_content += '<input type="hidden" name="possible_delivery_address_name" value="'+shop.CompanyName+'" class="possible_delivery_address_name">';
					option_content += '<input type="hidden" name="possible_delivery_address_id" value="'+shop.Number+'" class="possible_delivery_address_id">';
					option_content += '<input type="hidden" name="possible_delivery_address_street1" value="'+shop.Streetname+'" class="possible_delivery_address_street1">';
					option_content += '<input type="hidden" name="possible_delivery_address_street2" value="'+shop.Streetname2+'" class="possible_delivery_address_street2">';
					option_content += '<input type="hidden" name="possible_delivery_address_zipcode" value="'+shop.ZipCode+'" class="possible_delivery_address_zipcode">';
					option_content += '<input type="hidden" name="possible_delivery_address_city" value="'+shop.CityName+'" class="possible_delivery_address_city">';
					option_content += '<input type="hidden" name="possible_delivery_address_phone" value="'+shop.Telephone+'" class="possible_delivery_address_phone">' + "\n";
					
					var ohs = shop.OpeningHours;
					var openinghours_content = '';
					for(var j = 0, ohs_len = ohs.length; j < ohs_len; j++){
						var oh = ohs[j];
						openinghours_content += "<span class='day'>" + oh.days + "</span><span class='hours'>" + oh.hours + "</span><br/>\n";
					}
					
					options += ('<input type="radio" tabindex="17" name="delivery_site" class="delivery_site" value="{value}" /><img src="gfx/google_map_markers/red_Marker' + String.fromCharCode(i+65) + '.png" /><div class="address"><div class="addressdata">{content}</div><div class="openinghours">{openinghours}</div></div><br/><br/>').replace("{value}", option_value).replace("{content}", option_content).replace("{openinghours}", openinghours_content);
				}
				$('#gls-data .notice').remove();
				$('#parcel-shop-list').html(options);
				$('<div id="point_data" style="display:none">' + escape(JSON.stringify(json).replace(/(\s{2,})/g, '')) + '</div>').appendTo('#parcel-shop-list');
				
				// FIXME: eventhough inputs have same name the group seems to be different so checked will be removed manually.
				var delivery_site_elements = $('#checkout-delivery .delivery_site');
				$('#checkout-delivery .delivery_site').click(function(e){
					for (var i = 0; i < delivery_site_elements.length; i++) {
						if ($(e.target).val() != $(delivery_site_elements[i]).val()) {
							$(delivery_site_elements[i]).removeAttr('checked');
						}
					}
					if ($(e.target).val() == 'door') {
						$('#delivery_address_name').val('');
						$('#delivery_address_id').val('');
						$('#delivery_address_street1').val('');
						$('#delivery_address_street2').val('');
						$('#delivery_address_zipcode').val('');
						$('#delivery_address_city').val('');
						$('#delivery_address_phone').val('');
						$('#delivery_site_id').val('door');
					} else {
						var delivery_address = $(e.target).nextAll('.address').eq(0);
						$('#delivery_address_id').val($('.possible_delivery_address_id', delivery_address).val());
						$('#delivery_address_name').val($('.possible_delivery_address_name', delivery_address).val());
						$('#delivery_address_street1').val($('.possible_delivery_address_street1', delivery_address).val());
						$('#delivery_address_street2').val($('.possible_delivery_address_street2', delivery_address).val());
						$('#delivery_address_zipcode').val($('.possible_delivery_address_zipcode', delivery_address).val());
						$('#delivery_address_city').val($('.possible_delivery_address_city', delivery_address).val());
						$('#delivery_address_phone').val($('.possible_delivery_address_phone', delivery_address).val());
						$('#delivery_site_id').val($('.possible_delivery_address_id', delivery_address).val());		
					}
				});
				
				callback(json);
			},
			'json'
		);
}

function updateGLSoption() {
	var street = $('#lgade1').val();
	var zipcode = $('#lzip').val();
	if (street != '' && zipcode != '') {
		activateGLSOptions(street, zipcode, function(pointData){
			activateGoogleMap(
					street, 
					zipcode, 
					'google-map', // id of element
					pointData
					
			);	
			var map = $('#map');
		});
		
		// update door option
		$('#delivery-option-door .address .name strong').text($('#lname').val());
		$('#delivery-option-door .address .zipcode').text($('#lzip').val()); 
		$('#delivery-option-door .address .city').text($('#lcity').val());
		$('#delivery-option-door .address .street').text($('#lgade1').val());
	}
}

function activateGoogleMap(street, zipcode, googleMap, pointData){	
	// Build google map
	var mcs_home  = new google.maps.LatLng(55.488592648080264, 8.465802669525146);
	var myOptions = {
		zoom: 11,
		center: mcs_home,
		//disableDefaultUI: true,
		mapTypeId: google.maps.MapTypeId.ROADMAP
	};
	var map    = new google.maps.Map(document.getElementById(googleMap), myOptions);
	var bounds = new google.maps.LatLngBounds();
	
	$('#google-map').css({border: '4px solid #BCD782', height: '235px'});

	// Find location of customer address
    geocoder = new google.maps.Geocoder();
  	geocoder.geocode( { 'address': street + ', ' + zipcode + ', Danmark'}, function(results, status) {
  		var image = 'gfx/google_map_markers/green_MarkerA.png';
		if (status == google.maps.GeocoderStatus.OK) {
		    var marker = new google.maps.Marker({
		        map: map, 
		        icon: image,
		        title: 'Her bor du',
		        position: results[0].geometry.location
		    });
		    bounds.extend(results[0].geometry.location);
		} else {
			//alert("Geocode was not successful for the following reason: " + status);
		}
	});
  	
	// Build markers for shops
  	for (i = 0; i < pointData.length; i++) {
  		image = 'gfx/google_map_markers/red_Marker' + String.fromCharCode(i+65) + '.png';
  		var parcel_loc = new google.maps.LatLng(pointData[i].Latitude, pointData[i].Longitude); // MCS Data Falkevej 3A, Esbjerg
		var marker = new google.maps.Marker({
	    	map: map,
	    	position: parcel_loc,
	    	icon: image,
	    	title: pointData[i].CompanyName
	    });
	    bounds.extend(marker.getPosition());
	}
	map.fitBounds(bounds);
}
function checkAll(formId, cName, check ) {
    for (i=0,n=formId.elements.length;i<n;i++) {
        if (formId.elements[i].className.indexOf(cName) !=-1) {
            formId.elements[i].checked = check;
		}
	}
}
function toggleKommune(formId, kval, check ) {
    for (i=0,n=formId.elements.length;i<n;i++) {
        if (formId.elements[i].value.indexOf(kval) !=-1) { 
            if (formId.elements[i].checked == false) {
                    formId.elements[i].checked = check;
            } else { 
				formId.elements[i].checked = false;
            }
		}
	}
}
function pop(url, name, w, h) {
        window.open(url, name, "fullscreen=no,toolbar=no,status=no,menubar=no,scrollbars=yes,resizable=no,directories=no,location=no,width="+w+",height="+h+",left=8,top=8");
}

function validatePhone(phoneNumber){
	if (phoneNumber.charAt(0) == "0") {
		return false;
	} else if (parseInt(phoneNumber, 10) < 10000000) {
		return false;
	}
	return true;
}
function validateForm(f)
{
 var x = f.elements;
 var valid = true;
 var emailvalid = true;
 var cm;
 for (var i=0;i<x.length;i++)
 {
  cm = x[i].className;
  //document.write(cm.substring(0, 8));
  if (cm.substring(0, 8)=="required" && !x[i].value) {
          x[i].style.border = "1px solid red";
          if (valid) alert('Alle felter markeret med * skal udfyldes');
          valid = false;
  }
  if (cm.substring(0, 9)=="email_val" && !isValidEmail(x[i].value)) {
          x[i].style.border = "1px solid red";
          if (valid) alert('Den indtastede emailadresse er ikke gyldig');
          valid = false;
  }
  if (cm.substring(0, 10)=="requiredrb") {
      var cnt = -1;
      var group = f[x[i].name];
      for (var rbi=group.length-1; rbi > -1; rbi--) {
        if (group[rbi].checked) {cnt = rbi; rbi = -1;}
      }
      if (cnt < 0){
          x[i].style.border = "1px solid red";
          if (valid) alert('Alle felter markeret med * skal udfyldes');
          valid = false;
      }
  }
 }
    var phone = x.phone.value;
  if (phone && !validatePhone(phone)) {
  	alert('Ugyldight telefonnummer');
  	return false;
  }
 return valid;
}

function isValidEmail(str) {
   return (str.indexOf("@") > 0);
}
function minus(id) {
  var el = document.getElementById("number"+id.name);
  var antal = el.value;
  antal = parseInt(antal, 10)-1;
  if (antal<0) {
    antal=0;
  }
  el.value = antal;
}
function plus(id) {
  var el = document.getElementById("number"+id.name);
  var antal = el.value;
  antal = (parseInt(antal, 10)+1);
  if (antal<0) {
    antal=0;
  }
  el.value = antal;
}
function validatorkredit(theForm)
{
  return validateForm(theForm);
}
function validatorcvr(theForm)
{

  if (theForm.cvrnr.value =="")
  {
    alert("Indtast CVR-nummer");
    theForm.cvrnr.focus();
    return (false);
  }
  else if (theForm.cvrnr.value.length !=8)
  {
    alert("CVR-nummer skal være 8 cifre. Du har kun indtastet "+theForm.cvrnr.value.length);
    theForm.cvrnr.focus();
    return (false);
  }
  var val=parseInt(theForm.cvrnr.value, 10);
  if (isNaN(val))
  {
          alert("CVR-nummer må kun indeholde tal");
    theForm.cvrnr.focus();
    return (false);
        }
        var valid = validatorkredit(theForm);
  return (valid);
}
function validatoroff(theForm)
{

  if (theForm.offean.value =="")
  {
    alert("Indtast EAN-nummer");
    theForm.offean.focus();
    return (false);
  }
  else if (theForm.offean.value.length !=13)
  {
    alert("EAN-nummer skal være 13 cifre. Du har kun indtastet "+theForm.offean.value.length);
    theForm.cvrnr.focus();
    return (false);
  }
  if (theForm.offkontakt.value =="")
  {
    alert("Indtast kontaktperson");
    theForm.offkontakt.focus();
    return (false);
  }
  if (theForm.offreknr.value =="")
  {
    alert("Indtast ordre-/rekvisitionsnummer");
    theForm.offreknr.focus();
    return (false);
  }

        var valid = validatorkredit(theForm);
  return (valid);
}

