/*

+-------------------------------------------------------------------------------+

| Copyright (c) 2006-2007 Andrew G. Samoilov, Alexey Kornilov 			|

| Universal Data Solutions inc.							|

| All rights reserved.                                                  	|

|                                                                       	|

| Redistribution and use in source and binary forms, with or without    	|

| modification, are permitted provided that the following conditions    	|

| are met:                                                              	|

|                                                                       	|

|  Redistributions of source code must retain the above copyright      		|

|   notice, this list of conditions and the following disclaimer.       	|

|  Redistributions in binary form must reproduce the above copyright   		|

|   notice, this list of conditions and the following disclaimer in the 	|

|   documentation and/or other materials provided with the distribution.	|

|                                                                       	|

| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS     	|

| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     	|

| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR  	|

| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  	|

| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 	|

| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      	|

| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 	|

| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY  	|

| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   	|

| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE  	|

| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  	|

+-------------------------------------------------------------------------------+

*/





//var pics = new Array();

var timeoutID = 0;



var arrStates = new Array('AL','AK','AS','AZ','AR','CA','CO','CT','DE','DC','FM','FL','GA','GU',

'HI','ID','IL','IN','IA','KS','KY','LA','ME','MH','MD','MA','MI','MN','MS','MO','MT','NE','NV',

'NH','NJ','NM','NY','NC','ND','MP','OH','OK','OR','PW','PA','PR','RI','SC','SD','TN','TX','UT',

'VT','VI','VA','WA','WV','WI','WY');



function updatesaveall()

{

	if($("a[@id^=save_]").length)

	{

		if($("[@name=saveall_edited]").css("display")=="none")

		{

			$("[@name=saveall_edited]").css("display","inline");

			$("[@name=revertall_edited]").css("display","inline");

			if($("[@name=edit_selected]").length)

				$("[@name=edit_selected]").css("display","none");

		}

	}

	else

	{

		if($("[@name=saveall_edited]").css("display")!="none")

		{

			$("[@name=saveall_edited]").css("display","none");

			$("[@name=revertall_edited]").css("display","none");

			if($("[@name=edit_selected]").length)

				$("[@name=edit_selected]").css("display","inline");

		}

	}

	$("#addmessage").hide();

}



$(document).ready(function(){ 

	

	if($("[@name=edit_selected]").length)

		$("[@name=edit_selected]").click(function() {

			$("input[@type=checkbox][@checked][@id^=check]").each(function(i){

				if(!isNaN(parseInt(this.id.substr(5))))

					$("a#ieditlink"+this.id.substr(5)).click();

			});

		});

	

	$("input[@name=saveall_edited],a[@name=saveall_edited]").click(function() {

		$("a[@id^=save_]").click();

	});

	

	$("input[@name=revertall_edited],a[@name=revertall_edited]").click(function() {

		$("a[@id^=revert_]").click();

	});

});



function inlineAdd(tempid)

{

	$("[@name=maintable]").show();

	$("[@name=notfound_message]").hide();

	$("[@name=record_controls]").show();

	var htext = "";

	var hclass = "";

	var hstyle = "";

	$(".addarea").each(function(i) {

		var row = $(this).clone();

		$(row)[0].className="addarea"+tempid;

		

		$("*",row).each(function(j) {

			if ( this.id == "editlink_add" ) {

				this.id = "editlink" + tempid;

				$(this).hide();

			} else if( this.id == "ieditlink_add" ) {

				this.id = "ieditlink" + tempid;

				hclass = $(this).attr("class");

				hstyle = $(this).attr("style");				

				$(this).hide();

			} else if ( this.id == "copylink_add" ) {

				this.id = "copylink" + tempid;

				$(this).hide();

			} else if ( this.id == "check_add" ) {

				this.id = "check" + tempid;

				$(this).hide();

			} else if ( this.id == "viewlink_add" ) {

				this.id = "viewlink" + tempid;

				$(this).hide();

			} else if(this.id.substr(0,7)=="master_" && this.id.substr(this.id.length-4)=="_add") {

				this.id=this.id.substr(0,this.id.length-4)+tempid;

				$(this).hide();

			} else if(this.id.substr(0,4)=="add_") {

				this.id="edit"+tempid+'_'+this.id.substr(4);

			}

		});

		

		$(row).insertAfter(this);

		$(row).show();

	});

	

	var self = $("#ieditlink"+tempid);

	/* change the word Edit for images "Save" and "Revert" */

	if ( $(self).length )

	{

		htext = $("#ieditlink"+tempid).html();

		mySetOuterHTML(self,'<span id="ieditlink'+tempid+'"><a class="saveEditing" href="#" title="'+TEXT_SAVE+'" id="save_'+tempid+'"><img src="images/ok.gif" border="0" /></a>&nbsp;&nbsp;<a class="revertEditing" href="#" title="'+TEXT_CANCEL+'" id="revert_'+tempid+'"><img src="images/cancel.gif" border="0" /></a></span>');

		$("#ieditlink"+tempid)[0].revertText=htext;

		$("#ieditlink"+tempid)[0].revertClass=hclass;

		$("#ieditlink"+tempid)[0].revertStyle=hstyle;

	}



	$("span[@id^=edit"+tempid+"_]").each(function(i){

		var j;

		this.validatetype="";

		for(j=0;j<addValidateFields.length;j++)

		{

			if(addValidateFields[j]==this.id.substr(this.id.indexOf("_")+1))

			{

				this.validatetype = addValidateTypes[j];

				break;

			}

		}

	});

	

	makeControlsEditable(tempid, "", "add");

	updatesaveall();

	return false;

}



