//Author: Steve Tomlin
//Date: 21/7/2009
function ClassGlobal(){this.init=function(){var objInst=this;$("input").each(function(intIndex){this.title=this.value;$(this).bind("focus",{objInst:objInst},function(e){e.data.objInst.focusText(this,this.title);return false;});$(this).bind("blur",{objInst:objInst},function(e){e.data.objInst.blurText(this,this.title);return false;});});}
this.focusText=function(obj,strCheck){if(obj.type=="text"){if(obj.value==strCheck){obj.value='';}}}
this.blurText=function(obj,strCheck){if(obj.type=="text"){if(obj.value==''||obj.value.indexOf(" ")==0){obj.value=strCheck;}}}
this.isMSIE=(navigator.userAgent.indexOf("MSIE")!=-1);this.isMACIE=(this.isMSIE&&navigator.userAgent.indexOf("Mac")!=-1);this.isSAFARI=(navigator.userAgent.indexOf("Safari")!=-1);this.MSIEActualVersion=function(){var intActualVersion=parseFloat(navigator.version);if(this.isMSIE){var strBrowser=navigator.userAgent;var strMSIE="MSIE";var intSpace=1;intActualVersion=parseFloat(strBrowser.substr(strBrowser.indexOf(strMSIE)+strMSIE.length+intSpace));intActualVersion=(isNaN(intActualVersion))?-1:intActualVersion;}else{intActualVersion=0;}
return intActualVersion;}
this.getBrowserV=function(){if(this.isMSIE){return this.MSIEActualVersion();}else{return navigator.appVersion;}}
this.formatDay=function(strDay){var str=""+strDay;var strLastNumber=str.substring(str.length-1,str.length);var strAfix=this.dateAfix("th");if(str.substring(str.length-2,str.length-1)!='1'){strAfix=(strLastNumber=="1")?this.dateAfix("st"):strAfix;strAfix=(strLastNumber=="2")?this.dateAfix("nd"):strAfix;strAfix=(strLastNumber=="3")?this.dateAfix("rd"):strAfix;}
return'<span class="date">'+strDay+strAfix+'</span>';}
this.dateAfix=function(str){return'<sup>'+str+'</sup>';}
this.init();}
var objGlobal;$(document).ready(function(){objGlobal=new ClassGlobal();});function ClassSubscribe(objContainer){this.objContainer=objContainer;this.isExpanded=false;this.addEvents=function(){var objInst=this;objContainer.find(".areaButton").bind("mouseover",{objInst:objInst},function(e){e.data.objInst.hover(1);return false;});objContainer.find(".areaButton").bind("mouseout",{objInst:objInst},function(e){e.data.objInst.hover(-1);return false;});objContainer.find(".areaButton").bind("click",{objInst:objInst},function(e){e.data.objInst.hover(-1);e.data.objInst.expand();return false;});objContainer.find(".close").bind("click",{objInst:objInst},function(e){e.data.objInst.collapse();return false;});}
this.hover=function(intShowHide){if(intShowHide==1&&!this.isExpanded){$(this.objContainer).find(".button").addClass("on");$(this.objContainer).find(".button").css("background-position","0 100%");}else{$(this.objContainer).find(".button").removeClass("on");$(this.objContainer).find(".button").css("background-position","");}}
this.expand=function(){var intFadeTimer=300;this.objContainer.css("z-index",4);this.isExpanded=true;this.objContainer.animate({right:'0'},intFadeTimer);this.objContainer.queue(function(e){$(this).stop(true);});}
this.collapse=function(){var objInst=this;var intFadeTimer=300;this.objContainer.animate({right:'-304px'},intFadeTimer);this.objContainer.queue(function(e){$(this).css("z-index","");objInst.isExpanded=false;$(this).stop(true);});}
this.addEvents();}
$(document).ready(function(){new ClassSubscribe($("#subscribe"));});function ClassCarousel(objContainer,arr){this.objContainer=objContainer;this.arr=arr;this.intThumbVisible=1;this.intIndex=0;this.init=function(){this.preloadAllImages(this.arr);this.attachEvents();}
this.preloadAllImages=function(arr){for(i=0;i<arr.length;++i){this.preloadImage(arr[i].src);}}
this.preloadImage=function(strSrc){var obj=new Image();obj.src=strSrc;}
this.attachEvents=function(){$(this.objContainer).find(".prev").unbind("click");$(this.objContainer).find(".prev").bind("click",{objInst:this},function(e){e.data.objInst.prepareAndScroll(e,-1);return false;});$(this.objContainer).find(".next").unbind("click");$(this.objContainer).find(".next").bind("click",{objInst:this},function(e){e.data.objInst.prepareAndScroll(e,1);return false;});}
this.prepareAndScroll=function(e,intPrevNext){var objScroll=$(this.objContainer).find(".scroll");var objMaxWidth=objScroll.find(".maxWidth");if(objMaxWidth[0].isScrolling!=true){var isPrev=(intPrevNext==-1)
var isNext=(intPrevNext==1)
var intScrollAmount=parseInt(objScroll.css("width"));var intNewIndex=this.getNewIndex(intPrevNext);var strNewItems=this.getNewItems(intNewIndex);if(isNext){objMaxWidth.append(strNewItems);}else if(isPrev){objMaxWidth.prepend(strNewItems);}
var objClone=objMaxWidth.clone();objMaxWidth.remove();objScroll.append(objClone);objMaxWidth=$(this.objContainer).find(".maxWidth");if(isPrev){objMaxWidth.css("left","0");}else{intScrollAmount=0;}
objMaxWidth[0].isScrolling=true;if(isNext){$(this.objContainer).find(".next").addClass("IsScrolling");}else{$(this.objContainer).find(".prev").addClass("IsScrolling");}
var intScrollTimer=500;objMaxWidth.animate({left:intScrollAmount+"px"},intScrollTimer);var objText=$(this.objContainer).find(".text");objText.css("opacity",0);objText[0].innerHTML=(this.arr[intNewIndex].text).replace(/\<br[^\>]*\>/g," ");objText.animate({opacity:1.0},intScrollTimer);var objInst=this;objMaxWidth.queue(function(e){var objImgsExtract=(isNext)?objMaxWidth.find("img:lt("+objInst.intThumbVisible+")"):objMaxWidth.find("img:gt("+(objInst.intThumbVisible-1)+")");objImgsExtract.remove();objMaxWidth.css("left","");if(isNext){$(objInst.objContainer).find(".next").removeClass("IsScrolling");}else{$(objInst.objContainer).find(".prev").removeClass("IsScrolling");}
var objGlobal=(objGlobal)?objGlobal:new ClassGlobal();var strDay=objGlobal.formatDay(objInst.arr[intNewIndex].day);$(objInst.objContainer).find(".day")[0].innerHTML=strDay;objInst.intIndex=intNewIndex;objMaxWidth[0].isScrolling=false;});}}
this.wrapImg=function(strSrc,alt){return'<img src="'+strSrc+'" alt="'+alt+'"/>';}
this.getNewIndex=function(intPrevNext){var intNewIndex=0;if(this.intThumbVisible==1){intNewIndex=this.intIndex+intPrevNext;intNewIndex=(intNewIndex<0)?intNewIndex=this.arr.length-1:intNewIndex;intNewIndex=(intNewIndex>(this.arr.length-1))?0:intNewIndex;}
return intNewIndex;}
this.getNewItems=function(intIndex){var str="";if(this.intThumbVisible==1){str=this.wrapImg(this.arr[intIndex].src,this.arr[intIndex].alt);}
return str;}
this.init();}
function ClassHTMLStringSelector(){this.getSafeMarkers=function(str,strNot){var strMarkers="†‡‰♠♣♥♦←↑→↓¬¿Þ~`ü¤±Æ";while(strMarkers.length){var strChar=strMarkers.substring(0,1);if(str.indexOf(strChar)==-1&&strNot.indexOf(strChar)==-1){return strChar;}
strMarkers=strMarkers.substr(1);}
alert("ClassHTMLStringSelector() BUG:\nApparently all of the above markers have been used: \n\n"+strMarkers);return null;}
this.ExtractAllSelectors=function(strHTML,strSelectors,isInnerHTML){strSelectors=strSelectors.replace(/\s+/g," ");var arrSplitSelectors=strSelectors.split(" ");for(var i=0;i<arrSplitSelectors.length;++i){if(arrSplitSelectors[i]!=""&&strHTML!=""){strHTML=this.ExtractSelector(strHTML,arrSplitSelectors[i],false);}}
if(isInnerHTML){strHTML=this.StringInnerHTML(strHTML);}
return strHTML;}
this.ExtractSelector=function(strHTML,strSelector,isInnerHTML){var str=strHTML;var isSelectorHTMLTag=(strSelector.indexOf("#")!=0&&strSelector.indexOf(".")!=0);var isSelectorClass=(strSelector.indexOf(".")==0);var isSelectorID=(strSelector.indexOf("#")==0);var isSelectorExists=false;var regStart;if(isSelectorID){var strSelectorStart=strSelector.substr(1).split(/\./g)[0];regStart=new RegExp('(\\<[^\\>]*id=\\"'+strSelectorStart+'\\")','g');}else if(isSelectorHTMLTag){var strSelectorStart=strSelector.split(/[\[\.]/g)[0];regStart=new RegExp('(\\<'+strSelectorStart+'[\\s\\>])','g');}else if(isSelectorClass){var strSelectorStart=strSelector.substr(1).split(/\[/)[0];regStart=new RegExp('(\\<[^\\>]*class\\=\\"?[^\\"]*[\\"\\s]'+strSelectorStart+'[\\"\\s])','g');}
isSelectorExists=(str.search(regStart)!=-1);if(isSelectorExists){var arrScripts=new Array();var arrComments=new Array();var strMarker1=this.getSafeMarkers(str,"");if(str.search(/\<script/)!=-1){str=str.replace(/(\<\/script\>)/g,"$1"+strMarker1);var regDetectScript=new RegExp('(\\<script[^\\'+strMarker1+']*)\\'+strMarker1,"g");str=str.replace(regDetectScript,function($0,$1){arrScripts[arrScripts.length]=$1;return"arrScripts["+(arrScripts.length-1)+"]";});}
if(str.search(/\<\!\-\-/)!=-1){var regDetectComment=new RegExp('(\\<\\!\\-\\-[^\\'+strMarker1+']*)\\'+strMarker1,"g");str=str.replace(/\-\-\>/g,"-->"+strMarker1);str=str.replace(regDetectComment,function($0,$1){arrComments[arrComments.length]=$1;return"arrComments["+(arrComments.length-1)+"]";});}
if(isSelectorID){str=str.substr(str.search(regStart));}else if(isSelectorHTMLTag){var intPosition=0;var isSquareBracket=(strSelector.search(/^[^\.]*\[/)!=-1);if(isSquareBracket){intPosition=(parseInt(strSelector.substring(strSelector.indexOf("[")+1,strSelector.indexOf("]")))+1);strSelector=strSelector.substring(0,strSelector.indexOf("["));}
var isMultipleClass=false;if(!isMultipleClass){str=str.replace(regStart,strMarker1+"$1");}else{}
var arrSelectorMatches=str.split(strMarker1);arrSelectorMatches[intPosition]=""+strMarker1+arrSelectorMatches[intPosition];var strWithSelector=arrSelectorMatches.join("");str=strWithSelector.substr(strWithSelector.indexOf(strMarker1)+1);}else if(strSelector.indexOf(".")==0){strSelector=strSelector.substr(1);var intPosition=0;var isSquareBracket=(strSelector.search(/^[^\.]*\[/)!=-1);if(isSquareBracket){intPosition=(parseInt(strSelector.substring(strSelector.indexOf("[")+1,strSelector.indexOf("]")))+1);strSelector=strSelector.substring(0,strSelector.indexOf("["));}
var isMultipleClass=false;if(!isMultipleClass){str=str.replace(regStart,strMarker1+"$1");}else{}
var arrSelectorMatches=str.split(strMarker1);arrSelectorMatches[intPosition]=""+strMarker1+arrSelectorMatches[intPosition];var strWithSelector=arrSelectorMatches.join("");str=strWithSelector.substr(strWithSelector.indexOf(strMarker1)+1);}
if(str.search(/\<[^\>]*\/\>/)==0){str=str.substring(0,str.indexOf("/>")+2);}else{var strMarker2=this.getSafeMarkers(str,strMarker1);str=str.replace(/\</g,strMarker1+"<");str=str.replace(new RegExp('\\'+strMarker1+'\\<\\/','g'),strMarker2+"</");str=str.replace(new RegExp('\\'+strMarker1+'([^\\>]*\\/\\>)','g'),"$1");str=str.substr(1);var objReg2=new RegExp('\\'+strMarker1+'([^\\'+strMarker1+'\\'+strMarker2+']*)\\'+strMarker2,'g');while(str.search(objReg2)!=-1){str=str.replace(objReg2,"$1");}
str=str.replace(new RegExp('([^\\'+strMarker2+']*)\\'+strMarker2+'(\\<[^\\>]*\\>)',''),"$1"+"$2<END/>");str=str.substring(0,str.indexOf("<END/>"));if(isInnerHTML){str=this.StringInnerHTML(str);}}
while(str.search(/arrScripts\[/)!=-1){str=str.replace(/arrScripts\[(\d+)\]/g,function($0,$1){return arrScripts[parseInt($1)]});}
while(str.search(/arrComments\[/)!=-1){str=str.replace(/arrComments\[(\d+)\]/g,function($0,$1){return arrComments[parseInt($1)]});}}else{if(typeof console!="undefined"){console.log("NO MATCH FOUND FOR SELECTOR - "+strSelector);}
str="";}
return str;}
this.StringInnerHTML=function(strHTML){var strInnerHTML=strHTML.substring(strHTML.indexOf(">")+1,strHTML.lastIndexOf("</"));return strInnerHTML;}
this.GetAttribute=function(strHTML,strAtt){var str=strHTML;var isAtt=(str.indexOf(strAtt+'="')!=-1)
if(isAtt){str=str.substr(str.indexOf(strAtt+'="')+strAtt.length+2);str=str.substring(0,str.indexOf('"'));}else{str="";}
return str;}
this.CountSelector=function(strHTML,strSelector){var intCount=0;var str=strHTML;var objRegExSelector;if(strSelector.indexOf("#")!=0&&strSelector.indexOf(".")!=0){objRegExSelector=new RegExp("\\<"+strSelector+"[\\s\\>]","g");}else{var strClassValue=strSelector.substr(1);objRegExSelector=new RegExp("\\<[^\\>]*class\\=\\\"[^\\\"]*"+strClassValue+"[^\\\"]*[\\\"][^\\>]*\\>");}
var arrSelectorMatches=str.split(objRegExSelector);intCount=(arrSelectorMatches.length-1);return intCount;}
this.addClass=function(strHTML,strSelector){var str=strHTML;var regClass=new RegExp('^(\\<[^\\>]*class\\=\\")([^\\"]*)(\\"[^\\>]*\\>)');var strMarker1=this.getSafeMarkers(str,"");if(str.search(regClass)!=-1){str=str.replace(regClass,function($0,$1,$2,$3){return $1+strMarker1+($2.split(" ")).join(strMarker1)+strMarker1+$3;});var regExist=new RegExp('^\\<[^\\>]*class\\=\\"[^\\"]*\\'+strMarker1+strSelector+'\\'+strMarker1+'[^\\"]*\\"[^\\>]*\\>');var isSelectorExist=str.search(regExist);str=str.replace(regClass,function($0,$1,$2,$3){return $1+($2.substring(1,$2.length-1).split(strMarker1)).join(" ")+$3;});if(isSelectorExist==-1){str=str.replace(regClass,"$1"+"$2"+" "+strSelector+"$3");}}else{str=str.replace(/(^\<[^\>]*[^\/])(\/?\>)/,'$1'+' class="'+strSelector+'"$2');}
return str;}
this.RegExpSpecialChars=function(strFind){strFind=strFind.split("");for(var i=0,rgxChars=/[^0-9a-z]/i;i<strFind.length;++i){if(rgxChars.test(strFind[i])&&strFind[i]!=" "){strFind[i]="\\"+strFind[i];}else if(rgxChars.test(strFind[i])&&strFind[i]==" "){strFind[i]="\\s";}}
return strFind.join("");}}