// JavaScript Document
var $j = jQuery.noConflict();
$j(document).ready(function(){

	  //define browser compat mode
	  Essentials.setCompatOldBrowser();
	  Essentials.setURLdetails();
	  
	  //cycle images in header
	  if($j('#flashFile img').length > 1){
		$j('#flashFile').append( $j('#flashFile img') );
		$j('#flashFile .default').remove();
		$j('#flashFile').cycle({ 
			timeout: 7000,
			speed:  1000
		}); 
	  }
	  
	  //restyle huidige editie subheader
	  var subheader = $j('.news-latest-seditie-content').html();
	  subheader = subheader.replace(/-/g, "<br>");
	  $j('.news-latest-seditie-content').html(subheader);
	  
	  //home page link
	  $j('#li40 a').click(function(){
		  if (document.all) {
			 document.body.style.behavior = 'url(#default#homepage)';
			 document.body.setHomePage('http://www.scooterxpress.nl');	
		  } else {
			alert('Om deze site als start pagina in te stellen ga naar de instelling van uw browser') ;
		  }
		  		   
		  return false;					   
	  });	
	  //bookmark link
	  $j('#li39 a').click(function(){
		  try{
			  bookmarksite('scooterXpress','http://www.scooterxpress.nl');
		  }catch(e){
			  alert(e);
		  }; 
		  return false; 
	  });
	  
	  //home page news items
	  if(!$j("#content .news-latest-item").hasClass("open") ){
	  	$j("#content .news-latest-item").hoverClass("hover");
	  }
	  $j("#content .news-latest-item").expandItem();
	  
	  $j("#content .news-latest-item .news-content").each(function(){
	  	$j(this).injectBlock(280);
	  });
	  
	  $j('.news-catmenu').rebuildCatMenu();
	  $j('.news-catmenu').updateSelectboxes();
	  
	  $j("#brands").displayModelReview();
	  $j('.review-waarderingen-fields').addWaardering();
	  
	  //review restrict numeric km field
	  $j('.scooter-review-km-field input').numeric({allowControlKeys: true}).maxLength(8);
	  
	  //review textarea max chars
	  $j('.scooter-review-text-field textarea').maxLength(6000);  
	  $j('.scooter-review-year-field input').numeric({allowControlKeys: true}).maxLength(4);
	  
	  if($j('form#submit_review').length > 0){
		  //add upload option
		  $j("#uploadify").uploadify({
			'uploader'      : '/fileadmin/scooterxpress/scripts/uploadify.swf',
			'script'        : 'scooter-review.html?cmd=uploadify',
			'cancelImg'     : '/fileadmin/scooterxpress/imgs/cancel.png',
			'folder'        : '/images',
			'queueID'       : 'fileQueue',
			'auto'          : true,
			'multi'         : true,
			'fileDesc'	: 'Alleen JPG bestanden toegestaan',
			'fileExt'	: '*.jpg;',
			'sizeLimit'	: '800000',
			'buttonImg'	: '/fileadmin/scooterxpress/imgs/buttonUpl.jpg',
			'width'		: '140',
			'height'		: '21',
			'multi'		: false,
			'queueSizeLimit': 1,
			onError		: function(a, b, c, d, e){
				setTimeout ( "$j('#uploadify').uploadifyClearQueue()", 3000 );
			},
			onComplete		: function(a, b, fileObj, response, e){
				if( $j('review-images-container img').length < 4){
					$j('.review-images-container').css('height',120);
					//get Iter from last item
					$j('.review-images-container').append('<div class="review-image"><img src="http://'+response+'" width="120" ><div class="removeItem">Verwijder afbeelding</div><input type="hidden" value="'+ response +'"/></div>');
					
					//add logic to remove btn
					$j('.removeItem').unbind("click").click(function (e){			
						var answer = confirm('Wilt u dit bestand verwijderen? Klik op "OK"');
						if(answer){
							$j(this).parent().remove();
							if( $j('.review-images-container img').length == 0 ){
								$j('.review-images-container').css('height',0);
							}
						}
					});
				}
				
			}
		  });
		  	  
		  $j('form#submit_review').submit(function(){ 
			  
			  //update model with name
			  var modelEl = $j('.scooter-review-models-field select:visible');
			  if( $j('option:selected', modelEl).val() > 0){
			      modelEl.attr('name', 'tx_nblreview_pi1[model]['+$j('option:selected', modelEl).text()+']' );
			  }
			  
			  return $j(this).validateInput(); 
		  }); 
	  }
	  
	  var urlObj = Essentials.getURLdetails();
	  var obj = urlObj.params;
	  if(obj['cmd'] == 'succes'){
		  $j('.infoValidation').html('<b>Uw review is met success ontvangen<br />en toegevoegd aan het systeem.</b>');
	  }
	  else if(obj['cmd'] == 'nsucces'){
		  $j('#tx_nblsubscriber_pi1FORM').after('<div class="infoValidation">Bedankt voor het abonneren<br />op onze nieuwsbrief.</div>'); 
	  }
	  else if(obj['cmd'] == 'nrsucces'){
		  $j('#tx_nblsubscriber_pi1FORM').after('<div class="infoValidation">Uw bent verwijdert uit de mailinglijst</div>');
	  }
	  
	  window.setTimeout(function() {
		  $j('.infoValidation').empty();
	  }, 5000);
	  
	  $j('.news-review-images-small img').showLargeImg(0);
	  
	  $j('.news-latest-editie-links .news-latest-editie-link').append($j('.news-latest-editie-link a'));
	  $j('.news-latest-editie-links .news-latest-editie-link p').remove();
	  $j('.news-latest-editie-links .news-latest-editie-link a').text('Bestel dit nummer');
	  
	  //watermerk movie
	  $j('.news-list-movie a img').before('<div class="play-img"> </div>');
	  
	  if(Essentials.getCompatOldBrowser()){
		  $j('#logo,.play-img').hide();
		  //png transparency
		  $j('#logo').supersleight();
		  $j('.play-img').supersleight();
		  
		  $j('#logo, .play-img').show();
	  }
	  
	  //media page restyle
	  if($j('.news-single-img img').length > 0){
		 $j('.news-single-watermark').css('left', 23);
		 $j('.news-single-clip').hide();
		 $j('.news-single-clip-images-small').append($j('.news-single-img img'));
		 $j('.news-single-img').remove();
		 
		 $j('.news-single-clip-images-small img').showLargeImg(1);
		 
	  }
});
(function($) {
 $.fn.alertBox = function(state, message) {
	 if(state){
		 if( $('span.messagebox', this).length <1 ){
			 $(this).append('<span class="messagebox">'+message+'</span>');
		 }
	 } else {
		 $('span.messagebox', this).remove();
	 }
 };
})(jQuery);

