//$Id$

// ------------------- General Object related methods ---------------------- //

var browser_ie=false;
var browser_ie6=false;
var browser_nn4=false;
var browser_nn6=false;
var browser_opera=false;
var browser_safari=false;
var browser_ff3=false;
var browser_chrome=false;
var web_kit = false;

var os_windows = false;
var os_linux = false;
var os_mac = false;
//var firefox_3 = false; //Commented by jk

if (document.all && window.navigator.userAgent.toUpperCase().indexOf("IE") >= 0) {
	browser_ie=true;
	if (window.navigator.appVersion.indexOf("6.0") > -1) browser_ie6 = true;
} else if (document.layers) {
	browser_nn4=true;
}else if (document.layers || (!document.all && document.getElementById)) {
	browser_nn6=true;
}

if (window.navigator.userAgent.toUpperCase().indexOf("OPERA") >= 0) {
	browser_opera=true;
	browser_nn6=true;
}

if (window.navigator.userAgent.toUpperCase().indexOf("APPLEWEBKIT") >= 0) {
	web_kit=true;
}

if (window.navigator.userAgent.toUpperCase().indexOf("SAFARI") >= 0) {
	browser_safari=true;
}

if (window.navigator.userAgent.toUpperCase().indexOf("CHROME") >= 0) {
	browser_chrome = true;
}

if(window.navigator.userAgent.toUpperCase().indexOf("FIREFOX/3")>=0){
	browser_ff3 = true;
}

if(window.navigator.platform.toUpperCase().indexOf("WIN")>=0){
	os_windows = true;
}

if(window.navigator.platform.toUpperCase().indexOf("LINUX")>=0){
	os_linux = true;
}

if(window.navigator.platform.toUpperCase().indexOf("MAC")>=0){
	os_mac = true;
}
if(window.navigator.userAgent.toUpperCase().indexOf("FIREFOX/3")>=0){ //Modified by JK so as to support all conditions related to FF3 should include FF3.5 on 21/09/09
	browser_ff3 = true;
}
/**
* Retruns the x position of the given object in the window / screen.
*/

/* Author: Peter-Paul Koch, Available for download at: http://www.quirksmode.org/js/findpos.html */
function findPosX(obj) {
   var curleft = 0;
   if (document.getElementById || document.all) {
   	try {
      while (obj.offsetParent) {
         curleft += obj.offsetLeft;
         obj = obj.offsetParent;
      }
	} catch (e) {
   		return curleft;
   	}
   }
   else if (document.layers) {
      curleft += obj.x;
   }
   return curleft;
}

//  ---------------------------------------

/**
* Retruns the x position of the given object in the window / screen.
*/

/* Author: Peter-Paul Koch, Available for download at: http://www.quirksmode.org/js/findpos.html */
function findPosY(obj) {
   var curtop = 0;
   if (document.getElementById || document.all) {
   	try {
      while (obj.offsetParent) {
         curtop += obj.offsetTop;
         obj = obj.offsetParent;
      }
	} catch (e) {
   		return curtop;
   	}
   }
   else if (document.layers) {
      curtop += obj.y;
   }
   return curtop;
}

//  ---------------------------------------

function findDocDim() {
   if (browser_ie) {
      return {
         width : document.documentElement.offsetWidth + document.body.scrollLeft,
         height : document.documentElement.offsetHeight + document.body.scrollTop
      }
   }
   else if (browser_nn4 || browser_nn6) {
      return {
         width : window.innerWidth + document.body.scrollLeft,
         height : window.innerHeight + document.body.scrollTop
      }
   }
}

//  ---------------------------------------

function findClientDim() {
	if (browser_ie)	{
		var clientWidth = document.body.clientWidth;
		var clientHeight = document.body.clientHeight;
	} else if (browser_nn4 || browser_nn6) {
		var clientWidth = window.innerWidth;
		var clientHeight = window.innerHeight;
	}

	return {
		width : clientWidth,
		height : clientHeight
	}
}

