function nyxtecImageCropper (frameWidth,frameHeight,postPhrase) {
	this.displayContainer='nyxtec-imgCropper';
	this.pic;
	this.picMinW=0;
	this.picMinH;
	this.picMaxW;
	this.picMaxH;
	this.picCurW;
	this.picCurH;
	this.picNewW;
	this.picNewH;
	this.picX;
	this.picY;
	this.picInitX;
	this.picInitY;
	
	this.mouseX;
	this.mouseY;
	this.mouseInitX;
	this.mouseInitY;

	this.frameX;
	this.frameY;
	this.frameW=frameWidth;
	this.frameH=frameHeight;
	
	this.intervalId;
	
	this.postURL;
	this.postSuccess;
	this.postPhrase = postPhrase==''?this.displayContainer:postPhrase;
	$(document).ready($.proxy(this.attachController, this));
}

nyxtecImageCropper.prototype.attachController = function (){
	
	$(document).mousemove($.proxy(this.mouseMove, this));

	if($('#nyxtec-imgCropper').length>0){
		return;
	}
	var html='<div id="'+this.displayContainer+'">';
		html+='<div class="overlayBG"></div>';
		html+='<div class="loading"></div>';
		html+='<img class="bgPic" src=""/>';
		html+='<div class="overlayTop"></div>';
		html+='<div class="overlayTopBorder"></div>';
		html+='<div class="overlayBottom"></div>';
		html+='<div class="overlayBottomBorder"></div>';
		html+='<div class="overlayLeft"></div>';
		html+='<div class="overlayLeftBorder"></div>';
		html+='<div class="overlayRight"></div>';
		html+='<div class="overlayRightBorder"></div>';
		html+='<div class="frame"></div>';
		html+='<div class="zoomer"></div>';
		html+='<input type="button" value="cropp" class="cropp"/>';
		html+='<input type="button" value="close" class="close"/>';
	html+='</div>';
	$('body').append(html);
	this.pic=$('#'+this.displayContainer+' > .bgPic');
};
	
nyxtecImageCropper.prototype.mouseMove = function(e){
	this.mouseX=e.pageX;
	this.mouseY=e.pageY;
};

nyxtecImageCropper.prototype.enableSelection = function (target){
	if (typeof target.onselectstart!="undefined"){
		target.onselectstart=function(){return false};
	}else{
		target.onmousedown=function(){return false};
	}
	return false;
};

nyxtecImageCropper.prototype.disableSelection = function(target){
	if (typeof target.onselectstart!="undefined"){
		target.onselectstart=function(){return false};
	}else{
		target.onmousedown=function(){return false};
	}
	return false;
};

nyxtecImageCropper.prototype.setUpCursors = function(){
	$('#'+this.displayContainer).css('cursor','default');
	$('#'+this.displayContainer+' > .frame').css('cursor','move');	
	$('#'+this.displayContainer+' > .zoomer').css('cursor','se-resize');
};

nyxtecImageCropper.prototype.resetCursors = function(){
	$('#'+this.displayContainer+' > .frame').css('cursor','inherit');	
	$('#'+this.displayContainer+' > .zoomer').css('cursor','inherit');
};

nyxtecImageCropper.prototype.showLoading = function(){
	$('#'+this.displayContainer).children().css('display', 'none');
	$('#'+this.displayContainer+' > .overlayBG').css('display','block');
	$('#'+this.displayContainer+' > .loading').css('display','block');
	$('#'+this.displayContainer+' > .close').css('display','block');
};

nyxtecImageCropper.prototype.showControls = function(){
	$('#'+this.displayContainer).children().css('display', 'block');
	$('#'+this.displayContainer+' > .loading').css('display','none');
}

