/**
 * File gim_functions.js
 * Created on May 12, 2008 at 5:55:25 PM by 
 * @author Pierre Forestier <pierre.forestier@laposte.net>
 * @copyright Copyright (c) 2008, Pierre Forestier et Gabriel Masson
 * @version 0.0.1
 * @package project.gim
 * @filesource
 * 
 */

var gim_vars = new Array();//global Array
var gim_url_page = window.location.pathname;
gim_url_page = gim_url_page.substring(gim_url_page.lastIndexOf("/")+1);

/**
 * Function gim_alert is an example of isolation layer
 * @param p_expr
 *
 */
function gim_alert(P_expr) {
	window.alert(P_expr);
}

/**
 * Function gim_display_url displays url in window with settings
 * @default url: '', name: 'gim_subwindow', width: 740, height: 500, resizable: 'no'
 * @param Array
 * @return true or false
 * 
 * url obligatoire, name = _blank, _self, ... see html <a target=
 * @example <a href="http://clusty.com/" target="clusty" onclick="javascript:gim_display_url({url: 'http://clusty.com/', name: 'clusty', width: 800, height: 600, resizable: 'no'});">Clusty search engine</a>
 */
function gim_display_url(){
	//width=430,height=300,top=150,left=300,resizable=no,scrollbars=no,menubar=no,toolbar=no,location=no,directories=no,status=no
	//,fullscreen=yes: works only with IE
	//,titlebar=no: dont work
	//+',innerheight='+L_height+',innerwidth='+L_width: dont work

	if (gim_display_url.arguments.length < 1) {
		gim_alert('error calling gim_display_url() : no argument.');
		return false;
	}
	
	//gim_alert(gim_display_url.arguments.length);
	//gim_alert(typeof(gim_display_url.arguments[0]));
	
	var L_arg_object = gim_display_url.arguments[0];
	var L_url = (typeof(L_arg_object.url) == 'undefined')? ('') : (L_arg_object.url);
	var L_name = (typeof(L_arg_object.name) == 'undefined')? ('gim_subwindow') : (L_arg_object.name);
	var L_width = (typeof(L_arg_object.width) == 'undefined')? ('740') : (L_arg_object.width);
	var L_height = (typeof(L_arg_object.height) == 'undefined')? ('500') : (L_arg_object.height);
	var L_top = (typeof(L_arg_object.top) == 'undefined')? ('0') : (L_arg_object.top);
	var L_left = (typeof(L_arg_object.left) == 'undefined')? ('0') : (L_arg_object.left);
	var L_resizable = (typeof(L_arg_object.resizable) == 'undefined')? ('no') : (L_arg_object.resizable);
	var L_scrollbars = (typeof(L_arg_object.scrollbars) == 'undefined')? ('no') : (L_arg_object.scrollbars);
	var L_menubar = (typeof(L_arg_object.menubar) == 'undefined')? ('no') : (L_arg_object.menubar);
	var L_toolbar = (typeof(L_arg_object.toolbar) == 'undefined')? ('no') : (L_arg_object.toolbar);
	var L_location = (typeof(L_arg_object.location) == 'undefined')? ('no') : (L_arg_object.location);
	var L_directories = (typeof(L_arg_object.directories) == 'undefined')? ('no') : (L_arg_object.directories);
	var L_status = (typeof(L_arg_object.status) == 'undefined')? ('no') : (L_arg_object.status);
	var L_view_info = 'height='+L_height+',width='+L_width+',top='+L_top+',left='+L_left+',resizable='+L_resizable+',scrollbars='+L_scrollbars+',menubar='+L_menubar+',toolbar='+L_toolbar+',directories='+L_directories+',location='+L_location+',status='+L_status;

	if (!window[L_name]) {
		window[L_name] = window.open(L_url, L_name, L_view_info);
	} else if (window[L_name].closed) {
		//seems useless, try harder
		window[L_name] = window.open(L_url, L_name, L_view_info);
	} else {
		window[L_name].location = L_url;
		window[L_name].focus();
	}
	return true;
}

/**
 * Function gim_form_submit
 * @todo à finir
 * @example gim_form_submit({action : '<?php echo($gim_url_page); ?>', input : {gim_js_enabled : 1}});
 * @example gim_form_submit({action : window.location.pathname, input : {gim_action : 'get_ticket', gim_object : response.responseText}});
 * @example gim_form_submit({window : window.frames[1].window, action : 'http://www.118218.fr/recherche/lenumero/', method : 'GET', target : 'IFRAME_118218', input : {q : '0148047980', typ : 'r', b : '0'}});
 * @target = _blank | _top | _parent | _self | window_name
 */

