function valueToJSON(value){
	return Object.toJSON(value);
}
function JSONToValue(jsonStr){
	if(jsonStr==null || jsonStr=="null") return null;
	return jsonStr.evalJSON();
}
function createPrototypeElement(elementName, options, dontExtend){
	var el = document.createElement(elementName);
	if(!dontExtend){
		Element.extend(el);
	}
	if(options){
		if(options.content)el.innerHTML=options.content;
		if(options.attributes && options.attributes.length){
			for(var i=0; i<options.attributes.length; i++){
				attribute=options.attributes[i];
				if(attribute.name=="class"){
					el.addClassName(attribute.value)
				}
				else{
					el.setAttribute(attribute.name, attribute.value);
					//eval("el."+attribute.name+"=attribute.value;");
				}
			}
		}
	}
	return el;
}
function insertElementIntoAnother(innerElement, outerElement, leaveOldContent){
	if(!leaveOldContent){
		outerElement.innerHTML="";
	}
	outerElement.appendChild(innerElement);
	//if(Prototype.Browser.IE){
		outerElement.innerHTML=outerElement.innerHTML;
	//}
}
function createSelector(options){
	var select=createPrototypeElement("select", {"attributes":options.attributes});
	var idProperty=options.idProperty?options.idProperty:"id";
	var titleProperty=options.titleProperty?options.titleProperty:"toString";
	if(options.variants && options.variants.length){
		for(var i=0; i<options.variants.length; i++){
			var variant=options.variants[i];
			eval("var title=variant."+titleProperty+";");
			eval("var id=variant."+idProperty+";");
			var option=createPrototypeElement("option", {"content":title, "attributes":[{"name":"value", "value":id}]});
			select.appendChild(option);
		}
	}
	if(options.value!=null){
		select.value=options.value;
	}
	return select;
}
function serializeForm(form, withoutEmptyValues){
	var result={};
	var elements=form.getElements();
	for(var i=0; i<elements.length; i++){
		var element=elements[i];
		var key=element.name || element.id;
		var type=element.type.toLowerCase();
		var value=element.getValue();
		if(key && value!=null){
			if(value=="" || (type=="checkbox" && !element.checked) ){
				if(!withoutEmptyValues){
					eval("result."+key+"=value;");
				}
			}
			else{
				eval("result."+key+"=value;");
			}
		}
	}
	return result;
}
function setCheckboxChecked(checkbox, checked){
	checkbox.checked=checked;
	checkbox.setAttribute("checked",checked);
	checkbox.setAttribute("defaultChecked",checked);
}
function setFormCheckboxesChecked(form, checked){
	var elements=form.getElements();
	for(var i=0; i<elements.length; i++){
		var element=elements[i];
		var type=element.type.toLowerCase();
		if(type=="checkbox"){
			setCheckboxChecked(element, checked);
		}
	}
}
function setContentWithJS(element, content){
	var scriptExecuted=false;
	content+="<sc"+"ript>scriptExecuted=true;</sc"+"ript>";
	element.innerHTML=content;
	if(scriptExecuted) return;
	var scripts=element.getElementsByTagName("script");
	var scriptsCount=scripts.length;
	for(var i=0; i<scriptsCount; i++){
		var script=scripts[i];
		if(script.getAttribute("src")){
			var script2=document.createElement('script');
			script2.setAttribute("type", script.getAttribute("type"));
			script2.setAttribute("charset", script.getAttribute("charset"));
			script2.setAttribute("src", script.getAttribute("src"));
			element.appendChild(script2);
			
			/*new Ajax.Request(script.getAttribute("src"),
				{
					method:'get',
					asynchronous:false,
					onSuccess: function(transport){
						var response = transport.responseText;
						if(response){
							//alert(response);
							eval(response);
						}
						else{
							//alert("Error loading script");
						}
					},
					onFailure: function(){
						alert('Error loading script')
					},
					parameters: {}
				});*/
		}
		else{
			eval(script.text);
		}
	}
}