nyxtecImageCropper.prototype.setUpCropper = function(){
	var el;
	var windowW=$(window).width();
	var windowH=$(window).height();
	
	el=$('#'+this.displayContainer);
	el.width(windowW);
	el.height(windowH);
	el.unbind();
	el.mouseup($.proxy(this.stopTransform, this));
	el.mouseleave($.proxy(this.stopTransform, this));
	el.css('display','block');
	this.disableSelection(document.body);
	
	this.frameX=(windowW-this.frameW)/2;
	this.frameY=(windowH-this.frameH)/2;
	
	el=$('#'+this.displayContainer+' > .overlayBG');
	el.width(windowW);
	el.height(windowH);
	
	el=$('#'+this.displayContainer+' > .loading');
	el.css('top',(windowH-el.width())/2);
	el.css('left',(windowW-el.height())/2);
	
	el=$('#'+this.displayContainer+' > .overlayTop');
	el.width(windowW);
	el.height(this.frameY);
	el=$('#'+this.displayContainer+' > .overlayTopBorder');
	el.width(this.frameW+2);
	el.css('left',this.frameX-1);
	el.css('top',this.frameY-1);
	
	el=$('#'+this.displayContainer+' > .overlayLeft');
	el.css('top',this.frameY);
	el.width(this.frameX);
	el.height(this.frameH);
	el=$('#'+this.displayContainer+' > .overlayLeftBorder');
	el.height(this.frameH);
	el.css('left',this.frameX-1);
	el.css('top',this.frameY);
	
	el=$('#'+this.displayContainer+' > .overlayRight');
	el.css('top',this.frameY);
	el.css('left',this.frameX+this.frameW);
	el.width(this.frameX);
	el.height(this.frameH);
	el=$('#'+this.displayContainer+' > .overlayRightBorder');
	el.height(this.frameH);
	el.css('left',this.frameX+this.frameW);
	el.css('top',this.frameY);
	
	el=$('#'+this.displayContainer+' > .overlayBottom');
	el.width(windowW);
	el.height(this.frameY+1);
	el.css('top',this.frameY+this.frameH);
	el=$('#'+this.displayContainer+' > .overlayBottomBorder');
	el.width(this.frameW+2);
	el.css('left',this.frameX-1);
	el.css('top',this.frameY+this.frameH);

	el=$('#'+this.displayContainer+' > .frame');
	el.css('left',this.frameX);
	el.css('top',this.frameY);
	el.width(this.frameW);
	el.height(this.frameH);
	
		el=$('#'+this.displayContainer+' > .zoomer');
	el.css('left',this.frameX+this.frameW-6);
	el.css('top',this.frameY+this.frameH-6);
	el.mousedown($.proxy(this.startZoomBG, this));
	
	el=$('#'+this.displayContainer+' > .cropp');
	el.unbind();
	el.click($.proxy(this.crop, this));
	el.css('top',this.frameY+this.frameH+6);
	el.css('right',this.frameX+this.frameW+6);
	
	el=$('#'+this.displayContainer+' > .close');
	el.unbind();
	el.click($.proxy(this.closeControl, this));
	el.css('bottom',this.frameY+this.frameH+6);
	el.css('left',this.frameX+this.frameW+6);
	
	$('#'+this.displayContainer+' > .frame').mousedown($.proxy(this.startDragBG, this));
	
	this.showLoading();
};

nyxtecImageCropper.prototype.picLoaded = function(){
	this.pic.unbind('load');
	
	this.pic.css('width','');
	this.pic.css('height','');
	
	this.picMaxW=this.picCurW=this.pic.width();
	this.picMaxH=this.picCurH=this.pic.height();
	if(this.picMaxW > this.frameW && this.picMaxH > this.frameH){
		this.picMinW=this.frameW;
		this.picMinH=this.frameH;
		if(this.picMaxW/this.frameW < this.picMaxH/this.frameH){
			this.bgPcMinH = Math.round(this.picMaxH/this.picMaxW*this.frameW);
		}else{
			this.picMinW = Math.round(this.picMaxW/this.picMaxH*this.frameH);
		}
	}

	this.pic.css('left',this.frameX+(this.frameW-this.picMaxW)/2);
	this.pic.css('top',this.frameY+(this.frameH-this.picMaxH)/2);
	
	this.showControls();
};

