// 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)})();


// Denne maa brukes dersom man skal implementere ulike skriftstr.
jQuery.cookie = function(name, value, options) {
 if (typeof value != 'undefined') { // name and value given, set cookie
 options = options || {};
 if (value === null) {
 value = '';
 options = $.extend({}, options); // clone object since it's unexpected behavior if the expired property were changed
 options.expires = -1;
 }
 var expires = '';
 if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
 var date;
 if (typeof options.expires == 'number') {
 date = new Date();
 date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
 } else {
 date = options.expires;
 }
 expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
 }
 // NOTE Needed to parenthesize options.path and options.domain
 // in the following expressions, otherwise they evaluate to undefined
 // in the packed version for some reason...
 var path = options.path ? '; path=' + (options.path) : '';
 var domain = options.domain ? '; domain=' + (options.domain) : '';
 var secure = options.secure ? '; secure' : '';
 document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
 } else { // only name given, get cookie
 var cookieValue = null;
 if (document.cookie && document.cookie != '') {
 var cookies = document.cookie.split(';');
 for (var i = 0; i < cookies.length; i++) {
 var cookie = jQuery.trim(cookies[i]);
 // Does this cookie string begin with the name we want?
 if (cookie.substring(0, name.length + 1) == (name + '=')) {
 cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
 break;
 }
 }
 }
 return cookieValue;
 }
}; 


// Del paa sosiale medier
function facebook_click() {
  u=window.location.href;
  t=document.title;
  window.open('http://www.facebook.com/sharer.php?u='+encodeURIComponent(u)+'&t='+encodeURIComponent(t),'sharer','toolbar=0,status=0,width=626,height=436');
  return false;
}

