//+ Jonas Raoni Soares Silva
//@ http://jsfromhell.com/string/wordwrap [v1.0]

String.prototype.wordWrap = function(m, b, c){
	var i, j, l, s, r;
	if(m < 1)
		return this;
	for(i = -1, l = (r = this.split("\n")).length; ++i < l; r[i] += s)
		for(s = r[i], r[i] = ""; s.length > m; r[i] += s.slice(0, j) + ((s = s.slice(j)).length ? b : ""))
			j = c == 2 || (j = s.slice(0, m + 1).match(/\S*(\s)?$/))[1] ? m : j.input.length - j[0].length
			|| c == 1 && m || j.input.length + (j = s.slice(m).match(/^\S*/)).input.length;
	return r.join("\n");
};

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}

function wordwrap( str, int_width, str_break, cut ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   improved by: Nick Callen
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Sakimori
    // *     example 1: wordwrap('Kevin van Zonneveld', 6, '|', true);
    // *     returns 1: 'Kevin |van |Zonnev|eld'
    // *     example 2: wordwrap('The quick brown fox jumped over the lazy dog.', 20, '<br />\n');
    // *     returns 2: 'The quick brown fox <br />\njumped over the lazy<br />\n dog.'
    // *     example 3: wordwrap('Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.');
    // *     returns 3: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod \ntempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim \nveniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea \ncommodo consequat.'
 
    // PHP Defaults
    var m = ((arguments.length >= 2) ? arguments[1] : 75   );
    var b = ((arguments.length >= 3) ? arguments[2] : "\n" );
    var c = ((arguments.length >= 4) ? arguments[3] : false);
 
    var i, j, l, s, r;
 
    str += '';
 
    if (m < 1) {
        return str;
    }
 
    for (i = -1, l = (r = str.split("\n")).length; ++i < l; r[i] += s) {
        for(s = r[i], r[i] = ""; s.length > m; r[i] += s.slice(0, j) + ((s = s.slice(j)).length ? b : "")){
            j = c == 2 || (j = s.slice(0, m + 1).match(/\S*(\s)?$/))[1] ? m : j.input.length - j[0].length || c == 1 && m || j.input.length + (j = s.slice(m).match(/^\S*/)).input.length;
        }
    }
 
    return r.join("\n");
}

function chunk_split(body, chunklen, end) {
    // http://kevin.vanzonneveld.net
    // +   original by: Paulo Ricardo F. Santos
    // *     example 1: chunk_split('Hello world!', 1, '*');
    // *     returns 1: 'H*e*l*l*o* *w*o*r*l*d*!*'
    // *     example 2: chunk_split('Hello world!', 10, '*');
    // *     returns 2: 'Hello worl*d!*'
    
    if (chunklen < 1) {
        return false;
    }
 
    var result = '', chunklen = chunklen || 76, end = end || '\r\n';
 
    while (body.length > chunklen) {
        result += body.substring(0, chunklen) + end;
        body = body.substring(chunklen);
    }
 
    return result + body + end;
}

function formData2QueryString(docForm, pattern) 
{
	var submitContent = '';
	var formElem;
	var lastElemName = '';
	
	//alert(docForm.name);return;

	for (var i = 0; i < docForm.elements.length; i++) 
	{
		var name = null;
		var value = null;
		
		formElem = docForm.elements[i];
		
		if(pattern)
		{
			name = formElem.name;
			var myregexp = new RegExp(pattern); // can use modifiers as the second parameter. Example: new RegExp(pattern, \"gims\");
			mymatch = myregexp.exec(name);
		  if(!mymatch) continue	;
		}
		else if(formElem.name)
		{
			name = formElem.name;
		}
		else if(formElem.id)
		{
			name = formElem.id;
		}
		
		switch (formElem.type) 
		{
			// Text fields, hidden form elements
			case 'text':
			case 'hidden':
			case 'password':
			case 'textarea':
			case 'select-one':
			submitContent += name + '=' + escape(formElem.value) + '&'
			break;
			
			// Radio buttons
			case 'radio':
			if (formElem.checked) {
			submitContent += name + '=' + escape(formElem.value) + '&'
			}
			break;
		
			// Select-Multiple
			case 'select-multiple':
			var ar = new Array();
			for(var x=0; x < formElem.options.length; x++)
			{
				if(formElem.options[x].selected)
				{
					var value = formElem.options[x].value; //// ? formElem.options[x].value : formElem.options[x].text;
					ar.push(escape(value));
				}
			}
			if(ar.length)
			{
				submitContent += name + '=' + ar.join(',') + '&'
			}
			break;
			
			// Checkboxes
			case 'checkbox':
			if (formElem.checked) {
			// Continuing multiple, same-name checkboxes
			if (name == lastElemName) {
			// Strip of end ampersand if there is one
			if (submitContent.lastIndexOf('&') == submitContent.length-1) {
			submitContent = submitContent.substr(0, submitContent.length - 1);
			}
			// Append value as comma-delimited string
			submitContent += ',' + escape(formElem.value);
			}
			else {
			submitContent += name + '=' + escape(formElem.value);
			}
			submitContent += '&';
			lastElemName = name;
			}
			break;
			default:
			///alert(formElem.type); // can use this to test if ele type not included
			break;
			
		}
	}
		
	// Remove trailing separator
	submitContent = submitContent.substr(0, submitContent.length - 1);
	
	/********  FOR TESTING  ********
	//var tmp = submitContent.split('&');
	// use this to view the query parameters
	//alert(submitContent);
	*******************************/
	
	return submitContent;
}

function get_value(form_name,field_name)
{
	var e = document[form_name].elements;
	for(var i=0; i < e.length; i++)
	{
		if(e[i].name==field_name)
		{
			return e[i].value;
		}
	}
}

function get_checkboxes()
{
	var x=document.getElementsByTagName('input') 	
	for(var i=0,c=0; i < x.length; i++)
	{
		if(x[i].getAttribute('type')=='checkbox')
		{
			checkboxes[c] = x[i];
			c++;
		}
	}
}	

var vars = new Array();
function check_all(target_name,source_object,form_object)
{
	vars[target_name] = vars[target_name] == 1 ? 0 : 1;
	for(var i=0; i < checkboxes.length; i++)
	{
		var obj = checkboxes[i];
		var field_name = obj.name;
		var tmp = field_name.split('[',2); // in case field is an array
		field_name = tmp[0];
		if(target_name != '' && field_name==target_name) obj.checked = vars[target_name];
	}
}

