/*
 * Name: default
 * Version: 1.0
 * Author: embeddednode
 * E-Mail: embeddednode@users.sourceforge.net
 * Licence: only for me
 * 
 * Usage:
 * object   _('identity')
 * object[] _('identity1', 'identity2', ...)
 * number   byteLength('A1234', ...)
 * string   byteSubstring('A1234', 0, 3);
 */

function _() {
	var elements = new Array();
	var element;
	var i = 0x0;
	do {
		element = arguments[i++];
		if(typeof element == 'string')
			element = document.getElementById(element);
		if(arguments.length == 0x1) 
			return element; 
		elements.push(element);
	} while(i<arguments.length);
	return elements;
}

function remove(array, from, to) {
	var rest = array.slice((to || from) + 1 || array.length);
	array.length = from < 0 ? array.length + from : from;
	return array.push.apply(array, rest);
};

function byteLength() {
	var result = 0x0;
	var i = 0x0;
	var element;
	do {
		element = arguments[i++];
		result += element.length;
		if(element.match(/[^\x00-\xFF]/g))
			result += element.match(/[^\x00-\xFF]/g).length;
	} while(i<arguments.length);
	return result;
}

function htmlTrim(input) {  
	var pattern = new RegExp(/<[\w\s="':\/\.\\?&\-(),;#]+>/g);
	return input.replace(pattern, '');
}

function byteSubstring(src, begin, end) {
	var one = src.split(/[^\x00-\xFF]/g);
	var two = src.split(/[\x00-\xFF]/g);
	var i = 0;
	var j = 0;
	var beginOffset = 0;
	var endOffset   = 0;
	if(src.match(/^[\x00-\xFF]/)) {
		skip1st:
			do {
				if(begin - one[i].length > -1) {
					begin       -= one[i].length;
					beginOffset += one[i].length;
				} else {
					j = 0;
					do
						if(begin - 1 > -1) {
							beginOffset++;
							begin--;
						} else break skip1st;
					while(++j<one[i].length);
				}
				if(two[i])
					if(begin - two[i].length * 2 > -1) {
						alert(begin - two[i].length * 2);
						begin       -= two[i].length * 2;
						beginOffset += two[i].length;
					} else {
						j = 0;
						do
							if(begin - 2 > -1) {
								alert(begin);
								beginOffset++;
								begin -= 2;
							} else break skip1st;
						while(++j<two[i].length);
					}
			} while(++i<one.length);
		
		skip2nd:
			do {
				if(end - one[i].length > -1) {
					end -= one[i].length;
					endOffset += one[i].length;
				} else {
					j = 0;
					do
						if(end - 1 > -1) {
							endOffset++;
							end--;
						} else break skip2nd;
					while(++j<one[i].length);
				}

				if(two[i])
					if(end - two[i].length * 2 > -1) {
						end       -= two[i].length * 2;
						endOffset += two[i].length;
					} else {
						j = 0;
						do
							if(end - 2 > -1) {
								endOffset++;
								end -= 2;
							} else break skip2nd;
							
						while(++j<two[i].length);
					}
			} while(++i<one.length);
	} else {
		skip1st:
			do {
				if(begin - two[i].length * 2 > -1) {
					alert(begin - two[i].length * 2);
					begin       -= two[i].length * 2;
					beginOffset += two[i].length;
				} else {
					j = 0;
					do
						if(begin - 2 > -1) {
							alert(begin);
							beginOffset++;
							begin -= 2;
						} else break skip1st;
					while(++j<two[i].length);
				}

				if(one[i])
					if(begin - one[i].length > -1) {
						begin       -= one[i].length;
						beginOffset += one[i].length;
					} else {
						j = 0;
						do
							if(begin - 1 > -1) {
								beginOffset++;
								begin--;
							} else break skip1st;
						while(++j<one[i].length);
					}
			} while(++i<two.length);
		
		skip2nd:
			do {
				if(end - two[i].length * 2 > -1) {
					end       -= two[i].length * 2;
					endOffset += two[i].length;
				} else {
					j = 0;
					do
						if(end - 2 > -1) {
							endOffset++;
							end -= 2;
						} else break skip2nd;
						
					while(++j<two[i].length);
				}
				
				if(one[i])
					if(end - one[i].length > -1) {
						end       -= one[i].length;
						endOffset += one[i].length;
					} else {
						j = 0;
						do
							if(end - 1 > -1) {
								endOffset++;
								end--;
							} else break skip2nd;
						while(++j<one[i].length);
					}
			} while(++i<two.length);
	}
	return src.substring(beginOffset, endOffset);
}
