///////////////////////////////////////////////////////////////////////////
//                        AutoSuggest Packed JS                          //
///////////////////////////////////////////////////////////////////////////
if(typeof(bsn)=="undefined")_b=bsn={};if(typeof(_b.Autosuggest)=="undefined")_b.Autosuggest={};else alert("Autosuggest is already set!");_b.AutoSuggest=function(id,param){if(!document.getElementById)return 0;this.fld=_b.DOM.gE(id);if(!this.fld)return 0;this.sInp="";this.nInpC=0;this.aSug=[];this.iHigh=0;this.oP=param?param:{};var k,def={minchars:1,meth:"get",varname:"input",className:"autosuggest",timeout:2500,delay:500,offsety:-5,shownoresults:true,noresults:"No results!",maxheight:250,cache:true,maxentries:25};for(k in def){if(typeof(this.oP[k])!=typeof(def[k]))this.oP[k]=def[k]}var p=this;this.fld.onkeypress=function(ev){return p.onKeyPress(ev)};this.fld.onkeyup=function(ev){return p.onKeyUp(ev)};this.fld.setAttribute("autocomplete","off")};_b.AutoSuggest.prototype.onKeyPress=function(ev){var key=(window.event)?window.event.keyCode:ev.keyCode;var RETURN=13;var TAB=9;var ESC=27;var bubble=1;switch(key){case RETURN:this.setHighlightedValue();bubble=0;break;case ESC:this.clearSuggestions();break}return bubble};_b.AutoSuggest.prototype.onKeyUp=function(ev){var key=(window.event)?window.event.keyCode:ev.keyCode;var ARRUP=38;var ARRDN=40;var bubble=1;switch(key){case ARRUP:this.changeHighlight(key);bubble=0;break;case ARRDN:this.changeHighlight(key);bubble=0;break;default:this.getSuggestions(this.fld.value)}return bubble};_b.AutoSuggest.prototype.getSuggestions=function(val){if(val==this.sInp)return 0;_b.DOM.remE(this.idAs);this.sInp=val;if(val.length<this.oP.minchars){this.aSug=[];this.nInpC=val.length;return 0}var ol=this.nInpC;this.nInpC=val.length?val.length:0;var l=this.aSug.length;if(this.nInpC>ol&&l&&l<this.oP.maxentries&&this.oP.cache){var arr=[];for(var i=0;i<l;i++){if(this.aSug[i].value.substr(0,val.length).toLowerCase()==val.toLowerCase()||this.aSug[i].info=='as_header')arr.push(this.aSug[i])}this.aSug=arr;this.createList(this.aSug);return false}else{var pointer=this;var input=this.sInp;clearTimeout(this.ajID);this.ajID=setTimeout(function(){pointer.doAjaxRequest(input)},this.oP.delay)}return false};_b.AutoSuggest.prototype.doAjaxRequest=function(input){if(input!=this.fld.value)return false;var pointer=this;if(typeof(this.oP.script)=="function")var url=this.oP.script(encodeURIComponent(this.sInp));else var url=this.oP.script+this.oP.varname+"="+encodeURIComponent(this.sInp);if(!url)return false;var meth=this.oP.meth;var input=this.sInp;var onSuccessFunc=function(req){pointer.setSuggestions(req,input)};var onErrorFunc=function(status){ };var myAjax=new _b.Ajax();myAjax.makeRequest(url,meth,onSuccessFunc,onErrorFunc)};_b.AutoSuggest.prototype.setSuggestions=function(req,input){if(input!=this.fld.value)return false;this.aSug=[];if(this.oP.json){var jsondata=eval('('+req.responseText+')');for(var i=0;i<jsondata.results.length;i++){this.aSug.push({'id':jsondata.results[i].id,'value':jsondata.results[i].value,'info':jsondata.results[i].info})}}else{var xml=req.responseXML;var results=xml.getElementsByTagName('results')[0].childNodes;for(var i=0;i<results.length;i++){if(results[i].hasChildNodes())this.aSug.push({'id':results[i].getAttribute('id'),'value':results[i].childNodes[0].nodeValue,'info':results[i].getAttribute('info')})}}this.idAs="as_"+this.fld.id;this.createList(this.aSug)};_b.AutoSuggest.prototype.createList=function(arr){var pointer=this;_b.DOM.remE(this.idAs);this.killTimeout();if(arr.length==0&&!this.oP.shownoresults)return false;var div=_b.DOM.cE("div",{id:this.idAs,className:this.oP.className});var hcorner=_b.DOM.cE("div",{className:"as_corner"});var hbar=_b.DOM.cE("div",{className:"as_bar"});var header=_b.DOM.cE("div",{className:"as_header"});header.appendChild(hcorner);header.appendChild(hbar);div.appendChild(header);var ul=_b.DOM.cE("ul",{id:"as_ul"});for(var i=0;i<arr.length;i++){if(arr[i].info=="plugin_header"){var li=_b.DOM.cE("li",{className:"as_header"},arr[i].value);ul.appendChild(li);i++}var val=arr[i].value;var st=val.toLowerCase().indexOf(this.sInp.toLowerCase());var output=val.substring(0,st)+"<em>"+val.substring(st,st+this.sInp.length)+"</em>"+val.substring(st+this.sInp.length);var span=_b.DOM.cE("span",{},output,true);if(arr[i].info!=""){var br=_b.DOM.cE("br",{});span.appendChild(br);var small=_b.DOM.cE("small",{},'');span.appendChild(small)}var a=_b.DOM.cE("a",{href:"#"});var tl=_b.DOM.cE("span",{className:"tl"}," ");var tr=_b.DOM.cE("span",{className:"tr"}," ");a.appendChild(tl);a.appendChild(tr);a.appendChild(span);a.name=i+1;a.onclick=function(){pointer.setHighlightedValue();return false};a.onmouseover=function(){pointer.setHighlight(this.name)};var li=_b.DOM.cE("li",{},a);ul.appendChild(li)}if(arr.length==0&&this.oP.shownoresults){var li=_b.DOM.cE("li",{className:"as_warning"},this.oP.noresults);ul.appendChild(li)}div.appendChild(ul);var fcorner=_b.DOM.cE("div",{className:"as_corner"});var fbar=_b.DOM.cE("div",{className:"as_bar"});var footer=_b.DOM.cE("div",{className:"as_footer"});footer.appendChild(fcorner);footer.appendChild(fbar);div.appendChild(footer);var pos=_b.DOM.getPos(this.fld);div.style.left=pos.x+"px";div.style.top=(pos.y+this.fld.offsetHeight+this.oP.offsety)+"px";div.style.width=this.fld.offsetWidth+"px";div.onmouseover=function(){pointer.killTimeout()};div.onmouseout=function(){pointer.resetTimeout()};document.getElementsByTagName("body")[0].appendChild(div);this.iHigh=0;var pointer=this;this.toID=setTimeout(function(){pointer.clearSuggestions()},this.oP.timeout)};_b.AutoSuggest.prototype.changeHighlight=function(key){var list=_b.DOM.gE("as_ul");if(!list)return false;var n;if(key==40)n=this.iHigh+1;else if(key==38)n=this.iHigh-1;if(n>list.childNodes.length)n=list.childNodes.length;if(n<1)n=1;this.setHighlight(n)};_b.AutoSuggest.prototype.setHighlight=function(n){var list=_b.DOM.gE("as_ul");if(!list)return false;if(this.iHigh>0)this.clearHighlight();this.iHigh=Number(n);if(list.childNodes[this.iHigh-1].className!="as_header")list.childNodes[this.iHigh-1].className="as_highlight";this.killTimeout()};_b.AutoSuggest.prototype.clearHighlight=function(){var list=_b.DOM.gE("as_ul");if(!list)return false;if(this.iHigh>0){if(list.childNodes[this.iHigh-1].className!="as_header")list.childNodes[this.iHigh-1].className="";this.iHigh=0}};_b.AutoSuggest.prototype.setHighlightedValue=function(){if(this.iHigh){this.sInp=this.fld.value=this.aSug[this.iHigh-1].value;this.fld.focus();if(this.fld.selectionStart)this.fld.setSelectionRange(this.sInp.length,this.sInp.length);this.clearSuggestions();if(typeof(this.oP.callback)=="function")this.oP.callback(this.aSug[this.iHigh-1])}};_b.AutoSuggest.prototype.killTimeout=function(){clearTimeout(this.toID)};_b.AutoSuggest.prototype.resetTimeout=function(){clearTimeout(this.toID);var pointer=this;this.toID=setTimeout(function(){pointer.clearSuggestions()},1000)};_b.AutoSuggest.prototype.clearSuggestions=function(){this.killTimeout();var ele=_b.DOM.gE(this.idAs);var pointer=this;if(ele){var fade=new _b.Fader(ele,1,0,250,function(){_b.DOM.remE(pointer.idAs)})}};if(typeof(_b.Ajax)=="undefined")_b.Ajax={};_b.Ajax=function(){this.req={};this.isIE=false};_b.Ajax.prototype.makeRequest=function(url,meth,onComp,onErr){if(meth!="POST")meth="GET";this.onComplete=onComp;this.onError=onErr;var pointer=this;if(window.XMLHttpRequest){this.req=new XMLHttpRequest();this.req.onreadystatechange=function(){pointer.processReqChange()};this.req.open("GET",url,true);this.req.send(null)}else if(window.ActiveXObject){this.req=new ActiveXObject("Microsoft.XMLHTTP");if(this.req){this.req.onreadystatechange=function(){pointer.processReqChange()};this.req.open(meth,url,true);this.req.send()}}};_b.Ajax.prototype.processReqChange=function(){if(this.req.readyState==4){if(this.req.status==200){this.onComplete(this.req)}else{this.onError(this.req.status)}}};if(typeof(_b.DOM)=="undefined")_b.DOM={};_b.DOM.cE=function(type,attr,cont,html){var ne=document.createElement(type);if(!ne)return 0;for(var a in attr)ne[a]=attr[a];var t=typeof(cont);if(t=="string"&&!html)ne.appendChild(document.createTextNode(cont));else if(t=="string"&&html)ne.innerHTML=cont;else if(t=="object")ne.appendChild(cont);return ne};_b.DOM.gE=function(e){var t=typeof(e);if(t=="undefined")return 0;else if(t=="string"){var re=document.getElementById(e);if(!re)return 0;else if(typeof(re.appendChild)!="undefined")return re;else return 0}else if(typeof(e.appendChild)!="undefined")return e;else return 0};_b.DOM.remE=function(ele){var e=this.gE(ele);if(!e)return 0;else if(e.parentNode.removeChild(e))return true;else return 0};_b.DOM.getPos=function(e){var e=this.gE(e);var obj=e;var curleft=0;if(obj.offsetParent){while(obj.offsetParent){curleft+=obj.offsetLeft;obj=obj.offsetParent}}else if(obj.x)curleft+=obj.x;var obj=e;var curtop=0;if(obj.offsetParent){while(obj.offsetParent){curtop+=obj.offsetTop;obj=obj.offsetParent}}else if(obj.y)curtop+=obj.y;return{x:curleft,y:curtop}};if(typeof(_b.Fader)=="undefined")_b.Fader={};_b.Fader=function(ele,from,to,fadetime,callback){if(!ele)return 0;this.e=ele;this.from=from;this.to=to;this.cb=callback;this.nDur=fadetime;this.nInt=50;this.nTime=0;var p=this;this.nID=setInterval(function(){p._fade()},this.nInt)};_b.Fader.prototype._fade=function(){this.nTime+=this.nInt;var ieop=Math.round(this._tween(this.nTime,this.from,this.to,this.nDur)*100);var op=ieop/100;if(this.e.filters){try{this.e.filters.item("DXImageTransform.Microsoft.Alpha").opacity=ieop}catch(e){this.e.style.filter='progid:DXImageTransform.Microsoft.Alpha(opacity='+ieop+')'}}else{this.e.style.opacity=op}if(this.nTime==this.nDur){clearInterval(this.nID);if(this.cb!=undefined)this.cb()}};_b.Fader.prototype._tween=function(t,b,c,d){return b+((c-b)*(t/d))};