function inlineEdit(record_id,record_key) 

{

	var self = $("#ieditlink"+record_id);

	

	/* highlighting edited record */

	$(self).parents("tr").addClass("highlight_row");



	/* change the word Edit for images "Save" and "Revert" */

	if($(self).length)

	{

		var htext = $("#ieditlink"+record_id).html();

		var hclass = $("#ieditlink"+record_id).attr("class");

		var hstyle = $("#ieditlink"+record_id).attr("style");

		mySetOuterHTML(self,'<span id="ieditlink'+record_id+'"><a class="saveEditing" href="#" title="'+TEXT_SAVE+'" id="save_'+record_id+'"><img src="images/ok.gif" border="0" /></a>&nbsp;&nbsp;<a class="revertEditing" href="#" title="'+TEXT_CANCEL+'" id="revert_'+record_id+'"><img src="images/cancel.gif" border="0" /></a></span>');

		$("#ieditlink"+record_id)[0].revertText=htext;

		$("#ieditlink"+record_id)[0].revertClass=hclass;

		$("#ieditlink"+record_id)[0].revertStyle=hstyle;

	}

	/* create backup values  */

	$("span[@id^=edit"+record_id+"_]").each(function(i){

		this.revert = this.innerHTML;

		var j;

		for(j=0;j<editValidateFields.length;j++)

		{

			if(editValidateFields[j]==this.id.substr(this.id.indexOf("_")+1))

			{

				this.validatetype = editValidateTypes[j];

				break;

			}

		}

	});

	updatesaveall();

	/* load HTML controls */

	makeControlsEditable(record_id, record_key, "edit");

	

	return false;

}



//function makeControlsEditable(line, id, key, type) 

function makeControlsEditable(id, key, type) 

