/*
3.31.2011
	Vacabucks
	J_Common.js
*/
var GRID_INIT_HEIGHT = 300;
var HORIZ_BAR_HEIGHT = 7;
var HEADER_HEIGHT = 50;

function BuildGrid(aLayout, sPrefix, sTitle){
	//alert('in BuildGrid');
    var s='';    
    var aHeader = new Array();
    var aData = new Array();
    var i=0;
    var sTemp = '';
    var iPos=0;
    var sSuffix = ''; 
    var sHName = '';   
    var sData = '';    
    
    //TABLE CONTAINER DIV
	s=s+  "<div id='TC_" + sPrefix + "' class='TC'>"; //-------------------- overall table container -------
	if (sTitle != undefined){
	    s=s+  "<label id='HT_" + sPrefix + "' class='HT'>" + sTitle + "</label>";
	}
	
	s=s+  "<div id='HC_" + sPrefix + "' class='HC'>"; //-------------------- header container --------------		
	
	//TABLE HEADER
	/* de-serialize the header string into columns and put into aHeader */
	sTemp = aLayout[0];
	//alert(sTemp);
	while(sTemp != ''){
        iPos = sTemp.indexOf(PD,0)
        if (iPos > -1){
            aHeader[i] = sTemp.substr(0,iPos); // a header name...'First Name'
            sTemp = sTemp.substr(iPos+1);
            i++;
        }
        else{
            aHeader[i] = sTemp;
            sTemp = '';
            break;
        }
    }
	s=s+  "<table id='TH_" + sPrefix + "' class='TH' border='0' cellpadding='1' cellspacing='0' >";
	s=s+  "<thead>";
	s=s+  "<tr>";
	for (i=0;i<aHeader.length;i++){		
	    sHName = aHeader[i];
	    sSuffix = sPrefix + '_' + sHName.replace(' ','_');
	    s=s+  "<th id='hdr_" + sSuffix + "' class='TDH_" + sSuffix + "' >" + sHName + "</th>";
	}
	s=s+  "</tr>";
	s=s+  "</thead>";
	s=s+  "</table>";	
	s=s+  "</div>";  //----------------------------------------------------------------------- header container ------------------		
	
	//DIV TO HOST THE SCROLLING TABLE
	s=s+  "<div id='TS_" + sPrefix + "' class='TS'>"; //-------------------------------------- table scroll container ------------	

	//TABLE TO HOLD THE DATA; NO HEADER
	s=s+  "<table id='TD_" + sPrefix + "' class='TD' border='0' cellpadding='1' cellspacing='0' >";  //-------- table data ---------------------
	s=s+  "<tbody>";
	
	/* row loop */
	for (iR=1;iR<aLayout.length;iR++){
	    i=0;
	    sTemp = aLayout[iR];
	    while(sTemp != '_X_'){
            iPos = sTemp.indexOf(PD,0)
            if (iPos > -1){
                aData[i] = sTemp.substr(0,iPos); // ex.: each index contains data...Bill Smith
                sTemp = sTemp.substr(iPos+1);
                i++;
            }
            else{
                aData[i] = sTemp;
                sTemp = '_X_';   
                break;            
            }
        }
                
    	/* column loop */
	    for (iC=0;iC<aData.length;iC++){	    	    
	    
	        sData = aData[iC];
	        sHName = aHeader[iC];
	        sSuffix = sPrefix + '_' + sHName.replace(' ','_');
			if ((sHName == 'Active') && (sData == 1)){
				sData = 'True';
			}
			else if ((sHName == 'Active') && (sData == 0)){
				sData = 'False';
			}
	        /* The very first column triggers the first row HTML so we can store the ID value which is always first */	
	        if (iC == 0){
	            s=s+  "<tr id='TR_" + sPrefix + iR.toString() + "' class='TR TR-unselected' ItemID='" + sData + "'>";
	        }
	        s=s+  "<td id='col_" + sSuffix + "' class='TDC_" + sSuffix + "' >" + sData + "</td>";
		}
		s=s+  "</tr>";
	}

	s=s+  "</tbody>";
	s=s+  "</table>";	
	s=s+  "</div>";  //----------------------------------------------------------------------- /scrolling host ------------------
	s=s+  "</div>";  //----------------------------------------------------------------------- /container host ------------------	
	
	return s;	
}