(function($) {
 $.fn.injectBlock = function(lenLeft) {
    var el = $(this).html();
    
    var left = el.substring(0, lenLeft);
    //afbreken na eerst volgende woord
    left = left.replace(/\w+$/, '');
    var lenRight = left.length;
    var right = el.substring(lenRight, el.length);  
    
    var posOpeningTag = left.lastIndexOf('<'); 
    //opening tag found
    if( posOpeningTag != -1){
    	//closing tag NOT found
    	var closingTagPos = left.search('<\/');
    	if ( closingTagPos == -1) {
    		//check pos of closing tag in right part
    		var foundPosClosingTag = right.search('<\/');
    		var foundPosClosingTagEnd = right.indexOf('>', foundPosClosingTag);
    		
    		//left part of the text
    		left = el.substring(0, lenRight + foundPosClosingTagEnd+1);
    		
    		//get right part of text
    		lenRight = left.length;
    		right = el.substring(lenRight, el.length);
    	}
    } 

    if(right.length <= 100){
    
	var i=0;
	if(right.length > 50){
		i = 70;
	}
	for (i;i<=150;i++) {
		right += ' &nbsp;';
	}
    }
    $(this).html( left+'<span class="readmore"> lees meer...</span><span class="lastPart">'+right+'</span>' ); 
 };
})(jQuery);