{

	var controls = new Array();

	var fields = new Array();

	var types = new Array();

	var jscode = "";

	var server_url = ( type == "edit"  ) ? INLINE_EDIT_TABLE+'?'+key : INLINE_ADD_TABLE;

	

	$.get(server_url,

		{	

			rndval: Math.random(),

			recordID: id,

			editType: "inline",

			browser: $.browser.msie ? "ie" : ""

		},

		function(xml){	

			var pos=xml.indexOf("<edit_controls>");

			if(pos>0)

				xml=xml.substr(pos);

			var pos1,pos2;

			var oldpos=0;

			while((pos=xml.indexOf("<control",oldpos))>=0)

			{

				pos1=xml.indexOf(">",pos);

				if(pos1<0)

					break;

				pos2=xml.indexOf("</control>",pos1);

				if(pos2<0)

					break;

				var tag=xml.substr(pos,pos1-pos+1);

				var attrpos=tag.indexOf("field=\"");

				if(attrpos<0)

					break;

				attrpos+=7;

				var quotpos=tag.indexOf("\"",attrpos);

				if(quotpos<0)

					break;

				controls[controls.length]=xml.substr(pos1+1,pos2-pos1-1);

				fields[fields.length]=tag.substr(attrpos,quotpos-attrpos);

				attrpos=tag.indexOf("type=\"");

				if(attrpos>0)

				{

					attrpos+=6;

					quotpos=tag.indexOf("\"",attrpos);

				}

				if(attrpos>0 && quotpos>0)

					types[types.length]=tag.substr(attrpos,quotpos-attrpos);

				else

					types[types.length]="";

				oldpos=pos2+10;

			}

			pos=xml.indexOf("<jscode>");

			pos1=xml.indexOf("</jscode>");

			if(pos>=0 && pos1>=0)

				jscode=xml.substr(pos+8,pos1-pos-8);

			



			$.each(controls,function(i,n){

				var span = $("#edit"+id+"_"+fields[i]);



				if ( $(span)[0] != undefined ) {

					

					$(span).html(n);

					if(types[i]=="FCK" || types[i]=="Innova" || types[i]=="RTE")

					{

						$(span).attr("type",types[i]);

					}

					else

					{

						$("input[@type=text],input[@type=password],input[@type=hidden],input[@type=file],select",span).each(function(i){

							if ( this.type == "select-multiple"  ) {

								this.id = this.name.replace(/\[\]$/,"") + "_" + id;

							} else {

								this.id = this.name + "_" + id;

							}

						});

						$("img",span).each(function(i){

							this.id = "img_"+this.name.substr(6) + "_" + id;

							if($(this)[0].tagName=='IMG' && $(this)[0].src.indexOf("?")>=0)

								$(this)[0].src = $(this)[0].src + "&rndVal=" + Math.random();

						});

					}

				}

			});

			jscode = jscode.replace(/&gt;/ig,"\>");

			jscode = jscode.replace(/&lt;/ig,"\<");

			jscode = jscode.replace(/&amp;/ig,"&");			

			eval(jscode);

			

			if ( type == "add" ) {

				/* save icon click handler */

				$('a[@id=save_'+id+']').click(function(){

					if ( validate(id, "add") ) {

						submitInputContent( id, "", "add");

					}

				});



				/* revert icon click handler */

				$('a[@id=revert_'+id+']').click(function(){

					$(".addarea"+id).each(function(i){

						$(this).remove();

						updatesaveall();

					});

				});			

			} else {			

				/* save icon click handler */

				$('a[@id=save_'+id+']').click(function(){

					if ( validate(id, "edit") ) {

						submitInputContent(id, key, "edit");

					}

				});



				/* revert icon click handler */

				$('a[@id=revert_'+id+']').click(function(){		

					$("span[@id^=edit"+id+"_]").each(function(i){

						this.innerHTML = this.revert;

					});

					var htext=this.parentNode.revertText;

					var hclass=this.parentNode.revertClass;

					var hstyle=this.parentNode.revertStyle;

					mySetOuterHTML(this.parentNode,'<a href="'+INLINE_EDIT_TABLE+'?'+key+'" id="ieditlink'+id+'" onclick="return inlineEdit('+id+',\''+key+'\');"></a>');

					$("#ieditlink"+id).html(htext);

					$("#ieditlink"+id).attr("class",hclass);

					$("#ieditlink"+id).attr("style",hstyle);

					updatesaveall();

					$(this).parents("tr").removeClass("highlight_row");

					for ( i = 0; i < document.forms.frmAdmin.elements['selection[]'].length; i++ ) {

						if ( document.forms.frmAdmin.elements['selection[]'][i].id == "check"+id ) 

						{

							document.forms.frmAdmin.elements['selection[]'][i].checked = false;

							break;

						}

					}

				});			

			}			

		});

}



function picRefresh(id)

{

	$("span[@id^=edit"+id+"]").each(function(i) {

		var rndVal = new Date().getTime();

		$('img',this).each(function()

		{ 

			if(this.src.indexOf("?")>=0)

				this.src+="&rndVal=" + rndVal; 

		});

	});

//	pics.splice(0,pics.length);

}



function validate(id, type)

