﻿/* --------------------------------------------------------------------------------
 * Client Name: Broadcast Interview Source, Inc.
 * Project Name: InterviewNet 
 * Module: Web
 * Name: common.js
 * Purpose: For common javascript functions
 *                   
 * Author: HA
 * Language: javascript version 1.3
 * --------------------------------------------------------------------------------
 * Change History:
 *  version: 1.0    HA  10/06/2008
 *  Description: Initial Development
 *  
 *  version: 1.1    MHR  11/10/2008
 *  Description: Added new method (ReplaceNewline()) to replace newline with <br/> tag
 *
 *  Version: 1.2    MHR  12/14/2008
 *  Description: Added New Method CompareDates()
 *  Version: 1.3   KI  11/10/2009
 *  Description: Added New Method IsDuplicateSiloTextAndParticipantName() for silo and particinapnt name duplicate check
 * -------------------------------------------------------------------------------- */
// JScript File
//trim the text
 function pk_fixnewlines_textarea(val) 
        {             
            // Adjust newlines so can do correct character counting for MySQL. MySQL counts a newline as 2 characters.
            if (val.indexOf('\r\n')!=-1); // this is IE on windows. Puts both characters for a newline, just what MySQL does. No need to alter
            else if (val.indexOf('\r')!=-1)
            val = val.replace ( /\r/g, "\r\n" );        // this is IE on a Mac. Need to add the line feed
            else if (val.indexOf('\n')!=-1)
            val = val.replace ( /\n/g, "\r\n" );        // this is Firefox on any platform. Need to add carriage return
            else 
            ;                                           // no newlines in the textarea  
            return val;
        }

        function textCounter(ctrlID, displayCtrlID,maxchar)
        {
            
            var ctrl = document.getElementById(ctrlID)
           
            var displayctrl = document.getElementById(displayCtrlID);
            var contVal = pk_fixnewlines_textarea(ctrl.value)    
            var currentlength = contVal.length;
            var lengthremains = maxchar - currentlength;
            
            if(currentlength > maxchar )
            {
                ctrl.value = contVal.substring(0,maxchar);
                ctrl.scrollTop=1000;  
            }
            if(lengthremains < 0)
            {
                lengthremains = 0;
            }
            
            displayctrl.innerHTML = lengthremains;
        }
        
       function wordCounter(ctrlID, displayCtrlID, maxWords)
        {
            
            var ctrl = document.getElementById(ctrlID)
           
            var displayctrl = document.getElementById(displayCtrlID);
            var contVal = pk_fixnewlines_textarea(ctrl.value)  
            
            var fullStr = contVal + " ";
            var initial_whitespace_rExp = /^[^A-Za-z0-9]+/gi;
            var left_trimmedStr = fullStr.replace(initial_whitespace_rExp, "");            
            var non_alphanumerics_rExp = rExp = /[ ]+/gi;
            var clearStr = left_trimmedStr.replace(non_alphanumerics_rExp, " ");
            var splitString = clearStr.split(" ");
            var word_count = splitString.length -1;              
            
            var lengthremains = maxWords - word_count;
           
            if(word_count > maxWords )
            {  
                ctrl.value = splitString.slice(0,maxWords).join(" ");                
                ctrl.scrollTop=1000;  
            }
            if(lengthremains < 0)
            {
                lengthremains = 0;
            }
            
            displayctrl.innerHTML = lengthremains;
        }
        
        
function trim(str) 
{
  	str = this != window? this : str;
   	return str.replace(/^\s+/g, '').replace(/\s+$/g, '');                
}
        
// This function returns int from 2 length String
// example - returns '1' from '01'
function checkValue(val)
{
	var value = val.toString();
	if(value.charAt(0) == "0")
	{
		return value.charAt(1);
	}
	return value;
}
// This function returns the days of a perticular month and year
// input parameter Month and Year
function getMonthDate(month,year)
{
    if(month==2)
    {
	    if((year%400)==0)
	    {
		    return 29;
	    }
	    else if((year%100)==0)
	    {
		    return 28;
	    }
	    else if((year%4)==0)
	    {
		    return 29;
	    }
	    else
	    {
		    return 28;
	    }
    }
    else if(month==4 || month==6 || month==9 || month==11)
    {
	    return 30;
    }
    else
    {
	    return 31;
    }
}