function getCursorPos(ev) {
   if (browser_ie) {
      var x = window.event.clientX + document.documentElement.scrollLeft;
      var y = window.event.clientY + document.documentElement.scrollTop;
   }
   else if (browser_nn6) {
      var x = ev.pageX;
      var y = ev.pageY;
   }

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

//  ---------------------------------------

/**
* Finding screenTop, screenLeft, pageTop, pageLeft during a particular event (used for Mozilla browser)
*/
var scrX = 0, scrY = 0, pgeX = 0, pgeY = 0, srcElement;
if (browser_ie) {
   document.attachEvent("onclick", popUpListener);
}

//  ---------------------------------------

else if (browser_nn4 || browser_nn6) {
   document.addEventListener("click", popUpListener, true);
}

//  ---------------------------------------

function popUpListener(e) {
   if (browser_ie) {
      srcElement = window.event.srcElement;
   }
   else if (browser_nn4 || browser_nn6) {
      srcElement = e.target;
      scrX = e.screenX;
      scrY = e.screenY;
      pgeX = e.pageX;
      pgeY = e.pageY;
   }
}

//  ---------------------------------------

/**
* Retruns the object for the given element id and document object.
*/
function getObj(n, d) {
	if (!d) d = document;
	return d.getElementById(n);
/*
   var p, i, x;
   if(!d)
   d=document;

   if((p=n.indexOf("?"))>0&&parent.frames.length) {
      d=parent.frames[n.substring(p+1)].document;
      n=n.substring(0, p);
   }

   if(!(x=d[n])&&d.all){
      x=d.all[n];
   }

   for(i=0; !x&&i<d.forms.length; i++){
      x=d.forms[i][n];
   }

   for(i=0; !x&&d.layers&&i<d.layers.length; i++){
      x=getObj(n, d.layers[i].document);
   }

   if(!x && d.getElementById){
      x=d.getElementById(n);
   }
   return x;
*/
}

//  ---------------------------------------

function getXmlhttp() {
   if(window.XMLHttpRequest) {
      var xmlhttp = new XMLHttpRequest();
   }
   else {
      try {
         var xmlhttp = new ActiveXObject( 'Microsoft.XMLHTTP' );
      }
      catch(ee) {
         try {
            var xmlhttp = new ActiveXObject( 'Microsoft.XMLDOM' );
         }
         catch(e) {
            var xmlhttp = new ActiveXObject( 'Msxml2.XMLHTTP' );
         }
      }
   }
   return xmlhttp;
}

//  ---------------------------------------

function getXMLHttpRequest(){
   var xmlhttp=false;
   try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
   }
   catch (e) {
      try {
         xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch (E) {
         xmlhttp = false;
      }
   }
   if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
      xmlhttp = new XMLHttpRequest();
   }
   return xmlhttp;
}

//  ---------------------------------------

/**
* Clears text selection
*/
function clearTextSelection() {
   if(!READ_WRITE)
   {
      return;
   }

   if (window.getSelection) {
      window.getSelection().removeAllRanges();
   }
   else if (document.getSelection) {
      var s = document.getSelection();
      if (s.collapse) s.collapse(true);
      if (s.removeAllRanges) s.removeAllRanges();
   }
   else if (document.selection) {
   if(document.selection.type!="Text"){
      document.selection.empty();
          }
         else{
           document.selection.clear();
   }
      //	window.setTimeout('document.selection.empty()', 0);
   }
}

//  ---------------------------------------

/**
* Creating trim() function and added to String object as prototype
*/
String.prototype.trim = function() {
   var x = this;
   x = x.replace(/^\s*(.*)/, "$1");
   x = x.replace(/(.*?)\s*$/, "$1");
   return x;
}

//  ---------------------------------------

/**
* Creating Ltrim() function and added to String object as prototype
*/
String.prototype.Ltrim = function() {
   var x = this;
   x = x.replace(/^\s*(.*)/, "$1");
   return x;
}

//  ---------------------------------------

/**
* Creating Rtrim() function and added to String object as prototype
*/
String.prototype.Rtrim = function() {
   var x = this;
   x = x.replace(/(.*?)\s*$/, "$1");
   return x;
}

//  ---------------------------------------