//master.js
jQuery(document).ready(function($) {

  $("#loginForm").unbind().bind("submit",function(e) {
    e.preventDefault();
    $.post($(this).attr("action"),$(this).serialize(),function() {
       window.location.reload();
    });
  });

  // DISPLAY USER INFO WHEN LOGGED IN
  jQuery.get(base + "?template=userLoggedIn", function(data){
    jQuery(".nav_support").append(data); // APPEND RESULT TO HEADER
  });

  $(".printArticle").click(function(e) {
    e.preventDefault();
    window.print();
  });
  // Opens new window
  $("a[rel='external']").click(function(){
    this.target = "_blank";
  });


  //TEXTSIZE
  var getTextSize = function() {
  var textsize = $.cookie('textsize');
  $("#main .summary,#main .article,#content .summary,#content .article,.frontpage .aside")
   .removeClass("default")
   .removeClass("small")
   .removeClass("medium")
   .removeClass("large").addClass(textsize);
  };
  getTextSize();

  $(".textsizing span").click(function(event){
    $target = $(event.target);
    if ($target.is("span")) {
      $.cookie('textsize', $target.attr("id"), { expires: 300, path: '/'});
    }
    getTextSize();
    return false;
  });


   //------------------
   // VALIDATE E-MAIL.
   // - ToDo: Remove this
   //------------------
   var emailpattern = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

   //----------------------------
   // Newsletter form interaction
   // - Hides label when click on input 
   //----------------------------
   var $newsletter = $(".newsletter_form"), //CACHE
       $emailNewsletter = $newsletter.find(".email"),
       $labelNewsletter = $newsletter.find("label");
   if ($emailNewsletter.val() !== "") {$labelNewsletter.hide();}
   $newsletter.submit(function(){
   if ($emailNewsletter.val() === "") {return false;}
   });
   $emailNewsletter.focus(function(){$labelNewsletter.hide();}).blur(function(){
     if ($(this).val() === "") {$labelNewsletter.show();}
   });
   $newsletter.find("label").click(function(){
    $emailNewsletter.focus();
   });

   var $ipsform = $(".rightForm .ipsform"), //CACHE
       $inputIpsform = $ipsform.find("input"),
       $labelIpsform = $ipsform.find("label");
   if ($inputIpsform.val() !== "") {$labelIpsform .hide();}
   $ipsform.submit(function(){
   if ($inputIpsform.val() === "") {return false;}
   });
   $inputIpsform.focus(function(){$labelIpsform.hide();}).blur(function(){
     if ($(this).val() === "") {$labelIpsform.show();}
   });
   $ipsform.find("label").click(function(){
    $inputIpsform.focus();
   });


   var $auth = $("#auth"), //CACHE
       $inputAuth1 = $auth.find("input.username"),
       $labelAuth1 = $auth.find("label.username");
   if ($inputAuth1.val() !== "") {$labelAuth1.hide();}
   $auth.submit(function(){
   if ($inputAuth1.val() === "") {return false;}
   });
   $inputAuth1.focus(function(){$labelAuth1.hide();}).blur(function(){
     if ($(this).val() === "") {$labelAuth1.show();}
   });
   $auth.find("label.username").click(function(){
    $inputAuth1.focus();
   });

   var $auth = $("#auth"), //CACHE
       $inputAuth2 = $auth.find("input.password"),
       $labelAuth2 = $auth.find("label.password");
   if ($inputAuth2.val() !== "") {$labelAuth2.hide();}
   $auth.submit(function(){
   if ($inputAuth2.val() === "") {return false;}
   });
   $inputAuth2.focus(function(){$labelAuth2.hide();}).blur(function(){
     if ($(this).val() === "") {$labelAuth2.show();}
   });
   $auth.find("label.password").click(function(){
    $inputAuth2.focus();
   });

  //--------------------
  // NEWSLETTER SIGN UP
  //--------------------
  jQuery(".newsletter_form").submit(function(e){
    e.preventDefault();
    var $this = jQuery(this); //cache
    var $email = $this.find("input.email"); //cache
    var $fieldsetNewsletter = $this.find("fieldset");
    if(!$this.find(".response").get()[0]) {
      jQuery("<p class='response' />").appendTo($this);
    }
    var $response = $this.find(".response"); // Cache
    if (emailpattern.test($email.val())) {
      $response.text("Utf&#248;rer handling");
      $.ajax({
        url: "?template=newsletterResponse",
        data: $this.serialize(),
        error: function() {
          $response.text("Feil / Error");
        },
        success: function(data) {
          $response.text("Din e-postadresse er lagt til som mottaker av nyhetsbrev");
          $email.removeClass("error").val("");
          $fieldsetNewsletter.addClass("hide");
        }
      });
    } else {
      $email.addClass("error");
      $response.text("Skriv inn gyldig e-postadresse");
    }
  });




  // TOGGLE
  $(".toggle").not("a").hide();
  $("a.toggle").click(function(){
    $(this).next(".toggle").toggle("slow");
    return false;
  }); //END TOGGLE 

  // TIPS FORM
  /*var $tipsform = $("#tipsForm").submit(function(event){
    var $this = $(this), $senderName = $("#senderName"), $senderEmail = $("#senderEmail"), $recipientEmail = $("#recipientEmail"), $response = $this.find("h3");
    $this.find(".error").removeClass("error");
    if($senderName.val() === "") {
      $senderName.addClass("error").focus().parent().addClass("error");
      return false;
    }
    if(!emailpattern.test($senderEmail.val())) {
      $senderEmail.addClass("error").focus().parent().addClass("error");
      return false;
    }
    if(!emailpattern.test($recipientEmail.val())) {
      $recipientEmail.addClass("error").focus().parent().addClass("error");
      return false;
    }
    $.ajax({
      url: urlroot,
      data: $tipsform.serialize(),
      error: function() {
      $response.text("FEIL");
    },
    success: function() {
      $response.text("Tipset ble sendt!");
      $tipsform.toggle("slow");
    }
  });
  return false;
  });
*/


// 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(5000).slideUp("slow");
      }
    });
  }); // END TIP A FRIEND


   // UTILITY
   var base = ips.system.base; //cache as local variable

   // Searchform interaction
   var $searchForm = $("#search_form"), //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();
   }); 
  // EVENT DELEGATION - Not touching dom until click
  $(".externalLink").live("click", function(){
    $(this).attr("target", "_blank");
  });


  // IPS FORM validation by sveinung@idium.no March 2010
  $("body").delegate("form", "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 custom class, and recheck _class
      var testCustom = /required_if_not_([a-zA-Z0-9]+)/.exec($li.attr("class"));
      if (testCustom && testCustom[1] && testCustom[1] !== '') {
          if ($("." + testCustom[1]).find("input,textarea,select").eq(0).val() == '') {
              // if other field has no value, this field is required
              $li.addClass("required");
          } else {
              // if other field has value, this field isnt required
              $li.removeClass("required");
          }
          // check if .required and 
      } else 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

    if ( ips.system.parameters.debug ) {
      console.log(errors);
    }  // 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 );  
      });
      return false;
    }
  });
  // Possible to click the errors away
  $("span.error").live("click", function(){$(this).fadeOut();}); 
//FORM END
});