nyxtecImageCropper.prototype.putInRect = function(){
	if(this.picX > this.frameX){
		this.picX = this.frameX;
	}
	if(this.picX < this.frameX+this.frameW-this.picNewW){
		this.picX = this.frameX+this.frameW-this.picNewW;
	}
	if(this.picY > this.frameY){
		this.picY = this.frameY;
	}
	if(this.picY < this.frameY+this.frameH-this.picNewH){
		this.picY = this.frameY+this.frameH-this.picNewH;
	}
	this.pic.css('left',this.picX);
	this.pic.css('top',this.picY);
};

nyxtecImageCropper.prototype.initDrag =function(){
	this.mouseInitX=this.mouseX;
	this.mouseInitY=this.mouseY;
	this.picInitX=this.pic.css('left').replace('px','')*1;
	this.picInitY=this.pic.css('top').replace('px','')*1;
	this.picCurW=this.picNewW=this.pic.width();
	this.picCurH=this.picNewH=this.pic.height();
};

nyxtecImageCropper.prototype.startDragBG = function(){
	this.resetCursors();
	$('#'+this.displayContainer).css('cursor','move');
	this.initDrag();

	this.dragging=true;
	
	clearInterval(this.intervalId);
	this.intervalId=setInterval($.proxy(this.dragEventBG, this),20);
};

nyxtecImageCropper.prototype.dragEventBG = function(){
	this.picX = this.picInitX+this.mouseX-this.mouseInitX;
	this.picY = this.picInitY+this.mouseY-this.mouseInitY;
	this.putInRect();
};

nyxtecImageCropper.prototype.startZoomBG = function(){
	this.resetCursors();
	$('#'+this.displayContainer).css('cursor','se-resize');
	this.initDrag();
	
	this.dragging=true;

	clearInterval(this.intervalId);
	this.intervalId=setInterval($.proxy(this.zoomEventBG, this),20);

};

nyxtecImageCropper.prototype.zoomEventBG = function(){
	this.picNewW = this.picCurW+this.mouseX+this.mouseY-this.mouseInitX-this.mouseInitY;
	this.picNewH = this.picMaxH/this.picMaxW*this.picNewW;
	if(this.picNewW > this.picMaxW){
		this.picNewW = this.picMaxW;
		this.picNewH = this.picMaxH;
	}
	if(this.picNewW < this.picMinW){
		this.picNewW = this.picMinW;
		this.picNewH = this.picMinH;
	}
	
	this.pic.width(this.picNewW);
	this.pic.height(this.picNewH);
	
	//scale difference picCurW-picNewW * offset from frame center
	this.picX = this.picInitX + (this.picCurW - this.picNewW) * (this.frameX+this.frameW/2-this.picInitX)/this.picCurW;
	this.picY = this.picInitY + (this.picCurH - this.picNewH) * (this.frameY+this.frameH/2-this.picInitY)/this.picCurH;
	
	this.putInRect();
};

nyxtecImageCropper.prototype.stopTransform = function(){
	this.setUpCursors();
	clearInterval(this.intervalId);
};

nyxtecImageCropper.prototype.showEdit = function(picSource,postURL,postSuccess,force){
	this.setUpCropper();
	this.pic.unbind();
	this.pic.bind('load',$.proxy(this.picLoaded, this));
	if(force){
		picSource+='?unique='+Math.random();
	}
	this.pic.attr('src',picSource);
	this.postURL=postURL;
	this.postSuccess=postSuccess;
};

nyxtecImageCropper.prototype.closeControl = function(){
	this.enableSelection(document.body);
	this.pic.unbind();
	$('#'+this.displayContainer).css('display','none');
};

nyxtecImageCropper.prototype.crop = function(){
	var scale=this.pic.width()/this.picMaxW;
	var params ='';
	params += 'x='+Math.round((this.frameX-this.picX)/scale);
	params += '&y='+Math.round((this.frameY-this.picY)/scale);
	params += '&w='+Math.round(this.frameW/scale);
	params += '&h='+Math.round(this.frameH/scale);
	params += '&newW='+this.frameW;
	params += '&newH='+this.frameH;
	params += '&'+this.postPhrase+'=';
	$.post(this.postURL, params, this.postSuccess);
	this.showLoading();
};
/*
SLIDESHOW
*/
function nyxtecSlideshow () {
	this.displayContainerID='';
	this.pics=new Array();
	this.thumb=new Array();
	this.imgCur=0;
	this.imgLoader1=document.createElement('img');
	this.imgLoader2=document.createElement('img');
	this.imgLoaderCur=1;
	this.imgTimer;
	this.thumbWidth=0;
	this.thumbHeight=0;
	this.thumbSpace=0;
	this.scrollStep=0;
	this.log='';
	this.thumbLeft=0;
	this.picDisplayTime=3000;
	this.showPlayButton=true;
	this.playing = true;
	this.scrollThumbnails=true;
}

