/****************************************************
*	Ajax.js											*
* helpers functions to be used along with ajax		*
* applications or framework							*
*													*
* coded by: Mostafa E. Saleh (msaleh83@gmail.com	*
*	Dec 26	2007 - 10:19 am							*						  
/****************************************************/

// used to clone a node
function clone(nodeId, deep)
{
	if(!deep) 	deep = true;
	var toClone = document.getElementById(nodeId);
	var clonedNode = toClone.cloneNode(deep);
	return clonedNode;
}

// it warks like the php function
function in_array(needle, haystack, strict) {
 
    var found = false, key, strict = !!strict;
 
    for (key in haystack) {
        if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) {
            found = true;
            break;
        }
    }
 
    return found;
}


// it warks like the php function
function is_array(mixed_var) {
 
    return (mixed_var instanceof Array);
}


function appendAfter(nodeId, newNode)
{
	var node = document.getElementById(nodeId);
	if (node.parentNode)
	{
		if (node.nextSibling)
		node.parentNode.insertBefore(newNode, node.nextSibling);
		else
		node.parentNode.appendChild(newNode);
	}
}

function appendBefore(nodeId, newNode)
{
	var node = document.getElementById(nodeId);
	if (node.parentNode)
	{
		node.parentNode.insertBefore(newNode, node);
	}
}

// this function to show or hide any element
function toggleElementDisplay(id)
{
	var el = document.getElementById(id);
	if(el.style.display != "none")	el.style.display = "none";
	else							el.style.display = "";
}

function show(id) {
	$(id).style.display = '';
}

function hide(id) {
	$(id).style.display = 'none';
}

// alias of document.getElementById(id)
function $(id) {
	return document.getElementById(id);
}

/** return innerHTML of select tag
@param: sel_id, id of select tag
@param: valarr, array of options values
@param: txtarr, array of options texts
@param: selected_val, array of values to be selected, if the list is multiple or single value to be selected 
*/
function generateList(sel_id, valarr, txtarr, selected_val) {
	var len = valarr.length;
	var opNodes = '';
	var selected = '';
	for(var i = 0; i < len; i++) {		
		if(selected_val) {
			if(selected_val.constructor.toString().indexOf("Array") != -1)	
			{
				if(selected_val.in_array(valarr[i])) selected = 'selected="selected"';
			}
			else if(selected_val == valarr[i])	selected = 'selected="selected"';
		}
		opNodes += "<option value='"+valarr[i]+"' "+selected+">"+txtarr[i]+"</option>";
		selected = '';
	}
return(opNodes);
}


function getRadioValue(name){

	var count = document.getElementsByName(name).length;
	
	for (var i=0; i < count; i++) {

		if (document.getElementsByName(name)[i].checked) {

			var radio_value = document.getElementsByName(name)[i].value;
			break;
		}
	} return radio_value
}


// This function return number of selected options of select box
function selectedLength(id){
	
	var selectedIndexs = new Array();
	
	var z = 0;
	for (var i = 0; i < $(id).options.length; i++) {
		if ($(id).options[i].selected == true){
			
			selectedIndexs[z] = i;
			z++
		}
	}
	
	return selectedIndexs
}

// if user select options more than allowed we deselect the last one and alert him
// ex: checkSelectedLength('select box id', max selected options , this.index)
function checkSelectedLength(id, maxLength){

	var selectedValues = selectedLength(id);

	if (selectedValues.length > maxLength)	{
				
		for (var i = maxLength; i < selectedValues.length; i++) {
			$(id).options[selectedValues[i]].selected = false;
		}
		
		alert("الحد الأقصى المسموح به هو "+maxLength+" إختيارات");
	}
}