(function($) {
  $.fn.showLargeImg = function(c) {
	  
	  var imgContainer = $(this).parent().parent();
	  if(c ==1){
		//media page
	  	imgContainer = $(this);
		$(this).eq(0).addClass('selected');
		var src = $(this).attr('src');
		$('.news-single-clip-large').append('<img src="'+src+'" alt="ScooterXpress" />');
		
		//hover effect image
		$(this).each(function(){
		  var el = $(this);
		  el.hoverClass("hover");
		  el.click(function(){
				imgContainer.removeClass('selected');
				el.addClass('selected');
				
				var src = el.attr('src');
				$('.news-single-clip-large img').attr('src', src);
		  });
		});
	  } else {
	  	//review page
	  	imgContainer.eq(0).addClass('selected');
		if( $(this).length > 1){
		  $(this).each(function(){
			  var el = $(this);
			  el.hoverClass("hover");
			  el.click(function(){
					imgContainer.eq(0).removeClass('selected');
					
					imgContainer = el.parent().parent();
					imgContainer.addClass('selected');
					
					var src = el.attr('src');
					$('.news-review-large img').attr('src', src);
			  });
		  });
		}
	  }
  };
})(jQuery);

(function($) {
  $.fn.validateInput = function(c) {
	  
	var msg = '';
	if($('.scooter-review-brands-field select#brands option:selected').val() == 0 ){
		  msg += '<li>Selecteer een merk en model</li>';
	}
	
	//check if images are present
	if( $('.review-images-container img').length == 0 ){
		  msg += '<li>Voeg minimaal 1 afbeelding toe</li>';
	} else {
		//update image input fields with correct name attribute for filetransfer
		var int =0;
		$('.review-images-container input').each(function() {
			var strname = "media["+int+"][filename]";
			$(this).attr('name', strname);											   
			int++;											 
		});	
	}
	
	$('.review-waarderingen input').each(function(){
		  if( $(this).val() == ''){
			  var str = $(this).attr('name');
			  
			  str = str.split("][");
			  str = str[1].split("]");		 
			  msg += '<li>Waardering ontbreekt bij: ' + str[0]+'</li>';
		  }
	});
	if( $('.scooter-review-text-field textarea').val().length < 10 ){
		  msg += '<li>Review ontbreekt</li>';
	}
	
	if( !$('.scooter-review-email-field input').isValidEmailAddress( $('.scooter-review-email-field input').val() )){
		msg += '<li>Email adres is incorrect</li>';
	}

	if(msg){
		$('.infoValidation').html('<ul>'+msg+'</ul>');
		return false;
	} 
	
  };
})(jQuery);

//mail validation
(function($) {
 $.fn.isValidEmailAddress = function(emailAddress)  {
	var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
	return pattern.test(emailAddress);
 };
})(jQuery);

//submit validation
(function($) {
	 $.fn.addWaardering = function(c) {
		 $('input', $(this) ).after('<div class="radio"><div class="bloc" data="0"> </div><div class="bloc" data="1"> </div><div class="bloc" data="2"> </div><div class="bloc" data="3"> </div><div class="bloc" data="4"> </div></div>');
		 
		 $j('.bloc').click(function(){
			 var el = $(this);
			 var parentEl = el.parent();
			 $('.bloc',parentEl).removeClass('blocSelected');
			 
			 var x = 0;
			 for (x; x <= el.attr('data'); x++)
			 {
				 $( '.bloc[data="'+x+'"]', parentEl).addClass('blocSelected');
			 }
			
			 $('input',parentEl.parent() ).val( el.attr('data') );
		 })
		 
		 $j('.bloc').hoverClass("hover");
	 };
})(jQuery);	 

(function($) {
 $.fn.updateSelectboxes = function(c) {
	var obj = Essentials.siteURL.params;
	
	$("select#merken").val(obj['cat-brandsid']);
	if( obj['cat-modelsid'] > 0){
		$('select#merk-'+unescape(obj['cat-brands']) ).val(obj['cat-modelsid']).show();
	} 
	$('select#merk-'+unescape(obj['cat-brands']) ).show();
 };
})(jQuery);	 