{

	var isValid = true;



	$("span[@id^=edit"+id+"_]").each(function(i){	

		$("div",this).remove(".error");

		

		if ( this.validatetype == undefined ) { return; }

		

		if ( this.validatetype.indexOf("IsRequired") >= 0 && $("input[@type=text],input[@type=password],input[@type=file],select",this).length) {

			var sVal = $("input[@type=text],input[@type=password],input[@type=file],select",this).val();

			var regexp = /.+/;

			

			if ( !sVal.match(regexp) ) {

				isValid = false;

				$(this).append('<div class="error"><p>' + TEXT_INLINE_FIELD_REQUIRED + '</p></div>');

			}		

		} 

		

		if ( $("input[@type=text]",this).length ) {

		

			if ( this.validatetype.indexOf("IsNumeric") >= 0 ) {

				var sVal = $("input[@type=text]",this).val().replace(/,/g,"");

/*			

				var regexp = /^\d{1,}(\.\d+)?$/;

				

				if ( sVal.match(/.+/) && !sVal.match(regexp) ) {

*/

				if (isNaN(sVal)) 

				{

					isValid = false;

					$(this).append('<div class="error"><p>' + TEXT_INLINE_FIELD_NUMBER + '</p></div>');

				}		

			}  else if ( this.validatetype.indexOf("IsPassword") >= 0 ) {

				var sVal = $("input[@type=text],input[@type=password]",this).val();

				var regexp1 = /^password$/;

				var regexp2 = /.{4,}/;

				

				if ( sVal.match(/.+/) ) {

					if ( sVal.match(regexp1) ) {

						isValid = false;

						$(this).append('<div class="error"><p>' + TEXT_INLINE_FIELD_PASSWORD1 + '</p></div>');

					} else if ( !sVal.match(regexp2) ) {

						isValid = false;

						$(this).append('<div class="error"><p>' + TEXT_INLINE_FIELD_PASSWORD2 + '</p></div>');					

					}

				}				

			}  else if ( this.validatetype.indexOf("IsEmail") >= 0 ) {

				var sVal = $("input[@type=text]",this).val();

				var regexp = /^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/;

				

				if ( sVal.match(/.+/) && !sVal.match(regexp) ) {

					isValid = false;

					$(this).append('<div class="error"><p>' + TEXT_INLINE_FIELD_EMAIL + '</p></div>');

				}		

			}  else if ( this.validatetype.indexOf("IsMoney") >= 0 ) {

				var sVal = $("input[@type=text]",this).val();

				var regexp = /^(\d*)\.(\d*)$/;

				

				if ( sVal.match(/.+/) && !sVal.match(regexp) ) {

					isValid = false;

					$(this).append('<div class="error"><p>' + TEXT_INLINE_FIELD_CURRENCY + '</p></div>');

				}		

			}  else if ( this.validatetype.indexOf("IsZipCode") >= 0 ) {

				var sVal = $("input[@type=text]",this).val();

				var regexp = /^\d{5}([\-]\d{4})?$/;

				

				if ( sVal.match(/.+/) && !sVal.match(regexp) ) {

					isValid = false;

					$(this).append('<div class="error"><p>' + TEXT_INLINE_FIELD_ZIPCODE + '</p></div>');

				}		

			}  else if ( this.validatetype.indexOf("IsPhoneNumber") >= 0 ) {

				var sVal = $("input[@type=text]",this).val();

				var regexp = /^\(\d{3}\)\s?\d{3}\-\d{4}$/;

			    var stripped = sVal.replace(/[\(\)\.\-\ ]/g, '');    



				if ( sVal.match(/.+/) && (isNaN(parseInt(stripped)) || stripped.length != 10) ) {

					isValid = false;

					$(this).append('<div class="error"><p>' + TEXT_INLINE_FIELD_PHONE + '</p></div>');

				}		

			}  else if ( this.validatetype.indexOf("IsState") >= 0 ) {

				var sVal = $("input[@type=text]",this).val();

				

				if ( sVal.match(/.+/) && !arrStates.inArray(sVal,false) ) {

					isValid = false;

					$(this).append('<div class="error"><p>' + TEXT_INLINE_FIELD_STATE + '</p></div>');

				}		

			}  else if ( this.validatetype.indexOf("IsSSN") >= 0 ) {

			    // 123-45-6789 or 123 45 6789

				var sVal = $("input[@type=text]",this).val();

				var regexp = /^\d{3}(-|\s)\d{2}(-|\s)\d{4}$/;



				if ( sVal.match(/.+/) && !sVal.match(regexp) ) {

					isValid = false;

					$(this).append('<div class="error"><p>' + TEXT_INLINE_FIELD_SSN + '</p></div>');

				}		

			}  else if ( this.validatetype.indexOf("IsCC") >= 0 ) {

				var sVal = $("input[@type=text]",this).val();

				//Visa, Master Card, American Express

				var regexp = /^((4\d{3})|(5[1-5]\d{2}))(-?|\040?)(\d{4}(-?|\040?)){3}|^(3[4,7]\d{2})(-?|\040?)\d{6}(-?|\040?)\d{5}/;

				

				if ( sVal.match(/.+/) && !sVal.match(regexp) ) {

					isValid = false;

					$(this).append('<div class="error"><p>' + TEXT_INLINE_FIELD_CC + '</p></div>');

				}		

			}  else if ( this.validatetype.indexOf("IsTime") >= 0 ) {

				var sVal = $("input[@type=text]",this).val();

				

				if ( sVal.match(/.+/) ) {

					var regexp = /\d+/g;

					var arr = sVal.match(regexp);

					var bFlag = true;

					

					if ( arr==null || arr.length > 3 ) { bFlag = false; }

					while ( bFlag && arr.length < 3 ) { arr[arr.length] = 0; }

					if( bFlag && (arr[0]<0 || arr[0]>23 || arr[1]<0 || arr[1]>59 || arr[2]<0 || arr[2]>59) ) { bFlag = false; }

					

					if ( !bFlag ) {

						isValid = false;

						$(this).append('<div class="error"><p>' + TEXT_INLINE_FIELD_TIME + '</p></div>');

					}

				}

			}  else if ( this.validatetype.indexOf("IsDate") >= 0 ) {

				var sVal = $("input[@type=text]",this).val();

				var fmt = "";

				

				switch (locale_dateformat) {

					case 0 :

						fmt="MDY";

						break;

					case 1 : 

						fmt="DMY";

						break;	

					default:

						fmt="YMD";

						break;				

				};

				

				if ( sVal.match(/.+/) && !isValidDate( sVal, fmt ) ) {

					isValid = false;

					$(this).append('<div class="error"><p>' + TEXT_INLINE_FIELD_DATE + '</p></div>');			

				}		

			}

		}

	});



	return isValid;

}



