// General form validation class.
//
// formId is the ID of the form to be validated.
//
// fields is an array of FieldValidator objects.
function FormValidator(formId, fields) {
    this._isValid = true;
    this._fields = fields;

    // Attach this validator to the form's onsubmit event.
    var form = document.getElementById(formId);
    if (form != null) {
        formValidator = this;
        form.onsubmit = function() {
            return formValidator.onSubmit(form);
        }
    }   
}

// Listens for the form's onsubmit event and passes it on to the
// FieldValidator objects.  Returns true if all the fields are valid.
FormValidator.prototype.onSubmit = function(form) {
    this._isValid = true;
    for (var i = 0; i < this._fields.length; i++) {
        if (!this._fields[i].onSubmit(form)) {
            this._isValid = false;
        }
    }
    if (!this._isValid) {
        alert('Please fill in / correct the highlighted fields before submitting again.');
    }
    return this._isValid;
}


// Class to apply a validation function to a field or fields.
//
// fieldNames is an array of the names of the fields passed as
// arguments to checkValid.
// 
// isRequired is set to true if the field can't be empty.
//
// checkValid is a function that returns true if the field is valid.
// It takes any number of fields as arguments.  The first field is the
// one that will be highlighted if it is invalid.
function FieldValidator(fieldNames, isRequired, validCheck) {

    // Status flags.
    this._isEmpty    = false;
    this._isValid    = true;

    this._fieldNames = fieldNames;
    this._isRequired = isRequired;
    this._validCheck = validCheck;
}


// Listens (via FormValidator.onSubmit()) for the form's onsubmit
// event and highlights the field it is validating if it's not valid.
// Returns true if the field is valid.
FieldValidator.prototype.onSubmit = function(form) {
    var fields = [];
    for(i = 0; i < this._fieldNames.length; i++) {
        fields[i] = form[this._fieldNames[i]];
    }
    if (this._isEmpty = this._emptyCheck(fields[0])) {
        this._isValid = !this._isRequired;
    } else {
        this._isValid = this._validCheck.apply(this, fields);
    }

    // Set or clear the 'invalid' class.
    var className = fields[0].className;
    if (this._isValid) {
        className = className.replace(/invalid/, '');
		fields[0].style.backgroundColor="#F8F8F8";
    } else {
        if (className.search(/invalid/) == -1) {
            //className += ' invalid';
			fields[0].style.backgroundColor="#F8F8A8";
        }
    }
    fields[0].className = className;

    return this._isValid;
}

FieldValidator.prototype._emptyCheck = function(field) {
    return (field.value.search(/\S/) == -1);
}

// Genrate Transition URL
var changeURL ="";
var stateType;
var transitionURL;
var setCMD;
var setDocument_State_ID,setSite_ID, setSite_Name,setDocType_TableName,setDocument_ID,setDocType_ID,setSiteArea_ID,setSiteArea_Name,setSiteAreaDocTypeID,setCounter;
function setURL(type,cmd,document_state_id,site_id,site_name,doctype_tablename,document_id,doctype_id,sitearea_id,sitearea_name,sitearea_doctype_id,counter_id)
{
	transitionURL ="cmd="+cmd+"&document_state_id="+document_state_id+"&site_id="+site_id+"&site_name="+site_name+"&doctype_tablename="+doctype_tablename+"&document_id="+document_id+"&doctype_id="+doctype_id+"&sitearea_id="+sitearea_id+"&sitearea_name="+sitearea_name+"&sitearea_doctype_id="+sitearea_doctype_id;
		setCMD =cmd;
		setSite_ID = site_id;
		setSite_Name = site_name;
		setDocType_TableName =  doctype_tablename;
		setDocument_ID =  document_id;
		setDocType_ID = doctype_id;
		setSiteArea_ID = sitearea_id;
		setSiteArea_Name = sitearea_name;
		setSiteAreaDocTypeID = sitearea_doctype_id;
		stateType = type;
		setCounter = counter_id;

	if(type=="Hide")
	{
		setDocument_State_ID =2;
	}
	else
	{
		setDocument_State_ID =3;
	}	
	//alert(transitionURL);
	changeTransitionStatus(transitionURL);
	
}