nyxtecSlideshow.prototype.launch = function(){
	$(document).ready($.proxy(this.attachController, this));
};

nyxtecSlideshow.prototype.attachController = function (){//alert("attachController");
	this.imgCur=0;
	
	var html='';
		html+='<div class="pic">';
		if(this.showPlayButton){
			html+='<div class="playPause"></div>';
		}
		html+='</div>';
		if(this.thumbWidth!=0){
			html+='<div class="thumbMask"><div class="thumbs"></div></div>';
		}
		html+='<div class="prev"></div>';
		html+='<div class="next"></div>';
	$('#'+this.displayContainerID).append(html);
	
	if(this.thumbWidth!=0){
		var tmw=$('#'+this.displayContainerID+' > .thumbMask').width();
		this.scrollStep=tmw-tmw%(this.thumbWidth+this.thumbSpace);
		
		for(var i=0;i<this.thumb.length;i++){
			var el=$(new Image());
			el.attr('class','thumb');
			el.attr('src',this.thumb[i]);
			el.css('left',(this.thumbSpace+this.thumbWidth)*i);
			el.bind('click',{n:i},$.proxy(this.onThumbClick,this));
			$('#'+this.displayContainerID+' > .thumbMask > .thumbs').append(el);
		}
		$('#'+this.displayContainerID+' > .thumbs').css('position','relative');
		$('#'+this.displayContainerID+' > .thumbMask > .thumbs').width((this.thumbSpace+this.thumbWidth)*this.pics.length);
	}
	if(this.showPlayButton){
		$('#'+this.displayContainerID+' > .pic > .playPause').css('background-position','0px 0px');
		$('#'+this.displayContainerID+' > .pic > .playPause').bind('click',$.proxy(this.playPause, this));
		$('#'+this.displayContainerID).bind('mouseover',$.proxy(this.showPlayPause, this));
		$('#'+this.displayContainerID).bind('mouseout',$.proxy(this.hidePlayPause, this));
	}
	
	$('#'+this.displayContainerID+' > .next').bind('click',$.proxy(this.showNext, this));
	$('#'+this.displayContainerID+' > .prev').bind('click',$.proxy(this.showPrev, this));
	
	$('#'+this.displayContainerID+' > .pic').append(this.imgLoader1);
	$('#'+this.displayContainerID+' > .pic').append(this.imgLoader2);
	//$('#'+this.displayContainerID+' > .pic > .playPause').append(this.imgLoader2);
	
	$(this.imgLoader1).hide();
	$(this.imgLoader2).hide();
	
	this.loadSlide();
	//this.playSlide();
};

nyxtecSlideshow.prototype.playPause = function(){
	if(this.playing){
		clearTimeout(this.imgTimer);
		this.playing=false;
		$('#'+this.displayContainerID+' > .pic > .playPause').css('background-position','-30px 0px');
	}else{
		setTimeout($.proxy(this.playSlide, this),this.picDisplayTime);
		this.playing=true;
		$('#'+this.displayContainerID+' > .pic > .playPause').css('background-position','0px 0px');
	}
};

