﻿// JScript File

var request = null;
var fileBrowser = null;

function initFileBrowser()
{
	fileBrowser = new CFileBrowser();
}

function getFileBrowser()
{
	return fileBrowser;
}

function CFileBrowser()
{
	this.fileBeingBrowsed = null;
	this.imgElemBeingBrowsed = null;
	this.startIndex = 0;

	this.startPageX = 0;
	this.startSliderX = 0;
	this.startIndexBeforeSlide = 0;
	this.engaged = false;
	this.maxLeftDiff = -1;
	this.maxRightDiff = -1;
	this.lastZIndex = 0;


	this.deltaXForOneImg = -1;

	this.mainDiv = getElement("browsePopup");
	
	this.leftBrowseImg = getElement("m_browseLeft");
	this.rightBrowseImg = getElement("m_browseRight");
	this.leftBrowseOverImg = getElement("m_browseLeftOver");
	this.rightBrowseOverImg = getElement("m_browseRightOver");

	this.browseSliderImg = getElement("m_browseSlider");
	this.sliderBaseImg = getElement("m_sliderBase");
	this.sliderBarDiv = getElement("sliderBar");
	
	this.uploader = document.getElementById("logInViewCtrl1_Uploader");
	
	//cascading with 9 images center bottom
	this.numVisImgs = 9;
	this.orderOfImgs = [0,8, 1,7, 2,6, 3,5, 4];
	this.imgSizePct = [0.10,0.15,0.20,0.25,0.35,0.25,0.20,0.15,0.10];
	this.imgXPos = [0.05, 0.10, 0.15, 0.225, 0.325, 0.525, 0.65, 0.75,0.85];
	this.imgSizePct = [0.10,0.15,0.20,0.25,0.35,0.25,0.20,0.15,0.10];
	this.imgYPos = [1,25,50,75,100,75,50,25,0];
	this.zIndices = [1100,1200,1300,1400,1500,1400,1300,1200,1100];
	this.opacity = [15,25, 50, 85, 100, 85, 50, 25,15];	

	this.fileImgs = [];
	this.bImgSize = 175;
	
	this.imgsToBeShown = [];
	
	
	this.initBrowseDiv();
}

CFileBrowser.prototype.initBrowseDiv = function()
{
	moveElementToCenter(100,"browsePopup");
	moveElementToParentsCenter(528,"sliderBar","browsePopup"); 
	moveElementToParentsCenter(562,"browseUpload","browsePopup"); 
	
  	this.browseSliderImg.onmousedown = startSliderDrag;
   	this.sliderBarDiv.onmousemove = doSliderDrag;
   	this.sliderBarDiv.onmouseup = endSliderDrag;
	
	
	this.mainDiv.onmousedown = selectBrowseFile;

	this.leftBrowseImg.onmousedown = onLeftBrowseButtonClickedSt;
	this.leftBrowseImg.onmouseup = onLeftBrowseButtonClickedEnd;
	
	this.rightBrowseImg.onmousedown = onRightBrowseButtonClickedSt;
	this.rightBrowseImg.onmouseup = onRightBrowseButtonClickedEnd;
	
	this.leftBrowseOverImg.onmousedown = onLeftBrowseButtonClickedSt;
	this.leftBrowseOverImg.onmouseup = onLeftBrowseButtonClickedEnd;
	
	this.rightBrowseOverImg.onmousedown = onRightBrowseButtonClickedSt;
	this.rightBrowseOverImg.onmouseup = onRightBrowseButtonClickedEnd;

	if (this.uploader)
	{
		checkSubmitValidity(false);
		this.uploader.onchange = submitValidity;
//	    var fil = this.uploader.value;
//	    
//	    var but = document.getElementById("logInViewCtrl1_cmdUpload")
//	    if (fil == "")
//			but.disabled=true;
//		else
//			but.disabled=false;
	}


	var imgs = this.mainDiv.getElementsByTagName("img");
	var count = 0;
	
	for (var i = 0; i < imgs.length; i++)
	{
		var img = imgs[i];
		var clName = img.className;
		if (clName == "browseImg")
		{
			this.fileImgs[count] = img;
			count++;
		}
		
	}
}

