/*
	This heading must remain intact at all times.
	Copyright (c) 2010 Mark Mason.

	File:	Q-Cogo-Nav.js
	Use:	To provide navigation operations for Q-Cogo, <http://www.q-cogo.com/>.
	Ver:	1.2 (Beta)

	Created by Mark Mason. Latest version available from <http://www.q-cogo.com/>.



	This file is part of Q-Cogo.
	
	Q-Cogo is free software: you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.
	
	Q-Cogo is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.
	
	You should have received a copy of the GNU General Public License
	along with Q-Cogo.  If not, see <http://www.gnu.org/licenses/>.
*/

$(function(){MoveFront('points');$('#PointsCanvas').draggable({stop:function(event,ui){DropCanvas();}})
var Canvases=['#PointsCanvas','#TraverseCanvas','#InverseCanvas','#IntersectCanvas','#TransformCanvas','#AreaCanvas','#SolverCanvas'];var cL=Canvases.length;var Easel='#PointsEasel';var We=$(Easel).outerWidth(),He=$(Easel).outerHeight(),Xe=$(Easel).offset().left,Ye=$(Easel).offset().top;for(var i=0;i<cL;i++)$(Canvases[i]+'Par').val(We+' '+He+' '+Math.round(Xe)+' '+Ye);PutCanvas('#PointsCanvas',We,He,Xe,Ye);SketchPoints();$(document).bind('keydown',{combi:'p',disableInInput:true},function(){MoveFront('points');return false;});$(document).bind('keydown',{combi:'t',disableInInput:true},function(){MoveFront('traverse');return false;});$(document).bind('keydown',{combi:'i',disableInInput:true},function(){MoveFront('inverse');return false;});$(document).bind('keydown',{combi:'x',disableInInput:true},function(){MoveFront('intersect');return false;});$(document).bind('keydown',{combi:'f',disableInInput:true},function(){MoveFront('transform');return false;});$(document).bind('keydown',{combi:'a',disableInInput:true},function(){MoveFront('area');return false;});$(document).bind('keydown',{combi:'l',disableInInput:true},function(){MoveFront('solver');return false;});$(document).bind('keydown',{combi:'s',disableInInput:true},function(){MoveFront('settings');return false;});$(document).bind('keydown',{combi:'h',disableInInput:true},function(){MoveFront('help');return false;});$(document).bind('keydown',{combi:'left',disableInInput:true},function(){PanSketch(1,0,'#PointsCanvas');return false;});$(document).bind('keydown',{combi:'right',disableInInput:true},function(){PanSketch(-1,0,'#PointsCanvas');return false;});$(document).bind('keydown',{combi:'up',disableInInput:true},function(){PanSketch(0,1,'#PointsCanvas');return false;});$(document).bind('keydown',{combi:'down',disableInInput:true},function(){PanSketch(0,-1,'#PointsCanvas');return false;});$(document).bind('keydown',{combi:'home',disableInInput:true},function(){ZoomSketch(0,0,0,'#PointsCanvas');return false;});$(document).bind('keydown',{combi:'pagedown',disableInInput:true},function(){ZoomSketch(-1,0,0,'#PointsCanvas');return false;});$(document).bind('keydown',{combi:'pageup',disableInInput:true},function(){ZoomSketch(1,0,0,'#PointsCanvas');return false;});$.prompt.setDefaults({loaded:function(){$('.jqi').draggable().css('height','auto').css('overflow','visible');$('.jqi h4').css('position','absolute').css('top','-1.55em').css('left','0em');},persistent:false,promptspeed:0,overlayspeed:0,opacity:0.5});var Divs=[$('#AboutTip'),$('#CopyrightTip'),$('#GeneralTip'),$('#PerformanceTip')];for(var i=0;i<4;i++){Divs[i].html(Divs[i].html().replace(/NOTANADDRESS/g,'<a class="submit" title="Email Q-Cogo" href="mailto:info@q-cogo.com" onclick="return Win(\'mailto:info@q-cogo.com\');">info@q-cogo.com</a>'));}});function Win(url){var newWin=window.open(url);return false;}
function TextExpand(Txt){Txt.style.height='29em';qG('PointsEasel').style.marginTop='31.55em';qG('OptionsHolder').style.marginTop='45.7em';}
function TextContract(Txt){Txt.style.height='14.5em';qG('PointsEasel').style.marginTop='19.8em';qG('OptionsHolder').style.marginTop='33.95em';}
function ScrollHelp(DivID){var Field=qG('HelpIndex');Field.scrollTop=qG(DivID).offsetTop-Field.offsetTop-6;}
function CheckAllPoints(){var check=1;var PointsField=qG('pointsContentsCopy');var ptsCnts=PointsField.value+' ';ptsCnts=ptsCnts.replace(/\n/g,' ');ptsCnts=ptsCnts.replace(/\t/g,' ');ptsCnts=ptsCnts.replace(/\b/g,'');ptsCnts=ptsCnts.replace(/\v/g,'');ptsCnts=ptsCnts.replace(/\f/g,'');ptsCnts=ptsCnts.replace(/\r/g,'');ptsCnts=ptsCnts.replace(/\s+/g,' ');ptsCnts=((ptsCnts.substring(0,1)==' ')?ptsCnts.substring(1):ptsCnts);var pointsVector=ptsCnts.split(' ');var lP=((pointsVector[0]=='')?0:(pointsVector.length-1)/5);if(lP!=parseInt(lP)){if(PointsField.readOnly==false)alert('Each point must have a point name, northing, easting, elevation, and description');check=0;}
if(check){var pointsMatrix=new Array(lP);for(var i=0;i<=lP;i++){var tempPoint=new Array(5);tempPoint[0]=pointsVector[0+i*5];tempPoint[1]=pointsVector[1+i*5];tempPoint[2]=pointsVector[2+i*5];tempPoint[3]=pointsVector[3+i*5];tempPoint[4]=pointsVector[4+i*5];pointsMatrix[i]=tempPoint;}
for(i=0;i<=lP-1;i++){if(pointsMatrix[i][0].search(/\+|\-|\*|\/|\,|\.|\(|\)|\[|\]|\{|\}/)>=0){check=0;alert('Point names must not contain simple mathematical characters, dots, or commas');}
pointsMatrix[i][1]=ParseDecimal(pointsMatrix[i][1],1,0);pointsMatrix[i][2]=ParseDecimal(pointsMatrix[i][2],1,0);pointsMatrix[i][3]=ParseDecimal(pointsMatrix[i][3],1,0);if(check&&(pointsMatrix[i][1]=='X'||pointsMatrix[i][2]=='X'||pointsMatrix[i][3]=='X'))check=0;if(check){for(var j=i;j<lP;j++){if(j!=i&&FormatString(pointsMatrix[i][0],1,0)==FormatString(pointsMatrix[j][0],1,0)){check=0;alert('Point names must be unique');break;}}}}}
if(check&&PointsField.readOnly==false){if(confirm('Permanently edit points record?')){OutputPoints(pointsMatrix,lP-1);PointsField.readOnly=true;PointsField.style.backgroundColor='#ffffff';PointsField.style.border='0.078em solid #666666';ZoomSketch(0,0,0,'#PointsCanvas');ClearSort();}
else{RewritePoints();PointsField.readOnly=true;PointsField.style.backgroundColor='#ffffff';PointsField.style.border='0.078em solid #666666';}}
else if(!check&&PointsField.readOnly==false){if(confirm('Points record not changed! Revert to previous points?')){RewritePoints();PointsField.readOnly=true;PointsField.style.backgroundColor='#ffffff';PointsField.style.border='0.078em solid #666666';}}
else RewritePoints();}
function EditPoints(){var PrecisionField=qG('DPrecision');var PointsField=qG('pointsContentsCopy');PrecisionVal=PrecisionField.value;PrecisionField.value='5';RewritePoints();PrecisionField.value=PrecisionVal;PointsField.readOnly=false;PointsField.style.backgroundColor='#f0f0ff';PointsField.style.border='0.078em solid #000099';PointsField.focus();}
function ClearField(FieldID){var Field=qG(FieldID);if(FieldID=='pointsContents'){var check=confirm('Delete all points?');if(check==1){Field.value='';qG(FieldID+'Copy').value='';SketchPoints();}}
else Field.value='';if(FieldID.search('Log')>=0){var C=FieldID.replace('Log','');if(C=='Solver'){var STitle=qG('SolverTitle');var SState=qG('SolverCanvasSt');if(STitle.innerHTML=='Triangle'){SState.value='SketchTriangle(\'\', \'PointsCanvas\')';SketchTriangle('','PointsCanvas');}
else{SState.value='SketchCurve(\'\', \'PointsCanvas\')';SketchCurve('','PointsCanvas');}
ZoomSketch(0,0,0);}
else if(C=='Points')SketchPoints;else{qG(C+'CanvasSt').value='ClrCvs()';ClrCvs();}}'SketchTriangle(\'\', \'PointsCanvas\')'}
function ClrCvs(){qG('PointsCanvas').innerHTML='';qG('PointsControl').innerHTML='';}
function SelectField(Field){if(Field==document.points.pointsContentsCopy){var PrecisionField=qG('DPrecision');var PointsField=qG('pointsContentsCopy');PrecisionVal=PrecisionField.value;PrecisionField.value='5';RewritePoints();PrecisionField.value=PrecisionVal;}
Field.focus();Field.select();}
function CheckDMSField(FieldID){var Field=qG(FieldID);var Value=ParseDMS(Field.value,1,0);if(!Field.value||Value=='X')Field.value=0+'';else{Value=FormatDMS(Value,1);Value=Value.replace(/\s+/g,'');Field.value=Value;}}
function CheckDecimalField(FieldID,Precise,Default){var Field=qG(FieldID);var Value=ParseDecimal(Field.value,1,0);if(!Field.value||Value=='X')Field.value=Default+'';else{Value=FormatDecimal(Value,Precise,0);Value=Value.replace(/\s+/g,'');Field.value=Value;}}
function SyncDistArea(FieldID){if(FieldID=='DistUnits')qG('AreaUnits').value=qG(FieldID).value;else qG('DistUnits').value=qG(FieldID).value;}
function SyncHIHT(Type,Value){var TravDim=qG('TravDim').innerHTML;if(Type=='HI')var Fields=[qG('HI'),qG('TravHI')];else if(Type=='HT')var Fields=[qG('HT'),qG('TravHT')];if(Value!=null){Value=ParseDecimal(Value,1,0);if(Value=='X'){Fields[0].value='0';if(TravDim=='3D')Fields[1].innerHTML='0';}
else{Value=FormatDecimal(Value,0,0);Value=Value.replace(/\s+/g,'');Fields[0].value=Value;if(TravDim=='3D')Fields[1].innerHTML=Value;}}}
function MoveFront(DivID){var Divs=new Array(6);Divs[0]=['points','Points','PointsCanvasSt',11,'pointsContentsCopy',11];Divs[1]=['traverse','Traverse','TraverseCanvasSt',11,'TraverseLog',11];Divs[2]=['inverse','Inverse','InverseCanvasSt',11,'InverseLog',11];Divs[3]=['intersect','Intersect','IntersectCanvasSt',11,'IntersectLog',11];Divs[4]=['transform','Transform','TransformCanvasSt',11,'TransformLog',11];Divs[5]=['area','Area','AreaCanvasSt',11,'AreaLog',11];Divs[6]=['solver','Solver','SolverCanvasSt',11,'SolverLog',-1];Divs[7]=['settings','Settings','',-1,'',-1];Divs[8]=['help','Help','',-1,'',-1];var Header=qG('header');for(var i=0;i<Divs.length;i++){var DivObject=qG(Divs[i][0]).style;var TabObject=qG(Divs[i][0]+'-tab');var FocusElement=qG(Divs[i][0]+'-tiplink');if(Divs[i][0]==DivID){DivObject.zIndex=10;TabObject.setAttribute('class','legend-selected');Header.innerHTML=Divs[i][1];eval((Divs[i][2])?qG(Divs[i][2]).value:'');if(FocusElement!=null)FocusElement.focus();qG('PointsEasel').style.zIndex=Divs[i][3];qG('OptionsHolder').style.zIndex=Divs[i][5];if(Divs[i][4]){ScrlFld=qG(Divs[i][4]);ScrlFld.scrollTop=ScrlFld.scrollHeight-ScrlFld.clientHeight;}}
if(Divs[i][0]!=DivID){DivObject.zIndex=0;TabObject.setAttribute('class','legend');}}}
function IntersectSwap(){var Title=qG('IntTitle');var FromLabel=qG('IntValueFromLabel');var ToLabel=qG('IntValueToLabel');var Titles=['Brg-Brg','Brg-Dist','Dist-Dist'];var Froms=['Az:','Az:','HD:'];var Tos=['Az:','HD:','HD:'];for(var i=0;i<Titles.length;i++){if(Title.innerHTML==Titles[i])break;}
Title.innerHTML=Titles[(i+1)%Titles.length];FromLabel.innerHTML=Froms[(i+1)%Froms.length];ToLabel.innerHTML=Tos[(i+1)%Tos.length];}
function InvDimSwap(){var Title=qG('InvDim');var Titles=['2D','3D'];for(var i=0;i<Titles.length;i++){if(Title.innerHTML==Titles[i])break;}
Title.innerHTML=Titles[(i+1)%Titles.length];}
function InvTypeSwap(){var Title=qG('InvType');var FromLabel=qG('InvFromPtLabel');var ToLabel=qG('InvToPtLabel');var Input=qG('InvPtPt');var PtLabel=qG('InvPtPtLabel');var Titles=['Point','Line'];var FromLabels=['From:','Start:'];var ToLabels=['To:','End:'];var Inputs=['none','inline'];var PtLabels=['none','inline'];for(var i=0;i<Titles.length;i++){if(Title.innerHTML==Titles[i])break;}
Title.innerHTML=Titles[(i+1)%Titles.length];FromLabel.innerHTML=FromLabels[(i+1)%FromLabels.length];ToLabel.innerHTML=ToLabels[(i+1)%ToLabels.length];Input.style.display=Inputs[(i+1)%Inputs.length];PtLabel.style.display=PtLabels[(i+1)%PtLabels.length];}
function TravDimSwap(){var Title=qG('TravDim');var DistLabel=qG('TravValueDistLabel');var ZALabel=qG('TravValueZALabel');var ZAInput=qG('TravZA');var Span=qG('TravHIHT');var SpanString=':  HI=<a class="ts" title="Change HI"';SpanString+=' href="javascript:void(0)" id="TravHI"';SpanString+=' onclick="var HI2 = prompt(\'Enter HI:\', qG(\'HI\').value); SyncHIHT(\'HI\', HI2);">';SpanString+=qG('HI').value;SpanString+='</a>, ';SpanString+=' HT=<a class="ts" title="Change HT"';SpanString+=' href="javascript:void(0)" id="TravHT"';SpanString+=' onclick="var HT2 = prompt(\'Enter HT:\', qG(\'HT\').value); SyncHIHT(\'HT\', HT2);">';SpanString+=qG('HT').value;SpanString+='</a>';var Titles=['2D','3D'];var Dists=['HD:','SD:'];var Labels=['none','inline'];var Inputs=['none','inline'];var Spans=['',SpanString];for(var i=0;i<Titles.length;i++){if(Title.innerHTML==Titles[i])break;}
Title.innerHTML=Titles[(i+1)%Titles.length];DistLabel.innerHTML=Dists[(i+1)%Dists.length];ZALabel.style.display=Labels[(i+1)%Labels.length];ZAInput.style.display=Inputs[(i+1)%Inputs.length];Span.innerHTML=Spans[(i+1)%Spans.length];}
function TravTypeSwap(){var Title=qG('TravType');var Ang=qG('TravValueAngLabel');var BSLabel=qG('TravValueBSLabel');var BSInput=qG('TravBS');var Titles=['Azimuth','Angle'];var Angs=['Az:','HA:'];var Labels=['none','inline'];var Inputs=['none','inline'];for(var i=0;i<Titles.length;i++){if(Title.innerHTML==Titles[i])break;}
Title.innerHTML=Titles[(i+1)%Titles.length];Ang.innerHTML=Angs[(i+1)%Angs.length];BSLabel.style.display=Labels[(i+1)%Labels.length];BSInput.style.display=Inputs[(i+1)%Inputs.length];}
function SolverSwap(){var Inputs=new Array();Inputs[0]=['A','B','C','aa','bb','cc'];Inputs[1]=['Rad','Delta','Tang','Len','Chord','HR'];var Title=qG('SolverTitle');var Titles=['Triangle','Curve'];for(var i=0;i<Titles.length;i++){if(Title.innerHTML==Titles[i])break;}
Title.innerHTML=Titles[(i+1)%Titles.length];var j=(i+1)%Inputs.length;for(var k=0;k<Inputs[0].length;k++){qG('Solver'+Inputs[i][k]).style.display='none';if(Inputs[i][k]!='HR')qG('Solver'+Inputs[i][k]+'Label').style.display='none';qG('Solver'+Inputs[j][k]).style.display='inline';if(Inputs[j][k]!='HR')qG('Solver'+Inputs[j][k]+'Label').style.display='inline';}
var State=qG('SolverCanvasSt');var Tri='SketchTriangle(\'\', \'PointsCanvas\')';var Crv='SketchCurve(\'\', \'PointsCanvas\')';if(State.value==Tri){State.value=Crv;eval(State.value);ZoomSketch(0,0,0);}
else if(State.value==Crv){State.value=Tri;eval(State.value);ZoomSketch(0,0,0);}}
function LabelSwap(){var Title=qG('LabelLink');var Titles=['Point Name','Elevation','Description','None'];for(var i=0;i<Titles.length;i++){if(Title.innerHTML==Titles[i])break;}
Title.innerHTML=Titles[(i+1)%Titles.length];var Header=qG('header').innerHTML;eval(qG(Header+'CanvasSt').value);}
function qG(id){return document.getElementById(id);}