//stop event bubbling
function stopPropagation(e) 
{ 
    e = e||event;/* get IE event ( not passed ) */ 
    e.stopPropagation? e.stopPropagation() : e.cancelBubble = true; 
} 
function stopPropagationCurrent(e) 
{ 
    if(e.keyCode==13)
    {
        e = e||event;/* get IE event ( not passed ) */ 
        e.stopPropagation? e.stopPropagation() : e.cancelBubble = true; 
    }
} 
function openlittleme(url)
{
    window.open(url, "PrivacyPop", "height=600,width=700,resizable,scrollbars=yes");
}
function IsValidEmail(FieldValue)
{
    var RegXEmailAddress=/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
    if(FieldValue.match(RegXEmailAddress))
    {
        return true;
    }
    else
        return false;
}
///Replaces new line with <br/> tag in a given text
function ReplaceNewline(text) 
{    
    return text.replace(/\n/g, '<br/>');
}

function EncodeHtml(text)
{
    return text.replace(/</g, '&lt;').replace(/>/g, '&gt;');
}

function GetEventKey(e) 
{
    e.key = e.keyCode ? e.keyCode : e.charCode;

    if(window.event) 
    {
        e.ctrl = window.event.ctrlKey;
        e.shift = window.event.shiftKey;
    }
    else 
    {
        e.ctrl = e.ctrlKey;
        e.shift = e.shiftKey;
    }
    switch(e.key) 
    {
        case 63232:
            e.key = 38;
            break;
        case 63233:
            e.key = 40;
            break;
        case 63235:
            e.key = 39;
            break;
        case 63234:
            e.key = 37;
            break;
    }
    //if ctrl and enter pressed together
    if(e.ctrl &&  e.key==13)
        e.key = 10;

    return e.key;
}


//browser detection
function isIe() 
{
    return (navigator.userAgent.toLowerCase().indexOf("msie") != -1 && navigator.userAgent.toLowerCase().indexOf("opera") == -1);
}

function isIe6() 
{
    return (navigator.userAgent.toLowerCase().indexOf("msie 6.") != -1 && navigator.userAgent.toLowerCase().indexOf("opera") == -1);
}

function isIe7() 
{
    return (navigator.userAgent.toLowerCase().indexOf("msie 7.") != -1 && navigator.userAgent.toLowerCase().indexOf("opera") == -1);
}

function isNetscape7() 
{
    return (navigator.userAgent.toLowerCase().indexOf("netscape") != -1 && navigator.userAgent.toLowerCase().indexOf("7.") != -1);
}
function  isSafari() 
{
   return (navigator.userAgent.toLowerCase().indexOf("khtml") != -1);
}
function isOpera() 
{
    return (navigator.userAgent.toLowerCase().indexOf("opera") != -1);
}
function isMozilla() 
{
    return (navigator.userAgent.toLowerCase().indexOf("gecko") != -1 && navigator.productSub >= 20030210);
}
function isMac() 
{
    return (navigator.userAgent.toLowerCase().indexOf('macintosh') != -1);
}
function AttachEvent(elementObj, eventName, eventHandlerFunctionName)
{
  if (elementObj.addEventListener) 
  { // Non-IE browsers
    elementObj.addEventListener(eventName, eventHandlerFunctionName, false);		
  } 
  else if (elementObj.attachEvent) 
  { // IE 6+
    elementObj.attachEvent('on' + eventName, eventHandlerFunctionName);
  } 
  else 
  { // Older browsers 
    var currentEventHandler = elementObj['on' + eventName];
    if (currentEventHandler == null) 
    {
      elementObj['on' + eventName] = eventHandlerFunctionName;
    } 
    else 
    {
      elementObj['on' + eventName] = function(e) { currentEventHandler(e); eventHandlerFunctionName(e); }
    }
  }
}


