
var plugin
var main

var cur_img=0
var num_imgs=30
var num_images_loaded=0
var img_name_offset=12
var img_wid=200
var loader_bar=200

var scroll_amount=10
var prev_wid=0

var point1X
var point1Y
var point2X
var point2Y
var start_time
var main_mouse_down
var p3X
var p3Y
var stage_wid=800
var friction=0.93
var init_opacity=0.9

var _root_xmouse=null
var _root_ymouse=null
var scaleUpInt=0
var mouseCheckInt=0
var cur_imgHolderX=0
var img_scaling=false

var start_scale_time


imgDimsArr=new Array()
imgOrigPosArr=new Array()


curSelectedImg=new Object()
curSelectedImg.name=null
curSelectedImg.oxpos=null
curSelectedImg.oypos=null


var time_to_move=500     //in ms




var objsArr=new Array()
var imgIntArr=new Array()

function onLoaded(s) {

	main=s.findName("mainGuy")
	plugin = s.getHost()

    control = document.getElementById("SilverlightControl");
    host = document.getElementById("SilverlightControlHost");
   
	s.findName("imgHolder")["Opacity"]=0
	s.findName("instructions")["Opacity"]=0
	
	
	var progressBar = s.findName("progressBar");
	progressBar.width= 0 
	
	getImages(s)
	
	sender=s
	setInterval("imgHolderTracker(sender)",10)
	
}


function imageProgressChanged(s) {

	per=s.downloadProgress
	s.findName(s.name+"_progressBar").width=per*60

	if(s.downloadProgress==1) {
		//alert(s.width+" "+s.height)
	}
}


function getImages(s) {


	for(i=0;i<num_imgs;i++) {
	
		left_spot=i*250
		
		tn_size=120
		
		img_str ='<Image Name="img_'+cur_img+'" Canvas.ZIndex="'+i+'" Cursor="Hand" Loaded="imgLoaded" MouseEnter="imgEnter" MouseLeave="imgLeave" MouseLeftButtonDown="imgDown" MouseLeftButtonUp="imgUp" MouseMove="imgMove" DownloadProgressChanged="imageProgressChanged" Source="photos/'+(cur_img+img_name_offset)+'.jpg" Height="120" Canvas.Top="1" Canvas.Left="'+(left_spot)+'"><Image.RenderTransform><ScaleTransform Name="img_'+cur_img+'_ScaleTransform" /></Image.RenderTransform></Image>'	
		
		img = plugin.content.createFromXaml(img_str)
		imgHolderRef=s.findName("imgHolder")
		imgHolderRef.children.add(img)


		img_str =   '<Canvas Name="img_'+i+'_loaderBG" Canvas.Top="1" Canvas.Left="'+(i*121)+'">'
		img_str +=   	'<Rectangle Fill="#DDD" Height="'+tn_size+'" Width="'+tn_size+'" ></Rectangle>'
		img_str +=   	'<TextBlock Canvas.Left="34" Canvas.Top="35" FontFamily="Verdana" FontSize="10">Loading '+(i+1)+'</TextBlock> ';
		img_str +=   	'<Rectangle Name="img_'+i+'_progressBar" Fill="#555" Height="10" Width="0" Canvas.Left="30" Canvas.Top="53"></Rectangle>';
		img_str +=   	'<Rectangle Fill="transparent" Stroke="#000" Height="10" Width="60" Canvas.Left="30" Canvas.Top="53"></Rectangle>';
		img_str +=   '</Canvas>'


		img = plugin.content.createFromXaml(img_str)
		imgHolderRef=s.findName("imgHolder")
		imgHolderRef.children.add(img)


		//objsArr["img_"+cur_img]=new Object()
		
		cur_img++
	}
	
	
}




function imgLoaded(s) {

	var tempName
	tempName=""+s.name
	s.opacity=0
	
	objsArr[s.name]=new Object()
	objsArr[s.name].z=s["Canvas.ZIndex"]
	
	imgIntArr["int"+s.name]=setInterval("checkImgDims('"+tempName+"')",10)	
}


function checkImgDims(nstr) {

	imgRef=main.findName(nstr)
	
	if(imgRef.width>0 && imgRef.height>0) {
	
		//window.status+=imgRef.name+"="+imgRef.width+"x"+imgRef.height+", "		
		//imgDimArr[nstr]=new Array(imgRef.width,imgRef.height,imgRef["Canvas.Left"],imgRef["Canvas.Top"])				
		
		objsArr[nstr].orig_width=imgRef.width
		objsArr[nstr].orig_height=imgRef.height		
		
		num_images_loaded++
		
		clearInterval(imgIntArr["int"+nstr])
		
		
    	var progressBar = main.findName("progressBar");
    	progressBar.width= num_images_loaded/num_imgs *loader_bar
    	
    	loaderRef=main.findName(nstr+"_loaderBG")
    	loaderRef.visibility="Collapsed"
    
    	//imgRef.opacity=1
    	
		if(num_images_loaded==num_imgs) {
			rePositionImages()
		}
	}
}