function BuildDetail(aLayout, sPrefix, iRightGroupIndex, sTitle){
	var s='';    
    var aLabel = new Array();
    var aData = new Array();
    var i=0;
	var sOID='0';
	var sMID='0';
	var sPID='0';
	var sPOID='0';
	var sPAID='0';
	var sRegion = '';
	var iMax=0;
    var sTemp = '';
    var iPos=0;  
	var sLabel='';
	var sLabelType='';
	var sRO='';
	var sReadOnly='';
	var sLabelClass='DetailLabel';
	var sDataClass='DetailText';
	if (iRightGroupIndex == undefined){iRightGroupIndex = -1};
	
	//Detail Labels
	/* de-serialize the label string and put into aLabel array */
	/*Labels, which are Columns Header aliases from the stored proc, may have a suffix like _HD, which means 'hidden'.
	   we parse this out and act accordingly
	   Other suffix's are _EM (email link), _DD (dropdown...go get list of items)...*/
	sTemp = aLayout[0];
	//alert(sTemp);
	while(sTemp != ''){
        iPos = sTemp.indexOf(PD,0)
        if (iPos > -1){
            aLabel[i] = sTemp.substr(0,iPos); // a label name...'First Name'
            sTemp = sTemp.substr(iPos+1);
            i++;
        }
        else{
            aLabel[i] = sTemp;
            sTemp = '';
			iMax = i+1;
            break;
        }
    }
	i=0;
	sTemp = aLayout[1];
			
	while(sTemp != '_X_'){
		iPos = sTemp.indexOf(PD,0)
		if (iPos > -1){
			aData[i] = sTemp.substr(0,iPos); // ex.: each index contains data...Bill Smith
			sTemp = sTemp.substr(iPos+1);
			i++;
		}
		else{
			aData[i] = sTemp;
			sTemp = '_X_';   
			break;            
		}
	}

	/* Main Key ID must always be returned as the first item from the Stored Proc */
	switch (sPrefix){
		case "PR":
			sPOID = aData[0];
			sPID = aData[1];
			sPAID = aData[2];
			sRID = aData[3];
			s=s+ "<div id='divDetailHost_" + sPrefix + "' class='DetailHost' POID='" + sPOID + "' PID='" + sPID + "' PAID='" + sPAID + "' RID='" + sRID + "' >";
		break;
		case "PO":
			sPOID = aData[0];
			s=s+ "<div id='divDetailHost_" + sPrefix + "' class='DetailHost' POID='" + sPOID + "' >";
		break;
		case "MB":
			sMID = aData[0];
			s=s+ "<div id='divDetailHost_" + sPrefix + "' class='DetailHost' MID='" + sMID + "' NEW='false' >";
		break;	
		case "OF":
			sOID = aData[0];
			sPID = aData[1];
			sPOID = aData[2];
			s=s+ "<div id='divDetailHost_" + sPrefix + "' class='DetailHost' OID='" + sOID + "' PID='" + sPID + "' POID='" + sPOID + "' >";
		break;	
		case "RG":
			sRID = aData[0];
			s=s+ "<div id='divDetailHost_" + sPrefix + "' class='DetailHost' RID='" + sRID + "' NEW='false' >";
		break;
	}
	
	s=s+ "<div class='DetailHost_left'>";
	//alert(s);
	for (iC=0;iC<iMax;iC++){
	
		/* If the field count == the rightgroupindex, end the 'left' div and start the 'right'div */
		if (iC == iRightGroupIndex){
			s=s+ "</div>";
			s=s+ "<div class='DetailHost_right'>";
		}
		sLabel = aLabel[iC];
		//alert('IMax: ' + iMax + '  IC: ' + iC + '  Label:' + sLabel);
		iPos = sLabel.indexOf('_');
		if (iPos > -1){
			sLabelType = sLabel.substr(iPos+1);
			sLabel = sLabel.substr(0,iPos);
			// look for second '_' which is where Readonly status is conveyed as "RO".  Only RO for now.
			iPos = sLabelType.indexOf('_');
			sReadOnly = '';
			sRO = '';
			sRO_class = '';
			if (iPos > -1){
				sRO = sLabelType.substr(iPos+1);
				if (sRO == 'RO'){
					sReadOnly = "readonly='readonly'";
					sRO_class = 'ReadOnly';
				}
				sLabelType = sLabelType.substr(0,iPos);
			}
			// case where the label has no suffix except for RO
			else if (sLabelType == 'RO'){
				sReadOnly = "readonly='readonly'";
				sRO_class = 'ReadOnly';
				sLabelType = '';
			}
			// Label type selection
			switch (sLabelType){
				case "HD": // hidden
					s=s+ "<input type='hidden' id='hid" + sLabel.replace(' ','') + "' value='" + aData[iC] + "' />";
				break;
				case "DD": //dropdown selection
					if (sLabel == 'Owner'){
						var sHTML =  GetPropertyOwners_DD(sPOID);
						WaitHere(50);
						s=s + sHTML;
						s=s+ "<br />";
					}
					else if (sLabel == 'State'){
						sLabelClass='DetailLabel';
						sDataClass='DetailText ' + sRO_class;
						s=s+ "<label for='tb" + sLabel.replace(' ','') + "' class='" + sLabelClass + "'>" + sLabel + ":</label>";
						s=s+ "<input id='tb" + sLabel.replace(' ','') + "' type='text' class='" + sDataClass + "' " + sReadOnly + " onFocus='this.select()' value='" + aData[iC] + "' />";
						s=s+ "<br />";
					}
					else if (sLabel == 'Property'){
						var sHTML =  GetProperties_DD(sPOID, 'divPropertyList');
						WaitHere(50);
						s=s + sHTML;
						s=s+ "<br />";
					}
					else if (sLabel == 'Region'){
						var sHTML =  GetRegions_DD(sRID, 'divRegionList');
						WaitHere(50);
						s=s + sHTML;
						s=s+ "<br />";
					}
				break;			
				case "EA": // Email link
					/* OUT OF SERVICE...need to hide from email spam bots...should bring up a form
					sLabelClass='DetailLabel DetailCursor';
					sDataClass='DetailText';
					var sEA = aData[iC];
					var sMT = "mailto:'" + sEA + "'";
					//alert(sMT);
					s=s+ "<label for='tb" + sLabel.replace(' ','') + "' class='" + sLabelClass + "'><a href='" + sMT + "' + >" + sLabel + ":</a></label>";
					s=s+ "<input id='tb" + sLabel.replace(' ','') + "' class='" + sDataClass + "'value='" + sEA + "' />";
					*/
					
					sLabelClass='DetailLabel';
					sDataClass='DetailText_wide ' + sRO_class;
					s=s+ "<label for='tb" + sLabel.replace(' ','') + "' class='" + sLabelClass + "'>" + sLabel + ":</label>";
					s=s+ "<input id='tb" + sLabel.replace(' ','') + "' type='text' class='" + sDataClass + "' " + sReadOnly + " onFocus='this.select()' value='" + aData[iC] + "' />";
					s=s+ "<br />";
				break;
				case "MP": // address to map to
					sLabelClass='DetailLabel';
					sDataClass='DetailText ' + sRO_class;
					s=s+ "<label for='tb" + sLabel.replace(' ','') + "' class='" + sLabelClass + "'>" + sLabel + ":</label>";
					s=s+ "<input id='tb" + sLabel.replace(' ','') + "' type='text' class='" + sDataClass + "' " + sReadOnly + " onFocus='this.select()' value='" + aData[iC] + "' />";
					s=s+ "<br />";				
				break;
				
				case "NBR": // numberic value
					sLabelClass='DetailLabel';
					sDataClass='DetailText_numeric ' + sRO_class;
					s=s+ "<label for='tb" + sLabel.replace(' ','') + "' class='" + sLabelClass + "'>" + sLabel + ":</label>";
					s=s+ "<input id='tb" + sLabel.replace(' ','') + "' type='text' class='" + sDataClass + "' " + sReadOnly + " onFocus='this.select()' value='" + aData[iC] + "' />";
					s=s+ "<br />";				
				break;
				
				case "WS": // web site to link to
					sLabelClass='DetailLabel';
					sDataClass='DetailText_wide ' + sRO_class;
					var sWS = aData[iC];
					var sWSlink = '"http://' + sWS + '" target="_blank"';
					//alert(sWSlink);
					s=s+ "<label for='tb" + sLabel.replace(' ','') + "' class='" + sLabelClass + "'><a href=" + sWSlink + " + >" + sLabel + ":</a></label>";
					s=s+ "<input id='tb" + sLabel.replace(' ','') + "' type='text' class='" + sDataClass + "' " + sReadOnly + " onFocus='this.select()' value='" + sWS + "' />";
					s=s+ "<br />";				
				break;
				
				case "IM": // display image
					sLabelClass='DetailLabel';
					sDataClass='DetailText_wide ' + sRO_class;					
					s=s+ "<label for='tb" + sLabel.replace(' ','') + "' class='" + sLabelClass + "'>" + sLabel + ":</label>";
					s=s+ "<input id='tb" + sLabel.replace(' ','') + "' type='text' class='" + sDataClass + "' " + sReadOnly + " onFocus='this.select()' value='" + aData[iC] + "' />";
					s=s+ "<br />";
					//build div host to contain image
					s=s+ "<div class='ImageHost'>";
					s=s+ "<img id='img" + sLabel.replace(' ','') + "' class='PropertyImage' PID='" + sPID + "' src='PropertyImages/PO_" + sPOID + "/" + aData[iC] + "' alt='" + aData[iC] + "' />";
					s=s+ "</div>";					
				break;
				
				case "TA": // configure text area
					sLabelClass='DetailLabelTextArea';
					sDataClass='DetailTextArea '  + sRO_class;
					s=s+ "<label for='tb" + sLabel.replace(' ','') + "' class='" + sLabelClass + "'>" + sLabel + ":</label>";
					s=s+ "<textarea id='tb" + sLabel.replace(' ','') + "' type='text' class='" + sDataClass + "' " + sReadOnly + " onFocus='this.select()' >" + aData[iC] + "</textarea>";
					s=s+ "<br />";
				break;
				
				case "BIT": // checkbox
					sLabelClass='DetailLabelTextArea';
					sDataClass='DetailCheckbox '  + sRO_class;
					var sData = aData[iC];
					var sChecked = '';
					if (sData == 'true'){sChecked = "checked='checked'"};
					s=s+ "<label for='chk" + sLabel.replace(' ','') + "' class='" + sLabelClass + "'>" + sLabel + ":</label>";
					s=s+ "<input id='chk" + sLabel.replace(' ','') + "' type='checkbox' class='" + sDataClass + "' " + sReadOnly + " " + sChecked + "/>";
					s=s+ "<br />";
				break;
				
				case "DT": // date
					sLabelClass='DetailLabel';
					sDataClass='DetailText DetailDate'  + sRO_class;
					s=s+ "<label for='tb" + sLabel.replace(' ','') + "' class='" + sLabelClass + "'>" + sLabel + ":</label>";
					s=s+ "<input id='tb" + sLabel.replace(' ','') + "' type='text' class='" + sDataClass + "' " + sReadOnly + " onFocus='this.select()' value='" + aData[iC] + "' />";
					s=s+ "<br />";
				break;
				
				case "RG": //Region data and its needs a wide textbox
					sLabelClass='DetailLabel';
					sDataClass='DetailText_wide ' + sRO_class;
					s=s+ "<label for='tb" + sLabel.replace(' ','') + "' class='" + sLabelClass + "'>" + sLabel + ":</label>";
					s=s+ "<input id='tb" + sLabel.replace(' ','') + "' type='text' class='" + sDataClass + "' " + sReadOnly + " onFocus='this.select()' value='" + aData[iC] + "' />";
					s=s+ "<br />";				
				break;
				
				default:
					sLabelClass='DetailLabel';
					sDataClass='DetailText '  + sRO_class;
					s=s+ "<label for='tb" + sLabel.replace(' ','') + "' class='" + sLabelClass + "'>" + sLabel + ":</label>";
					s=s+ "<input id='tb" + sLabel.replace(' ','') + "' type='text' class='" + sDataClass + "' " + sReadOnly + " onFocus='this.select()' value='" + aData[iC] + "' />";
					s=s+ "<br />";
				break;
			}
		}
		else{
			sLabelClass='DetailLabel';
			sDataClass='DetailText';
			s=s+ "<label for='tb" + sLabel.replace(' ','') + "' class='" + sLabelClass + "'>" + sLabel + ":</label>";
			s=s+ "<input id='tb" + sLabel.replace(' ','') + "' type='text' class='" + sDataClass + "' onFocus='this.select()' value='" + aData[iC] + "' />";
			s=s+ "<br />";
			
			//alert("Else: " + s);
		}			
	}
	//alert("End: " + s);
	s=s+ "</div>";
	s=s+ "</div>";

	return s;
}
function BuildSelectList(aLayout, sSuffix, sCurrentID, sDiv_Wrap){
	//alert('in BuildSelectList');
    var s='';    
    var aHeader = new Array();
    var aData = new Array();
    var i=0;
    var sTemp = '';
    var iPos=0;
    var sData = ''; 
	var sLabel = '';	

	/* de-serialize the header string; Grab the 1 index as its the Column Name to use as the label text */
	sTemp = aLayout[0];
	//alert(sTemp);
	while(sTemp != ''){
        iPos = sTemp.indexOf(PD,0)
        if (iPos > -1){
            aHeader[i] = sTemp.substr(0,iPos); // a header name...'First Name'
            sTemp = sTemp.substr(iPos+1);
            i++;
        }
        else{
            aHeader[i] = sTemp;
            sTemp = '';
            break;
        }
    }
	sLabel = aHeader[1];	
	if (sDiv_Wrap != undefined){s=s+ "<div id='" + sDiv_Wrap + "' >"};
	s=s+  "<label for='ddl" + sSuffix + "' class='DetailLabel'>" + sLabel + ":</label>";
	s=s+  "<select id='ddl" + sSuffix + "' class='DetailSelect'>";		
	
	/* row loop */
	for (iR=1;iR<aLayout.length;iR++){
	    i=0;
	    sTemp = aLayout[iR];
	    while(sTemp != '_X_'){
            iPos = sTemp.indexOf(PD,0)
            if (iPos > -1){
                aData[i] = sTemp.substr(0,iPos); // ex.: each index contains data...Bill Smith
                sTemp = sTemp.substr(iPos+1);
                i++;
            }
            else{
                aData[i] = sTemp;
                sTemp = '_X_';   
                break;            
            }
        }
		if (parseInt(sCurrentID) == parseInt(aData[0])){
			s=s+  "<option selected='selected' value='" + aData[0] + "'>" + aData[1] + "</option>";
		}
		else{
			s=s+  "<option value='" + aData[0] + "'>" + aData[1] + "</option>";		
		}
	}

	s=s+  "</select>";
	if (sDiv_Wrap != undefined){s=s+ "</div>"};
	return s;	
}


