/*
 *  Form utility functions
 */


 var HIDDEN_FIELD_MARKER = "___submitTest";
 
function submitFormWithConfirm( msg, element,  query) {
//Note: this is a copy of submitForm with one more arg to skip 
	answer = confirm(msg);
	if ( answer != 0 ){
	    var form = findContainingForm( element );
	    //we set this to false in the page to stop submitting by hitting return 
	    form.onsubmit='return true';
	    if (query)
	 	{
			form.method = "GET";
	 	}
		else {
			form.method = "POST";
		}

	    if ( !form || form.nodeName != 'FORM' ) {
	    	alert( "Could not find containing form for element" );
	    }
	 	for ( var i = 3; i < arguments.length; i++ ) {
	 		var field = makeHiddenField( arguments[i], form );
	 		form.appendChild( field );
	 	}
	 		
	 	form.submit();
	 	removeHiddenFields( form );
	}
}

/**
 * Submit a form, using the input elements within it, plus the other given parameter values
 * @param element the element clicked to submit the form
 * @param <remainder> arguments as strings in the form name=value
 */
function submitForm( element,  query) {
    var form = findContainingForm( element );
    //we set this to false in the page to stop submitting by hitting return 
    form.onsubmit='return true';
    if (query)
 	{
		form.method = "GET";
 	}
	else {
		form.method = "POST";
	}

    if ( !form || form.nodeName != 'FORM' ) {
    	alert( "Could not find containing form for element" );
    }
 	for ( var i = 2; i < arguments.length; i++ ) {
 		var field = makeHiddenField( arguments[i], form );
 		form.appendChild( field );
 	}
 		
 	form.submit();
 	removeHiddenFields( form );
 }
 
function submitFormAjax( msg , element,  query) {
    var form = findContainingForm( element );

	form.method = "POST";

    if ( !form || form.nodeName != 'FORM' ) {
    	alert( "Could not find containing form for element" );
    }

 	for ( var i = 3; i < arguments.length; i++ ) {
 		var field = makeHiddenField( arguments[i], form );
 		form.appendChild( field );
 	}
 		
	removeViewLocation( form );
	formdata="";
	// Loop through form fields
	for (i=0; i < form.elements.length; i++){
		name = form.elements[i].name;
		value=form.elements[i].value;
		type = form.elements[i].type;
		
		name = escape(name);
		value = escape(utf8_encode(value));
		

		//alert("type " + type + "@@" + name + value);
		if (name!=null && value !=null){
			if (type == "text" || type =="select-multiple" || type == "checkbox" || type == "hidden" || type == "select-one" || type == "textarea" ){
			//alert("type " + "@@" + type + name + value);
			
			if (type == "checkbox")	{

				if (form.elements[i].checked==true){
					formdata = formdata + name + "=" + value + "&";
				}
//				alert("type " + type + "@@" + name +" " +value+" "+form.elements[i].checked);
			} else if (type == "select-multiple"){
	
				for (y=0; y < form.elements[i].options.length; y++){
	
					if (form.elements[i].options[y].selected){
						formdata = formdata + name + "=" + form.elements[i].options[y].value + "&";
					}			
				
				}
	
	
			}else{
				formdata = formdata + name + "=" + value + "&";
			}
			
			}
		}
	}
	
	if (formdata.length > 0){
		formdata=formdata.substring(0,formdata.length-1)
	}	
	// code for Mozilla, etc.
	if (window.XMLHttpRequest) {
		xmlhttp=new XMLHttpRequest()
	}
	// code for IE
	else if (window.ActiveXObject){
		 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")
	}

	if (xmlhttp){
		xmlhttp.open("POST",form.action,true)
		xmlhttp.setRequestHeader("Content-length", formdata.length);
		xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		//alert("sending " + formdata);
		xmlhttp.send(formdata);

	}

	alert(msg);
/**
http.onreadystatechange = function() {//Call a function when the state changes.
	if(http.readyState == 4 && http.status == 200) {
		alert(http.responseText);
	}
}
**/



 	//form.submit();
 	removeHiddenFields( form );
 }



/**
 * Find the form that contains <code>element</code>
 * @return the form
 */
function findContainingForm( element ) {
 	  var elem = element;
 	  while ( elem.parentNode && elem.nodeName != 'FORM' ) {
 	  	elem = elem.parentNode;
 	  }
 	  return elem;
 }
 
/**
 * Make a new input type=hidden element using the name and value encoded in <code>paramStr</code>
 * @return the new element
 */
function makeHiddenField( paramStr, form ) {
     var paramParts = paramStr.split( '=' );
     var name = paramParts[0];
     var value = paramParts[1];
	 var doc = form.document || form.ownerDocument;
     var field = doc.createElement( "input" );
     field.type = "hidden";
     field.name = name;
     field.value = value;
     field.className = HIDDEN_FIELD_MARKER;
     return field;
 }

 /**
  * Removes the hidden fields added by submitForm() from a form
  */