/**
* Creating outerHTML() function and added to HTML Element as prototype
*/
if(!document.all)
{
   function getOuterHTML(node)
   {
      var str = "";
      var empties = ["IMG", "HR", "BR", "INPUT"];

      switch (node.nodeType)
      {
         case 1:
            // ELEMENT_NODE
            str += "<" + node.nodeName;
            for(var i = 0; i < node.attributes.length;
            i++)
            {
               if(node.attributes.item(i).nodeValue != null)
               {
                  str += " "
                  str += node.attributes.item(i).nodeName;
                  str += "=\"";
                  str += node.attributes.item(i).nodeValue;
                  str += "\"";
               }
            }

            if(node.childNodes.length == 0 && empties.getIndexOf(node.nodeName) > 0)
            str += ">";
            else
            {
               str += ">";
               str += node.innerHTML;
               str += "</" + node.nodeName + ">"
            }
            break;

         case 3:
            //TEXT_NODE
            str += node.nodeValue;
            break;

         case 4:
            // CDATA_SECTION_NODE
            str += "<![CDATA[" + node.nodeValue + "]]>";
            break;

         case 5:
            // ENTITY_REFERENCE_NODE
            str += "&" + node.nodeName + ";"
            break;

         case 8:
            // COMMENT_NODE
            str += "<!--" + node.nodeValue + "-->"
            break;
      }

      return str;
   }

   function Array_getIndexOf(el)
   {
      var index = -1;

      for(var i = 0; i < this.length; i++)
      {
         if(this[i] == el)
         {
            index = i;
            break;
         }
      }

      return index;
   }

   Array.prototype.getIndexOf = Array_getIndexOf;
}

//  ---------------------------------------

function MM_openBrWindow(theURL, winName, features) {
   //window.open(theURL, winName, features);
   if( document.all )
   {
      left = (screen.width/2)-200;
      atop = (screen.height/2)-200;

      var ft='width=400,height=360'+',left='+left+',top='+atop+',resizable=yes';

      win=window.open(theURL, winName, ft);
      win.focus();
   }
   else if( document.getElementById )
   {
      win = window.open(theURL, winName, 'width=400,height=360,resizable=yes')
      win.focus();
      win.moveTo((document.width/2)-235, (document.height/2)-130);
   }
}

//  ---------------------------------------

var scrollConst = 0;
//if (browser_nn4 || browser_nn6) scrollConst = 125;

function isCapsLockOn(keyCode, shiftKey) {
   return ((keyCode >= 65 && keyCode <= 90 && !shiftKey) || (keyCode >= 95 && keyCode <= 123 && shiftKey)) ? true : false;
}

//  ---------------------------------------

function get_cookie(name) {
   var arg = name + "=";
   var alen = arg.length;
   var clen = document.cookie.length;
   var i = 0;
   while (i < clen) {
      var j = i + alen;
      if (document.cookie.substring(i, j) == arg)
      return get_cookie_val(j);
      i = document.cookie.indexOf(" ", i) + 1;
      if (i == 0)
      break;
   }
   return null;
}

//  ---------------------------------------

function get_cookie_val(offset) {
   var endstr = document.cookie.indexOf (";", offset);
   if (endstr == -1)
   endstr = document.cookie.length;
   return unescape(document.cookie.substring(offset, endstr));
}

//  ---------------------------------------

function set_cookie(name, value) {
   var argv = set_cookie.arguments;
   var argc = set_cookie.arguments.length;
   var expires = (argc > 2) ? argv[2] : null;
   var path = (argc > 3) ? argv[3] : null;
   var domain = (argc > 4) ? argv[4] : null;
   var secure = (argc > 5) ? argv[5] : false;
   document.cookie = name + "=" + escape (value) +
   ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
   ((path == null) ? "" : ("; path=" + path)) +
   ((domain == null) ? "" : ("; domain=" + domain)) +
   ((secure == true) ? "; secure" : "");
}

//  ---------------------------------------

function del_cookie(name) {
   var exp = new Date();
   exp.setTime (exp.getTime() - 1);
   var cval = get_cookie(name);
   document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString();
}