CFileBrowser.prototype.hasExistingFile = function(newFileName,showMsg)
{
	for (var i = 0; i < this.fileImgs.length; i++)
	{
		var img = this.fileImgs[i];
		var fileName = img.alt;
		var regex = new RegExp( ".*" + fileName + ".*","i");
	    var retVal = regex.exec( newFileName );
	    if (retVal)
	    {
			if (showMsg)
				alert(fileName + " already exists in your directory. \nPlease delete that file first.");
			return true;
	    }
	}
	return false;
}

function submitValidity()
{
	checkSubmitValidity(true);
}

function checkSubmitValidity(showMsg)
{
	var uploader = document.getElementById("logInViewCtrl1_Uploader")
	if (!uploader)
		return;
    var fil = uploader.value;
    
    var but = document.getElementById("logInViewCtrl1_cmdUpload")
    if( fil == "")
    {
        but.disabled=true;
    }
    else
    {
		if( fil.lastIndexOf(".slddrw")==-1 &&
		fil.lastIndexOf(".SLDDRW")==-1 && 
		fil.lastIndexOf(".dwg")==-1 && 
		fil.lastIndexOf(".DWG")==-1 && 
		fil.lastIndexOf(".dxf")==-1 && 
		fil.lastIndexOf(".DXF")==-1 && 
		fil.lastIndexOf(".drw")==-1 &&
		fil.lastIndexOf(".DRW")==-1 &&
		fil.lastIndexOf(".edrw")==-1 &&
		fil.lastIndexOf(".EDRW")==-1) 
		{
			if (showMsg)
				alert("Please select files of type (.slddrw,.dwg,.dxf,.edrw or .drw)");
			but.disabled=true;
			return false;
		}    
		
		//var test = fileBrowser.hasExistingFile(fil);
		if (fileBrowser && fileBrowser.hasExistingFile && !fileBrowser.hasExistingFile(fil,showMsg))
			but.disabled=false;
		else
			but.disabled=true;
    }
}

function startSliderDrag(evt)
{
	var retVal = fileBrowser.startDrag(evt);
	
	sliderBarDiv = getElement("sliderBar");
	if (sliderBarDiv.setCapture)
	    sliderBarDiv.setCapture();
    
    return retVal;
	
}

function doSliderDrag(evt)
{
	return fileBrowser.doDrag(evt);
}

function endSliderDrag(evt)
{
	var retVal = fileBrowser.endDrag(evt);
	sliderBarDiv = getElement("sliderBar");
	if (sliderBarDiv.releaseCapture)
	    sliderBarDiv.releaseCapture();
    return retVal;
	
}

// Turn selected element on
CFileBrowser.prototype.startDrag = function(evt) 
{
    evt = (evt) ? evt : event;
    
    this.startSliderX = this.browseSliderImg.offsetLeft ? this.browseSliderImg.offsetLeft : this.browseSliderImg.left;
    this.startPageX = (evt.pageX || evt.pageY) ? evt.pageX : evt.clientX;
    this.startIndexBeforeSlide = this.startIndex;
    this.engaged = true;
    
	var sliderWidth = getElementWidth(this.browseSliderImg);
	var baseWidth = getElementWidth(this.sliderBaseImg);
    var baseLeft = this.sliderBaseImg.offsetLeft ? this.sliderBaseImg.offsetLeft : this.sliderBaseImg.left;
    
    this.maxLeftDiff = this.startSliderX - baseLeft;
    this.maxRightDiff = baseLeft + (baseWidth - sliderWidth) - this.startSliderX;
    
    
    return false;
}



