/*
** This file contains misc utilities
*/

//FDD namespace
SKEL.UTIL = {

	//returns true if it found the parent in the list
	findParent: function (element,parentName){
	},

	//returns a form object as a simplified hash
	getHashFromForm: function(formObj){
		var hash = { };

		for(var i = 0; i < formObj.elements.length; i++)
		{
			switch(formObj.elements[i].type)
			{
				case "text" :
				case "password" :
				case "hidden" :
				case "button" :
					hash[formObj.elements[i].name] = formObj.elements[i].value;
					break;
				case "checkbox" :
					if (formObj.elements[i].checked)
					{
						hash[formObj.elements[i].name] = "on";
					} else {
						hash[formObj.elements[i].name] = "off";
					}
					break;
				case "select-one" :
					hash[formObj.elements[i].name] = formObj.elements[i].options[formObj.elements[i].selectedIndex].value;
					break;
				default :
					//alert ("Unknown form element type in ajax.js:postForm() : " + formObj.elements[i].type + " (element name=" + formObj.elements[i].name + ") (" + i + ")");
					break;
			}
		}

		return hash;
	},

	//returns a string form object as post variables
	getPostString: function(formObj){
		var postString = "";
		for(var i = 0; i < formObj.elements.length; i++)
		{
			switch(formObj.elements[i].type)
			{
				case "text" :
				case "password" :
				case "hidden" :
					postString = postString + formObj.elements[i].name + "=" + escape(formObj.elements[i].value) + "&";
					break;
				case "checkbox" :
					if (formObj.elements[i].checked)
					{
						postString = postString + formObj.elements[i].name + "=on&";
					}
					break;
				case "select-one" :
					postString = postString + formObj.elements[i].name + "=" + escape(formObj.elements[i].options[formObj.elements[i].selectedIndex].value) + "&";
					break;
				case "button" :
					break;
				default :
					//alert ("Unknown form element type in ajax.js:postForm() : " + formObj.elements[i].type + " (element name=" + formObj.elements[i].name + ") (" + i + ")");
					break;
			}
		}
		//alert(postString);
		return postString;
	},

	//returns dimensions about the screen
	getDimensions: function(){
		var myWidth = 0, myHeight = 0;
		if( typeof( window.innerWidth ) == 'number' ) {
			//Non-IE
			screenX = window.innerWidth;
			screenY = window.innerHeight;
		} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
			//IE 6+ in 'standards compliant mode'
			screenX = document.documentElement.clientWidth;
			screenY = document.documentElement.clientHeight;
		} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
			//IE 4 compatible
			screenX = document.body.clientWidth;
			screenY = document.body.clientHeight;
		}

		return {screenX: screenX, screenY: screenY};
	},

	getPosition: function(e){
		var left = 0;
		var top  = 0;
		var oWidth = 0;
		var oTop = 0;

		while (e.offsetParent){
			left += e.offsetLeft + (e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)):0);
			top  += e.offsetTop  + (e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)):0);
			e     = e.offsetParent;
		}

		left += e.offsetLeft + (e.currentStyle?(parseInt(e.currentStyle.borderLeftWidth)):0);
		top  += e.offsetTop  + (e.currentStyle?(parseInt(e.currentStyle.borderTopWidth)):0);

		return {x:left, y:top};
	},

	//from mootools, I liked the simple regex they used
	/*rgbToHex: function(array){
		var rgb = this.match(/\d{1,3}/g);
		return (rgb) ? rgb.rgbToHex(array) : false;
	},

	hexToRgb: function(array){
		var hex = this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);
		return (hex) ? hex.slice(1).hexToRgb(array) : false;
	},*/

	hexToRgb: function(str){
		var hex = str.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);
		if(hex){
			if(hex[1] != ''){
				hex[1] = parseInt(hex[1],16);
				hex[2] = parseInt(hex[2],16);
				hex[3] = parseInt(hex[3],16);
			}
		}

		return (hex) ? hex.slice(1) : false;
	},

	rgbToHex: function(rgb){
		//return '#'+rgb[0].toString(16)+rgb[1].toString(16)+rgb[2].toString(16);
		if (rgb.length < 3) return false;
		if (rgb[3] && (rgb[3] == 0) && !rgb) return 'transparent';
		var hex = [];
		for (var i = 0; i < 3; i++){
			var bit = (rgb[i]-0).toString(16);
			hex.push((bit.length == 1) ? '0'+bit : bit);
		}
		//return rgb ? hex : '#'+hex.join('');
		return '#'+hex.join('');
	},

	realrgbToHex: function(array){
		var rgb = array.match(/\d{1,3}/g);
		return (rgb) ? rgb : false;
	},

	//returns prefix,postfix,value eg: #ff0000 {prefix: #, value: ff0000}, abc123efg {prefix: abc, value: 123, postfix: efg}
	splitValue: function(str){
		result = {
			prefix: '',
			postfix: '',
			value: ''
		}
		if(str != ''){
			var res = str.match(/([^0-9]*)([0-9]+)([^0-9]*)/);
			//try{
			result = {
				prefix: res[1],
				postfix: res[3],
				value: res[2]
			};
			//} catch(err) {
				//console.trace();
			//}
		}
		return result;

	},

	addSelectOption: function(selectKey, option, value){
		selectObj = parent.document.getElementById(selectKey);
		var optionObj = document.createElement('option');
		optionObj.text = option;
		optionObj.value = value;
		try{
			selectObj.add(optionObj,null); //should work in most browsers that support good dom
		} catch(ex) {
			selectObj.add(optionObj); //should work in ie, if above fails
		}

	},

	purgeSelectOptions: function(selectKey){
		selectObj = parent.document.getElementById(selectKey);
		var len = selectObj.length;

		for(var i=0;i<len;i++){
			selectObj.remove(i);
		}
		selectObj.length = 0;
	},

	callFunctionWithArray: function(funcName,array){
		var str = '';

		$(array).each(function(key,element){
			switch((typeof(element)).toLowerCase()){
				case 'string':
					str = str + "'"+element+"',";
					break;
				default:
					str = str + element + ",";
					break;
			}
		});

		if(str.length > 0){
			//chop the last ',' off
			str = str.substr(0,(str.length - 1));
		}

		return eval(funcName+'('+str+');');
	}
}