///////////////////////////////////////////////////////////////////////////
//                            Google Maps                                //
///////////////////////////////////////////////////////////////////////////
var map = null;
function load() {
  if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById('map'), {draggableCursor: 'default', draggingCursor: 'default'});
    map.setCenter(new GLatLng(53.482019,-2.263999), 15);
    map.addControl(new GSmallMapControl(), new GControlPosition(G_ANCHOR_TOP_LEFT));
    map.setMapType(G_NORMAL_MAP);
    map.enableDoubleClickZoom();
    keyboardhandler = new GKeyboardHandler(map);
    var point = new GLatLng(53.482019,-2.263999);
    var marker = createMarker(point,'<img src=\"http://www.rawdesignstudio.co.uk/assets/image/logo.jpg\" alt=\"Raw Design Studio\" /> <p><strong>Raw Design Studio</strong><br />The Engine House <br />Islington Mill Studios<br />James Street<br />Salford, Greater Manchester<br />M3 5HW</p> <p><strong>T:</strong> 0161 839 2260<br /><strong>E:</strong> info@rawdesignstudio.co.uk</p><br clear"all" /><br clear"all" />');
    map.addOverlay(marker);
    GEvent.trigger(marker, 'click');
  }
}


function createMarker(point, label) {
  var marker = new GMarker(point);
  GEvent.addListener(marker,"click",function() { marker.openInfoWindowHtml(label);});
  return marker;
}