//  ---------------------------------------
/*
	For Getting Position Of The Caret(Cursor) Position In A Textbox Or Textarea
	No. Of Arguments:1
	Argument 1   Type: Object(Object Of Textarea Or Textbox)
	Return   Type: Integer
*/

function getCaretPos(element){
	var txt = element.value;
	var len = txt.length;
	var pos = -1;
	if((typeof document.selection != "undefined")&&(!browser_opera)) {
	// FOR MSIE
		var range = document.selection.createRange();

		if(element.tagName.toUpperCase() != "INPUT") {

			var stored_range = range.duplicate();
			stored_range.moveToElementText( element );
			stored_range.setEndPoint( 'EndToEnd', range );
			element.selectionStart = stored_range.text.length - range.text.length;
			element.selectionEnd = element.selectionStart + range.text.length;
			pos = element.selectionStart;

		} else if(element.tagName.toUpperCase() == "INPUT") {
			pos = getFormInputCaretPos(element, range);
		}

	}
	else if(typeof element.selectionStart != "undefined"){
	 // FOR MOZILLA
	   pos = element.selectionStart;
	}
	return pos;
}

//  ---------------------------------------

function getCaretPosByLine(textarea) {
   var txt = textarea.value;
   var len = txt.length;
   var erg = txt.split("\n");
   var pos = -1;
   if(typeof document.selection != "undefined" && !browser_opera) {
      // FOR MSIE
      range_sel = document.selection.createRange();
      range_obj = textarea.createTextRange();
      range_obj.moveToBookmark(range_sel.getBookmark());
      range_obj.moveEnd('character', textarea.value.length);
      pos = len - range_obj.text.length;
   }
   else if(browser_opera || typeof textarea.selectionStart != "undefined") {
      // FOR MOZILLA
      pos = textarea.selectionStart;
   }

   if(pos != -1) {
      var ind = 0;
      for(ind; erg.length; ind++) {
         len = erg[ind].length + 1;
         if(pos < len)
         break;
         pos -= len;
      }
      ind++;
      pos++;
      return [ind, pos];
      // ind = LINE, pos = COLUMN
   }
}

//  ---------------------------------------

function setCaretPos(input, pos) {
   input.focus();
   if (!isNaN(pos)) {
      setSelectionRange(input, pos, pos);
   }
   else if (pos == "START") {
      setSelectionRange(input, 0, 0);
   }
   else if (pos == "END") {
      setSelectionRange(input, input.value.length, input.value.length);
   }
}

//  ---------------------------------------
/*
	For Getting SelectedText From The Whole Text in Textarea Or Textbox

	No. Of Arguments:1
	Argument 1  	Type: Object(object of textarea or textbox)
	Return   	Type: String(Selected text in the TextBox Or TextArea)
*/
function getSelectedText(el) {

	if (is_ie&&!browser_opera) {

		if (document.selection) {
         		var range = document.selection.createRange();

     			if(el.tagName == "TEXTAREA")  {
				var stored_range = range.duplicate();
    				stored_range.moveToElementText(el);
      				stored_range.setEndPoint('EndToEnd', range);
				el.selectionStart = stored_range.text.length - range.text.length;
       				el.selectionEnd = el.selectionStart + range.text.length;

			} else if (el.tagName.toUpperCase() == "INPUT") {

				el.selectionStart 	= getFormInputCaretPos(el, range);
				el.selectionEnd 	= getSelectionEnd(el, range);
			}
		}

		return el.value.substring(el.selectionStart, el.selectionEnd);

	} else {
		return el.value.substring(getSelectionStart(el), getSelectionEnd(el));
	}
}

//  ---------------------------------------

function selectText(input, start, end) {
   input.focus();
   setSelectionRange(input, start, end);
}

//  ---------------------------------------

function insertText(input, val) {
   var insPos = getCaretPos(input);

   var split1 = input.value.substring(0, getSelectionStart(input));
   var split2 = input.value.substr(getSelectionEnd(input), input.value.length);
   input.value = split1 + val + split2;

   setCaretPos(input, (insPos + val.length));

   return insPos;
}