// Drag an element
CFileBrowser.prototype.doDrag = function(evt) 
{
	if (!this.engaged)
		return;
		
    evt = (evt) ? evt : event;
    var currX = (evt.pageX || evt.pageY) ? evt.pageX : evt.clientX;
    
    var diff = currX - this.startPageX;
    
    if (diff < 0 && this.maxLeftDiff < (-1*diff))
		diff = -1*(this.maxLeftDiff);
	if (diff > 0 && this.maxRightDiff < diff)
		diff = this.maxRightDiff;
    
    
    var sliderXPos = this.startSliderX + diff;
    var elem = getElement("m_browseSlider");
    moveToPx(elem, sliderXPos, 0);
    
    this.startIndex = this.startIndexBeforeSlide + Math.round(diff/this.deltaXForOneImg);
    this.show(false);

    return false;
}

// Turn selected element off
CFileBrowser.prototype.endDrag = function(evt) 
{
    this.engaged = false;
    this.show(true);
}

CFileBrowser.prototype.drawSlider = function()
{
	var ownerWidth = getElementWidth(this.sliderBaseImg);
	var sliderWidth = getElementWidth(this.browseSliderImg);
	
	var sliderXPos = 0;
	this.deltaXForOneImg = 0;
	if (this.fileImgs.length > 1)
	{
		sliderXPos = Math.round((ownerWidth - sliderWidth)*(this.startIndex)/(this.fileImgs.length - 1));
		this.deltaXForOneImg = (ownerWidth - sliderWidth)/(this.fileImgs.length - 1);
	}
	
	var parentLeft = getElementLeft(this.sliderBaseImg);
	
	sliderXPos += parentLeft;
	
    moveToPx(this.browseSliderImg, sliderXPos, 0);
}

CFileBrowser.prototype.browseFile = function(evt)
{
	evt = evt ? evt : event;
	var delta = 0;
    if (evt.wheelDelta) 
    {
        delta = evt.wheelDelta/120;
    } 
    else if (evt.detail) 
    {
        delta = -evt.detail/3;
    }

	if (delta == 0)
		return;
	
	// find which images need to be shown.
	var offset = Math.floor(this.numVisImgs / 2);
	
	if (delta > 0)
	{
		if (this.startIndex < (this.fileImgs.length -1))
			this.startIndex++;
	}

	if (delta < 0)
	{
		if (this.startIndex > 0)
			this.startIndex--;
	}
	
	this.show(true);
	
    if (evt.preventDefault)
    {
        evt.preventDefault();
    }

}

CFileBrowser.prototype.show = function(moveSlider)
{
	// first hide everything
	this.hide();

	// show the divs
	setVisiblity("browsePopup",true);
	setVisiblity("sliderBar",true);
	setVisiblity("m_browseLeft",true);
	setVisiblity("m_browseRight",true);
	checkSubmitValidity(false);
	
	
	
	// find which images need to be shown.
	var offset = Math.floor(this.numVisImgs / 2);
	this.imgsToBeShown = new Array();
	for (var index = 0; index < this.numVisImgs; index++)
	{
		var fileImgIndex = this.startIndex - offset + index; 
		if ( fileImgIndex >= 0 && fileImgIndex < this.fileImgs.length)
			this.imgsToBeShown[index] = this.fileImgs[fileImgIndex]
		else
			this.imgsToBeShown[index] = null;
	}
	
	var divWidth = getElementWidth(this.mainDiv);
    var lable = getElement("browseFileName");
	
	for (var imgIndex = 0; imgIndex < this.numVisImgs; imgIndex++)
	{
		var i = this.orderOfImgs[imgIndex];
		var img = this.imgsToBeShown[i];
		if (!img)
		{
		    if (imgIndex == (this.numVisImgs - 1))
		    {
		        setVisiblity("browseFileName",false);
		    }
			continue;
		}
		
		if (imgIndex == (this.numVisImgs - 1))
		{
            setVisiblity("browseFileName",true);		
		    //lable.textContent = img.alt;
		    lable.innerHTML = img.alt;
		    moveElementToParentsCenter(483,"browseFileName","browsePopup"); 
		}
			
		var newImgSize = this.imgSizePct[i] * divWidth;
        img.setAttribute("height", newImgSize);
        img.setAttribute("width", newImgSize);
		
		var stl = getStyle(img);
	    stl.visibility = "visible";
		stl.position = "absolute";
		//stl.border = "none";
		stl.border = "solid black 2px";
		stl.zIndex = this.zIndices[i];
		
		var xPos = this.imgXPos[i] * divWidth;
		var yPos = this.imgYPos[i];
		moveToPx(img, xPos, yPos);

		var op = this.opacity[i];

		if (typeof img.style.MozOpacity=="string")
			img.style.MozOpacity=op/100;
		else if (img.filters)
			img.filters.alpha.opacity=op;
	}
	
	if (moveSlider)
		this.drawSlider();
	
}