function rePositionImages() {
	
	prev_wid=0
	for(i=0;i<num_imgs;i++) {
		
		var imgRef=main.findName("img_"+i)
		imgRef["Canvas.Left"]=prev_wid
			
		//objsArr["img_"+i].spotX=prev_wid //???wtf
		imgOrigPosArr["img_"+i+"_xpos"]=prev_wid	
		
	    prev_wid+=imgRef.width
	    
	    imgRef.opacity=init_opacity
	
	}	
	
	imgHolderRef=main.findName("imgHolder")
	imgHolderRef.opacity=1
	imgHolderRef.width=prev_wid+10


	main.findName("instructions")["Opacity"]=1
	main.findName("dotsHolder")["Opacity"]=1
	main.findName("downloadPanel")["Opacity"]=0
}














function mainDown(s,e) {
	//alert("mainDown")

	
	var pt = e.getPosition(null);
	if(pt.Y>225) {
	
		clearInterval(scaleUpInt)	
		
		//alert(e.Y)	
		point1X=pt.X
		point1Y=pt.Y
		this.start_time=new Date().getTime()
		
		imgHolderRef=s.findName("imgHolder")
		main_mouse_down=true
		cur_imgHolderX=imgHolderRef["Canvas.Left"]
		s.captureMouse()
		
		
		if(curSelectedImg.name!=null) {
		
		
			s.findName(curSelectedImg.name)["Canvas.ZIndex"]=objsArr[curSelectedImg.name].z
			//alert(objsArr[curSelectedImg.name].z)
			s.findName(curSelectedImg.name)["Canvas.Left"]=imgOrigPosArr[curSelectedImg.name+"_xpos"]
			s.findName(curSelectedImg.name)["Canvas.Top"]=1	
			s.findName(curSelectedImg.name).opacity=init_opacity
			s.findName(curSelectedImg.name+"_ScaleTransform").ScaleY=1
			s.findName(curSelectedImg.name+"_ScaleTransform").ScaleX=1
			
		}			
	}
	
	
	
}


function mainUp(s,e) {
	//alert("mainUP")
	

	var pt = e.getPosition(null);
	if(pt.Y>225) {	
		
		main_mouse_down=false

		
		
		point2X=pt.X
		point2Y=pt.Y
		//alert(point2Y)
		chkX=Math.abs(point2X-point1X)
		chkY=Math.abs(point2Y-point1Y)
		//alert([chkX,chkY])
		if(chkY<600 && chkX<600) {
		
			this.end_time=new Date().getTime()
						
			elapsed=this.end_time-this.start_time
			//alert(elapsed)	
			if(elapsed<220) {

				p3Y=point2Y-point1Y
				p3X=point2X-point1X	

			}
		}
		s.releaseMouseCapture()
	}	
	
	
	
}




function imgDown(s,e) {

	//s["Cursor"]="Arrow"
	
	if(s["Canvas.Top"]==1) {
	
	
		s["Canvas.ZIndex"]=500
		//window.status=s.name+" "+new Date().getTime()
	
		s.captureMouse()

		this.img_mouse_down=1
		
		clearInterval(scaleUpInt)		

		if(curSelectedImg.name!=null && s.name!=curSelectedImg.name) {

			s.findName(curSelectedImg.name)["Canvas.ZIndex"]=objsArr[curSelectedImg.name].z
			s.findName(curSelectedImg.name)["Canvas.Left"]=imgOrigPosArr[curSelectedImg.name+"_xpos"]
			s.findName(curSelectedImg.name)["Canvas.Top"]=1	
			s.findName(curSelectedImg.name).opacity=init_opacity
			s.findName(curSelectedImg.name+"_ScaleTransform").ScaleY=1
			s.findName(curSelectedImg.name+"_ScaleTransform").ScaleX=1
			
			img_scaling=false
			//goBackInt
		}


		curSelectedImg.name=s.name
		//curSelectedImg.oxpos=s["Canvas.Left"]
		//curSelectedImg.oypos=s["Canvas.Top"]


		var pt = e.getPosition(null);

		img_old_x=s["Canvas.Left"]
		this.img_offset_x=pt.x-img_old_x
		

		img_old_y=s["Canvas.Top"]
		this.img_offset_y=pt.y-img_old_y	
		
		//alert(e.y+"-"+img_old_y)		
		
		sender=s
		me=this
		mouseCheckInt=setInterval("mouseChecker(sender,me)",10)
		
		
		cnt=0
		
		
		//used to work put object on top, ie swap Zindex
		//imgHolderRef=s.findName("imgHolder")
		//imgHolderRef.children.remove(s)
		//imgHolderRef.children.add(s)		
	}
	
	
}