function BuildPropertyListing(aLayout){

    var s='';    
    var aLabel = new Array();
    var aData = new Array();
    var i=0;
    var sTemp = '';
    var iPos=0;
    var sSuffix = ''; 
    var sHName = '';   
    var sData = '';    
	var sImage = '';
	var sWebsite = '';
	
	//Label array
	sTemp = aLayout[0];
	//alert(sTemp);
	while(sTemp != ''){
        iPos = sTemp.indexOf(PD,0)
        if (iPos > -1){
            aLabel[i] = sTemp.substr(0,iPos); // a label name...'First Name'
            sTemp = sTemp.substr(iPos+1);
            i++;
        }
        else{
            aLabel[i] = sTemp;
            sTemp = '';
            break;
        }
    }
	
	/* row loop: each row is a new property */
	for (iR=1;iR<aLayout.length;iR++){
		s=s+  "<div id='PC_" + iR.toString() + "' class='PC'>";
		
	    i=0;
	    sTemp = aLayout[iR];
	    while(sTemp != 'fini'){
            iPos = sTemp.indexOf(PD,0)
            if (iPos > -1){
                aData[i] = sTemp.substr(0,iPos); // ex.: each index contains data...Bill Smith
                sTemp = sTemp.substr(iPos+1);
                i++;
            }
            else{
                aData[i] = sTemp;
                sTemp = 'fini';   
                break;            
            }
        }
                
    	/* column loop */
		s=s+ "<div class='PropertyDataHost'>";
		sPOID = aData[1];
	    for (iC=2;iC<aData.length;iC++){	    	    
	    
	        sData = aData[iC];
	       	sLabel = aLabel[iC];
			sLabelClass='PropertyLabel';
			sDataClass='PropertyData';
			
			if (sLabel == 'Image'){
				sImage= "<a id='a" + sLabel.replace(' ','') + "' class='PropertyLink' href='http://" + sWebsite + "' target='_blank'>";
				sImage=sImage + "<image id='img" + sLabel.replace(' ','') + "' class='PropertyImage' src='PropertyImages/PO_" + sPOID + "/" + sData + "' />";
				sImage=sImage + "</a>";
			}	
			else{
				if (sLabel == 'Website'){
					s=s+ "<label class='" + sLabelClass + "'>" + sLabel + ":</label>";
					s=s+ "<a id='a" + sLabel.replace(' ','') + "' class='" + sDataClass + "' href='http://" + sData + "' target='_blank'>" + sData + "</a>";
					s=s+ "<br />";
					sWebsite = sData;
				}
				else{
					s=s+ "<label class='" + sLabelClass + "'>" + sLabel + ":</label>";
					s=s+ "<label id='lbl" + sLabel.replace(' ','') + "' class='" + sDataClass + "'>" + sData + "</label>";
					s=s+ "<br />";
				}
			}	
		}
		s=s+ "</div>";
		s=s+ sImage;
		s=s+ "</div>";
	}
	
	return s;	
}