//  ---------------------------------------

function getText(el, start, end) {
   return el.value.substr(start, end);
}

//  ---------------------------------------

function getTextByLine(textarea, lineno, start, end) {
   var txt = textarea.value;
   var len = txt.length;
   var erg = txt.split("\n");

   if (erg[lineno - 1]) return erg[lineno - 1].substr(start, end);
   else return "";
}

//  ---------------------------------------

function getCurrentStyle(el, prop) {
   if (browser_ie) {
        if(el && el.currentStyle) {
   		return el.currentStyle[prop];
	}
   }
   else if (browser_nn6) {
   	return document.defaultView.getComputedStyle(el, '')[prop];
   }
}

//  ---------------------------------------

function getCurrentStyles(el) {
   if (browser_ie || browser_opera) return el.currentStyle;
   else if (browser_nn6) return document.defaultView.getComputedStyle(el, '');
}

//  ---------------------------------------
/*
	For To Get The Starting Position In The Selected Range
	No. Of Arguments:   1
	Argument1:      Object(object of selected Range).
	Return Type: 	Integer.
*/

function getSelectionStart(element) {
   var txt = element.value;
   var len = txt.length;
   var startPos = -1;
   if(typeof document.selection != "undefined" && !browser_opera){
   		// FOR MSIE
   		var range = document.selection.createRange();

		if(element.tagName.toUpperCase() != "INPUT") {
			var stored_range = range.duplicate();
			stored_range.moveToElementText( element );
			stored_range.setEndPoint( 'EndToEnd', range );
			element.selectionStart = stored_range.text.length - range.text.length;
			element.selectionEnd = element.selectionStart + range.text.length;
			startPos = element.selectionStart;
		} else {
			startPos = getFormInputCaretPos(element, range);
		}
   }
   else if(typeof element.selectionStart != "undefined"){
    // FOR MOZILLA
      startPos = element.selectionStart;
   }
   return startPos;
}

//  ---------------------------------------
/*
	For To Get The Ending Position In The Selected Range
	No. Of Arguments:   1
	Argument1:      Object(object of selected Range).
	Return Type: 	Integer.
*/
function getSelectionEnd(input){
 	var endPos = -1;
	if(typeof document.selection != "undefined" && !browser_opera){
		// FOR MSIE
	   endPos = getSelectionStart(input)+document.selection.createRange().text.length;
	}
	 else if(typeof input.selectionStart != "undefined"){
	    // FOR MOZILLA
	      endPos = input.selectionEnd;
   	}
   	return endPos;
}

//  ---------------------------------------

/*
	For Getting Form Input element's Caret Pos in MSIE
	arguments[0] is The FormInput Element
	arguments[1] is the selection range
*/

function getFormInputCaretPos(inputElement, range) {

	var pos, isCollapsed, opaqueText;

	if(inputElement.tagName.toUpperCase() == "INPUT") {

		isCollapsed = range.compareEndPoints("StartToEnd", range) == 0; //No I18N

		if (!isCollapsed) {
			range.collapse(true);
		}

		opaqueText = range.getBookmark();
		pos = opaqueText.charCodeAt(2) - 2;
		return pos;
	}

}

//  ---------------------------------------

;

function LightenColor(rgbtext, delta)
{
	var r, g, b, txt;
	r = parseInt(rgbtext.substr(1, 2), 16),
	g = parseInt(rgbtext.substr(3, 2), 16),
	b = parseInt(rgbtext.substr(5, 2), 16),
	r += delta;  if (r > 255) r = 255;  if (r < 0) r = 0;
	g += delta;  if (g > 255) g = 255;  if (g < 0) g = 0;
	b += delta;  if (b > 255) b = 255;  if (b < 0) b = 0;
	txt = b.toString(16);	if (txt.length < 2) txt = "0" + txt;
	txt = g.toString(16) + txt;	if (txt.length < 4) txt = "0" + txt;
	txt = r.toString(16) + txt;	if (txt.length < 6) txt = "0" + txt;
	return "#" + txt.toUpperCase();
}
//  ---------------------------------------

