/**
 * @version		2011-09-28 00:00:07
 * @author		Hayatos
 * @package		Hs_image_show
 * @URL         http://joomlamp.com
 * @copyright	Copyright (C) Hayatos 2011. All rights reserved.
 * @license		GNU/GPL v3
 */
var HSJS=HSJS||{};HSJS.libs={};HSJS.imageShow=new Class({Implements:[Options,Events],options:{positions:["image","paragraph","text","navigation","button"],classPrefix:"div.hsi_",startFrom:0,changeOn:"click",enablePeriodicalNext:true,periodicalNextDuration:3000,stopLoadNexWhenAnimating:true,image:{effect:"horizon-basic",filePath:"",forceHeight:0,forceWidth:0,params:{transition:"",duration:""}},paragraph:{effect:"basic",filePath:"",forceHeight:0,forceWidth:0,params:{}},text:{effect:"horizon-basic",filePath:"",forceHeight:0,forceWidth:0,wrapFirstWord:true,params:{}},navigation:{effect:"basic",filePath:"",forceHeight:0,forceWidth:0,naviStartClass:"li.hsi_navigation_start",naviEndClass:"li.hsi_navigation_end",params:{}},button:{effect:"basic",filePath:"",forceHeight:0,forceWidth:0,params:{parts:["next","previous","startstop"]}},advances:{checkInterval:1000,attempt:10,loaderClass:"div.hsi_loading",showStatus:true,statusBox:"div.hsi_loading_status",debugMode:false},onLoadJavascripts:function(){var a=this._statusChecker("loadFile");this.setStatusMsg("loading Javascript Files.....");if(a==false){this.attempt=0;this.timer=function(){a=this._statusChecker("loadFile");this.attempt++;if(a===true){this.fireEvent("readyJavaScript",this);return}if(this.attempt>this.options.advances.attempt){this.fireEvent("error","Failed To Load Javascript")}}.periodical(this.options.advances.checkInterval,this)}else{this.fireEvent("readyJavaScript",this)}},onReadyJavaScript:function(){clearInterval(this.timer);Object.each(this.obj,function(c,b){if(c!==null&&typeOf(c.afterLayout)=="function"){c.afterLayout(this.size)}},this);this._syncStatus();var a=this._statusChecker("readyAnimation");this.setStatusMsg("Preparing a layout.....");if(a==false){console.log(this.status);this.attempts=0;this.timer=function(){this._syncStatus();console.log(this.status);a=this._statusChecker("readyAnimation");this.attempts++;if(a===true){this.fireEvent("readyAnimation");return}if(this.attempts>this.options.advances.attempt){this.fireEvent("error","Failed To set up a layout")}}.periodical(this.options.advances.checkInterval,this)}else{this.fireEvent("readyAnimation")}},onReadyAnimation:function(){clearInterval(this.timer);this.setStatusMsg("Ready to Animate!");this.startAnimation()},onError:function(a){clearInterval(this.timer);this.setStatusMsg(a);alert(a)}},initialize:function(c,b,a){this.boxid=$(c);this.url={};this.url.base=b;this.url.js=[b,"modules/mod_hs_image_show/js/"].join("");this.setOptions(a);this.status={image:{},paragraph:{},text:{},navigation:{},button:{}};this.statusMsg="Start Loading Images...";this.els={};this.els.main=this.boxid;this.options.positions.each(function(d,e){this.els[d]={};this.els[d]["wrapper"]=this.boxid.getElement([this.options.classPrefix,d,"_wrapper"].join(""));this.els[d]["filter"]=this.boxid.getElement([this.options.classPrefix,d,"_filter"].join(""));this.els[d]["box"]=this.boxid.getElement([this.options.classPrefix,d,"_box"].join(""));this.els[d]["items"]=this.boxid.getElements([this.options.classPrefix,d,"_items"].join(""))},this);if(this.els.button.wrapper!==null){this.options.button.params.parts.each(function(d){this.els.button[d]={};this.els.button[d]["wrapper"]=this.els.button.wrapper.getElement([this.options.classPrefix,"button_",d,"_wrapper"].join(""));if(this.els.button[d]["wrapper"]!==null){this.els.button[d]["filter"]=this.els.button.wrapper.getElement([this.options.classPrefix,"button_",d,"_filter"].join(""));this.els.button[d]["box"]=this.els.button.wrapper.getElement([this.options.classPrefix,"button_",d,"_box"].join(""))}},this)}this.size={imageShow:{},image:{},paragraph:{},text:{},navigation:{}};this.size.imageShow.x=this.boxid.getSize().x;this._setSizeImage();this._setSizeParagraph();this._setSizeText();this._setSizeNavigation();this._setSizeButton();this.injectLoaderImage();this._checkDuration();this.loadJSs()},loadJSs:function(){this.obj={image:{},paragraph:{},text:{},navigation:{},button:{}};this.options.positions.each(function(a){this.status[a]["loadFile"]=false;if(this.options[a].effect=="none"||this.els[a]["wrapper"]===null){this.obj[a]=null;this.status[a]["loadFile"]=true}else{Asset.javascript([this.url.base,this.options[a].filePath].join(""),{onLoad:function(){this.obj[a]=new HSJS[a](this.els,this.size,this.options[a]["params"]);this.status[a]["loadFile"]=true}.bind(this)})}},this);this.fireEvent("loadJavascripts")},_statusChecker:function(b){var a=false,d=[];for(var c=0;c<this.options.positions.length;c++){if(typeOf(this.status[this.options.positions[c]][b])==="boolean"){if(this.status[this.options.positions[c]][b]===true){d.push(true)}else{d.push(false)}}else{d.push(true)}}if(d.indexOf(false)<0){return true}return false},_syncStatus:function(){Object.each(this.obj,function(b,a){if(b!==null){this.status[a]=this.obj[a]["status"]}},this)},_getMargins:function(d,e){var c=0,a=0;switch(e){case"verticality":c=d.getStyle("border-top-width").toInt()+d.getStyle("border-bottom-width").toInt();a=d.getStyle("margin-top").toInt()+d.getStyle("margin-bottom").toInt();break;case"horizon":c=d.getStyle("border-left-width").toInt()+d.getStyle("border-right-width").toInt();a=d.getStyle("margin-left").toInt()+d.getStyle("margin-right").toInt();break}return c+a},_setSizeImage:function(){this.size.image={};this.size.image.items={};var i={},b=this.size.imageShow.x,a=0,d=0,c=0,e=0,f=0,g=0,h=0;this.els.image.items.each(function(k,j){i=k.getElement("img").getSize();i.x=i.x+this._getMargins(k,"horizon");i.y=i.y+this._getMargins(k,"verticality");this.size.image.items[j]={};this.size.image.items[j].x=i.x;this.size.image.items[j].y=i.y;if(i.x<this.size.imageShow.x){i.x=this.size.imageShow.x}if(i.x>b){b=i.x}if(i.y>a){a=i.y}d=d+i.x;c=c+i.y},this);this.size.image.x=this.size.imageShow.x;if(this.options.image.forceHeight.toInt()>0){a=this.options.image.forceHeight.toInt()}this.size.image.y=a;this.size.imageShow.y=a;this.size.image.totalX=d;this.size.image.totalY=c},_setSizeNavigation:function(){this.size.navigation={x:0,y:0,totalX:0,totalY:0};this.size.navigation.items={};if(this.els.navigation.wrapper===null){return}var a,e=0,c=0,f=0,d=0;this.els.navigation.items.each(function(h,g){a=h.getSize();a.x=a.x+this._getMargins(h,"horizon");a.y=a.y+this._getMargins(h,"verticality");this.size.navigation.items[g]={};this.size.navigation.items[g].x=a.x;this.size.navigation.items[g].y=a.y;f=f+a.x;d=d+a.y},this);this.size.navigation.x=a.x;this.size.navigation.y=a.y;var b=this.els.navigation.wrapper.getElement(this.options.navigation.naviStartClass);if(b!==null){a=b.getSize();f=f+a.x;d=d+a.y}var b=this.els.navigation.wrapper.getElement(this.options.navigation.naviEndClass);if(b!==null){a=b.getSize();f=f+a.x;d=d+a.y}this.size.navigation.totalX=f;this.size.navigation.totalY=d},_setSizeParagraph:function(){this.size.paragraph={x:0,y:0,totalX:0,totalY:0};if(this.els.paragraph.wrapper===null){return}var a=this.els.paragraph.wrapper.getSize();this.size.paragraph.x=a.x;this.size.paragraph.y=a.y;this.size.paragraph.totalX=a.x;this.size.paragraph.totalY=a.y},_setSizeText:function(){this.size.text={x:0,y:0,totalX:0,totalY:0};this.size.text.items={};if(this.els.text.wrapper===null){return}var b,e=0,c=0,g=0,d=0,a,f;this.els.text.items.each(function(k,j){b=k.getSize();b.x=b.x+this._getMargins(k,"horizon");b.y=b.y+this._getMargins(k,"verticality");this.size.text.items[j]={};this.size.text.items[j].x=b.x;this.size.text.items[j].y=b.y;if(b.y>e){e=b.y}g=g+b.x;d=d+b.y;if(this.options.text.wrapFirstWord){var h=k.getElement("h2");if(h!==null){f=h.get("text").split(" ");if(f.length>1){if(h.getElement("a")!==null){h.getElement("a").set("html",h.getElement("a").get("text").replace(f[0],["<span>",f[0],"</span>"].join("")))}else{h.set("html",h.get("text").replace(f[0],["<span>",f[0],"</span>"].join("")))}}}}},this);this.size.text.x=b.x;this.size.text.y=e;this.size.text.totalX=g;this.size.text.totalY=d},_setSizeButton:function(){this.size.button={x:0,y:0,totalX:0,totalY:0};if(this.els.button.wrapper===null){return}this.size.button.items={};var a={x:0,y:0},e=0,b=0,f=0,d=0;var c;this.options.button.params.parts.each(function(g){c=this.els.button[g];if(c!==null){this.size.button[g]={x:0,y:0};if(c.wrapper!==null){this.size.button[g].x=c.wrapper.getSize().x+this._getMargins(c.wrapper,"horizon");this.size.button[g].y=c.wrapper.getSize().y+this._getMargins(c.wrapper,"verticality")}}},this);this.els.button.items.each(function(h,g){a=h.getSize();a.x=a.x+this._getMargins(h,"horizon");a.y=a.y+this._getMargins(h,"verticality");this.size.button.items[g]={};this.size.button.items[g].x=a.x;this.size.button.items[g].y=a.y;f=f+a.x;d=d+a.y},this);this.size.button.x=a.x;this.size.button.y=a.y;this.size.button.totalX=f;this.size.button.totalY=d},_checkDuration:function(){var a=0;this.options.positions.each(function(b){this.options[b]["duration"]=parseFloat(this.options[b]["duration"]);if(a<this.options[b]["duration"]){a=this.options[b]["duration"]}},this);this.options.periodicalNextDuration=parseFloat(this.options.periodicalNextDuration);if(this.options.periodicalNextDuration<a){this.options.periodicalNextDuration=a}},injectLoaderImage:function(){if(!this.options.advances.debugMode){this.boxid.getChildren("div").each(function(c){c.setStyle("display","none")})}var a=this.boxid.getElement(this.options.advances.loaderClass);if(a===null){var b=new Element(this.options.advances.loaderClass,{styles:{width:this.size.imageShow.x,height:this.size.imageShow.y}}).inject(this.boxid,"top");if(this.options.advances.showStatus){new Element(this.options.advances.statusBox,{text:"start loading...",styles:{}}).inject(b)}}else{a.setStyle("display","block")}},setStatusMsg:function(b){var a=this.boxid.getElement(this.options.advances.statusBox);if(a!==null){a.set("text",b)}},hideLoaderImage:function(){this.boxid.getChildren("div").each(function(a){a.setStyle("display","block")});this.boxid.getElement(this.options.advances.loaderClass).setStyles({display:"none"})},startAnimation:function(){this.hideLoaderImage();this.cStatus={mouseInside:false,stopped:false,nowAnimating:false};this.current=this.options.startFrom;this.mouseDetector();Object.each(this.obj,function(c,b){if(c!==null){c.initialAnimation(this.current)}},this);this.els.navigation.items.each(function(c,b){c.addEvent(this.options.changeOn,function(){if(this.current!==b){this.controlAnimation("goTo",this.current,b);this.current=b}}.bind(this))},this);var a=0;this.cStatus.stopped=false;this.cStatus.nowAnimating=false;if(this.els.button.wrapper!==null){if(this.els.button.next.wrapper!==null){this.els.button.next.wrapper.addEvents({click:function(){this._goNext()}.bind(this),mouseenter:function(){this.obj.button.mouseOnNext(this.cStatus.stopped)}.bind(this),mouseleave:function(){this.obj.button.mouseLeaveNext(this.cStatus.stopped)}.bind(this)})}if(this.els.button.previous.wrapper!==null){this.els.button.previous.wrapper.addEvents({click:function(){this._goPrevious()}.bind(this),mouseenter:function(){this.obj.button.mouseOnPrevious(this.cStatus.stopped)}.bind(this),mouseleave:function(){this.obj.button.mouseLeavePrevious(this.cStatus.stopped)}.bind(this)})}if(this.els.button.startstop.wrapper!==null){this.els.button.startstop.wrapper.addEvents({click:function(){if(this.cStatus.stopped){this.cStatus.stopped=false}else{this.cStatus.stopped=true}this.obj.button.startStopClicked(this.cStatus.stopped)}.bind(this),mouseenter:function(){this.obj.button.mouseOnStartStop(this.cStatus.stopped)}.bind(this),mouseleave:function(){this.obj.button.mouseLeaveStartStop(this.cStatus.stopped)}.bind(this)})}}if(this.options.enablePeriodicalNext=="true"&&this.options.periodicalNextDuration.toInt()>0){this.timer=(function(){this._checkAnimating();if(this.cStatus.mouseInside===false&&this.cStatus.stopped===false&&this.cStatus.nowAnimating===false){a=this._goNext()}}).periodical(this.options.periodicalNextDuration.toInt(),this)}},controlAnimation:function(a,c,b){Object.each(this.obj,function(e,d){if(e!==null&&typeOf(e[a])=="function"){e[a](c,b,this.cStatus)}},this)},mouseDetector:function(){this.boxid.addEvents({mouseenter:function(){if(this.cStatus.mouseInside===false){this.controlAnimation("mouseEnter",this.current,this.cStatus.mouseInside)}this.cStatus.mouseInside=true}.bind(this),mouseleave:function(){if(this.cStatus.mouseInside===true){this.controlAnimation("mouseLeave",this.current,this.cStatus.mouseInside)}this.cStatus.mouseInside=false}.bind(this)})},_goNext:function(){this._checkAnimating();if(this.cStatus.nowAnimating===false){var a=this.current+1;if(a>=this.els.image.items.length){a=0}this.controlAnimation("goNext",this.current,a);this.current=a}},_goPrevious:function(){this._checkAnimating();var a=this.current-1;if(a<0){a=this.els.image.items.length-1}this.controlAnimation("goPrevious",this.current,a);this.current=a},_checkAnimating:function(){if(this.options.stopLoadNexWhenAnimating){this._syncStatus();this.cStatus.nowAnimating=this._statusChecker("nowAnimating")}}});