function NewData(sMode){
	switch (sMode){
		case "PR":
			$('#divDetailHost_PR').attr('new','true');
			$('.DetailHost_left input').val('');
			$('.DetailHost_right input').val('');
			$('.DetailHost_right textarea').val('');	
			$('#tbName').focus();
			$('#imgImage').attr('src','PropertyImages/PO_0/NoImage.jpg');
			$('#chkFeatured').att('checked','checked');
		break;
		case "PO":
			$('#divDetailHost_PO').attr('new','true');
			$('.DetailHost_left input').val('');
			$('.DetailHost_right input').val('');
			$('.DetailHost_right textarea').val('');
			$('#chkActive').attr('checked',true);
			$('#chkApproved').attr('checked',false);
			$('#tbFirstName').focus();
		break;
		case "MB":
			$('#divDetailHost_MB').attr('new','true');
			$('.DetailHost_left input').val('');
			$('.DetailHost_right input').val('');
			$('.DetailHost_right textarea').val('');
			$('#tbFirstName').focus();			
		break;
		case "RG":
			$('#divDetailHost_RG').attr('new','true');
			$('.DetailHost_left input').val('');
			$('.DetailHost_right input').val('');
			$('.DetailHost_right textarea').val('');
			$('.DetailHost_left input[type="checkbox"]').attr('checked',true);
			$('#tbRegion').focus();			
		break;
		case "OF":
			$('#divDetailHost_OF').attr('new','true');
			$('.DetailHost_left input').val('');
			$('.DetailHost_right input').val('');
			$('.DetailHost_right textarea').val('');
			$('.DetailHost_left input[type="checkbox"]').attr('checked',true);
				
			$('#ddlPropertyOwner').val(0);
			$('#ddlProperty').val(0)
							 .attr('disabled',true);
			$('#divData input').attr('disabled',true);
			$('#divData input').attr('disabled',true)
											   .val('');		   
			$('#ddlPropertyOwner').focus();
					
		break;
	}
}

function ImageEdit(sPOID, sID, sImageName){	
    var s= "<iframe id='frameBrowseForImage'></iframe>";    
    //dMM.show();
	$(s).appendTo($(document.body)).show();    
    var iLeft = 0;
    var iTop = 0;
    var sSrc = 'FileUpload.php?i=' + sImageName + '&p=' + sPOID;
    $('#frameBrowseForImage').attr('src',sSrc)
                             .css({'position':'absolute',
                                   'left':iLeft,
                                   'top':iTop,
                                   'width':720,
                                   'height':550,
                                   'background-color':'#888',
                                   'border':'solid 5px #000',
                                   'z-index':7500});
}
function CloseIFrame(){
    $('#frameBrowseForImage').hide(1000,function(){
        $(this).remove();
    });
}

function WaitHere(ms){
	var date = new Date();
	var curDate = null;
	do { curDate = new Date(); } 
	while(curDate-date < ms);
} 