CFileBrowser.prototype.hide = function()
{
	setVisiblity("browsePopup",false);
	setVisiblity("browseFileName",false);
	setVisiblity("sliderBar",false);
	
	setVisiblity("m_browseLeft",false);
	setVisiblity("m_browseRight",false);
	setVisiblity("m_browseLeftOver",false);
	setVisiblity("m_browseRightOver",false);
	
	for (var i = 0; i < this.fileImgs.length; i++)
	{
		var img = this.fileImgs[i];
	    var stl = getStyle(img);
	    stl.visibility = "hidden";
		stl.border = "solid black 2px";
	}
	
}

function getRequest()
{
	request = getRequestObject();
	return request;
}

function deleteStatus()
{
	if (request.readyState == 4)
	{
		var retVal = request.responseText;
		//alert(retVal);
		
		var xmlDoc = request.responseXML;
		var stats = xmlDoc.getElementsByTagName("GoodLogin");
		var stat = stats[0].firstChild.nodeValue;
		
		//alert(stat);
	}
}

CFileBrowser.prototype.confirmDelete = function()
{
	var agree=confirm("Do you want to proceed deleting file ‘" + this.fileBeingBrowsed + "’?");
	if (agree)
		return true ;
	else
		return false ;
}

CFileBrowser.prototype.deleteSelectedFile = function()
{
	if (!this.fileBeingBrowsed)
		return;
		
	var count = 0; 
	for (var i = 0; i < this.fileImgs.length; i++)
	{
		if (this.imgElemBeingBrowsed == this.fileImgs[i])
		{
			break;
		}
		count++;
	}
	
	// move the start index back by one index, if this was the last image selected.
	if (count == (this.fileImgs.length - 1))
		this.startIndex--;
		
	if (this.confirmDelete() == true)
	{
		this.fileImgs.splice(count,1);
		this.show(true);
		
		var request = getRequest();
		var url = "asyncH.aspx?delete=" + this.fileBeingBrowsed + "&dummy=" + new Date().getTime();;
		request.open("GET",url,true);
		request.onreadystatechange = deleteStatus;
		request.send(null);
		
		var parentElem = this.imgElemBeingBrowsed.parentNode;
        //var parentElem = getElement("clientSideImgs");
        parentElem.removeChild(this.imgElemBeingBrowsed);

//		var stl = getStyle(this.imgElemBeingBrowsed);
//		stl.visibility = "hidden";
		this.fileBeingBrowsed = null;
		this.imgElemBeingBrowsed = null;
	}
}

CFileBrowser.prototype.onBrowseToFile = function(evt)
{
	evt = (evt) ? evt : event;
	if (!evt)
		return null;
		
    var target = (evt.target) ? evt.target : evt.srcElement;
    if (!target.alt || !target.src)
        return null;
    
    this.fileBeingBrowsed = null;
	this.imgElemBeingBrowsed = null;
	
	return target.alt;
}