;

function DarkenColor(rgbtext, delta)
{
	return LightenColor(rgbtext, delta * -1);
}
//  ---------------------------------------

function isChild(childEl, parentEl) {
	try {
		if (childEl == parentEl) return false;

		while (childEl.parentNode != parentEl) {
			if (childEl.parentNode == document.body) return false;
			else childEl = childEl.parentNode;
		}

		return true;
	} catch (e) {
		return false;
	}
}
// ---------------------------------------------------------
/*For Escape Special Character  in String.
	No. Of Arguments:	2
	Argument1:		String.
	Argument2:		[no].(optional for NOT to HANDLE (".","*","_","-"))
	return type:		encoded String.
*/
function escapeSpecialChar(escapeStr){
	var isToHandleRemChars = arguments[1];
  	escapeStr = encodeURIComponent(escape(escapeStr));
   	if(isToHandleRemChars!="no"){
		if(arguments[0].indexOf(".")!=-1){
			escapeStr = escapeStr.replace(/\./g,'\\\.');
		}
		if(arguments[0].indexOf("*")!=-1){
			escapeStr = escapeStr.replace(/\*/g,'\\\*');
		}
		if(arguments[0].indexOf("_")!=-1){
			escapeStr = escapeStr.replace(/\_/g,'\\\_');
		}
		if(arguments[0].indexOf("-")!=-1){
			escapeStr = escapeStr.replace(/\-/g,'\\\-');
		}
	}

      return escapeStr;
	/*
	Note:	HOW TO USE:To encode a string===>escapeSpecialChar(string,["no"(optional)])
		Special Characters like "*",".","-","_" are handled staticaly by replacing \".
	*/
}
// ---------------------------------------------------------
/*For UnEscape Special Character  in String.
	No. Of Arguments:	2
	Argument1:		Encoded String.
	Argument2:		[no].(optional for NOT to HANDLE (".","*","_","-"))
	return type:		String .
*/
function unescapeSpecialChar(unescapeStr){
	var isToHandleRemChars = arguments[1];
   	if(isToHandleRemChars!="no"){
		if(arguments[0].indexOf(".")!=-1){
			unescapeStr = unescapeStr.replace(/\\\./g,'\.');
		}
		if(arguments[0].indexOf("*")!=-1){
			unescapeStr = unescapeStr.replace(/\\\*/g,'\*');
		}
		if(arguments[0].indexOf("_")!=-1){
			unescapeStr = unescapeStr.replace(/\\\_/g,'\_');
		}
		if(arguments[0].indexOf("-")!=-1){
			unescapeStr = unescapeStr.replace(/\\\-/g,'\-');
		}
	}
	unescapeStr = unescape(decodeURIComponent(unescapeStr));
     	return unescapeStr;
	/*
	Note:	HOW TO USE:To decode a string===>unescapeSpecialChar(encodedString,["no"(optional)]).
		Special Characters like "*",".","-","_" are handled staticaly by replacing \".
	*/
}
// -------------------------------------------------------------------------
/*
	For To Set A Selection Range in TEXTBOX OR TEXTAREA OR DIV
	No. Of Arguments:3
	Argument 1 type: Object.
	Argument 2 type: Integer(Starting Position).
	Argument 3 type: Integer(Ending Position).
	Return Type: NO(It will Select The Range In that Object)
*/
function setSelectionRange(element, start, end) {
        try{
	  if (element.setSelectionRange) {
	      element.setSelectionRange(start, end);
	  } else if (element.createTextRange) {
	      var range = element.createTextRange();
	      range.collapse(true);
	    if (start != end) {
	        range.moveStart("character", start);
	        range.moveEnd("character",end);
		    } else range.moveStart("character", start);
	      range.select();
	  }
	} catch(e){}
}
// -------------------------------------------------------------------------
/*
	For To Get The No. Of Occurences Of Specified Chracter In A String
	No. Of Arguments:2
	Argument 1 type: String
	Argument 2 type: String or Character
	Return Type: integer
*/
function getCountOfOccrnceOfCharInStr(stringCont,charInStr){
	return (stringCont.split(charInStr).length-1);
}

