//--------------------------------------------*
// GLOBAL VARIABLES
//--------------------------------------------*
var is_ie = (navigator.userAgent.indexOf('MSIE') >= 0) ? 1 : 0;
var is_ie5 = (navigator.appVersion.indexOf("MSIE 5.5")!=-1) ? 1 : 0;
var is_opera = ((navigator.userAgent.indexOf("Opera6")!=-1)||(navigator.userAgent.indexOf("Opera/6")!=-1)) ? 1 : 0;
//netscape, safari, mozilla behave the same???
var is_netscape = (navigator.userAgent.indexOf('Netscape') >= 0) ? 1 : 0; 
var MonthArray = ['January','February','March','April','May','June','July','August','September','October','November','Decemeber'];
var shortMonthArray = ['jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec']

//--------------------------------------------*
// Finding elements
//
//    $id                   = document.getElementById(id)
//    $tag(tag,node)        = getElementsByTagName(tag,node)
//    $name(tag,node)       = getElementsByName(tag,node)
//    $class(node, clss, tag) = getElementsByClassName(node, clss, tag)
//--------------------------------------------*
function getSrc(evt)
{
    if (!evt) var evt = window.event;
    if(is_ie)
    {
        return event.srcElement
    }
    return evt.target;
}
function $(id)
{
	return document.getElementById(id);
}
function $tag(tag,node)
{
    if(node)return node.getElementsByTagName(tag);
    return document.getElementsByTagName(tag);
}
function $name(tag,node)
{
    if(node)return node.getElementsByName(tag);
    return document.getElementsByName(tag);
}
function $class(node, clss, tag){
    var retVal = new Array();
    var elements = $tag(tag || "*", node);
    for(var i = 0;i < elements.length;i++)
    {
        if(eval("elements[i].className.match(/" + clss + "/g)"))
            retVal.push(elements[i]);
    }
    return retVal;
}
function getElementsByClass(node, clsName, tag){
    var retVal = new Array();
    var elements = $tag(tag || "*", node);
    for(var i = 0;i < elements.length;i++)
    {
        if(eval("elements[i].className.match(/" + clsName + "/g)"))
            retVal.push(elements[i]);
    }
    return retVal;
}
// Get the currently selected detail line.
// evt = window event , like click, etc
// src = object firing the event
function getParentTableRow(evt, src)
{
    var DetailRow = src || getSrc(evt);
    if(DetailRow)             // If there is a current detail line
    {
        while((!DetailRow.tagName || DetailRow.tagName.toLowerCase() != "tr") && DetailRow.parentNode)
            DetailRow = DetailRow.parentNode;
    }
    if(DetailRow && DetailRow.tagName == "TR")
        return DetailRow;
    return null;
}

function getParentTableCell(el)
{
    var oCell = el;
    while(oCell.parentNode && oCell.tagName && oCell.tagName != "TD")
        oCell = oCell.parentNode
    if(oCell.tagName == "TD")
        return oCell;
    return null;
}


// Events
function addEvent(o,e,f){
	if (o.addEventListener){ o.addEventListener(e,f,false); return true; }
	else if (o.attachEvent){ return o.attachEvent("on"+e,f); }
	else { return false; }
}

function removeEvent(o,e,f){
	if(o.removeEventListener){ o.removeEventListener(e,f,true);}
	else if(o.detachEvent){ o.detachEvent("on"+e,f); }
	else{el["on" + evname] = null;}
}

function stopEvent(ev){
    ev || (ev = window.event); 
    try
    {
        if (is_ie){ 
            ev.cancelBubble = true; 
            ev.returnValue = false;
        } else { 
            ev.preventDefault(); 
            ev.stopPropagation();
        }
    }
    catch(e){}
    return false;
}
Array.prototype.find = function(searchStr) {
  var returnArray = false;
  for (i=0; i<this.length; i++) {
    if (typeof(searchStr) == 'function') {
      if (searchStr.test(this[i])) {
        if (!returnArray) { returnArray = [] }
        returnArray.push(i);
      }
    } else {
      if (this[i]===searchStr) {
        if (!returnArray) { returnArray = [] }
        returnArray.push(i);
      }
    }
  }
  return returnArray;
}

// dates
function dateBlur(evt)
{
    validate('date', getSrc(evt));
    return evt;
}

function setupCalendar(sFieldID, sButtonID)
{
	if($(sFieldID))
    {
        addEvent($(sFieldID), "blur", dateBlur) ;
        
        Calendar.setup(
        {
            inputField     :    sFieldID,   	// id of the input field
            button		   :    sButtonID,   	// id of the button
            ifFormat       :    "%d %B %Y"
        }
        );
    }
}

function removeClass(el, className) {
    var oldClass = el.getAttribute('class');
    if(!oldClass)return;
    var regExp = new RegExp('\\s?'+className+'\\b');
    if (oldClass.indexOf(className) != -1) {
      el.setAttribute('class',oldClass.replace(regExp,''));
    }
};

