/*
Dependencies:
- cookies
- jquery
- jquery metadata
*/

var Roularta = (function(){});
var $R = Roularta;

/*INIT ----------------------------------------------------------*/
Roularta.init = function(){ /*do nothing, override me*/ };

/*REFRESH -------------------------------------------------------*/
Roularta.refresh = function(){ /*do nothing, override me*/ };

/*BOOKMARK -------------------------------------------------------*/
Roularta.bookmark = function(){
	var url = document.location;
	var title = document.title;
	if ((typeof window.sidebar == "object") && (typeof window.sidebar.addPanel == "function")) 
	  window.sidebar.addPanel (title, url, "");
	else if (typeof window.external == "object") 
	  window.external.AddFavorite(url, title);
	else if (window.opera && document.createElement){
	  var a = document.createElement('A');
	  if (!a) return false; //IF Opera 6
	  a.setAttribute('rel','sidebar');
	  a.setAttribute('href',url);
	  a.setAttribute('title',title);
	  a.click();
	}	else 
	  return false;
 };

/*SHUFFLER ------------------------------------------------------*/
Roularta.shuffle = function(parentSelector, childSelector){
  var shuffle;
  if(parentSelector != null) {
    shuffle = jQuery(parentSelector);
  } else {
    shuffle = jQuery('.shuffle');
  }
  if( jQuery(shuffle).length > 0 ){ 
    jQuery(shuffle).each( function() { jQuery(this).shuffle(parentSelector, childSelector); } ); 
  }
};

jQuery.fn.shuffle = function(parentSelector , childSelector){
  if(parentSelector == null || childSelector == null){
    var children = jQuery(this).children(childSelector);
  } else {
    var children = jQuery(parentSelector+' '+childSelector);
  }
  var childrenHTML = new Array();
  jQuery(children).each( function(index) {
    childrenHTML[index] = jQuery(this).html();
  });

  var random = new RandomIterator( childrenHTML );
  jQuery(children).each( function() {
    jQuery(this).html( random.next() );
  });
};

/*RANDOM ----------------------------------------------------*/
Roularta.showRandom = function(){
  var rotate = jQuery('.random');
  if( jQuery(rotate).length > 0 ){ 
    jQuery(rotate).each( function() { jQuery(this).showRandom(); } ); 
  }
};

jQuery.fn.showRandom= function(){
  var children = jQuery(this).children();
  var random = new RandomIterator( children );
  if( random.hasNext() ){
    jQuery(random.next()).show();
  }
  while( random.hasNext() ){
    jQuery(random.next()).hide();
  }
};

/* REQ PARAM ------------------------------*/
Roularta.getParamFromQueryString = function(param) {
    if(!Roularta.queryStringParameters){
		Roularta.queryStringParameters = {};
		var params = location.search.replace(/^\?/,'').split('&');
		for( var i = params.length-1;  i >= 0;  i-- ) {
		    var p = params[i].split('='), key = p[0];
			if( key ){
			    if(key == 'params'){
					var paramparams = '';
					if(p[1].indexOf(';') == -1){
				    	    paramparams = p[1].split('%3B');
					} else {
					    paramparams = p[1].split(';');
					}					
					for (var j = paramparams.length-1; j>=0; j--){
					    var q = '';
					    var qkey = '';
						if(paramparams[j].indexOf(':') == -1){
							q = paramparams[j].split('%3A'), qkey = q[0];
						} else {
							q = paramparams[j].split(':'), qkey = q[0];
						}
						if(qkey){
							Roularta.queryStringParameters[qkey] = unescape(q[1]);
						}
			        } 
				}else {
				    Roularta.queryStringParameters[key] = unescape(p[1]);
				}
		    }
		}
    }
    return Roularta.queryStringParameters[param];
}