// Get an XMLHttpRequest object in a portable way.
function newRequest()
{
  xmlHttpReq = false;
  // For Safari, Firefox, and other non-MS browsers
  if (window.XMLHttpRequest) {
    try {
      xmlHttpReq = new XMLHttpRequest();
    } catch (e) {
      xmlHttpReq = false;
    } 
  } else if (window.ActiveXObject) {
    // For Internet Explorer on Windows
    try {
      xmlHttpReq = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {
        xmlHttpReq = false;
      }
    }
  }
}


// function that communucate to server
function changeTransitionStatus(URL)
{
	//alert(cID);
	newRequest();
	if(xmlHttpReq)
	{
	
		xmlHttpReq.open("GET", "index.php?"+URL, true);
		xmlHttpReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		var encoded = "";
		xmlHttpReq.send(null);
		xmlHttpReq.onreadystatechange = setValue;
		
	}
	else
	{
		alert("There was a communications error");
		return false;
	}
}

//check HTTP staus of Server
function setValue()
{
	if(xmlHttpReq.readyState == 4)
	{
		// To make sure valid response is received from the server, 200 means response received is OK
		if(xmlHttpReq.status == 200)
		{		
//			alert(xmlHttpReq.responseXML);		
//			PopulateResult(xmlHttpReq.responseXML.documentElement);
			PopulateResult(xmlHttpReq.responseText);
		}
		else
		{
			alert("problem retrieving data from the server, status code: "  + xmlHttpReq.status);
		}
	}
}

function PopulateResult(results)
{
//	alert(results);
	var divID;
	var divID1;
//	alert(results);
	if(results=="True")
	{
//		divID = document.getElementById("show");
//		alert(stateType);
		if(stateType=="Hide")
		{
			divID = document.getElementById("show"+setCounter);
			divID1 = document.getElementById("hide"+setCounter);
			stateType ="Show";
			divID.innerHTML= '<span class="formbutton"><a href="#" onclick=setURL("'+stateType+'","'+setCMD+'","'+setDocument_State_ID+'","'+setSite_ID+'","'+setSite_Name+'","'+setDocType_TableName+'","'+setDocument_ID+'","'+setDocType_ID+'","'+setSiteArea_ID+'","'+setSiteArea_Name+'","'+setSiteAreaDocTypeID+'","'+setCounter+'")>Show</a></span>';
			divID.style.display="";
			divID1.style.display="none";
		}
		else
		{
			divID = document.getElementById("hide"+setCounter);
			divID1 = document.getElementById("show"+setCounter);
			stateType ="Hide";
			divID.innerHTML= '<span class="formbutton"><a href="#" onclick=setURL("'+stateType+'","'+setCMD+'","'+setDocument_State_ID+'","'+setSite_ID+'","'+setSite_Name+'","'+setDocType_TableName+'","'+setDocument_ID+'","'+setDocType_ID+'","'+setSiteArea_ID+'","'+setSiteArea_Name+'","'+setSiteAreaDocTypeID+'","'+setCounter+'")>Hide</a></span>';

			divID.style.display="";
			divID1.style.display="none";

		}
	}
	else
	{
		if(stateType=="Hide")
		{
			divID = document.getElementById("hide"+setCounter);
			setDocument_State_ID =3;
			divID.innerHTML= '<span class="formbutton"><a href="#" onclick=setURL("'+stateType+'","'+setCMD+'","'+setDocument_State_ID+'","'+setSite_ID+'","'+setSite_Name+'","'+setDocType_TableName+'","'+setDocument_ID+'","'+setDocType_ID+'","'+setSiteArea_ID+'","'+setSiteArea_Name+'","'+setSiteAreaDocTypeID+'","'+setCounter+'")>Show</a></span>';

		}
		else
		{
			divID = document.getElementById("show"+setCounter);
			setDocument_State_ID =2;
			divID.innerHTML= '<span class="formbutton"><a href="#" onclick=setURL("'+stateType+'","'+setCMD+'","'+setDocument_State_ID+'","'+setSite_ID+'","'+setSite_Name+'","'+setDocType_TableName+'","'+setDocument_ID+'","'+setDocType_ID+'","'+setSiteArea_ID+'","'+setSiteArea_Name+'","'+setSiteAreaDocTypeID+'","'+setCounter+'")>Show</a></span>';

		}
	
	}

}

function GetInnerText (node)
{
	 return (node.textContent || node.innerText || node.text) ;
}