/**
 * @author redstuff
 */
// MASTER JS
// SWFobject for IPS by sveinung@idium.no Feb 2010
(function f(b){var d=window.ips=window.ips||{},c=b||{loading:false},e;if(d.queue===undefined)d.queue=[];if(typeof window.swfobject!=="undefined"&&typeof window.swfobject.embedSWF!=="undefined")c.loading=false;else if(d.queue.length>0){if(c.loading===false){b=document.createElement("script");b.type="text/javascript";b.async=true;b.src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js";(document.getElementsByTagName("head")[0]||document.getElementsByTagName("body")[0]).appendChild(b); c.loading=true}e=setTimeout(function(){f(c)},50)}if(c.loading===false&&d.queue.length>0)for(b=0;b<d.queue.length;b++){var a=d.queue[b];if(!a.loaded){a.loaded="true";swfobject.embedSWF(a.url,a.element,a.width,a.height,a.version,a.expressInstall,a.flashvars,a.params,a.attributes)}}if(c.loading===false&&typeof window.jQuery!=="undefined")e=setTimeout(function(){jQuery(document).one("ajaxStart",function(){e=setTimeout(function(){f(c)},100)})},2E3)})();
//master.js

var isIE7 = navigator.userAgent.indexOf("MSIE 7.0") == '-1' ? false : true;
var isIE6 = navigator.userAgent.indexOf("MSIE 6.0") == '-1' ? false : true;
var isIE = navigator.userAgent.indexOf("MSIE") == '-1' ? false : true;



  var currentfolder = ips.system.currentfolder, urlroot = ips.system.urlroot, articleResults = ips.system.articleResults, fileResults = ips.system.fileResults, userResults = ips.system.userResults;

jQuery(document).ready(function($) {
   // UTILITY
   var base = ips.system.base; //cache as local variable
   // INLINE editing activation
   var $body = $("body");
   var hidden = true; // For iframe load

$('.toggle').click(function() {
  $('#forgottenPassword').slideToggle('slow', function() {
    // Animation complete.
  });
});

  

jQuery.preLoadImages(base+"filestore/dev/GFX/nav-hover-left.png",
base+"filestore/dev/GFX/nav-hover-right.png",
base+"filestore/dev/GFX/nav-hover-bg.png");


  // ----------------- TIP A FRIEND ---------------------
  $("#triggerTipform").live("click", function () {
    $('.tipsForm').slideToggle('slow');
  });

  // TIP  A FRIEND AJAX SETUP AND VALIDATION
  var $tipsform = $(".tipsForm");
  var emailpattern = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  $tipsform.hide().live("submit", function (e) {
    e.preventDefault();
    var $this = $(this),
    //cache
    $response = $this.find("h3"),
      $sender = $this.find("#senderEmail"),
      $recipient = $this.find("#recipientEmail");

    if (!emailpattern.test($sender.val())) {
      $response.addClass("error").text("Vennligst sjekk e-post");
      $sender.addClass("error").focus();
      return false;
    }
    else if (!emailpattern.test($recipient.val())) {
      $response.addClass("error").text("Vennligst sjekk e-post");
      $recipient.addClass("error").focus();
      return false;
    }
    $response.text("Sender tips....");
    $(".tipsForm:visible input[name=ipsfm_url]").val(window.location.toString().replace(/\s+/igm, '+'));
    $.ajax({
      type: 'POST',
      url: './',
      data: $this.serialize(),
      success: function () {
        $response.text("Tipset ble sendt!");
        $this.find("input[type=text]").val("");
        $tipsform.delay(2000).slideUp("slow");
      }
    });
  }); // END TIP A FRIEND


   // OBJECT COMMENTS
   //TODO  : make it more than just work...
   $("ul.comments").load(ips.system.base + "?module=ObjectComments&action=ObjectComments.getCommentsForObject&className=articles.Article&template=esicomments&onlyApproved=false&objectID=" + $(this).attr('title'));
   // END OBJECT COMMENTS



   // Searchform interaction
   var $searchForm = $("#searchForm"), //CACHE
       $query = $searchForm.find(".query"),
       $label = $searchForm.find("label");
   if ($query.val() !== "") {$label.hide()}
   $searchForm.submit(function(){
   if ($query.val() === "") {return false}
   });
   $query.focus(function(){$label.hide()}).blur(function(){
     if ($(this).val() === "") {$label.show()}
   });
   $searchForm.find("label").click(function(){
    $query.focus();
   }); 
   // END SEARCHFORM


  // EVENT DELEGATION - Not touching dom until click
  $(".externalLink").live("click", function(){
    $(this).attr("target", "_blank");
  });


// IPS FORM validation by sveinung@idium.no March 2010
$("form").live("submit",function(e){
    var $this = $(this), formid = $this.attr("id")+"", errors = [];
    // Start validation object
    //fix broken objects
    var ips = window.ips = window.ips ||{};
    ips.validate = ips.validate ||{};
    ips.validate[formid] = ips.validate[formid] ||{};
    //end fix broken objects

    // Reset, and FIND/QUERY viable <li> tags. Must be typical <li> with input. If different, change next find().
    $this.find("span.error").remove().end().find("li:not(.submit,.form_labelfield)").removeClass("error")
    // START each - > iterate li`s
    .each(function(i){
      // Needed vars and Cache selectors for convenience and "speed"
      var $li = $(this), $nextLi = $li.next(), $prevLi = $li.prev(), $field = $li.find("input,textarea,select").eq(0), fid = $field.attr("id"), fieldval = $field.val(), errorObj = {"id":fid,"$elem":$li,"message":""};
      // Utilty function for checking regex values
      var checkFunc = function(regexObj, thisval, message, errorObj){
        if (!regexObj.test(thisval)) {
           errorObj.message = message;
        } else {
           errorObj.valid = true; // used to make this rule more important than classes
        }
        return errorObj;    
      }
      // Iterating and validation all regexes in the general object
      $.each(ips.validate.general, function(property){
        if ($li.hasClass(property) && this.regex !== undefined ) {
          errorObj = checkFunc(this.regex, fieldval, this.message, errorObj);
        }
      });
      // Check for validation object
      if ( ips.validate[formid][fid] !== undefined && ips.validate[formid][fid].regex !== undefined ) {
         var fieldvalObj = ips.validate[formid][fid],
             errorMgs = fieldvalObj.message !== undefined ?  fieldvalObj.message : ips.strings.notvalid;
         errorObj = checkFunc(new RegExp(fieldvalObj.regex), fieldval, errorMgs, errorObj);
      } else {
        //fix missing objects
        ips.validate[formid][fid] = {};
      }
      if ( $li.hasClass("form_password") && errorObj.message === ''){
          errorObj = checkFunc(ips.validate.general.password.regex, fieldval, ips.validate.general.password.message, errorObj);
          if (errorObj.message === "" && fieldval !== $li.find(".confirm").val()) {
            errorObj.id = $li.find(".confirm").attr("id");
            errorObj.message = ips.validate.general.password.message;
          }
      }
      // Check username if form has class .loggedout -> Forms get resubmitted if error from server
      if ( $this.hasClass("loggedout") && $li.hasClass("username") && !(errorObj.valid)){
          var searchedUsername = $.data($field[0],"username"), // get "cacge"
              availFromPrevSubmit = $.data($field[0],"avail"); // get "cache"
          $.data($field[0],"username",fieldval); // write "cache"
          // Check if new desired username isnt equal to previous ones or if no username has been checked
          if ((fieldval !== searchedUsername) || (availFromPrevSubmit === null) ) { 
            // Async - check param, then set value on elem and resubmit form
            $.get(ips.system.base + "?module=Users&amp;action=Ajax.isUsernameAvailable&amp;username="+fieldval, function(data){
               $.data($field[0],"avail",data);
               // 'false' is serverresponse in plain text
               if (data == 'false') {
                 setTimeout(function(){$this.submit();},100);
               }
            });
          } else {
            // check if this is checked and username is not avail === false
            if (availFromPrevSubmit == "false") {
              errorObj.message = ips.strings.usernamenotavail;  
            }  
          }
      }
      // check if .required and 
      if (fieldval === '' &&  $li.hasClass("required")) {
          // If not already a error - add a error message
          if (errorObj.message === '') {
            errorObj.message = ips.strings.cannotbeempty;
         }
      } else if ($li.hasClass("required") && errorObj.message === '') {
          // if checkbox is required
          if ($field.is("input[type=checkbox]") && $field.attr("checked") === false) {
            errorObj.message = ips.validate[formid][fid].message ||ips.strings.mustbechecked;
          }
      }
      // Todo, ADD : requiredIf - (e.g. email, checkbox )
      // Check for customclasses 'isequaltonext' and 'isequaltoprev' - > is in lowercase bacause of ips:classify
      if ($li.hasClass('isequaltonext')||$nextLi.hasClass('isequaltoprev')) {
        if (fieldval !== $nextLi.find("input").val()) {
          errorObj.message = $li.find("label").text() + ips.strings.mustbeequalto + $nextLi.find("label").text();
        }
      } else if ($li.hasClass('isequaltoprev')||$prevLi.hasClass('isequaltonext')) {
        if (fieldval !== $prevLi.find("input").val()) {
          errorObj.message = $li.find("label").text() +  ips.strings.mustbeequalto + $prevLi.find("label").text();
        }
      }
      // Field is not required, NO error-msg should be generated
      if (fieldval === '' && !($li.hasClass("required"))) {
          errorObj.message = ''; 
      }
      // Push this errorObj if there is a message defined
      if ( errorObj.message !== undefined && errorObj.message !== '' ) {
        errors.push(errorObj);
      }
    }); //END each li`s

  // Process errors if there is any
  if ( errors.length > 0 ) {
    $( errors ).each(function(i){
      var $errorField = this.$elem.addClass("error").find("input,textarea,select").eq(0);
      if (i === 0) {;$errorField.focus();}
      $("<span class='error'>" + this.message + "</span>").insertAfter( $errorField );  
    });
    // default action of the event will not be triggered.
    e.preventDefault();
    // Keeps the rest of the handlers from being executed.
    e.stopImmediatePropagation();
  } else {
	$this.find("input[type=submit]").val("Sender...");
}
});
//FORM END

  /* Mouseover on images, setup relattribute on FILE match */
  $("img.hover").live("hover", function(){
    var _alt = $(this).attr("alt"), _src = $(this).attr("src");
    $(this).attr("src",_alt).attr("alt",_src);
  });

 $(".nav_main a").bind("mouseover",function() {
    if(!$(this).parent().find("img").length) { // the hover images are not present, create them 
      $(this).parent().prepend('<img src="'+base+'filestore/dev/GFX/nav-hover-left.png" alt="" class="navHoverLeftImg" />');
      $(this).parent().prepend('<img src="'+base+'filestore/dev/GFX/nav-hover-right.png" alt="" class="navHoverRightImg" />');
      var width = $(this).width()+46-20;
      $(this).parent().addClass("hover");
      $(this).addClass("hover");
    }
  });
  $(".nav_main a:not(.navigated)").bind("mouseover mouseout",function() {
    var li = $(this).parent();
    li.find("img").toggle();
    li.toggleClass("ishover");
  });

// below is the same as the mouseover binded function above. Could be prettier but time is money

  $(".nav_main a.navigated").parent().prepend('<img src="'+base+'filestore/dev/GFX/nav-current-left.png" alt="" class="navHoverLeftImg" />').prepend('<img src="'+base+'filestore/dev/GFX/nav-current-right.png" alt="" class="navHoverRightImg" />').addClass("hover").find("a").addClass("hover").parent().find(".navHoverCenterImg");

$(".nav_main li:not(.first)").append('<div class="menuseparator"></div>');

// #### HEADER IMAGE GALLERY v 0.1 ####

var imgCount = $(".slideImg").length;
var slidePos = 1; // init slider position
  
var nextSlide = function() {
  if(slidePos<imgCount) {
    $(".slideImg:eq("+(slidePos-1).toString()+")").fadeOut()
    $(".headergallery ul li:eq("+(slidePos-1)+")").removeClass("current");
    slidePos++;
    $(".slideImg:eq("+(slidePos-1).toString()+")").fadeIn();
    $(".headergallery ul li:eq("+(slidePos-1)+")").addClass("current");
  }
  else {  // loop
    $(".slideImg").fadeOut().siblings(".slideImg").first().fadeIn(); // go to first img
    $(".headergallery ul li:eq("+(slidePos-1)+")").removeClass("current");
    slidePos = 1;
    $(".headergallery ul li:eq("+(slidePos-1)+")").addClass("current");
  }
};

var slideTo = function(slideNumber) {
    $(".slideImg:eq("+(slidePos-1).toString()+")").fadeOut();
    $(".headergallery ul li:eq("+(slidePos-1)+")").removeClass("current");
    slidePos = slideNumber;
    $(".slideImg:eq("+(slidePos-1).toString()+")").fadeIn();
    $(".headergallery ul li:eq("+(slidePos-1)+")").addClass("current");  
}

  $(".headergallery").bind("slide",function(){
      nextSlide();
  });

// EOF IMAGE GALLERY

var slideListHtml = '<ul>';
for(x=1;x<imgCount+1;x++) {
  slideListHtml += '<li><a href="#'+x+'">'+x+'</a></li>\n';
}
slideListHtml += '</ul>';

$(".headergallery").append(slideListHtml);
$(".headergallery ul li:eq("+(slidePos-1)+")").addClass("current");  
$(".headergallery ul a").click(function() {
  autoslide=false; // disable autoslider
  slideTo($(this).text());
});

if($(".nav_sub li").length)
  $(".nav_sub").append('<img src="'+base+'filestore/dev/GFX/nav-sub-bottom-img.png" alt="" class="bottom" />');


  // ### user font-size chooser ###
var getTextSize = function() {
var textsize = $.cookie('textsize');
$(".article-content, p")
 .removeClass("default")
 .removeClass("small")
 .removeClass("medium")
 .removeClass("big").addClass(textsize);
};
getTextSize();
$(".nav_support ul li").click(function(event){
  $target = $(event.target);
  if ($target.is("li")) {
    $.cookie('textsize', $target.attr("class"), { expires: 300, path: '/'});
  }
  getTextSize();
  return false;
});  


$('.utstillere').bind('click', function(e){
        if($target) $target.removeClass('selected'); // remove existing selected node;
	var target = e.target, // e.target grabs the node that triggered the event.
		$target = $(target);  // wraps the node in a jQuery object
	if ($target.is(".utstillere div > li")) { 
          $target.toggleClass('selected');
          $target.children().slideToggle();
	}
});


if($(".utstillere").length) {

var lis = $(".utstillere > li");
for(var i = 0; i < lis.length; i+=4) {
  lis.slice(i, i+4)
     .wrapAll("<div class='blockOfFour'></div>");
}

var lis2 = $(".utstillere > div");
for(var i = 0; i < lis2.length; i+=2) {
  lis2.slice(i, i+2)
     .wrapAll("<div class='blockOfEight'></div>");
}

}

  if ($body.hasClass("search")) {
    // SEARCH
    var $articleResults = jQuery(".articleResults").load(articleResults, function(){
    	//
		$articleResults.find(".paginator a").live("click", function(e){
			e.preventDefault();
			$articleResults.load($(this).attr("href"));
		})
    });
    var $userResults = jQuery(".userResults").load(userResults, function () {
    	// body...
		$userResults.find(".paginator a").live("click", function(e){
			e.preventDefault();
			$userResults.load($(this).attr("href"));
		})
    });
  }  // END SEARCH 

 if($("#loginForm").length) {
   $.get(ips.system.base+"?module=Webshop;action=ShoppingBasketView.displayShoppingBasket;template=xml;");
 }

 jQuery("#forgottenPassword").unbind().bind("submit",function(e) {
    e.preventDefault();
    jQuery("input[name='TEMPLATE']").attr("value","xml");
    jQuery.post(
      jQuery(this).attr("action"),jQuery(this).serialize(),
      function(data) {
       if(jQuery(data).find("EMAIL_PASSWORD[SUCCESS='true']").length == 1) {
         alert("Passordet ble sendt");
         window.location = ips.system.base+'pBl7xY4UEJFW9S_TdLVYDCFspY39Ec720-U9or6XP.ips?template=webshop';
       }
       else {
         alert("Fant ingen brukerkonto med epost "+jQuery("#email").val());
       }
      });
  });

}); // ################### eof document ready ###################

var currentUserId;

function updateGroups() {
  groupsArray = $("#addToGroups").val().split(","); // array of groups the user belongs to
  var groupsToRemove = [];
  $("#allgroupsms2side__dx").find("option").each(function() {
    if($(this).attr("value")== "20" || $(this).attr("value")== "21") $(this).remove();
    groupsToRemove.push($(this).attr("value"));
  });
  
  var groupsToAdd = [];
  $("#allgroupsms2side__sx").find("option").each(function() {
    if($(this).attr("value")== "20" || $(this).attr("value")== "21") $(this).remove();
    groupsToAdd.push($(this).attr("value"));
  });
  
  $(".groupCheckbox:checked").each(function() {
    groupsToAdd.push($(this).val()); //push the group value of checked checkboxes
  });
  
  $(".groupCheckbox:not(:checked)").each(function() {
    groupsToRemove.push($(this).val()); //push the group value of checked checkboxes
  });
  groupsArray.removeItems(groupsToRemove);
  groupsArray = groupsArray.concat(groupsToAdd).unique();
  $("input[name=groups]").val(groupsArray.join(",")); // put value into hidden group field
  
}
Array.prototype.removeItems = function(itemsToRemove) {

    if (!/Array/.test(itemsToRemove.constructor)) {
        itemsToRemove = [ itemsToRemove ];
    }

    var j;
    for (var i = 0; i < itemsToRemove.length; i++) {
        j = 0;
        while (j < this.length) {
            if (this[j] == itemsToRemove[i]) {
                this.splice(j, 1);
                $.get(ips.system.base+"?action=UserGroup.publicRemoveNewsletterRecipient;module=Users;user_id="+currentUserId+";usergroup_id="+itemsToRemove[i]+";template=xml");
            } else {
                j++;
            }
        }
    }
}
Array.prototype.unique = function() {
    var a = this.concat();
    for(var i=0; i<a.length; ++i) {
        for(var j=i+1; j<a.length; ++j) {
            if(a[i] === a[j])
                a.splice(j, 1);
        }
    }

    return a;
};


function addCommas(nStr)
{
	nStr += '';
	x = nStr.split(',');
	x1 = x[0];
	x2 = x.length > 1 ? ',' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + '.' + '$2');
	}
	return x1 + x2;
}


/* ###
this makes all images in footer black and white, with colors appearing when mouse is over them 
 !!! requires grayscale.js !!! don't give the images padding for Opera's sake.
*/
jQuery(window).load(function($) { // wait until all images are loaded.
	grayscale.prepare( jQuery('#footer img') );
	grayscale( jQuery('#footer img') );
        jQuery("#footer img").css("display","inline");
	jQuery('#footer img').hover(function() {
		grayscale.reset( jQuery(this) );
	}, function() {
		grayscale( jQuery(this) );
	});
});
/* eof */


var autoslide = true;
setInterval("if(autoslide)$('.headergallery').trigger('slide'); ",4000);