// -------------------------------------------------------------------------
/*
	For getting Maximum Length of an element in an array of element
	No. Of Arguments:1
	Argument 1 type: Array
	Return Type: integer
*/
getMaxLengthOfAnElemInAnArr = function (arr){
	var maxLength = 0;
	var count = 0;
	for(count in arr){
		maxLength = (arr[count].length>maxLength)?arr[count].length:maxLength;
	}
	return maxLength;
}
//  ---------------------------------------
/*
	For To Stop Browser Events
	No. Of Arguments:	1
	Argument 1 type: 	Event
	Return Type: 		-
*/
function stopEvt(ev)
{
     if (browser_ie)
     {
          window.event.cancelBubble = true;
     }
     else if (browser_nn6)
     {
          ev.stopPropagation();
	  ev.preventDefault();
     }
}
// ------------------------------------------------------
/* 	To Get Matched String Array From An Arrray
	No. Of Arguments:	2
	Argument 1 type: 	String To Match
	Argument 2 type: 	Array
	Return Type:		Matched Array
*/
function matchString(str, userArray)
{
     var temp = [];
     var limit = 10;
     if(isNaN(str)&&(new RegExp ('[a-z].*', 'gi')).exec(str)!=null)
     {
          str = escapeSpecialChar(str);
          for (var count = 0;count<userArray.length;
          count+=1)
          {
               tmp = escapeSpecialChar(userArray[count], "no");
               var re = new RegExp ('^'+str+'[^$].*?', 'gi') ;
               var m = re.exec(tmp);
               if (m && m.index == 0)
               {
                    temp[temp.length] = unescapeSpecialChar(tmp);
                    if(limit && temp.length == limit)
                    break;
               }
          }
     }
     return temp;
}
// -----------------------------------------------------
/* 	To Get Whether Caret Pos In End Or Not
	No. Of Arguments:	1
	Argument 1 type: 	Object (TextArea or Input)
	Return Type:		boolean
*/
function isCaretPosAtEnd(input)
{
     return (input.value.length==getSelectionEnd(input))?true:false;
}

// ----------------------------------------------------------------
/*
        To Selected Text Is Available Or Not For The Given Object
	No. Of Arguments:	1
	Argument 1 type: 	Object(i.e cellField or ExprField);
	Return Type: 		boolean

*/
function isTextSelected(input){
	return (getSelectedText(input).length>0)? true:false;
}
// ----------------------------------------------------------------
/*
	To Restrict Text Selection Of The Element.
	No. Of Arguments:	1
	Argument 1 Type:	Object(Element To Restrict Text Selection)
	Return Type: 		Void
*/
function restrictTextSelection(el){
	 el.onselectstart = new Function('return false');
	 /*Note:eventListener is added when mousedown(To Restrict Scrolling In browser_nn6)*/
        (browser_ie)?el.attachEvent("onmousedown", function(){el.onmousedown = new Function('return false');}):el.addEventListener("mousedown", function(){el.onmousedown = new Function('return false');}, false);
}

// ----------------------------------------------------------------
/*
	To Resume Text Selection Of The Element.
*/
function resumeTextSelection(el){
	 el.onselectstart = new Function('return true');
}

// -----------------------------------------------------------------
/*
	To Get Whether An Object Is No. Or Not
*/
function isNumber(obj){
	return (typeof(obj)=="number")?true:false;
}
// ------------------------------------------------------------------
/*
	To Get Whether An Object Is An Object Or Not
*/
function isObject(obj){
	return (typeof(obj)=="object")?true:false;
}
// ------------------------------------------------------------------
/*
	To Get Whether An Object Is String Or Not
*/
function isStr(obj){
	return (typeof(obj)=="string")?true:false;
}
// -------------------------------------------------------------------
/*
	To Get Whether An Object Is Boolean Or Not
*/
function isBoolean(obj){
	return (typeof(obj)=="boolean")?true:false;
}

// -------------------------------------
//  used to check the dialog hidden state