///Compares two dates of MM/dd/yyyy format
//Returns 1 if value1 is greater than value2
//Returns -1 if value1 is less than value2
//Returns 0 if value1 and value2 are equal
function CompareDates (value1, value2) 
{
    var dateSeparator = '/';
    var date1, date2;
    var month1, month2;
    var year1, year2;

    month1 = value1.substring (0, value1.indexOf (dateSeparator));
    date1 = value1.substring (value1.indexOf (dateSeparator) + 1, value1.lastIndexOf (dateSeparator));
    year1 = value1.substring (value1.lastIndexOf (dateSeparator) + 1, value1.length);

    month2 = value2.substring (0, value2.indexOf (dateSeparator));
    date2 = value2.substring (value2.indexOf (dateSeparator) + 1, value2.lastIndexOf (dateSeparator));
    year2 = value2.substring (value2.lastIndexOf (dateSeparator) + 1, value2.length);

    if (year1 > year2) 
        return 1;
    else if (year1 < year2) 
        return -1;
    else if (month1 > month2) 
        return 1;
    else if (month1 < month2) 
        return -1;
    else if (date1 > date2) 
        return 1;
    else if (date1 < date2) 
        return -1;
    else 
        return 0;
}
///Sends a Browser Independent Ajax Request
function SendAjaxRequest(url)
{
    var i = Math.round(100 * Math.random());
    if(url.indexOf('?') > -1)
        url += '&rnd=' + i;
    else
         url += '?rnd=' + i;
    var xmlHttpObject = GetXmlHttpObject();    
    xmlHttpObject.open("GET", url, false);    
    xmlHttpObject.send(true);                            
    return xmlHttpObject.responseText;
}

///Gets a browser Specific Xml Http Object For an Ajax Request
function GetXmlHttpObject()
{
    var xmlHttpObj;
	if (window.ActiveXObject) 
	{
		xmlHttpObj = new ActiveXObject("Microsoft.XMLHTTP");
	}
	else if (window.XMLHttpRequest) 
	{
		xmlHttpObj = new XMLHttpRequest();
	}
	return xmlHttpObj;    
}

function IsValidEmail(email)
{
    var pattern = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; //new RegExp("\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");
    //Pattern for .Net Validator
    //pattern = ^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$;                
    if(pattern.test(email))
        return true;                
    else
        return false;                
}

function HideServerErrorMessage(labelClientId)
{    
    var element = document.getElementById(labelClientId);            
    element.innerHTML = '';
}

var HAS_DUPLICATE_EMAIL = false;

function IsDuplicateEmail(txtElement, messageElementId, rfvId, regexvId, url)
{           
    //var submitButton = document.getElementById(submitButtonId)
    var lblMessage = document.getElementById(messageElementId);     
    if(IsValidEmail(txtElement.value))
    {    
        var validatorRFVSpan = document.getElementById(rfvId);
        var validatorREVSpan = document.getElementById(regexvId);   
        
        if(validatorRFVSpan != null)            
            validatorRFVSpan.style.display = 'none';
        if(validatorREVSpan != null)
            validatorREVSpan.style.display = 'none';  
                                  
        if(url.indexOf('?') > -1)
            url += '&Email=' + txtElement.value;
        else
            url += '?Email=' + txtElement.value;
        
        var responseText = SendAjaxRequest(url);
        //var customValidator = document.getElementById(customValidatorId);                     
        if(responseText == 'True')                                                   
        {            
            lblMessage.innerHTML = "<br/>This email is already in use by another user.";                     
            HAS_DUPLICATE_EMAIL = true;
        } 
        else
        {        
           HAS_DUPLICATE_EMAIL = false;        
           lblMessage.innerHTML = '';
        }
    }
    else
        lblMessage.innerHTML = '';
}

function AjaxRequest(url)
{
     var responseText = SendAjaxRequest(url);
     
     return responseText == 'True';
}
/// This function is used by Custom validator to prevent Post back in errornious situation
/// In Duplicate Email and User ID Check
function ValidateDuplicateEmail(sender, args)
{
    //alert(HAS_DUPLICATE_EMAIL);            
    if(HAS_DUPLICATE_EMAIL)                            
        args.IsValid = false;                            
    else
        args.IsValid = true;
}