///////////////////////////////////////////////////////////////////////////
//                            Image Carousel                             //
///////////////////////////////////////////////////////////////////////////

function mycarousel_initCallback(carousel) {
    $('#pageNav .next').bind('click', function() {
        carousel.next();
        return false;
    });
    $('#pageNav .prev').bind('click', function() {
        carousel.prev();
        return false;
    });
    $('#pageNav a').bind('click', function() {
	 $(this).blur();
        carousel.scroll($.jcarousel.intval($(this).attr('id').slice(3)));
        carousel.startAuto(0);
        carousel.stopAuto();
        return false;
    });
};

function mycarousel_VisibleInCallbackBeforeAnimation(carousel,item,idx,state) {
	$("#pageNav a").removeClass('selected');
	$("#pageNav a#ss_"+idx+"").addClass('selected');
  var title = $("#slideShowContainer ul li:eq(" + (idx - 1) + ") img").attr("title");
	$("p.title").text(title);
};

function mycarousel_VisibleInCallbackAfterAnimation(carousel,item,idx,state) { };


///////////////////////////////////////////////////////////////////////////
//                            JQuery Stuff                               //
///////////////////////////////////////////////////////////////////////////

$(document).ready(function() {
  
  // Submit button hovers 
  $(".submit").hover(function() { 
    $(this).addClass("submit_hover");
  }, function() {
    $(this).removeClass("submit_hover");
  });
  
  $(".fade").hover(function(){
    $(this).cycle({ 
      fx:    'fade', 
      speed:  2500 
    });
  });
  
  // Carousel Call
  $("#slideShowContainer").jcarousel({
    scroll: 1,
    auto: 4,
    wrap: 'both',
    easing: 'easeOutQuad',
    animation: 2000,
    buttonNextHTML: null,
    buttonPrevHTML: null,
    initCallback: mycarousel_initCallback,
    itemVisibleInCallback: {
      onBeforeAnimation: mycarousel_VisibleInCallbackBeforeAnimation,
      onAfterAnimation: mycarousel_VisibleInCallbackAfterAnimation
    }
  });
  
  
  //////////////////////////////////////////
  //             Search Functions         //
  //////////////////////////////////////////
	$('#searchQuery').bind('submit', function() {return false;} ) ;
	
	// Set autosuggest options with all plugins activated
	var options = {
		script:"/assets/modules/ajax/_doAjaxSearch.action.php?json=true&limit=8&",
		varname:"input",
		json:true,						// Returned response type
		shownoresults:true,				// If disable, display nothing if no results
		noresults:"No Result Found",			// String displayed when no results
		maxresults:8,					// Max num results displayed
		cache:true,					// To enable cache
		minchars:2,						// Start AJAX request with at leat 2 chars
		timeout:100000,					// AutoHide in XX ms
		callback: function (obj) { 		// Callback after click or selection
  
  		// Build HTML
			var url = obj.info;
			window.location.replace(url);
	
		}
	};
	// Init autosuggest
	var as_json = new bsn.AutoSuggest('search', options);


  //////////////////////////////////////////
  //             Newsletter Form          //
  //////////////////////////////////////////
  // Default input values
  $("#searchQuery input").click(function() { 
    if($("#searchQuery input").attr("value") == "Search") {
     $("#searchQuery input").attr("value", "");
    }
  });

  $("#newsletter #name").click(function() { 
    if($("#newsletter #name").attr("value") == "Name") {
     $("#newsletter #name").attr("value", "");
    }
  });
  
  $("#newsletter #email").click(function() { 
    if($("#newsletter #email").attr("value") == "Email") {
      $("#newsletter #email").attr("value", "");
    }
  });
  
  // Newsletter validation
  jQuery.validator.addMethod('notEqualTo', function(value, element, param) { return value != param; }, 'This field is required.' );

  $("#newsletter").validate({
    submitHandler: function(form) {
        $("#newsletter #submit").attr("value","Sending...");
        $("#newsletter #submit").attr("disabled","disabled");
        form.submit();
    },
    rules: {
      name: {
       required: true,
       notEqualTo: "Name"
      },
      email: {
       required: true,
       email: true,
       notEqualTo: "Email Address"
      }
    }
  });
  
  //////////////////////////////////////////
  //             Contact Form             //
  //////////////////////////////////////////
  
  // Input default values
  $("#contactForm #name").click(function() { 
    if($("#contactForm #name").attr("value") == "Name*") {
      $("#contactForm #name").attr("value", "");
    }
  });
  
  $("#contactForm #company").click(function() { 
    if($("#contactForm #company").attr("value") == "Company") {
      $("#contactForm #company").attr("value", "");
    }
  });
  
  $("#contactForm #position").click(function() { 
    if($("#contactForm #position").attr("value") == "Position") {
      $("#contactForm #position").attr("value", "");
    }
  });
  
  $("#contactForm #email").click(function() { 
    if($("#contactForm #email").attr("value") == "Email*") {
      $("#contactForm #email").attr("value", "");
    }
  });
  
  $("#contactForm #phone").click(function() { 
    if($("#contactForm #phone").attr("value") == "Phone number*") {
      $("#contactForm #phone").attr("value", "");
    }
  });
  
  $("#contactForm #comments").click(function() { 
    if($("#contactForm #comments").attr("value") == "Question / comment*") {
      $("#contactForm #comments").attr("value", "");
    }
  });
  
  // Contact form validation
  $("#contactForm").validate({
    submitHandler: function(form) {
        $("#contactForm #submit").attr("value","Sending...");
        $("#contactForm #submit").attr("disabled","disabled");
        form.submit();
    },
    rules: {
      name: {
       required: true,
       notEqualTo: "Name*"
      },
      phone: {
       required: true,
       notEqualTo: "Phone number*"
      },
      comments: {
       required: true,
       notEqualTo: "Question / comment*"
      },
      email: {
       required: true,
       email: true,
       notEqualTo: "Email Address*"
      }
    }
  });
		
});