/*AUTOCOMPLETE  ---------------------------------------------*/
Roularta.autoComplete = function(selector,list, onError, onSuccess){
	var thisList = list;
	jQuery(selector).each(function(){
		new actb(this,thisList);
                var thisForm = jQuery(this).parents('form').get(0);
                var thisInput = this;
                jQuery(thisForm).submit(function(){
                  var value = jQuery(thisInput).val();
                  var found = false;
                  for(var i=0;i<thisList.length && !found;i++){
                    if(thisList[i] == value){
                       found = true;
                    }
                  }
                  if(!found){
                    if(onError != null){
                      return onError.apply(thisInput);
                    } else {
                      return false;
                    }
                  } else {
                    if(onSuccess != null){
                      return onSuccess.apply(thisInput);
                    } else {
                      return true;
                    }
                  }
                });
	});	
};


/* Popup  -----------------------------------------------------
voeg onclick event toe aan externe links

vb:
<a href="http://www.google.com/" class="popup {windowName: 'myWindow', windowFeatures: {location:1,status:1,scrollbars:1,
  width:100,height:100}}">click hier</a>
  
 gebruik # ipv , voor bug in IE te omzeilen
*/
Roularta.popup = function(selector){
  if(selector == null){
    selector = "a.popup";
  }
  jQuery(selector).each(function() {
    jQuery(this).click(function() {
	  popupMetadata = jQuery(this).metadata();
	  windowFeatures = ""; 
	  for(key in popupMetadata.windowFeatures) {
		if(windowFeatures.length){
			windowFeatures = windowFeatures + ",";
		}
	    windowFeatures = windowFeatures + key + "=" + popupMetadata.windowFeatures[key];
	  }
      window.open(jQuery(this).attr("href"),popupMetadata.windowName,windowFeatures);
      return false;
    });
  });
}

/* Messagent  -----------------------------------------------------
voegt URL en URL description aan de link toe, zodat deze kunnen ingeladen worden voor messagent

vb:
<a href="XXX" class="messagent">YYY</a>
*/
Roularta.messagent = function(selector){
  if(selector == null){
    selector = "a.messagent";
  }
  jQuery(selector).each(function() {
		jQuery(this).click(function(){
			href = jQuery(this).attr("href");
			if(href.indexOf("?")>0){
				href = href+ "&";
			}else{
				href = href+ "?";
			}
			href = href + "params=URL:"+ escape(window.location) + ";URLDESCRIPTION:" + escape(document.title);
			window.location = href;
			return false;
		});
	});
}

/*Random Iterator -------------------------------------------*/
function RandomIterator(array){
 this.array = array;
 this.picked = new Array();

 this.hasNext = function hasNext(){
   return this.picked.length < this.array.length;
 }

 this.next = function next(){
   if(!this.hasNext()){
     return null;
   } else {
     return array[this.random()];
   }
 }
 
 this.random = function random(){
   var randomNumber = Math.floor(Math.random()* this.array.length);
   var alreadyPicked = false;
   for(var i = 0; i<this.picked.length && !alreadyPicked; i++){
    if(randomNumber == this.picked[i]){
      alreadyPicked = true;
    }
   }
   if(alreadyPicked){
     return this.random();
   } else {
     this.picked[i] = randomNumber ;
     return randomNumber ;
   }
 }
}

/* Map -----------------------------------------------------*/
function Map(){
    var me = this;
    me.keys = new Array();
    me.values = new Array();
    
    this.put = function put(key, value){
      var index = me.indexOf(key);
      if(index == -1){
          me.keys.push(key)
          me.values.push(value);
      } else {
          me.values[index]=value;
      }
    }

  this.get = function get(key){
    var index = me.indexOf(key);
    if(index == -1){
        return null;
    } else {
        return me.values[index];
    }
  } 
	
    this.getKey = function getKey(value){
      var index = me.indexInArrayOf(me.values,value);
      if(index == -1){
          return null;
      } else {
          return me.keys[index];
      }
    }
	
    this.keySet = function keySet(){
      return me.keys;
    }

    this.remove = function remove(key){
      var index = me.indexOf(key);
      if(index != -1){
          me.keys[index]=null;
          me.values[index]=null;
      }
    }

    this.contains = function contains(key){
      var index = me.indexOf(key);
      return (index != -1);
    }

    this.size = function size(){
      return me.keys.length;
    }
	
	this.indexOf = function indexOf(key){
		return me.indexInArrayOf(me.keys,key);
	}
	
    this.indexInArrayOf = function indexInArrayOf(anArray,key){
       var index = -1;
       for(var i = 0; (i<anArray.length && index == -1); i++){
          if(key == anArray[i]){
            index = i;
          }
       }
       return index;
    }
}