var HAS_DUPLICATE_USER_ID = false;

function IsDuplicateUserId(txtElement, messageElementId, rfvId, url)
{
    var lblMessage = document.getElementById(messageElementId);
    if(txtElement.value.length > 0)
    {
        var validatorRFVSpan = document.getElementById(rfvId);        
        
        if(validatorRFVSpan != null)            
            validatorRFVSpan.style.display = 'none';        
                                  
        if(url.indexOf('?') > -1)
            url += '&UserID=' + txtElement.value;
        else
            url += '?UserID=' + txtElement.value;
        
        var responseText = SendAjaxRequest(url);                     
        if(responseText == 'True')                                                   
        {            
            lblMessage.innerHTML = "User ID alreay exists.";                             
            HAS_DUPLICATE_USER_ID = true;
        } 
        else
        {        
           HAS_DUPLICATE_USER_ID = false;              
           lblMessage.innerHTML = '';
        }
    }
    else
        lblMessage.innerHTML = '';
}

function EnableTableForHumanDisablities(tableId)
{
    try
    {
        var table = document.getElementById(tableId);   
        var tbody = table.getElementsByTagName('tbody');			
        var rows = tbody[0].getElementsByTagName('tr');
        var i = 0;
        if ( rows.length > 0 && rows[0].cells.length > 0 && rows[0].cells[0].tagName.toLowerCase() == 'th')
        {
            i = 1;
        }
        
        for (; i < rows.length; i++) 
        {
            var row = rows[i];            
		    row.OriginalCssClass = row.className;
            row.onmouseover = function(){HighLightRow(this)};
            row.onmouseout = function(){LowLightRow(this)};				
        }   
    }
    catch(Error)
    {
        //alert(Error.description);
    }
}

function HighLightRow(tableRow)
{            
    tableRow.className = 'HighLightedRow';            
}

function LowLightRow(tableRow)
{
    tableRow.className = tableRow.OriginalCssClass;
}

var HAS_DUPLICATE_SILO_TEXT = false;

function IsDuplicateSiloText(txtSilo, txtFirst, txtLast, messageElementId, rfvId, url)
{  
    //alert('txtSilo: ' + txtSilo + 'txtFirst: ' + txtFirst + 'txtLast: ' + txtLast + 'messageElementId: ' + messageElementId + 'rfvId: ' + rfvId + 'url: ' + url);  
    var txtSiloText = document.getElementById(txtSilo);
    var txtFirstName = document.getElementById(txtFirst);
    var txtLastName = document.getElementById(txtLast);
    
    if(txtSiloText.value.length > 0 && txtFirstName.value.length > 0 && txtLastName.value.length > 0)
    {
        
        var lblMessage = document.getElementById(messageElementId);
        var validatorRFVSpan = document.getElementById(rfvId);        
        
        if(validatorRFVSpan != null)            
            validatorRFVSpan.style.display = 'none';        
                                  
        if(url.indexOf('?') > -1)
            url += '&SiloText=' + txtSiloText.value + '&FName=' + txtFirstName.value + '&LName=' + txtLastName.value ;
        else
            url += '?SiloText=' + txtSiloText.value + '&FName=' + txtFirstName.value + '&LName=' + txtLastName.value ;
        //alert(url);
        var responseText = SendAjaxRequest(url);                     
        //alert(responseText);
        if(responseText == 'True')                                                   
        {            
            lblMessage.innerHTML = "<br/>The text for profile url already in use. Please enter another one.";                                      
            HAS_DUPLICATE_SILO_TEXT = true;            
        } 
        else
        {        
           HAS_DUPLICATE_SILO_TEXT = false;              
           lblMessage.innerHTML = '';
        }        
    }
    HideValidators();
}