function isDialogHidden()
{
	if(dialogHidden == true) {
		return true;
	}else{
		return false;
	}
}

// ----------------------------------------------------------------------
/*
	To Get Whether An Object Is DIV Or Not
*/
function isDIV(el) {
	return (isObject(el)&&(el.tagName=="DIV"))?true:false;		//No I18N
}
// ----------------------------------------------------------------------

/*
	To Get The Child Nodes Of An Element
*/
function getChildNodes(el) {
	if (browser_ie) return ((el) ?  el.childNodes: null);
	else if (browser_nn6) return ((el) ? el.childNodes : null);
}

/*
	To Get The Child Node Of An Element
*/
function getChildNode(el, idx) {
	if (browser_ie) return ((el && el.childNodes[idx] != null) ?  el.childNodes[idx]: null);
	else if (browser_nn6) return ((el && el.childNodes.item(idx) != null) ? el.childNodes.item(idx) : null);
}

// ----------------------------------------------------------------------

/*
	To Get The Child Item Of An Element's ChildNodes
*/
function getChildItem(childNodes, i) {
	if (browser_ie) {
		return childNodes[i];
	} else if (browser_nn6) {
		return childNodes.item(i);
	}
}

// ----------------------------------------------------------------------

/*
	To Get The Child Index Of An Element Relative To Its Parent
*/
function findIndex(el) {
	if (el && !isUndefined(el.parentNode) && el.parentNode != null) {
		var elements = el.parentNode.childNodes;
		var srcIndex = -1;

		for (var i = 0,len = elements.length; i < len; i++) {
			if (elements[i] == el) {
				srcIndex = i;
				break;
			}
		}

		return srcIndex;
	} else {
		return 0;
	}
}

// ----------------------------------------------------------------------

/*
	To Get The Child Nodes Length
*/
function getChildNodesLength(el) {
	if (browser_ie) return el.children.length;
	else if (browser_nn6) return el.childNodes.length;
}

// --------------------------------------------------------------------
/*
	To Get Whether It Is Undefined Or Not.
*/
function isUndefined(obj) {
	return (typeof(obj) == "undefined")?true:false;		//No I18N
}

// --------------------------------------------------------------------
/*
	To Check Whether An Object Passed Is An HTML Element
*/
function isElement(obj) {
	 if(obj == null || typeof obj == "undefined") {
               return false;
       }
	return (typeof obj.tagName == "string");
}
// --------------------------------------------------------------------

/*
	To Check if an object is an array or not.
*/
function isArray(obj) {
	return (obj instanceof Array);
	//returns true is it is an array
	/*if(obj == null || typeof obj == "undefined" || isObject(obj)) {
               return false;
       }

	if (obj.constructor.toString().indexOf("Array") == -1) {	//No I18N
		return false;
	} else {
		return true;
	}*/
}

// --------------------------------------------------------------------------
/*
	To Get A String As Number.
*/
function convertNumber(num) {
	//If It Is Number There Is No Validation.
	if(isNumber(num)) {
		return num;
	} else {
		var str = parseInt(num);
		if(isNaN(str)) {	//If It Is String Send It As String Itself(Because We Are Handling Every Where With The Check Of isNumber()).
			return num;
		} else {
			return str;
		}
	}
}

// ---------------------------------------------------------------------

/*
	 These are the Key-codes of keys which would either type or delete a character
	 Tab Key(9) is Not Included in this List.
*/

function getPrintableCharacterKeyCodes() {

	return [8,32,46,48,49,50,51,52,53,54,55,56,57,59,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,107,109,188,190,191,192,219,220,221,222];

}

//This method is used to see contains method for Array elements
/*
Parameters:
	obj - object that should be compared with the array elements
	prop - property name, if the array element is an collection object such as Hashtable converted as js variable.
*/
Array.prototype.contains = function(obj, prop) {
  var i = this.length;
  if (typeof prop == "undefined") {
	while (i--) {
		if (this[i] == obj) {
	      return true;
	    }
  	}
  } else {
	while (i--) {
		if (this[i][prop] == obj[prop]) {
		  return true;
		}
  	}
  }
  return false;
}