function removeHiddenFields( form ) {
	// Important to iterate in reverse, otherwise miss some elements
	for ( var i = form.childNodes.length - 1; i > 0; i-- ) {
		var f = form.childNodes[i];
		if ( f.nodeName == "INPUT" && f.className == HIDDEN_FIELD_MARKER) {
			form.removeChild( f );
		}
	}
}


 /**
  * Finds value of form element in document. Looks through all forms on document.
  */
function getFormElementValue(elementName, frame) {
	for (var i = 0; i < frame.document.forms.length; i++)
	{
		for (var o = 0; o < frame.document.forms[i].elements.length; o++)
		{
			if (frame.document.forms[i].elements[o].name == elementName)
			{
				return frame.document.forms[i].elements[o].value;
			}
		}
	}
	
	return null;
}

function removeViewLocation( form ) {
	// Important to iterate in reverse, otherwise miss some elements
	for ( var i = form.childNodes.length - 1; i > 0; i-- ) {
		var f = form.childNodes[i];
		if ( f.nodeName == "INPUT" && f.id == "VIEW_LOCATION") {
			form.removeChild( f );
		}
	}
}


 function utf8_encode(string) {
        string = string.replace(/\r\n/g,"\n");
        var utftext = "";

        for (var n = 0; n < string.length; n++) {

            var c = string.charCodeAt(n);

            if (c < 128) {
                utftext += String.fromCharCode(c);
            }
            else if((c > 127) && (c < 2048)) {
                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128);
            }
            else {
                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128);
            }

        }
		
        return utftext;
    }



function submitLogin( addBrowser, element,  query){
   element.disabled=true;
   
    var form = findContainingForm( element );
    //we set this to false in the page to stop submitting by hitting return 
    form.onsubmit='return true';

    form.method = "POST";


    if ( !form || form.nodeName != 'FORM' ) {
    	alert( "Could not find containing form for element" );
    }
 	for ( var i = 3; i < arguments.length; i++ ) {
 		var field = makeHiddenField( arguments[i], form );
 		form.appendChild( field );
 	}
 	
 	if (addBrowser){
 		addBrowserInfo(form);
 	}
 	form.submit();
 	removeHiddenFields( form );
 }
 
 /**
  * Adds browser info to a form
  */
function addBrowserInfo( form ) {

	var br=new Array(4);
	var os=new Array(2);
	var flash=new Array(2);
	br=getBrowser();
	os=getOS();
	flash=hasFlashPlugin();
	
	form.appendChild( makeHiddenField( "browser="+br[0], form ) );
	form.appendChild( makeHiddenField( "browserVersion="+br[1], form ) );
	form.appendChild( makeHiddenField( "flashEnable="+(flash[0]==2), form ) );
	form.appendChild( makeHiddenField( "flashVersion="+flash[1], form ) );
	form.appendChild( makeHiddenField( "os="+os[1], form ) );	
	form.appendChild( makeHiddenField( "browserEngine="+br[2], form ) );
}

function submitForm02( element,  query) {
    var form = findContainingForm( element );
    //we set this to false in the page to stop submitting by hitting return 
    form.onsubmit='return true';
    if (query)
 	{
		form.method = "GET";
 	}
	else {
		form.method = "POST";
	}

    if ( !form || form.nodeName != 'FORM' ) {
    	alert( "Could not find containing form for element" );
    }
 	for ( var i = 2; i < arguments.length; i++ ) {
 		var field = makeHiddenField( arguments[i], form );
 		form.appendChild( field );
 	}
 		
 	form.submit();
 	removeHiddenFields( form );
 }
 
 /* Added On : 19-09-2008 ; Submit form by persisting url parameters in cookie; */
 function submitWithPersistParams( element,  query) {
    var form = findContainingForm( element );
    
	var urlParameters="";
    //we set this to false in the page to stop submitting by hitting return 
    form.onsubmit='return true';
    if (query)
 	{
		form.method = "GET";
 	}
	else {
		form.method = "POST";
	}

    if ( !form || form.nodeName != 'FORM' ) {
    	alert( "Could not find containing form for element" );
    }
 	for ( var i = 2; i < arguments.length; i++ ) {
 		var field = makeHiddenField( arguments[i], form );
 		urlParameters+=arguments[i];
 		urlParameters+="&";
 		form.appendChild( field );
 	}
 	/* Added On : 18-09-2008 ; Write url parameters to cookie; */
 	document.cookie = "params=" + urlParameters;
 	form.submit();
 	removeHiddenFields( form );
 }
 
 function checkAll(ele, pos)
{
	var theForm = document.forms[0];
	var fieldName = ele + pos;
	for (i = 0; i < theForm.elements.length; i++){
		//alert(theForm.elements[i].id+ '--' +fieldName);	
		if(theForm.elements[i].id==fieldName){
			theForm.elements[i].checked = true ;
		}
	}	
}

function uncheckAll(ele, pos)
{
	var theForm = document.forms[0];
	var fieldName = ele + pos;
	for (i = 0; i < theForm.elements.length; i++){
		//alert(theForm.elements[i].id+ '--' +fieldName);	
		if(theForm.elements[i].id==fieldName){
			theForm.elements[i].checked = false ;
		}
	}
}