function submitInputContent(id, key, type)

{

	var value_key = key.split(/&|=/g);

	

	var io = createUploadIframe(id, type);

	var form = createUploadForm(id, type);

	

	if ( type == "edit" ) {

		for ( i = 0; i < value_key.length; i=i+2 ) {

			$('<input type="hidden" name="'+value_key[i]+'" />').appendTo(form);

			$(form)[0].elements[value_key[i]].value=unescape(value_key[i+1]);

		}

	}

	$("span[@id^=edit"+id+"_]").each(function(i){ 	

		var span=this;

		if(($(span).attr("type")=="Innova" || $(span).attr("type")=="RTE") && $("iframe",span).length)

		{

			var doc;

			if($.browser.msie)

			{

				doc = window.frames[$("iframe",span)[0].name].document;

				if(doc.forms[0].onsubmit!=null)

					doc.forms[0].onsubmit();

				var txtarea;

				var name;

				if($(span).attr("type")=="RTE")

					txtarea = $("input[@type=hidden]",doc)[0];

				else

					txtarea = $("textarea",doc)[0];

				name = txtarea.name.substr(0,txtarea.name.length-1-(new String(id)).length);

				$('<input type="text" name="' + name + '">').appendTo(form);

				if($(span).attr("type")=="RTE")

					$("[@name="+name+"]",form).val($(txtarea).val());

				else

					$("[@name="+name+"]",form).val($(txtarea).text());

			}

			else

			{

				doc = $("iframe",span)[0].contentDocument;

				var txt=doc.forms[0].onsubmit();

				name = "value_" + span.id.substr(5+(new String(id)).length);

				$('<input type="text" name="' + name + '">').appendTo(form);

				$("[@name="+name+"]",form).val(txt);

			}

			return;

		}

		if($(span).attr("type")=="FCK")

		{

			var txt = $("input[@type=hidden][@name^=value_]",span);

			if(!txt.length)

				return;

			var name = $(txt)[0].name;

			try

		    {

		        if(typeof(FCKeditorAPI) == "object")

	    	        FCKeditorAPI.GetInstance($(txt)[0].name).UpdateLinkedField();

		    }

		    catch(err) {}

		}

		

		if ( $.browser.msie ) {

			$("[@type=file]",this).each(function(){

				$(this).appendTo(form);

				$(this).clone().appendTo(span);

			});

			$("[@type=hidden],[@type=text],[@type=password],[@type=radio][@checked]",this).each(function()

			{

				var name = this.name;

				if ( this.type == 'radio' || $(span).attr("type")=="FCK")

					name = this.name.substr(0,this.name.length-1-(new String(id)).length);

				$('<input type="text" name="' + name + '">').appendTo(form);

				$("[@name="+name+"]",form).val(this.value);



			});

			$("textarea",this).each(function()

			{

				$('<textarea name="'+this.name+'"></textarea>').appendTo(form);

				$("[@name="+this.name+"]",form)[0].innerText=this.value;



			});

		} else {

			$("[@type=hidden],[@type=text],[@type=password],[@type=file],[@type=radio][@checked]",this).each(function()

			{

				$(this).clone().appendTo(form);

				if ( this.name!=undefined && (this.type == 'radio' || $(span).attr("type")=="FCK"))

					$(form)[0].elements[$(form)[0].elements.length-1].name=this.name.substr(0,this.name.length-1-(new String(id)).length);

			});

/*

			$("select",this).each(function()

			{

				$('<input type="text" name="'+this.name+'">').appendTo(form);

				$(form)[0].elements[this.name].value=this.value;

			});

*/			

			$("textarea",this).each(function(){

				$('<textarea name="'+this.name+'"></textarea>').appendTo(form);

				$("[@name="+this.name+"]",form).text(this.value);

			});

		}

		$("select",this).each(function()

		{

			var name = this.name;

			if(!this.multiple)

			{

				$('<input type="text" name="' + name + '">').appendTo(form);

				$("[@name="+name+"]",form).val(this.value);

			}

			else

			{

//	multiple select				

				for(i=0;i<this.options.length;i++)

				{

					if(!this.options[i].selected)

						continue;

					var input = $('<input type="text" name="' + name + '">');

					$(input).val(this.options[i].value);

					$(input).appendTo(form);

				}

			}

		});

		$("[@type=checkbox]",this).each(function(i){

			if ( this.checked == true ) {

				$('<input type="hidden" value="on" name="'+this.name+'">').appendTo(form);

			} else {

				$('<input type="hidden" value="off" name="'+this.name+'">').appendTo(form);

			}

		});	

	});

/*

	if ( !$.browser.msie ) {

		$("input[@type=radio]",form).each(function(){

			this.name=this.name.substr(0,this.name.length-1-(new String(id)).length);

		});

	}

*/

	$(form)[0].submit();

	setTimeout('$("#uploadForm'+id+'").remove()',500);

}