///////////////////////////////////////////////////////////////////////////
//                            Image Hovers                               //
///////////////////////////////////////////////////////////////////////////
// wrap as a jQuery plugin and pass jQuery in to our anoymous function
(function ($) {
    $.fn.cross = function (options) {
        return this.each(function (i) { 
            // cache the copy of jQuery(this) - the start image
            var $$ = $(this);
            
            // get the target from the backgroundImage + regexp
            var target = $$.css('backgroundImage').replace(/^url|[\(\)'"]/g, '');

            // nice long chain: wrap img element in span
            $$.wrap('<span style="position: relative;"></span>')
                // change selector to parent - i.e. newly created span
                .parent()
                // prepend a new image inside the span
                .prepend('<img>')
                // change the selector to the newly created image
                .find(':first-child')
                // set the image to the target
                .attr('src', target);

                // the CSS styling of the start image needs to be handled
                // differently for different browsers
                if ($.browser.msie) {
                    $$.css({
                        'position' : 'absolute', 
                        'left' : 0,
                        'background' : ''
                    });
                } else if ($.browser.mozilla) {
                    $$.css({
                        'position' : 'absolute', 
                        'left' : 0,
                        'background' : '',
                        'top' : this.offsetTop
                    });
                } else if ($.browser.opera && $.browser.version < 9.5) {
                    // Browser sniffing is bad - however opera < 9.5 has a render bug 
                    // so this is required to get around it we can't apply the 'top' : 0 
                    // separately because Mozilla strips the style set originally somehow...                    
                    $$.css({
                        'position' : 'absolute', 
                        'left' : 0,
                        'background' : '',
                        'top' : "0"
                    });
                } else { // Safari
                    $$.css({
                        'position' : 'absolute', 
                        'left' : 0,
                        'background' : ''
                    });
                }
                
            // similar effect as single image technique, except using .animate 
            // which will handle the fading up from the right opacity for us
            $$.hover(function () {
                $$.stop().animate({
                    opacity: 0
                }, 450);
            }, function () {
                $$.stop().animate({
                    opacity: 1
                }, 450);
            });
        });
    };
    
})(jQuery);

// note that this uses the .bind('load') on the window object, rather than $(document).ready() 
// because .ready() fires before the images have loaded, but we need to fire *after* because
// our code relies on the dimensions of the images already in place.
$(window).bind('load', function () {
    $('img.fadeTo').cross();
});