/* Poll  -----------------------------------------------------
Functie die wordt gebruikt bij poll antwoord afhandeling. De methode vraag een parameter (frm) die
een verwijzing is naar het form element.
Indien er een element checked staat wordt de form gesubmit. Indien niet wordt er een waarschuwing weergegeven.
*/

function controleerInputPoll(frm, error) {
	var aangeklikt = false;
	for (var i = 0; i < frm.elements.length; i++) {
		if (frm.elements[i].checked) {
			aangeklikt = true;
		}
	}

	if (aangeklikt) {
		frm.submit();
	} else {
		alert(error);
	}
}

function url(input){
    return input;
}
/* Mobile ----------------------------------------------
Functie die wordt gebruikt om de cookie te zetten voor cookie dependent caching
*/
function setMobileCookie(mobilePage, domainName){
			var mobileCookie= GetCookie("Mobile");
			var mobileCookiePresent = false;
			if (mobileCookie!=null && mobileCookie!="" && (mobileCookie=="Y" || mobileCookie=="N"))	{mobileCookiePresent = true;}
			var ua = navigator.userAgent;
			var isMobileDevice = false;
			if(/android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(ua)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-/i.test(ua.substr(0,4))){
				isMobileDevice= true;
			} else {
				isMobileDevice = false;
			}
			var isiPad = /iPad/i.test(ua);
			var mobileDeviceExceptIPad = isMobileDevice && !isiPad;
			if ((!mobileCookiePresent && mobileDeviceExceptIPad) || (mobilePage==true && mobileDeviceExceptIPad)){
				var date = new Date();
				date.setTime(date.getTime()+31536000000);	
				SetCookie ("Mobile", "Y", date, "/", domainName,null);
			} else {
				if (!mobileCookiePresent && !mobileDeviceExceptIPad){
					var date = new Date();
					date.setTime(date.getTime()+31536000000);	
					SetCookie ("Mobile", "N", date, "/", domainName,null);
				}
			}
}
/* Rating on article ------------------------------
*/
$global = 0;

$(document).ready(function(){
	setAverageScore();
	$(".star").hover(hoverIn,hoverOut);
	

	$(".star").change(changeHandler);
});

function setAverageScore(){
	$average = $('#averageScore').val();
	for(var i = $average; i > 0; i--)
	{
			$(".star-rating .star2[value='"+i+"']").parent().removeClass('unchecked');
			$(".star-rating .star2[value='"+i+"']").parent().addClass('checked');
	}
}

function changeHandler(){
		$(".star").parent().removeClass('checked');
		
		$(this).attr('checked','checked');
		
		$waarde = $(this).val();
		$global = $waarde;
		for(var i = $waarde; i > 0; i--)
		{
				$(".star[value='"+i+"']").parent().removeClass('hover');
				$(".star[value='"+i+"']").parent().addClass('checked');
		}
}

function hoverIn(){	
	$waarde = $(this).val();
	
	for(var i = $waarde; i <= 5; i++)
	{
		$(".star[value='"+i+"']").parent().removeClass('checked');
	}
	
	for(var i = $waarde; i > 0; i--)
	{
			$(".star[value='"+i+"']").parent().removeClass('unchecked');
			$(".star[value='"+i+"']").parent().addClass('hover');
	}
}

function hoverOut(){
	$waarde = $(this).val();
	$waarde2 = $global;
	
	for(var i = $waarde2; i > 0; i--)
	{
		$(".star[value='"+i+"']").parent().addClass('checked');
	}
	
	for(var i = $waarde; i > 0; i--)
	{
			$(".star[value='"+i+"']").parent().removeClass('hover');
			$(".star[value='"+i+"']").parent().addClass('unchecked');
	}
}