(function($) {
 $.fn.displayModelReview = function(c) {
     
     var sel = $(this);
     sel.change(function () {
    	var opt = $(this);
		var merkTitle = $("option:selected", opt ).text();
		var link = $("option:selected", opt ).val();

		if( $('option:selected', opt).val() > 0){
		    sel.attr('name', 'tx_nblreview_pi1[brand]['+$('option:selected', sel).text()+']' );
		}
		
		//reset
		$('.models').hide();	     	
		$('#brand'+link).show();	
     });
 };
})(jQuery);

(function($) {
 $.fn.displayModel = function(c) {
	var merkTitle = $("option:selected", this).text();
	var link = $("option:selected", this).attr('data');
	
	$('.models, #headerModel').hide();
	
	$('select#merk-'+merkTitle).show();	
	
	if( $('select#merk-'+merkTitle).length > 0){
		$('#headerModel').show();	
	}
	
	var pre = '&';
	if( $("#merken option:selected").val() == 0 ){
		var pre = '?';
	}
	
	$('a#category-submit').attr('href' ,link+pre+'cat-brands='+escape( $("#merken option:selected").text() )+'&cat-brandsid='+$("#merken option:selected").val());
 };
})(jQuery);

(function($) {
 $.fn.setSelectedModel = function(c) {
	var link = $("option:selected", this).attr('data');
	
	$('a#category-submit').attr('href' ,link +'&cat-brands='+escape( $("#merken option:selected").text() )+'&cat-brandsid='+$("#merken option:selected").val()+'&cat-modelsid='+$("option:selected", this).val() );
 };
})(jQuery);

(function($) {
 $.fn.rebuildCatMenu = function() {
	
   this.each(function(){ 
	var container = $(this);
	
	var title = $('.level1 a', container).eq(0).html();
	var link = Essentials.siteURL.segments[0];
	
	$('#news-selectItems').append('<select id="merken"></select>');
	
	var sel = $('select#merken');
	var iter = 0;
	
	sel.append('<option value="'+iter+'" data="'+link+'">'+title+'</option>');
	iter++;
	
	var s = container.siblings(".level2 a");

	var addModelNew = false;
	var merkTitle = '';
	
	var parentIter = 0;
	$(".level2 a", container).each(function(){
		title = $(this).html();
		link = $(this).attr('href');
		
		//merk
		if ($(this).parent().hasClass('level2') ){		
			selectbox = sel;
			
			merkTitle = title;
			merkLink = link;
			
			addModelNew = true;
		}
		//model
		else if ($(this).parent().hasClass('level3') ){
			if(addModelNew){
				$('#news-selectItems').append('<select id="merk-'+merkTitle+'" class="models"><option value="0" data="'+merkLink+'">alle modellen</option></select>');
				addModelNew = false;
			}		
			selectbox = $('select#merk-'+merkTitle);
		}
			
		selectbox.append('<option value="'+iter+'" data="'+link+'">'+title+'</option>');
		iter++;
		
	});
	
	$('form#news-selectItems').append('<a id="category-submit" href="'+Essentials.siteURL.segments[0]+'">verfijn</a>');
	
	$("select#merken").change(function () {
		$(this).displayModel();
	});

	$("select.models").change(function () {
		$(this).setSelectedModel();
	});

   });
 };
})(jQuery);