function IsDuplicateSiloTextAndParticipantName(txtSilo, txtParticipantName, messageElementId, rfvId, url)
{  
    //alert('txtSilo: ' + txtSilo + 'txtFirst: ' + txtFirst + 'txtLast: ' + txtLast + 'messageElementId: ' + messageElementId + 'rfvId: ' + rfvId + 'url: ' + url);  
    var txtSiloText = document.getElementById(txtSilo);
    var txtPName = document.getElementById(txtParticipantName);    
    
    if(txtSiloText.value.length > 0 && txtPName.value.length > 0)
    {
        
        var lblMessage = document.getElementById(messageElementId);
        var validatorRFVSpan = document.getElementById(rfvId);        
        
        if(validatorRFVSpan != null)            
            validatorRFVSpan.style.display = 'none';        
                                  
        if(url.indexOf('?') > -1)
            url += '&SiloText=' + txtSiloText.value + '&PName=' + txtPName.value  ;
        else
            url += '?SiloText=' + txtSiloText.value + '&PName=' + txtPName.value ;
        //alert(url);
        var responseText = SendAjaxRequest(url);                     
        //alert(responseText);
        if(responseText == 'True')                                                   
        {            
            lblMessage.innerHTML = "<br/>The text for profile url already in use. Please enter another one.";                                      
            HAS_DUPLICATE_SILO_TEXT = true;            
        } 
        else
        {        
           HAS_DUPLICATE_SILO_TEXT = false;              
           lblMessage.innerHTML = '';
        }        
    }
    HideValidators();
}

function ValidateDuplicateSiloText(sender, args)
{
    IsDuplicateSiloTextAndParticipantName('ctl00_ctl00_cphBody_cphRight_txtSilo','ctl00_ctl00_cphBody_cphRight_txtParticipant','ctl00_ctl00_cphBody_cphRight_lblSiloError','ctl00_ctl00_cphBody_cphRight_rfvSiloText','EditProfile.aspx?Ajax=True');
    //alert(HAS_DUPLICATE_EMAIL);            
    if(HAS_DUPLICATE_SILO_TEXT)                            
        args.IsValid = false;                            
    else
        args.IsValid = true;
        
        
}
function ReplaceSpecialCharactersAndNumbers(inputText)
{  
    var outPutText = inputText.replace(/[^a-zA-Z ]+/g,'');
    return outPutText;
}
function IsAllLettersAreCapital(text)
{        
    var re = new RegExp('[A-Z]', 'g');
    text = text.replace(re, '');  
    ///Replace all spces in the text      
    text = text.replace(/^\s*|\s*$/g, '');        
    return text.length == 0;
}
function GetWordCount(text)
{
    var words = text.split(' ');
    return words.length;
}

String.prototype.StartsWith = function(str) 
{return (this.match('^' + str) == str)}

String.prototype.EndsWith = function(str) 
{return (this.match(str + '$') == str)}

function SetHeight(divContainer, divMessage,browser)
{   
    var height = document.body.clientHeight;
    if(screen.height > height)
    {
        height = screen.height;
    }
    if(document.body.scrollHeight > height)
    {
        height = document.body.scrollHeight;
    }
    var divBlockingContainer = document.getElementById(divContainer) 
    var divUserMsg = document.getElementById(divMessage) 

    if(divBlockingContainer !=null)
    {        
        divBlockingContainer.style.height = height;        
    }   
    
    if(divUserMsg !=null)
    { 
        document.body.style.overflow="hidden";
        AlignToPosition(divUserMsg);
    } 
    
} 

function AlignToPosition(obj)
{
    if(obj != null)
    {
        //var height = screen.height;
        //var width = screen.width;
        //var left = (width - obj.offsetWidth)/2 ;
        //var top = (height - obj.offsetHeight)/2;
        //top = top - 180;
        var left = 20;
        var top = 20;
        obj.style.left = left + 'px';
        obj.style.top = top + 'px';
    }
}

function HideAttentionMessage(bolckingContainerId, messageContainerId)
{
    try
    {
        var url = "/Home.aspx?Ajax=True";
        var responseText = SendAjaxRequest(url);
        if(responseText == 'True')
        {
            var bolckingContainer = document.getElementById(bolckingContainerId);
            var messageContainer = document.getElementById(messageContainerId);
            bolckingContainer.style.display = 'none';
            messageContainer.style.display = 'none';    
        
            document.body.style.overflow = "auto";
            document.body.scroll = "yes";
        }
    }
    catch(Error){}
}