CFileBrowser.prototype.moveToNextFile = function(moveRight)
{
	if (moveRight == false)
	{
		if (fileBrowser.startIndex > 0)
			fileBrowser.startIndex--;
	}
	else
	{
		if (fileBrowser.startIndex < fileBrowser.fileImgs.length - 1)
			fileBrowser.startIndex++;
	}
	
	fileBrowser.show(true);
}

function onLeftBrowseButtonClickedSt(evt)
{
	swapVisibility("m_browseLeft","m_browseLeftOver");
}

function onLeftBrowseButtonClickedEnd(evt)
{
	swapVisibility("m_browseLeftOver","m_browseLeft");
	if (fileBrowser.startIndex > 0)
		fileBrowser.startIndex--;
	fileBrowser.show(true);
}

function onRightBrowseButtonClickedSt(evt)
{
	swapVisibility("m_browseRight","m_browseRightOver");
}

function onRightBrowseButtonClickedEnd(evt)
{
	swapVisibility("m_browseRightOver","m_browseRight");
	if (fileBrowser.startIndex < fileBrowser.fileImgs.length - 1)
		fileBrowser.startIndex++;
	fileBrowser.show(true);
}

function clearSelectedFile(evt)
{
	evt = evt ? evt : event;
    var target = (evt.target) ? evt.target : evt.srcElement;
	if (fileBrowser.imgElemBeingBrowsed)
	{
		var stl = getStyle(fileBrowser.imgElemBeingBrowsed);
		stl.border = "solid black 2px";
		stl.zIndex = fileBrowser.lastZIndex;
		fileBrowser.imgElemBeingBrowsed = null;
		fileBrowser.fileBeingBrowsed = null;
	}
}

function onSliderSelected(evt)
{
	evt = (evt) ? evt : event;
	if (!evt)
		return;
		
    var target = (evt.target) ? evt.target : evt.srcElement;
    if (target == fileBrowser.sliderBaseImg)
    {
		var left = getAbsLeft(fileBrowser.slider);
	    var currX = (evt.pageX || evt.pageY) ? evt.pageX : evt.clientX;
	    
	    if (currX > left)
			fileBrowser.startIndex++;
		else 
			fileBrowser.startIndex--;
		fileBrowser.show(true);
		
		return false;
    }
}

function selectBrowseFile(evt)
{
	//onSliderSelected(evt);
	
	evt = (evt) ? evt : event;
	if (!evt)
		return;
		
    var target = (evt.target) ? evt.target : evt.srcElement;
    if (target == fileBrowser.sliderBaseImg)
    {
		var left = getAbsLeft(fileBrowser.browseSliderImg);
	    var currX = (evt.pageX || evt.pageY) ? evt.pageX : evt.clientX;
	    
	    if (currX > left)
			fileBrowser.startIndex++;
		else 
			fileBrowser.startIndex--;
		fileBrowser.show(true);
		
		return false;
    }
    
    if (!target.alt || !target.src)
    {
		clearSelectedFile(evt);
        return;
    }
    
	if (fileBrowser.imgElemBeingBrowsed)
	{
		var stl = getStyle(fileBrowser.imgElemBeingBrowsed);
		stl.border = "solid black 2px";
		stl.zIndex = fileBrowser.lastZIndex;

	}
    fileBrowser.fileBeingBrowsed = target.alt;
	fileBrowser.imgElemBeingBrowsed = target;
	
	// test
	var offset = Math.floor(fileBrowser.numVisImgs / 2);
	for (var i = 0; i < fileBrowser.imgsToBeShown.length; i++)
	{
		if (fileBrowser.imgElemBeingBrowsed == fileBrowser.imgsToBeShown[i])
		{
			fileBrowser.startIndex += (i - offset);
			break;
		}
	}
	fileBrowser.show(true);
	// test
	
	var stl = getStyle(fileBrowser.imgElemBeingBrowsed);
	//stl.border = "double";
	stl.border = "solid red 2px";
	fileBrowser.lastZIndex = stl.zIndex;
	stl.zIndex = 2000;
	

}