nyxtecSlideshow.prototype.showPlayPause = function(){
	$('#'+this.displayContainerID+' > .pic > .playPause').css('display','block');
	$('#'+this.displayContainerID+' > .thumbMask').css('display','block');
	$('#'+this.displayContainerID+' > .prev').css('display','block');
	$('#'+this.displayContainerID+' > .next').css('display','block');
}
nyxtecSlideshow.prototype.hidePlayPause = function(){
	$('#'+this.displayContainerID+' > .pic > .playPause').css('display','none');
	$('#'+this.displayContainerID+' > .thumbMask').css('display','none');
	$('#'+this.displayContainerID+' > .prev').css('display','none');
	$('#'+this.displayContainerID+' > .next').css('display','none');
};
nyxtecSlideshow.prototype.loadSlide = function(){
	clearTimeout(this.imgTimer);
	if(this.imgLoaderCur==1){
		this.imgLoaderCur=2;
		this.imgLoader2.onload=$.proxy(this.imgOnload,this);
		this.imgLoader2.src=this.pics[this.imgCur];
	}else{
		this.imgLoaderCur=1;
		this.imgLoader1.onload=$.proxy(this.imgOnload,this);
		this.imgLoader1.src=this.pics[this.imgCur];	
	}
};
nyxtecSlideshow.prototype.imgOnload = function(e){
	$(this.imgLoader1).hide();
	$(this.imgLoader2).hide();
	if(this.imgLoaderCur==1){
		$(this.imgLoader1).fadeIn(1000,$.proxy(this.imgAfterFadeIn,this));
	}else{
		$(this.imgLoader2).fadeIn(1000,$.proxy(this.imgAfterFadeIn,this));
	}
	if(this.showPlayButton){
		var w=$('#'+this.displayContainerID+' > .pic').width();
		var h=$('#'+this.displayContainerID+' > .pic').height();
		$('#'+this.displayContainerID+'  > .pic > .playPause').css('top',h/2-20);
		$('#'+this.displayContainerID+'  > .pic > .playPause').css('left',w/2-10);
	}
};
nyxtecSlideshow.prototype.imgAfterFadeIn = function(){
	if(this.playing){
		this.imgTimer=setTimeout($.proxy(this.playSlide, this),this.picDisplayTime);
	}
};
nyxtecSlideshow.prototype.playSlide = function(){
	if(this.imgCur==this.pics.length-1){
		this.imgCur=0;
		this.thumbLeft=0;
	}else{
		this.imgCur++;
	}

	if(this.scrollThumbnails){
		var width=this.pics.length*(this.thumbWidth+this.thumbSpace)-this.scrollStep;
		var curImgThmbX=(this.thumbWidth+this.thumbSpace)*this.imgCur;
		if(width-curImgThmbX > this.scrollStep){
			this.thumbLeft=curImgThmbX=-(this.thumbWidth+this.thumbSpace)*this.imgCur;
			$('#'+this.displayContainerID+' > .thumbMask > .thumbs').animate({left:this.thumbLeft},this.scrollStep);
		}
	}
	this.loadSlide();
};
nyxtecSlideshow.prototype.onThumbClick = function(event){
	this.imgCur=event.data.n;
	this.loadSlide();
};
nyxtecSlideshow.prototype.showNext = function()
{//alert("showNext");
	if(this.thumbWidth==0){
		if(this.imgCur==this.pics.length-1){
			this.imgCur=0;
		}else{
			this.imgCur++;
		}
		this.loadSlide();
	}else{
		this.scrollThumbnails=false;
		var width=this.pics.length*(this.thumbWidth+this.thumbSpace);
		//if(this.thumbLeft-this.scrollStep > -width){
		if(width+this.thumbLeft > this.scrollStep*2){
			this.thumbLeft-=this.scrollStep;
		}else{
			this.thumbLeft=this.scrollStep-width;
		}
		$('#'+this.displayContainerID+' > .thumbMask > .thumbs').animate({left:this.thumbLeft},this.scrollStep);
	}
};
nyxtecSlideshow.prototype.showPrev = function()
{//alert("showPrev");
	if(this.thumbWidth==0){
		if(this.imgCur==0){
			this.imgCur=this.pics.length-1;
		}else{
			this.imgCur--;
		}
		this.loadSlide();
	}else{
		this.scrollThumbnails=false;
		var width=this.pics.length*(this.thumbWidth+this.thumbSpace);
		if(this.thumbLeft < -this.scrollStep){
			this.thumbLeft+=this.scrollStep;
		}else{
			this.thumbLeft=0;
		}
		$('#'+this.displayContainerID+' > .thumbMask > .thumbs').animate({left:this.thumbLeft},this.scrollStep);
	}
};