function addClass(el, className) {
	removeClass(el, className);
	el.className += " " + className;
};

/*


~~~~     COOKIE FUNCTIONS       ~~~~
*/
	function Get_Cookie(name) { 
	   var start = document.cookie.indexOf(name+"="); 
	   var len = start+name.length+1; 
	   if ((!start) && (name != document.cookie.substring(0,name.length))) return null; 
	   if (start == -1) return null; 
	   var end = document.cookie.indexOf(";",len); 
	   if (end == -1) end = document.cookie.length; 
	   return unescape(document.cookie.substring(len,end)); 
	} 
	// This function has been slightly modified
	function Set_Cookie(name,value,expires,path,domain,secure) { 
		expires = expires * 60*60*24*1000;
		var today = new Date();
		var expires_date = new Date( today.getTime() + (expires) );
	    var cookieString = name + "=" +escape(value) + 
	       ( (expires) ? ";expires=" + expires_date.toGMTString() : "") + 
	       ( (path) ? ";path=" + path : "") + 
	       ( (domain) ? ";domain=" + domain : "") + 
	       ( (secure) ? ";secure" : ""); 
	    document.cookie = cookieString; 
	} 
/*
~~~~     END       ~~~~


~~~~     FADING FUNCTIONS       ~~~~
*/
// fade an element in.
function fadeInElement(sElementId, opacity)
{
    if ($(sElementId)) {
        if (opacity <= 100) {
            if($(sElementId).style.display == "none"){
                $(sElementId).style.display = "block";
            }
            setOpacity($(sElementId), opacity);
            opacity += 10;
            window.setTimeout("fadeInElement('"+sElementId+"',"+opacity+")", 100);
        }
    }
}

// fade an element out.
function fadeOutElement(sElementId, opacity, step, rate)
{
    if ($(sElementId)) {
        if (opacity >= 0) {
            setOpacity($(sElementId), opacity);
            opacity = opacity - (step || 10);
            window.setTimeout("fadeOutElement('"+sElementId+"',"+opacity+", "+step+", "+rate+")", (rate || 100));
        }
        else
        {
            $(sElementId).style.display = "none";
        }
    }
}

// applies a specific opacity to a specific element in cross browser way.
function setOpacity(oElement, opacity) {
    opacity = (opacity == 100)?99.999:opacity;

    // IE/Win
    oElement.style.filter = "alpha(opacity:"+opacity+")";

    // Safari<1.2, Konqueror
    oElement.style.KHTMLOpacity = opacity/100;

    // Older Mozilla and Firefox
    oElement.style.MozOpacity = opacity/100;

    // Safari 1.2, newer Firefox and Mozilla, CSS3
    oElement.style.opacity = opacity/100;
    
    if(opacity == 0){
        oElement.style.display = 'none';
    }
}
/*
~~~~     END       ~~~~



~~~~     DIALOG       ~~~~
*/
// A super class
function Dialog(){};

// Shows the window.
// Call --> ChaseDialog.show({paramter:value,parameter:value})
/// eg : ChaseDialog.show({dialogWidth:'550px',dialogHeight:'600px',iframeUrl:'Common/Dialogs/Addnew.aspx'});
Dialog.show = function(params){
    // Parameters can be passed in, to override or complement the default parameters in this function.
    function param_default(pname, def) { if (typeof params[pname] == "undefined") { params[pname] = def; } };

    param_default("dialogWidth",    "200px");
    param_default("dialogHeight",   "200px");
    param_default("innerHTML",      null);
    param_default("iframe",         null);
	
	// tries to get the Div
    var dBg = $('divModalDialogBackground');
    dBg.style.display = "block";

    var dModalDialog = $('divModalDialog');
    dModalDialog.style.display = (is_ie)?"block":"table";

    var dSpacer = $('modalSpacer');
    dSpacer.style.display = (is_ie)?"block":"table-cell";
    
    var dInner = $('modalContent');
    dInner.style.width = params.dialogWidth;
    dInner.style.height = params.dialogHeight;
    dInner.style.display = "block";
    
    if(params.iframeUrl){
        while(dInner.childNodes.length)
        {
            dInner.removeChild(dInner.childNodes[0]);
        }

        var ifr = this.createElement("iframe");
        ifr.src = params.iframeUrl;
        dInner.appendChild(ifr);
    }
    else if(this.innerHTML)
    {
        dInner.innerHTML = params.innerHTML;
    }
}

// Hides the dialog.
// Call --> top.ChaseDialog.hide();
Dialog.hide = function(params){
    $('divModalDialogBackground').style.display = "none";
    $('divModalDialog').style.display = "none";
    $('modalSpacer').style.display = "none";
    $('modalContent').style.display = "none";
}
/*
~~~~     END DIALOG       ~~~~
*/