(function($) {
 $.fn.expandItem = function(c) {
    //open new item
    $(this).click(function(){
    	$('.lastPart').css('display', 'none');
		$('.readmore').css('display', 'inline');
		
		var el = $(this);
		$('.lastPart', el).css('display', 'inline');
		$('.readmore', el).css('display', 'none');
		
		//on open
    	if(!el.hasClass("open") ){    
			//append shadow for item and white background
			if(Essentials.getCompatOldBrowser()){
			    el.append('<div class="sluit">sluit</div>');
			} else {
			    el.append('<div class="sluit">sluit</div><div class="news-latest-shadow"><img src="fileadmin/scooterxpress/imgs/shadow.png" width="580" height="400"/> </div>');
			}
			$('.sluit').hoverClass("hover");
			el.addClass('open'); 
			
			//append glassplate layer
			$('#content .news-latest-container').append('<div class="glassplate"> </div>');
			
			$('.glassplate').css( 'height', $('#normal').height() + 149 );
    		$('.glassplate, .sluit').click(function(){
				
				$('.lastPart').css('display', 'none');
				$('.readmore').css('display', 'inline');
													
    			$('#content .open').removeClass('open');			
    			$('.glassplate, .sluit, .news-latest-shadow').remove();
				return false;
    		});
			
		}
	});
 };
})(jQuery);

(function($) {
 $.fn.hoverClass = function(c) {
    return this.each(function(){
        $(this).hover( 
            function() { 
            	$(this).addClass(c);
            },
            function() { $(this).removeClass(c); }
        );
    });
 };
})(jQuery);

//ALLOW Only numeric input
(function($) {
   $.fn.numeric = function(options)
   {
      var parentEl = $(this).parent();
	  var opts = $.extend($.fn.numeric.defaults, options);
      return this.each(function()
      {
         $(this).keydown(function(e)
         {
            var key = e.charCode || e.keyCode || 0;
            
            if (opts.allowControlKeys && isControlKey(key))
            {
               return true;
            } 
            
            if ((key < 48 && key > 105) || (key > 57 && key < 96)){
            	// do nothing
            	parentEl.alertBox(true, 'alleen getallen');
            } else {
            	parentEl.alertBox(false);
            }
            return ((key >= 48 && key <= 57) || (key >= 96 && key <= 105));
         }); 
      });
   };
   function isControlKey(key)
   {
      var controlKeys = new Array(8, 9, 46, 37, 38, 39, 40);    
      return $.inArray(key, controlKeys) > - 1;
   }
   $.fn.numeric.defaults = {allowControlKeys: true};
})(jQuery);

(function($) {
  $.fn.maxLength = function(max) {
	this.each(function(){
		//Get the type of the matched element
		var type = this.tagName.toLowerCase();
		//If the type property exists, save it in lower case
		var inputType = this.type? this.type.toLowerCase() : null;
		//Check if is a input type=text OR type=password
		if(type == "input" && inputType == "text" || inputType == "password"){
			//Apply the standard maxLength
			this.maxLength = max;
		}
		//Check if the element is a textarea
		else if(type == "textarea"){
			//Add the key press event
			this.onkeypress = function(e){
				//Get the event object (for IE)
				var ob = e || event;
				//Get the code of key pressed
				var keyCode = ob.keyCode;
				//Check if it has a selected text
				var hasSelection = document.selection? document.selection.createRange().text.length > 0 : this.selectionStart != this.selectionEnd;
				
				//return false if can't write more
				return !(this.value.length >= max && (keyCode > 50 || keyCode == 32 || keyCode == 0 || keyCode == 13) && !ob.ctrlKey && !ob.altKey && !hasSelection);
			};
			//Add the key up event
			this.onkeyup = function(){
				//If the keypress fail and allow write more text that required, this event will remove it
				if(this.value.length > max){
					this.value = this.value.substring(0,max);
				} else {
					$('.scooter-review-text-field .info').html('Maximaal '+ (max - this.value.length) +' characters.');
				}
			};
		}
	});
  };
})(jQuery);

function bookmarksite(title,url){
	if (window.sidebar) // firefox
	    window.sidebar.addPanel(title, url, "");
	else if(window.opera && window.print){ // opera
	    var elem = document.createElement('a');
	    elem.setAttribute('href',url);
	    elem.setAttribute('title',title);
	    elem.setAttribute('rel','sidebar');
	    elem.click();
	} 
	else if(document.all)// ie
	    window.external.AddFavorite(url, title);
}

