// JavaScript Document
var Spry; if (!Spry) Spry = {}; if (!Spry.Utils) Spry.Utils = {};


Spry.Utils.submitForm = function(form, callback, opts)
{
	if (!form)
		return true;

	if ( typeof form == 'string' )
		form = document.getElementById(form) || document.forms[form];

	var frmOpts = {};
	frmOpts.method = form.method;
	frmOpts.url = form.action || document.location.href;
	frmOpts.enctype = form.enctype;

	Spry.Utils.setOptions(frmOpts, opts);

	var submitData = Spry.Utils.extractParamsFromForm(form, frmOpts.elements);
	if (frmOpts.additionalData)
		submitData += "&" + frmOpts.additionalData;

	if (frmOpts.enctype.toLowerCase() != 'multipart/form-data')
	{
		// Ajax submission of a form doesn't work for multipart/form-data!
		frmOpts.method = (frmOpts.method.toLowerCase() == "post") ? 'POST' : 'GET';
		if (frmOpts.method == "GET")
		{
			// Data will be submitted in the url.
			if (frmOpts.url.indexOf('?') == -1)
				frmOpts.url += '?';
			else
				frmOpts.url += '&';
			frmOpts.url += submitData;
		}
		else
		{
			// Send Content-Type header.
			if (!frmOpts.headers) frmOpts.headers = {};
			if (!frmOpts.headers['Content-Type'] || frmOpts.headers['Content-Type'].indexOf("application/x-www-form-urlencoded") ==-1 )
				frmOpts.headers['Content-Type'] = 'application/x-www-form-urlencoded';

			// Set the postData
			frmOpts.postData = submitData;
		}

		Spry.Utils.loadURL(frmOpts.method, frmOpts.url, true, callback, frmOpts);
		return false;
	}

	// Native submission when 'multipart/form-data' is used.
	return true;
};


Spry.Utils.extractParamsFromForm = function (form, elements)
{
	if (!form)
		return '';

	if ( typeof form == 'string' )
		form = document.getElementById(form) || document.forms[form];

	var formElements;
	if (elements)
		formElements = ',' + elements.join(',') + ',';

	var compStack = new Array(); // key=value pairs

	var el;
	for (var i = 0; i < form.elements.length; i++ )
	{
		el = form.elements[i];
		if (el.disabled || !el.name)
		{
			// Don't submit disabled elements.
			// Don't submit elements without name.
			continue;
		}

		if (!el.type)
		{
			// It seems that this element doesn't have a type set,
			// so skip it.
			continue;
		}

		if (formElements && formElements.indexOf(',' + el.name + ',')==-1)
			continue;

		switch(el.type.toLowerCase())
		{
			case 'text':
			case 'password':
			case 'textarea':
			case 'hidden':
			case 'submit':
				compStack.push(encodeURIComponent(el.name) + '=' + encodeURIComponent(el.value));
				break;
			case 'select-one':
				var value = '';
				var opt;
				if (el.selectedIndex >= 0) {
					opt = el.options[el.selectedIndex];
					value = opt.value || opt.text;
				}
				compStack.push(encodeURIComponent(el.name) + '=' + encodeURIComponent(value));
				break;
			case 'select-multiple':
				for (var j = 0; j < el.length; j++)
				{
					if (el.options[j].selected)
					{
						value = el.options[j].value || el.options[j].text;
						compStack.push(encodeURIComponent(el.name) + '=' + encodeURIComponent(value));
					}
				}
				break;
			case 'checkbox':
			case 'radio':
				if (el.checked)
					compStack.push(encodeURIComponent(el.name) + '=' + encodeURIComponent(el.value));
				break;
			default:
			// file, button, reset
			break;
			}
		}
	return compStack.join('&');
};

Spry.Utils.setInnerHTML = function(ele, str, preventScripts)
{
if (!ele)
return;
ele = Spry.$(ele);
var scriptExpr = "<script[^>]*>(.|\s|\n|\r)*?</script>";
ele.innerHTML = str.replace(new RegExp(scriptExpr, "img"), "");

if (preventScripts)
return;

//bodyMatches is used to store the script tags that have body. For example, <script type='text/javascript'> some JS </script>
var bodyMatches = str.match(new RegExp(scriptExpr, "img"));
if (bodyMatches)
{
var numMatches = bodyMatches.length;
for (var i = 0; i < numMatches; i++)
{
var s = bodyMatches[ i ].replace(/<script[^>]*>[\s\r\n]*(<\!--)?|(-->)?[\s\r\n]*<\/script>/img, "");
//make sure that we are not create a script tag if there is no body to it.
if(s.length > 0)
{
//alert(s);
var scriptEle= document.createElement("script");
scriptEle.text = s;
ele.appendChild(scriptEle);
}
}
}

//now we begin taking care of the script includes (those that have a src attribute defined)
var srcScript = "<script[^>].*src.*>(.|\s|\n|\r)*?</script>";
var srcMatches = str.match(new RegExp(srcScript, "img"));
if(srcMatches)
{
var numMatches2 = srcMatches.length;
var srcAttrib = "[\s]*src=[\'\"](.*\.js)[\'\"]";
for(var j=0; j<numMatches2; j++)
{
// when the below statement executes, m should have the src attrib and value:
// src='sompath.js' as a string.
var m = srcMatches[j].match(new RegExp(srcAttrib, "img")).toString();

//now we strip out the src= part. this will leave us with just the path along with the double quotes.
var n = m.replace(/^[(?=src=)]*/img, "");
if(n.length > 0)
{
var scriptEle2 = document.createElement("script");

//get rid of the quotes as well.
//This is done to take care of single quotes too so that it will work if they defined either:
// <script src='somefile.js' type="text/javascript></script>
// <script src="somefile.js" type="text/javascript></script>
scriptEle2.src=n.replace(/[\"\']/img, "");
scriptEle2.type="text/javascript";
ele.appendChild(scriptEle2);
}
}
}
//we need to initialize the newly inserted region since spry doesn't know about it.
Spry.Data.initRegions(ele);
};
