/*
styledEffects v0.6
Coded by Rustam Khodjaev.
This code is the part of copyrighted content and not for public use.
If you want to use anything from here, please contact an author.
*/

var preloading,preloadImg,preloadTimer,zoomerBusy
var slideStep=50,zSteps=15,shadowSize=10
var zoomParent,lastZoomed,zoomTimer,zoomStep,closeButton,viewFrame,forward=new Array()

function slideOut(elem) {
	elem=get(elem)
	var slHandler=function(elem) {
		var pos=elem.offsetLeft
		if(pos<0) elem.style.left=(pos+slideStep)+'px'
		else {
			clearInterval(slTimer)
			if(elem.afterSlideOut) {
				elem.afterSlideOut()
				elem.afterSlideOut=false
			}
		}
		if(pos>-40) {elem.style.left='0px';}
	}
	elem.initL=elem.offsetLeft
	var slTimer=setInterval(function(){new slHandler(elem)},1)
	
}
function slideIn(elem) {
	elem=get(elem)
	var slHandler=function(elem) {
		var pos=elem.offsetLeft
		if(pos>-650) elem.style.left=(pos-slideStep)+'px'
		else {
			clearInterval(slTimer)
			if(elem.afterSlideIn) {
				elem.afterSlideIn()
				elem.afterSlideIn=false
			}
		}
		if(pos<-640) {elem.style.left='-700px';}
	}
	elem.initL=elem.offsetLeft
	var slTimer=setInterval(function(){new slHandler(elem)},1)
}

////////////////////////////////////////////    Zoom Effect    //////////////////////////////////////////////

function preparePhotoEff() {
	zoomerBusy=false
	var eimgs=getByTag(document,"img")
	for(i=0;i<eimgs.length;i++) {
		if(eimgs[i].getAttribute("rel") && eimgs[i].getAttribute("rel").charAt(0)=="z") {
			eimgs[i].onclick=function() { if(!zoomerBusy) extendPhoto(this) }
			eimgs[i].onmouseover=function() { preloadPhoto(this) }
		}
	}
	preLoader([
		'images/preload.gif',
		'images/closeimg.png',
		'images/cursors/zout.cur',
		'images/shadow/bl.png',
		'images/shadow/rt.png',
		'images/shadow/b.png',
		'images/shadow/r.png',
		'images/shadow/c.png'
	])
}

function preLoader(mixed) {
	if(typeof mixed == 'string') {
		var preloadImgExt=new Image()
		preloadImgExt.src=mixed
	} else {
		var preloadImgExt=new Array()
		for(i=0;i<mixed.length;i++) {
			preloadImgExt[i]=new Image()
			preloadImgExt[i].src=mixed[i]
		}
	}
}

function extendPhoto(elem) {
	if(preloading) {
		zoomerBusy=true
		preloadHandler(elem)
	}
	else zoomIn(elem)
}

function preloadPhoto(elem) {
	imgLink=elem.getAttribute("rel").replace("zoom:","")
	if(imgLink!=elem.src) {
		preloading=true
		preloadImg=new Image()
		preloadImg.onload=function() {
			preloading=false
		}
		preloadImg.src=imgLink
	}
}

function preloadHandler(elem) {
	var coords=getPosition(elem)
	var ccpos=getPosition(get('wrapMain'))
	var preAnimator=document.createElement('div')
	preAnimator.style.position='absolute'
	preAnimator.style.top=(coords[1]-ccpos[1])+'px'
	preAnimator.style.left=(coords[0]-ccpos[0])+'px'
	preAnimator.style.width=elem.offsetWidth+'px'
	preAnimator.style.height='10px'
	preAnimator.style.backgroundImage='url(images/preload.gif)'
	setOpacity(preAnimator,60)
	elem.parentNode.appendChild(preAnimator)
	preloadTimer=setInterval(checkStatus,1)
	function checkStatus() {
		if(!preloading) {
			preAnimator.parentNode.removeChild(preAnimator)
			clearInterval(preloadTimer)
			zoomIn(elem)
			zoomerBusy=false
		}
	}
}

function zoomIn(elem) {
	if(lastZoomed) closeImage(lastZoomed)
	var img=document.createElement('img')
	document.body.appendChild(img)
	zoomParent=elem
	img.src=elem.getAttribute("rel").replace("zoom:","")
	var destSize=[img.width,img.height]
	forward=[elem.offsetWidth<destSize[0],elem.offsetHeight<destSize[1]]
	zoomStep=[forward[0]?destSize[0]/zSteps:elem.offsetWidth/zSteps,forward[1]?destSize[1]/zSteps:elem.offsetHeight/zSteps]
	img.fullSize=destSize
	img.style.width=elem.offsetWidth+'px'
	img.style.height=elem.offsetHeight+'px'
	img.style.position='absolute'
	img.style.top=getPosition(elem)[1]+'px'
	img.style.left=getPosition(elem)[0]+'px'
	img.style.zIndex='3'
	img.imageid=elem.getAttribute("imgid")
	img.zoomTimer=setInterval(function(){
		new zoomHandler(img,destSize,function(img,location,size) {
			appendElements(img,location,size)
			setOpacity(img,100)
			lastZoomed=img
		})
	},1)
}