function slashdecode(str)

{

	var out = new String();

	var pos = 0;

	for ( var i = 0; i < str.length - 1; i++ )

	{

		var c = str.charAt(i);

		if( c == '\\' )

		{

			out += str.substr(pos,i-pos);

			pos = i + 2;

			var c1 = str.charAt(i+1);

			i++;

			if ( c1 == '\\' ) {

				out += "\\";

			} else if ( c1 == 'r' ) {

				out += "\r";

			} else if ( c1 == 'n') {

				out += "\n";

			} else {

				i--;

				pos-=2;

			}

		}

	}

	if ( pos < str.length )

		out += str.substr(pos);

	

	return out;

}



function setInputContent(txt, id, type) 

{

	var new_edit_id = "";

	var new_copy_id = "";

	

	if( txt.substr(0,5) == "error" )

	{

		$("span[@id^=edit"+id+"_]:eq(0)").children("div.error").remove();

		

		$("span[@id^=edit"+id+"_]:eq(0)").append("<div class=error><br/><a href=# id=\"error_" + id + "\" style=\"white-space:nowrap;\">"+TEXT_INLINE_ERROR+" >></a></div>");

		$("#error_"+id)[0].onmouseover=function()

		{

			$("#inline_error").html(slashdecode(txt.substr(5)));



			var coors = findPos(this);

			coors[0] += coors[2];

			$("#inline_error").css("top",coors[1] + "px");

			$("#inline_error").css("left",coors[0] + "px");



			$("#inline_error").show();

		};

		$("#error_"+id)[0].onmouseout=function()

		{

			$("#inline_error").hide();

		}

		

		if ($.browser.msie)

		{

			//set all file radion buttons to '0' - keep

			$("span[@id^=edit"+id+"_]")

			{

				$("input[@type=radio][@name^=type_]",this).each(function(i){

					if($(this)[0].value=='file0' || $(this)[0].value=='upload0')

						$(this)[0].checked=true;

				});



			}

		}

		return;

	}

	else if(txt.substr(0,5)!="saved" && txt.substr(0,5)!="savnd")

		return;

	var havedata=true;

	if(txt.substr(0,5)=="savnd")

		havedata=false;

	txt = txt.substr(5);



	var blocks=txt.split("\n");

	$.each(blocks,function(i,n){

		blocks[i] = slashdecode(n);

	});



	while(blocks.length<6)

		blocks[blocks.length]="";

	

	var keys = blocks[0].split("\n");

	keys.splice(keys.length-1,1);

	$.each(keys,function(i,n){

		keys[i] = slashdecode(n);

	});

	

	var values = blocks[1].split("\n");

	values.splice(values.length-1,1);

	$.each(values,function(i,n){

		values[i] = slashdecode(n);

	});

	

	var fields = blocks[2].split("\n");

	fields.splice(fields.length-1,1);

	$.each(fields,function(i,n){

		fields[i] = slashdecode(n);

	});



	var rawvalues = blocks[3].split("\n");

	rawvalues.splice(rawvalues.length-1,1);

	$.each(rawvalues,function(i,n){

		rawvalues[i] = slashdecode(n);

	});

	while(rawvalues.length<values.length)

		rawvalues[rawvalues.length]="";



	var detailtables = blocks[4].split("\n");

	detailtables.splice(detailtables.length-1,1);

	$.each(detailtables,function(i,n){

		detailtables[i] = slashdecode(n);

	});



	var detailkeys = blocks[5].split("\n");

	detailkeys.splice(detailkeys.length-1,1);

	$.each(detailkeys,function(i,n){

		detailkeys[i] = slashdecode(n);

	});

	

	$.each(values,function(i,n){

		var span = $("#edit"+id+"_"+fields[i]);

		if ( $(span)[0] != undefined ) 

		{

			$(span).html(n);

			$(span)[0].value=rawvalues[i];

		}

	});



	$.each(detailtables,function(i,n){

		var ahref = $("#master"+"_"+n+id);

		if ( $(ahref)[0] != undefined ) 

		{

			var pos=$(ahref)[0].href.indexOf("?");

			$(ahref)[0].href=$(ahref)[0].href.substr(0,pos+1)+detailkeys[i];

			if(havedata)

				$(ahref).show();

			else

				$(ahref).hide();

		}

	});

	

	$.each(keys,function(i,n){

		new_edit_id += "editid"+(i+1)+"="+n+"&";

		new_copy_id += "copyid"+(i+1)+"="+n+"&";

	});



	new_edit_id = new_edit_id.substr(0,new_edit_id.length-1);

	new_copy_id = new_copy_id.substr(0,new_copy_id.length-1);

		

	

	if($("#ieditlink"+id).length)

	{

		var htext=$("#ieditlink"+id)[0].revertText;

		var hclass=$("#ieditlink"+id)[0].revertClass;

		var hstyle=$("#ieditlink"+id)[0].revertStyle;

		mySetOuterHTML($("#ieditlink"+id)[0],'<a href="'+INLINE_EDIT_TABLE+'?'+new_edit_id+'" id="ieditlink'+id+'" onclick="return inlineEdit('+id+',\''+new_edit_id+'\');"></a>');

		if ( !havedata ) { htext=""; }

		$("#ieditlink"+id).html(htext);

		$("#ieditlink"+id).attr("class",hclass);

		$("#ieditlink"+id).attr("style",hstyle);

	}

	updatesaveall();

	$("a[@id=editlink"+id+"]").attr('href',INLINE_EDIT_TABLE+'?'+new_edit_id);

	$("a[@id=viewlink"+id+"]").attr('href',INLINE_VIEW_TABLE+'?'+new_edit_id);

	$("a[@id=copylink"+id+"]").attr('href',INLINE_ADD_TABLE+'?'+new_edit_id);

	

	if(havedata)

	{

		$("a[@id=editlink"+id+"]").show();

		$("a[@id=viewlink"+id+"]").show();

		$("a[@id=copylink"+id+"]").show();

		$("input[@id=check"+id+"]").show();

	}

		else

	{

		$("a[@id=editlink"+id+"]").hide();

		$("a[@id=viewlink"+id+"]").hide();

		$("a[@id=copylink"+id+"]").hide();

		$("input[@id=check"+id+"]").hide();

	}

//	$(line).removeClass("highlight_row");

	

	var keyblock="";

	for ( i = 0; i < keys.length; i++ ) 

	{

		if(keyblock.length)

			keyblock+="&";

		keyblock+=keys[i];

	}

	if($("#check"+id).length)

	{

		$("#check"+id).val(keyblock);

		$("#check"+id)[0].checked=false;

	}

	

	setTimeout('picRefresh('+id+')', 500);

	calcTotals();

}





