// 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

jQuery(document).ready(function($) {

  if($("body.frontpage").length == 0 && $(".gmap").length > 0) {
    $(".gmap").goMap({ 
      address: ips.gmapsAddress, 
      zoom: ips.gmapsZoom, 
      maptype: ips.gmapsnoSatellite ? 'ROADMAP' : 'HYBRID',
      markers: [{  
        address: ips.gmapsAddress,
        title:' '
      }] 
    });
  }


$('.article-carusel').cycle({ 
        speed:  'slow', 
        timeout: 6000, 
        pause:   1
});

   // UTILITY
   var base = ips.system.base; //cache as local variable

   // 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();
   }); 


  // 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();
  }
});
//FORM END
});