function zoomOut(img) {
	destSize=[zoomParent.width,zoomParent.height]
	currentSize=[img.offsetWidth,img.offsetHeight]
	forward=[currentSize[0]<destSize[0],currentSize[1]<destSize[1]]
	zoomStep=[forward[0]?destSize[0]/zSteps:currentSize[0]/zSteps,forward[1]?destSize[1]/zSteps:currentSize[1]/zSteps]
	img.zoomTimer=setInterval(function(){new zoomHandler(img,destSize,function(){img.parentNode.removeChild(img)})},1)
}

function zoomHandler(img,destSize,onComplete) {
	currentSize=[img.offsetWidth,img.offsetHeight]
	currentLocation=getPosition(img)
	predictiveS=[forward[0]?currentSize[0]+zoomStep[0]:currentSize[0]-zoomStep[0],forward[1]?currentSize[1]+zoomStep[1]:currentSize[1]-zoomStep[1]]
	newSize=[
		forward[0]?(predictiveS[0]>destSize[0]?destSize[0]:currentSize[0]+zoomStep[0]):(predictiveS[0]<destSize[0]?destSize[0]:currentSize[0]-zoomStep[0]),
		forward[1]?(predictiveS[1]>destSize[1]?destSize[1]:currentSize[1]+zoomStep[1]):(predictiveS[1]<destSize[1]?destSize[1]:currentSize[1]-zoomStep[1])
	]
	preLocation=[(forward[0]?newSize[0]-currentSize[0]:currentSize[0]-newSize[0])/2,(forward[1]?newSize[1]-currentSize[1]:currentSize[1]-newSize[1])/2]
	newLocation=[forward[0]?currentLocation[0]-preLocation[0]:currentLocation[0]+preLocation[0],forward[1]?currentLocation[1]-preLocation[1]:currentLocation[1]+preLocation[1]]
	completion=[currentSize[0]==destSize[0],currentSize[1]==destSize[1]]
	if(!completion[0]) {img.style.width=newSize[0]+'px'; img.style.left=newLocation[0]+'px'}
	if(!completion[1]) {img.style.height=newSize[1]+'px'; img.style.top=newLocation[1]+'px'}
	if(completion[0] && completion[1]) {
		clearInterval(img.zoomTimer)
		onComplete(img,newLocation,newSize)
	} else setOpacity(img,currentSize[0]*100/(forward[0]?destSize[0]:img.fullSize[0]))
}

function setOpacity(elem,value) {
	if(IE) elem.style.filter="alpha(opacity="+value+")"
	else elem.style.opacity=value/100
}

function appendElements(img,location,size) {
	img.shadows=new Array()
	createShadowPiece(img,[location[1]+size[1],location[0]],[shadowSize,shadowSize],[1,'bl'])
	createShadowPiece(img,[location[1]+size[1],location[0]+shadowSize],[size[0]-shadowSize,shadowSize],[2,'b'])
	createShadowPiece(img,[location[1],location[0]+size[0]],[shadowSize,shadowSize],[3,'rt'])
	createShadowPiece(img,[location[1]+shadowSize,location[0]+size[0]],[shadowSize,size[1]-shadowSize],[4,'r'])
	createShadowPiece(img,[location[1]+size[1],location[0]+size[0]],[shadowSize,shadowSize],[5,'c'])
	closeButton=document.createElement('img')
	closeButton.style.position='absolute'
	closeButton.style.left=location[0]-10+'px'
	closeButton.style.top=location[1]-10+'px'
	closeButton.src='images/closeimg.png'
	closeButton.style.cursor='pointer'
	closeButton.style.zIndex='4'
	document.body.appendChild(closeButton)
	Request('tools/reply.php','id='+img.imageid,'',function(text) {
		viewFrame=document.createElement('div')
		document.body.appendChild(viewFrame)
		if(viewFrame) {
			viewFrame.style.backgroundColor='black';
			viewFrame.style.position='absolute'
			viewFrame.style.color='white'
			viewFrame.style.width=size[0]+'px'
			viewFrame.style.height='20px'
			viewFrame.style.textAlign='center'
			viewFrame.style.left=location[0]+'px'
			viewFrame.style.top=(location[1]+size[1]-20)+'px'
			viewFrame.style.zIndex='5'
			viewFrame.innerHTML="Ko'rildi: "+text+" marta"
			setOpacity(viewFrame,70)
		}
	})
	if(IE6) iePNGFix()
	img.onclick=closeButton.onclick=function(){closeImage(img)}
	img.style.cursor='url(images/cursors/zout.cur),pointer'
}

function createShadowPiece(img,location,size,names) {
	img.shadows[names[0]]=document.createElement('img')
	img.shadows[names[0]].style.position='absolute'
	img.shadows[names[0]].style.top=location[0]+'px'
	img.shadows[names[0]].style.left=location[1]+'px'
	img.shadows[names[0]].style.width=size[0]+'px'
	img.shadows[names[0]].style.height=size[1]+'px'
	img.shadows[names[0]].src='images/shadow/'+names[1]+'.png'
	document.body.appendChild(img.shadows[names[0]])
}

function closeImage(img) {
	if (closeButton.parentNode) closeButton.parentNode.removeChild(closeButton)
	if (viewFrame.parentNode) viewFrame.parentNode.removeChild(viewFrame)
	index=1
	while(img.shadows[img.shadows.length-1].parentNode) {
		img.shadows[index].parentNode.removeChild(img.shadows[index])
		index++
	}
	zoomOut(img)
	lastzoomed=null
}