function createUploadIframe(id, type)

{

	//create frame

	var frameId = 'uploadFrame' + id;

    

    if ( window.ActiveXObject ) {

		var io = document.createElement('<iframe onload="if (typeof this.loadCount == \'undefined\') { this.loadCount = 0;	} this.loadCount++; if (this.loadCount > 0) { var ioDocument = window.frames[\''+frameId+'\'].document; 		if(!$(\'#data\',ioDocument).length) { setInputContent(\'error\'+ioDocument.body.innerHTML, \''+id+'\', \''+type+'\'); }else {setInputContent($(\'#data\',ioDocument)[0].innerText, \''+id+'\', \''+type+'\'); } document.body.removeChild(this); }" id="' + frameId + '" name="' + frameId + '" />');

	}

    else {

		var io = document.createElement('iframe');

		io.id = frameId;

		io.name = frameId;

		$(io).load(function(){

			if (typeof this.loadCount == 'undefined') {

				this.loadCount = 0;

			}

				this.loadCount++;

	            if (this.loadCount > 0) {

					var ioDocument = $("#"+frameId).get(0).contentDocument;

					if(!$('#data',ioDocument).length)

						setInputContent( "error"+ioDocument.body.innerHTML, id, type );

					else

						setInputContent( $("#data",ioDocument).text(), id, type );

					setTimeout('$("#'+frameId+'").remove()',500);

				}

		});

	}

    io.style.position = 'absolute';

    io.style.top = '-1000px';

    io.style.left = '-1000px';

	document.body.appendChild(io);



	return io;

}