//Open offsite links in new window script- http://www.dynamicdrive.com/
//Created: August 28th, 2007'
function InitializeExternalURLFormatting(domainToExclude)
{
    var ddwindowlinks=
    {
        //1)Enter domains to be EXCLUDED from opening in new window:
        excludedomains: [domainToExclude],

        //2) Target for links that should open in a new window (ie: "_blank", "secwin" etc):
        linktarget: "_blank",

        //3) Specify operating mode ("auto" or "manual"):
        mode: "auto",

        //4) If mode is "manual", customize checkbox HTML to show to users (Preserve id attribute):
        toggleHTML: '<form><input type="checkbox" id="targetcheckbox" checked="checked" /><label for="targetcheckbox">Open off-site links in new window?</label></form>',

        //5) If mode is "manual", enable user persistence so the state of the checkbox is remembered?
        persist: true,

        assigntarget:function()
        {
	        var rexcludedomains=new RegExp(this.excludedomains.join("|"), "i")
	        var all_links=document.getElementsByTagName("a")
	        if (this.mode=="auto" || (this.mode=="manual" && this.togglebox.checked))
	        {
		        for (var i=0; i<=(all_links.length-1); i++)
		        {
			        if (all_links[i].hostname.search(rexcludedomains)==-1 && ( all_links[i].href.indexOf("http:")!=-1 || all_links[i].href.indexOf("https:")!=-1 || all_links[i].href.indexOf("ftp:")!=-1 ))
				        all_links[i].target=ddwindowlinks.linktarget
		        }
	        }
	        else
	        {
		        for (var i=0; i<=(all_links.length-1); i++)
			        all_links[i].target=""
	        }
	        if (this.mode=="manual" && this.persist)
		        this.setCookie("dlinktarget", (this.togglebox.checked)? "yes" : "no", 30) //remember user setting for 30 days (set to -1 then reload page to erase cookie)
        },

        init:function()
        {
	        if (document.getElementById && this.mode=="manual")
	        {
		        document.write(this.toggleHTML)
		        this.togglebox=document.getElementById("targetcheckbox")
		        this.togglebox.onclick=function(){ddwindowlinks.assigntarget()
	        }
	        if (this.persist && this.getCookie("dlinktarget")!="")
			        this.togglebox.checked=(this.getCookie("dlinktarget")=="yes")? true : false
	        }
	        if (window.addEventListener)
		        window.addEventListener("load", function(){ddwindowlinks.assigntarget()}, false)
	        else if (window.attachEvent)
		        window.attachEvent("onload", function(){ddwindowlinks.assigntarget()})
        },

        getCookie:function(Name)
        {
	        var re=new RegExp(Name+"=[^;]+", "i"); //construct RE to search for target name/value pair
	        if (document.cookie.match(re)) //if cookie found
		        return document.cookie.match(re)[0].split("=")[1] //return its value
	        return ""
        },

        setCookie:function(name, value, days)
        {
	        var expireDate = new Date()
	        //set "expstring" to either an explicit date (past or future)
		        var expstring=expireDate.setDate(expireDate.getDate()+parseInt(days))
		        document.cookie = name+"="+value+"; expires="+expireDate.toGMTString()+"; path=/"
        }

    }
    ddwindowlinks.init()
}

function ShowCenteredPopUp(pageURL, windowName, width, height, showScrollBar)
{	
	var scrollBars = '';	
	if(showScrollBar)	
	    scrollBars = 'yes';	    	
	else		
	    scrollBars = 'no';	
	var leftPosition = (screen.width) ? (screen.width - width)/2 : 0;
	var topPosition = (screen.height) ? (screen.height - height)/2 : 0;
	topPosition -= 50;
	var settings = 'height='+ height +',width='+ width +',top='+ topPosition +',left='+ leftPosition +',resizable=' + scrollBars + ',scrollbars=' + scrollBars + ',menubar=no,toolbar=no,status=yes,location=no,directories=no,addressbar=no'
	var page = pageURL;			
	win = window.open(page, windowName, settings);
	if(win != null)
	{
		win.window.focus();
	}
	return false;
}