(function($) {
	$.fn.supersleight = function(settings) {
		settings = jQuery.extend({
			imgs: true,
			backgrounds: true,
			shim: 'x.gif',
			apply_positioning: true
		}, settings);
		
		return this.each(function(){
			if (jQuery.browser.msie && parseInt(jQuery.browser.version, 10) < 7 && parseInt(jQuery.browser.version, 10) > 4) {
				jQuery(this).find('*').andSelf().each(function(i,obj) {
					var self = jQuery(obj);
					// background pngs
					if (settings.backgrounds && self.css('background-image').match(/\.png/i) !== null) {
						var bg = self.css('background-image');
						var src = bg.substring(5,bg.length-2);
						var mode = (self.css('background-repeat') == 'no-repeat' ? 'crop' : 'scale');
						var styles = {
							'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='" + mode + "')",
							'background-image': 'url('+settings.shim+')'
						};
						self.css(styles);
					};
					// image elements
					if (settings.imgs && self.is('img[src$=png]')){
						var styles = {
							'width': self.width() + 'px',
							'height': self.height() + 'px',
							'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + self.attr('src') + "', sizingMethod='scale')"
						};
						self.css(styles).attr('src', settings.shim);
					};
					// apply position to 'active' elements
					if (settings.apply_positioning && self.is('a, input') && (self.css('position') === '' || self.css('position') == 'static')){
						self.css('position', 'relative');
					};
				});
			};
		});
	};
})(jQuery);

jQuery.extend({
	setHomepage: function(url) {
		if (document.all) {
			document.body.style.behavior = 'url(#default#homepage)';
			document.body.setHomePage(url);
		}
		else if (window.sidebar) {
			if (window.netscape) {
				try {
					netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
				}
				catch (e) {
					var strTemp = '';
					strTemp += "this action was aviod by your browser,";
					strTemp += "if you want to enable,please enter about:config in your address line,";
					strTemp += "and change the value of signed.applets.codebase_principal_support to true";
					alert(strTemp);
				}
			}
			var prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch);
			prefs.setCharPref('browser.startup.homepage', url);
		}
	}
});

Essentials = {
	compatOldBrowser : false ,
	siteURL: null,
	setCompatOldBrowser : function (){
		if ($j.browser.msie && $j.browser.version.substr(0,1)<7) {
  			this.compatOldBrowser = true;
  		}
		return null;
	},
	getCompatOldBrowser : function (){
		return this.compatOldBrowser;
	},	
	debugCompatOldBrowser : function(){
		alert( this.getCompatOldBrowser() );
	},
	setURLdetails: function(){
		this.siteURL = this.parseURL(document.location.href);
	},
	getURLdetails: function(){
		return this.siteURL;
	},
	// This function creates a new anchor element and uses location
	// properties (inherent) to get the desired URL data. Some String
	// operations are used (to normalize results across browsers).
	parseURL: function (url) {
		var a =  document.createElement('a');
		a.href = url;
		return {
			source: url,
			protocol: a.protocol.replace(':',''),
			host: a.hostname,
			port: a.port,
			query: a.search,
			params: (function(){
			var ret = {},
			seg = a.search.replace(/^\?/,'').split('&'),
			len = seg.length, i = 0, s;
			for (;i<len;i++) {
				if (!seg[i]) { continue; }
					s = seg[i].split('=');
					ret[ unescape(s[0]) ] = s[1];
				}
				return ret;
			})(),
			file: (a.pathname.match(/\/([^\/?#]+)$/i) || [,''])[1],
			hash: a.hash.replace('#',''),
			path: a.pathname.replace(/^([^\/])/,'/$1'),
			relative: (a.href.match(/tps?:\/\/[^\/]+(.+)/) || [,''])[1],
			segments: a.pathname.replace(/^\//,'').split('/')
		};
	}
};

var truncate = function (str, limit) {
	var bits, i;
	bits = str.split('');
	if (bits.length > limit) {
		for (i = bits.length - 1; i > -1; --i) {
			if (i > limit) {
				bits.length = i;
			}
			else if (' ' === bits[i]) {
				bits.length = i;
				break;
			}
		}
		bits.push('...');
	}
	return bits.join('');
};
// END: truncate