function gim_form_submit() {
	var L_WINDOW;
	var L_arg_object;
	var L_action;
	var L_method;
	var L_form;
	var L_input;
	var L_SUBMIT;
	
	if (gim_form_submit.arguments.length > 0) {
		L_arg_object = gim_form_submit.arguments[0];
	} else {
		L_arg_object = new Array();
	}
	L_SUBMIT = (typeof(L_arg_object.submit) == 'undefined')? (true) : (L_arg_object.submit);
	L_WINDOW = (typeof(L_arg_object.window) == 'undefined')? (window) : (L_arg_object.window);
	L_action = (typeof(L_arg_object.action) == 'undefined')? (window.location.pathname) : (L_arg_object.action);
	if (typeof(L_arg_object.method) != 'undefined') {
		if (L_arg_object.method.toUpperCase() == 'GET') {
			L_method = 'GET';
		} else {
			L_method = 'POST';
		}
	} else {
		L_method = 'POST';
	}
	
	L_form = L_WINDOW.document.createElement('form');
	L_form.style.display = 'none';
	L_WINDOW.document.documentElement.appendChild(L_form);
	L_form.method = L_method;
	L_form.action = L_action;
	if (typeof(L_arg_object.input) != 'undefined') {
		var L_input_fields = (L_arg_object.input);
		for (L_input_field_name in L_input_fields) {
			L_input = L_WINDOW.document.createElement('input');
			L_input.setAttribute('type', 'hidden');
			L_input.setAttribute('name', L_input_field_name);
			L_input.setAttribute('value', L_input_fields[L_input_field_name]);
			L_form.appendChild(L_input);
		}
	}
	if (typeof(L_arg_object.encoding) != 'undefined') {L_form.encoding = L_arg_object.encoding;}
	if (typeof(L_arg_object.name) != 'undefined') {L_form.name = L_arg_object.name;}
	//if (typeof(L_arg_object.id) != 'undefined') {L_form.id = L_arg_object.id;}//a tester
	if (typeof(L_arg_object.target) != 'undefined') {L_form.target = L_arg_object.target;}
	if (L_SUBMIT) {L_form.submit();}
}


function gim_selectNodes(P_DOM, P_QUERY) {
	var L_NODES;
	
	if (window.ActiveXObject) {//Internet Explorer
		L_NODES = P_DOM.documentElement.selectNodes(P_QUERY);
		return(L_NODES);
	} else if (document.implementation.createDocument) {//Firefox, Mozilla, Opera, etc.
		var L_XPathEvaluator = new XPathEvaluator();
		var L_RESULT = L_XPathEvaluator.evaluate(P_QUERY, P_DOM.documentElement, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
//		ne fonctionne pas pour Opera malgr&eacute; le code ci-dessous
//		var oNSResolver = this.createNSResolver(this.documentElement);
//		var L_RESULT = this.evaluate(P_QUERY, P_DOM, oNSResolver, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
		L_NODES = new Array;
	    if (L_RESULT != null) {
	        var L_ELEMENT = L_RESULT.iterateNext();
	        while(L_ELEMENT) {
//	            alert(L_ELEMENT.tagName);
	            L_NODES.push(L_ELEMENT);
	            L_ELEMENT = L_RESULT.iterateNext();
	        }
	    }
		return(L_NODES);
	} else {
		alert('Your browser cannot handle this script');
		return(false);
	}
}

function gim_selectSingleNode(P_DOM, P_QUERY) {
	var L_NODE;
	
	if (window.ActiveXObject) {//Internet Explorer
		L_NODE = P_DOM.documentElement.selectSingleNode(P_QUERY);
		return(L_NODE);
	} else if (document.implementation.createDocument) {//Firefox, Mozilla, Opera, etc.
		var L_XPathEvaluator = new XPathEvaluator();
		var L_RESULT = L_XPathEvaluator.evaluate(P_QUERY, P_DOM.documentElement, null,
			XPathResult.FIRST_ORDERED_NODE_TYPE, null);
		L_NODE = null;
	    if (L_RESULT != null) {
	    	L_NODE = L_RESULT.singleNodeValue;
	    }
		return(L_NODE);
	} else {
		alert('Your browser cannot handle this script');
		return(false);
	}
}

function gim_loadXML(P_EXPR) {
	var L_PARSER;
	var L_DOM;
	
	if (window.ActiveXObject) {//Internet Explorer
		try {
			L_DOM = new ActiveXObject("Microsoft.XMLDOM");
		} catch(e) {
			alert(e.message);
			return(false);
		}
		L_DOM.async=false;
		L_DOM.loadXML(P_EXPR);
		return(L_DOM);
	} else if (document.implementation.createDocument) {//Firefox, Mozilla, Opera, etc.
		L_PARSER = new DOMParser();
		L_DOM = L_PARSER.parseFromString(P_EXPR, "text/xml");
		return(L_DOM);
	} else {
		alert('Your browser cannot handle this script');
		return(false);
	}
//	var L_DIR_NODE = L_DOM.documentElement.selectNodes('//file');//firstChild selectNodes documentElement .selectNodes('//dir')
//	alert(L_DIR_NODE.length);//L_DIR_NODE.childNodes.length
//	alert(L_DOM.getElementsByTagName("file")[0].childNodes[0].nodeValue);
}

function gim_new_DOM() {
	var L_PARSER;
	var L_DOM;
	
	if (window.ActiveXObject) {//Internet Explorer
		try {
			L_DOM = new ActiveXObject("Microsoft.XMLDOM");
		} catch(e) {
			alert(e.message);
			return(false);
		}
		return(L_DOM);
	} else if (document.implementation.createDocument) {//Firefox, Mozilla, Opera, etc.
		try {
			L_PARSER = new DOMParser();
			L_DOM = L_PARSER.parseFromString('<?xml version="1.0"?>', "text/xml");
		} catch(e) {
			alert(e.message);
			return(false);
		}
		return(L_DOM);
	} else {
		alert('Your browser cannot handle this script');
		return(false);
	}
}