function imgUp(s,e) {
	
	
	//if(_root_ymouse>220) {
	//if(_root_ymouse>101) {
	
	this.img_mouse_down=0
	
	if(s["Canvas.Top"]>0) {
		
		if(!img_scaling) {
		
		//s["Canvas.ZIndex"]=objsArr[s.name].z
		
		clearInterval(mouseCheckInt)
		clearInterval(scaleUpInt)

		this.mySpotX=s["Canvas.Left"]
		this.mySpotY=s["Canvas.Top"]	

		imHolderRef=s.findName("imgHolder")
		this.myFinalSpotX=(stage_wid/2-imgHolderRef["Canvas.Left"])-s.Width


		this.myDX=this.myFinalSpotX-this.mySpotX
		this.myDY=180-s["Canvas.Top"]	
		
	
		sender=s
		me=this
		
		scaleUpInt=setInterval("scaleUp(sender,me)",10) 		
		start_scale_time=new Date().getTime()
		
		img_scaling=true
		
		}

		
		//SOMETHING TO TRY!
		// - paint canvas with image brush, use uniform or strech, then change width/height of canvas
		//END TRY
		
	}
	else {
		s["Canvas.Left"]=imgOrigPosArr[s.name+"_xpos"]
		s["Canvas.Top"]=1
		
	}
	
	
	//s["Cursor"]="Arrow"
}





function scaleUp(s,me) {
	
	intermediate_scale_time=new Date().getTime()
	elapsed_scale_time=intermediate_scale_time-start_scale_time
	
	if(elapsed_scale_time<time_to_move) {
		
		new_valX=ease(elapsed_scale_time,me.mySpotX,this.myDX,time_to_move)
		new_valY=ease(elapsed_scale_time,me.mySpotY,this.myDY,time_to_move)
		new_scale_X=ease(elapsed_scale_time,1,1,time_to_move)
		
	}
	else {
		clearInterval(scaleUpInt)
		img_scaling=false
		//end_scale_time=new Date().getTime()
		//alert(start_scale_time-end_scale_time)
	}
	s["Canvas.Left"]=new_valX
	s["Canvas.Top"]=new_valY
	s.findName(s.name+"_ScaleTransform").ScaleX=new_scale_X
	s.findName(s.name+"_ScaleTransform").ScaleY=new_scale_X
	
}


function ease(t, b, c, d) {
	return c*t/d + b
}


function easeOutQuad(t, b, c, d) {
	return -c *(t/=d)*(t-2) + b
}


function imgMove(s,e) {

}


function imgEnter(s,e) {
	if(s["Canvas.Top"]==1) {
		s.opacity=1
	}
}

function imgLeave(s,e) {
	if(s["Canvas.Top"]==1) {
		s.opacity=init_opacity
	}
}


function mainEnter(sender, args) {
	
}


function mainMouseMove(s, e) {	
	var pt = e.getPosition(null);
	_root_xmouse = pt.x
	_root_ymouse = pt.y	
}






function imgHolderTracker(s) {

	check_zeroX=Math.abs(p3X)
	end=0.7
	
	imgHolderRef=s.findName("imgHolder")
	dotsHolderRef=s.findName("dotsHolder")
	diff=prev_wid-stage_wid
	
	msgRef=s.findName("msg")
	
	if(main_mouse_down) {
		//imgHolderRef["Canvas.Left"]=imgHolderRef["Canvas.Left"]-(point1X-_root_xmouse)
		imgHolderRef["Canvas.Left"]=cur_imgHolderX-(point1X-_root_xmouse)
		//msgRef.text=""+point1X+"-"+_root_xmouse+""
		
		
		
		
		window.status=imgHolderRef["Canvas.Left"]
		
		dotsHolderRef["Canvas.Left"]=imgHolderRef["Canvas.Left"]/diff * (stage_wid-4)*-1
	}
	
	if(check_zeroX>end) {
		
		if(!main_mouse_down) {
		
			check_next=this._x+p3X/3.2
			imgHolderRef["Canvas.Left"]+=p3X/3.2
			
			dotsHolderRef["Canvas.Left"]=imgHolderRef["Canvas.Left"]/diff * (stage_wid-4)*-1
			
			p3X*=friction	
			p3Y*=friction
		}
		else {
			p3X=0
			p3Y=0
		}
	}
	
	if(imgHolderRef["Canvas.Left"]>0) {
		imgHolderRef["Canvas.Left"]=0
		dotsHolderRef["Canvas.Left"]=0
	}
	if(imgHolderRef["Canvas.Left"]<-prev_wid+stage_wid-1) {
		imgHolderRef["Canvas.Left"]=-prev_wid+stage_wid-1
		dotsHolderRef["Canvas.Left"]=796
		
		
	}
}








function mouseChecker(s,me) {
	if(me.img_mouse_down) {
		s["Canvas.Left"]=_root_xmouse-me.img_offset_x
		s["Canvas.Top"]=_root_ymouse-me.img_offset_y
	}
}