function createUploadForm(id, type)

{

	var frameId = 'uploadFrame' + id;

	var formId = 'uploadForm' + id;

	var server_url = ( type == "edit"  ) ? INLINE_EDIT_TABLE : INLINE_ADD_TABLE;

	

	var form = $('<form  action="' + server_url + '" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>');	

	if ( type == "edit" ) {

		$('<input type="hidden" name="a" value="edited">').appendTo(form);

	} else {

		$('<input type="hidden" name="a" value="added">').appendTo(form);	

	}

	$('<input type="hidden" name="editType" value="inline">').appendTo(form);

	$('<input type="hidden" name="recordID" value="' + id + '">').appendTo(form);

	

	//set attributes

	$(form).css('position', 'absolute');

	$(form).css('top', '-1200px');

	$(form).css('left', '-1200px');

	$(form).attr('target', frameId);

	$(form).appendTo('body');

	

	return form;

}



function isValidDate(dateStr, format) {

   if (format == null) { format = "MDY"; }

   format = format.toUpperCase();

   if (format.length != 3) { format = "MDY"; }

   if ( (format.indexOf("M") == -1) || (format.indexOf("D") == -1) || 

		(format.indexOf("Y") == -1) ) { format = "MDY"; }

   if (format.substring(0, 1) == "Y") { // If the year is first

      var reg1 = /^\d{2}(\-|\/|\.)\d{1,2}\1\d{1,2}$/

      var reg2 = /^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$/

   } else if (format.substring(1, 2) == "Y") { // If the year is second

      var reg1 = /^\d{1,2}(\-|\/|\.)\d{2}\1\d{1,2}$/

      var reg2 = /^\d{1,2}(\-|\/|\.)\d{4}\1\d{1,2}$/

   } else { // The year must be third

      var reg1 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{2}$/

      var reg2 = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/

   }

   // If it doesn't conform to the right format (with either a 2 digit year or 4 digit year), fail

   if ( (reg1.test(dateStr) == false) && (reg2.test(dateStr) == false) ) { return false; }

   var parts = dateStr.split(RegExp.$1); // Split into 3 parts based on what the divider was

   // Check to see if the 3 parts end up making a valid date

   if (format.substring(0, 1) == "M") { var mm = parts[0]; } 

	else if (format.substring(1, 2) == "M") { var mm = parts[1]; } else { var mm = parts[2]; }

   if (format.substring(0, 1) == "D") { var dd = parts[0]; } 

	else if (format.substring(1, 2) == "D") { var dd = parts[1]; } else { var dd = parts[2]; }

   if (format.substring(0, 1) == "Y") { var yy = parts[0]; } 

	else if (format.substring(1, 2) == "Y") { var yy = parts[1]; } else { var yy = parts[2]; }

   if (parseFloat(yy) <= 50) { yy = (parseFloat(yy) + 2000).toString(); }

   if (parseFloat(yy) <= 99) { yy = (parseFloat(yy) + 1900).toString(); }

   var dt = new Date(parseFloat(yy), parseFloat(mm)-1, parseFloat(dd), 0, 0, 0, 0);

   if (parseFloat(dd) != dt.getDate()) { return false; }

   if (parseFloat(mm)-1 != dt.getMonth()) { return false; }

   return true;

}



function mySetOuterHTML(self,str)

{

	if($.browser.msie)

		$(self)[0].outerHTML=str;

	else

	{	

		var r = $(self)[0].ownerDocument.createRange();

		r.setStartBefore($(self)[0]);

		var df = r.createContextualFragment(str);

		$(self)[0].parentNode.replaceChild(df, $(self)[0]);

	}

}



function calcTotals()

{

	$("span[@id^=total_]").each( function(i) 

	{

		var type=$(this)[0].type;

		var field=$(this)[0].id.substr(6);

		var total=0;

		var count=0;

		$("span[@id^=edit][@id$=_"+field+"]").each( function(j) {

			var val=$(this)[0].value;

			if(!isNaN(val))

			{

				total+=new Number(val);

				count++;

			}

			else if(val!="")

				count++;

		});

		if(type=="TOTAL")

			$(this).html(new Number(total).toString());

		else if(type=="AVERAGE")

		{

			if(count)

				$(this).html(new Number(total/count).toString());

			else

				$(this).html("");

		}

		else if(type=="COUNT")

		{

			$(this).html(new Number(count).toString());

		}

	});

	

	

	

}