Sunday, 5 August 2012

Domain & Industry Centric Solutions

1) In computing and telecommunication in general, a domain is a sphere of knowledge identified by a name. Typically, the knowledge is a collection of facts about some program entities or a number of network points or addresses.

2) On the Internet, a domain consists of a set of network addresses. This domain is organized in levels. The top level identifies geographic or purpose commonality (for example, the nation that the domain covers or a category such as "commercial"). The second level identifies a unique place within the top level domain and is, in fact, equivalent to a unique address on the Internet (an IP address). Lower levels of domain may also be used.
Strictly speaking, in the Internet's domain name system (DNS), a domain is a name with which name server records are associated that describe subdomains or host. For example, "whatis.com" could be a domain with records for "www.whatis.com" and "www1.whatis.com," and so forth.
3) In Windows NT and Windows 2000, a domain is a set of network resources (applications, printers, and so forth) for a group of users. The user need only to log in to the domain to gain access to the resources, which may be located on a number of different servers in the network.
Industry Centric Solutions


Clients today want practical and logical solutions that can be implemented without many hassles. Every industry throws up a different set of challenges, and as our clients’ IT solution providers we ensure that our solutions work for them. Industry orientation, therefore, comes to us as a natural choice as our focus has always been on helping our clients see their investments in IT pay off.
It is our constant endeavor to upgrade the quality of our solutions by enhancing our functional understanding of the focus industries. Our industry experts keep abreast with the latest trends in these industries, and are involved in all the stages of the projects, including the initial system studies and solution design.
Our emphasis on delivering total value through a combination of industry knowledge and technology is summed up in the following solution methodology:
Detailed understanding and pro-active recommendations for industry-specific challenges
Developing industry-specific solution frameworks targeted at clients' unique needs
Involvement of experienced cross-functional consultants that interpret technical know-how in the context of the industry
Use of pre-engineered components to reduce the time, cost and risk associated with solution implementations  
» Banking and Financial Services
» Education and E-learning
» Insurance
» Gaming
» Healthcare
» Utilities
» Pharmaceuticals and Life Science
» Construction
» Retail & Logistics
» Telecom





Wednesday, 9 May 2012

How to use CSS @font-face

@font-face is a css rule which allows you to download a particular font from your server to render a webpage if the user hasn't got that font installed. This means that web designers will no longer have to adhere to a particular set of "web safe" fonts that the user has pre-installed on their computer.


Some browsers support @font-face, some do not. 


The @font-face rule is supported in Internet Explorer 9, Firefox, Opera, Chrome, and Safari. 


However, Internet Explorer 9 only supports .eot type fonts, while Firefox, Chrome, Safari, and Opera support .ttf and .otf type fonts.


How do i use @font-face

The basics are pretty simple to implement the @font-face rule, but it is possible to add lots of options to extend its features.


Initially you define the rule, "font-family" is what you want to call the font, "src" is where it can be found, include a "font-weight" (not needed for normal, but required by everything else, bold, thin etc).


@font-face {
    font-family: DeliciousRoman;
    src: url(http://www.font-face.com/fonts/delicious/Delicious-Roman.otf);
    font-weight:400;
}


Then just use it like any other font in any other style rule.


p {
    font-family: DeliciousRoman, Helvetica, Arial, sans-serif;
}


@FONT-FACE GENERATOR



Use this link for generating @font-facehttp://www.fontsquirrel.com/fontface/generator




Tuesday, 1 May 2012

Cufón Font Replacement


Cufon is defined as “fast text replacement with canvas and VML”. It also claims to be a worthy alternative to sIFR – which is, to those who are not familiar – stands for Scalable Inman Flash Replacement. sIFR is the technology used by web designers to replace dynamic text with non-web safe fonts. Although sIFR has done an okay job with text replacement – it has proven to be quite tricky to set up. I’ve used sIFR in a few projects in the past and do admit that it is not the easiest thing to get going. On top of that – sIFR seems a bit buggy, as well as slows down page loads. These are serious consequences to consider for the price of using a unique font for your pages.


So I went ahead and tried Cufon. To my amazement, the following steps is all that it takes to fully “Cufonize” your web pages. *Forgive the use of the term “cufonize” – it may sound funny, but after you try these steps, you too will “cufonize” your pages.

Step 1: Get Cufon

The first thing you need is to download the core javascript file which is responsible for the rendering of your custom font inside your HTML. Head on to http://cufon.shoqolate.com/generate/ and right click the “Download” tab – choose “Save Link As…” Save cufon-yui.js into a local directory in your machine.




Step 2: Generate your Font
On the same page at http://cufon.shoqolate.com/generate/ – click on the “Regular typeface” field – and browse to your desired font in your local machine.

The rest of the upload fields are optional. I left all of them default for the sake of making this tutorial short. Just make sure – you are using a font that is legit to use, check off the EULAs and the Terms of Agreement. Click on the “Let’s Do This” Button at the very end of that page.
This should generate a custom font javascript code for you – depending on your font choice. In my case, I picked something very un-extraordinary: Gigi.TTF – which produced a file named Gigi_400.font.js.
Go ahead and save this file in the same directory where you saved the core Cufon-yui.js file and we’re ready to build your page:


Step 3: Cufonize your Page
All you really need to do from this point is to link to these javascript files in the head section of your HTML. Also make sure that cufon-yui.js is called before the font.js file:
<script type="text/javascript" src="cufon-yui.js"></script>
<script type="text/javascript"  src="Gigi_400.font.js"></script>
To begin the replacement process – create a custom script like below:
<script type="text/javascript">  
    Cufon.replace('h3, p');
</script>
The above script is telling the cufon to replace all H3 and P tags to our custom font.

Note that if you want to target specific elements in your page the same way you assign CSS classes and Ids, you have to use a framework such as jQuery that’ll let you do such a thing. To download jQuery, go to http://docs.jquery.com/Downloading_jQuery. Make sure you link to this file BEFORE the core cufon-yui.js in your header.
With the jQuery library in place, now you can select more specific elements in your page (hashtags for IDs and periods for classes). See example code below:
<script type="text/javascript">  
    Cufon.replace('h3#convert-me, p#convert-me-too');
</script>
The above code will Cufonize only the h3 tags with the id of “convert-me”, and p tags with the id of “convert-me-too”.

Conclusion:

That’s basically it! That’s all it takes for you to use any font you like in your web pages. What I like best about Cufon is that it’s quick and it works. You will also find that general CSS properties such as color, size and positioning still applies on the transformed font. To find out more about the specifics of Cufon styling – see http://wiki.github.com/sorccu/cufon/styling.
Much respect to the people who created Cufon. I’m sure this marks a new trend in web typography. To the folks at Woothemes: keep pushing the boundaries – your work is pure inspiration to web artists everywhere.




Monday, 30 April 2012

Form Validation Using JavaScript


Form Validation:



·         First name * - should alphabetic (a-z or A-Z) , no special character


·         Last name * - should alphabetic (a-z or A-Z) , no special character


·         DOB * (should have option to select date from date picker )


·         Email * - Standard email validation with domain name checking (com, net, org,in )


·         Gender


·         Address (Alpha numeric and special characters. except - $,% ,^,*,!)


·         ZIP code (Only 6 digit numeric value)


·         Mobile number * (Only 10 digit numeric value)


·         Upload photo


·         Additional information  - Paragraph text / not more than 500 characters


HTML


<html>
<head>
<title>WebCheatSheet - JavaScript Tutorial</title>
<script language="javascript" type="text/javascript" src="datetimepicker.js">


//Date Time Picker script- by TengYong Ng of http://www.rainforestnet.com
//Script featured on JavaScript Kit (http://www.javascriptkit.com)
//For this script, visit http://www.javascriptkit.com


</script>
<script language="javascript" type="text/javascript">
function validateFormOnSubmit(theForm) {
var reason = "";


  reason += validateFirstname(theForm.firstname);
  reason += validateLastname(theForm.lastname);
  reason += validateEmail(theForm.email);
  reason += validatePhone(theForm.phone);
  reason += validateEmpty(theForm.from);
  reason += validateDOB(theForm.dob);
  reason += validatezipcode(theForm.zipcode);
  reason += validateInfo(theForm.info);
     
  if (reason != "") {
    alert("Some fields need correction." + reason);

    return false;
  }


  return true;
}


function validateEmpty(fld) {
    var error = "";
    var ichars = "$% ^*!";

    if (fld.value.length == 0) {
        fld.style.background = 'Yellow';
error="\n";
document.getElementById('address_err').style.visibility='visible';
document.getElementById('address_err').value="The required field has not been filled in.";
   } else if(1)
{
for (var i = 0; i < fld.value.length; i++) {
    if (ichars.indexOf(fld.value.charAt(i)) != -1) {
    document.getElementById('address_err').style.visibility='visible';
document.getElementById('address_err').value="The required field has Special Char.";
    error="\t";
        }
    }
}
else {
        fld.style.background = 'White';
document.getElementById('address_err').style.visibility='hidden';

    }
    return error;  
}


function validateInfo(fld) {
    var error = "";

    if (fld.value.length == 0) {
        fld.style.background = 'Yellow';
error="\n";
document.getElementById('info_err').style.visibility='visible';
document.getElementById('info_err').value="The required field has not been filled in.";
   } else if ( fld.value.length > 500 )
  {
   //fld.value = field.value.substring( 0, 9 );
   document.getElementById('info_err').style.visibility='visible';
document.getElementById('info_err').value="The required field can only be 500 characters in length.";
 

  }else {
        fld.style.background = 'White';
document.getElementById('info_err').style.visibility='visible';

    }
    return error;  
}


function validateDOB(fld) {
    var error = "";
var today=new Date();
by=fld.value;
var year=Number(by.substr(6,5));
var age=today.getFullYear()-year;
    if (fld.value.length == 0) {
        fld.style.background = 'Yellow';
error="\n";
        document.getElementById('dob_err').style.visibility='visible';
document.getElementById('dob_err').value="The required field has not been filled in.";


   } else if((age<20)||(age>35))
{
fld.style.background = 'Yellow';
error="\n";
document.getElementById('dob_err').style.visibility='visible';
document.getElementById('dob_err').value="Age should be 20 years to 35years.";
}

else {
        fld.style.background = 'White';
document.getElementById('dob_err').style.visibility='hidden';
    }
    return error;  
}






function validateFirstname(fld) {
    var error = "";
    re = /^[A-Za-z]+$/;


    if (fld.value == "") {
        fld.style.background = 'Yellow';
error="\t";
        document.getElementById('firstname_err').style.visibility='visible';
document.getElementById('firstname_err').value="You didn't enter a firstname.";

    } else if(re.test(fld.value))
{
fld.style.background = 'White';
 document.getElementById('firstname_err').style.visibility='hidden';

}
else
{
document.getElementById('firstname_err').style.visibility='visible';
document.getElementById('firstname_err').value="First Name contains illegal characters.";
}
    return error;
}


function validateLastname(fld) {
    var error = "";
    re = /^[A-Za-z]+$/;


    if (fld.value == "") {
        fld.style.background = 'Yellow';
error="\t";
document.getElementById('lastname_err').style.visibility='visible';
document.getElementById('lastname_err').value="You didn't enter a lastname.";
       
    } else if(re.test(fld.value))
{
fld.style.background = 'White';
document.getElementById('lastname_err').style.visibility='hidden';
}
else
{
document.getElementById('lastname_err').style.visibility='visible';
error="\t";
document.getElementById('lastname_err').value="Last Name contains illegal characters.";
}
    return error;
}


function trim(s)
{
  return s.replace(/^\s+|\s+$/, '');
}


function validateEmail(fld) {
    var error="";
    var tfld = trim(fld.value);                        // value of field with whitespace trimmed off
    var emailFilter = /^[^@]+@[^@.]+\.[^@]*\w\w$/ ;
    var illegalChars= /[\(\)\<\>\,\;\:\\\"\[\]]/ ;
   
    if (fld.value == "") {
        fld.style.background = 'Yellow';
document.getElementById('email_err').style.visibility='visible';
error="\t";
document.getElementById('email_err').value="You didn't enter an email address";
 
    } else if (!emailFilter.test(tfld)) {              //test email for illegal characters
        fld.style.background = 'Yellow';
document.getElementById('email_err').style.visibility='visible';
error="\t";
document.getElementById('email_err').value="Please enter a valid email address.";
    } else if (fld.value.match(illegalChars)) {
        fld.style.background = 'Yellow';
error="\t";
document.getElementById('email_err').style.visibility='visible';
document.getElementById('email_err').value="The email address contains illegal characters.";
    } else {
        fld.style.background = 'White';
document.getElementById('email_err').style.visibility='hidden';
    }
    return error;
}
function validatePhone(fld) {
    var error = "";
    var stripped = fld.value.replace(/[\(\)\.\-\ ]/g, '');    


   if (fld.value == "") {
        document.getElementById('phone_err').style.visibility='visible';
error="\t";
document.getElementById('phone_err').value="You didn't enter a phone number.";
        fld.style.background = 'Yellow';
    } else if (isNaN(parseInt(stripped))) {
    document.getElementById('phone_err').style.visibility='visible';
error="\t";
document.getElementById('phone_err').value="The phone number contains illegal characters.";
        fld.style.background = 'Yellow';
    } else if (!(stripped.length == 10)) {
        document.getElementById('phone_err').style.visibility='visible';
error="\t";
document.getElementById('phone_err').value="The phone number is the wrong length.";
fld.style.background = 'Yellow';
    } else {
        fld.style.background = 'White';
document.getElementById('phone_err').style.visibility='hidden';
    }
    return error;
}


function validatezipcode(fld) {
    var error = "";


    var stripped = fld.value.replace(/[\(\)\.\-\ ]/g, '');    


   if (fld.value == "") {

        document.getElementById('zipcode_err').style.visibility='visible';
error="\t";
document.getElementById('zipcode_err').value="You didn't enter a zipcode.";
        fld.style.background = 'Yellow';
    } else if (isNaN(parseInt(stripped))) {
    document.getElementById('zipcode_err').style.visibility='visible';
error="\n";
document.getElementById('zipcode_err').value="Zip code contains illegal characters.";
        fld.style.background = 'Yellow';
    } else if (!(stripped.length == 6)) {
        document.getElementById('zipcode_err').style.visibility='visible';error="\n";
document.getElementById('zipcode_err').value="Zipcode is the wrong length.";
fld.style.background = 'Yellow';
    } else {
        fld.style.background = 'White';
document.getElementById('zipcode_err').style.visibility='hidden';
    }
    return error;
}


</script>
</head>
<body>




<form name="demo" onSubmit="return validateFormOnSubmit(this)" action="http://www.google.com">


<table summary="Demonstration form">
  <tbody>
  <tr>
    <td><label for="firstname">First name:</label></td>
    <td><input name="firstname" size="35" maxlength="50" type="text"></td>
    <td><label>
      <input name="firstname_err" type="text" disabled id="firstname_err" style="visibility:hidden; border:0; color:red;" size="100">
    </label></td>
  </tr>  
  <tr>
    <td><label for="lastname">Last name:</label></td>
    <td><input name="lastname" size="35" maxlength="50" type="text"></td>
    <td><input name="lastname_err" type="text" disabled id="lastname_err" style="visibility:hidden; border:0; color:red;" size="100"></td>
  </tr>
  <tr>
    <td>DOB:</td>
    <td>
  <input name="dob" type="Text" id="demo1" size="25" maxlength="25" readonly="readonly"><a href="javascript:NewCal('demo1','ddmmmyyyy',true,24)"><img src="images/cal.gif" width="16" height="16" border="0" alt="Pick a date"></a>
  <span class="descriptions">pick a date..</span>
  </td>
    <td><input name="dob_err" type="text" disabled id="dob_err" style="visibility:hidden; border:0; color:red;" size="100"></td>
 
  </tr>
  <tr>
    <td><label for="email">Email:</label></td>
    <td><input name="email" size="35" maxlength="30" type="text"></td>
    <td><input name="email_err" type="text" disabled id="email_err" style="visibility:hidden; border:0; color:red;" size="100"></td>
  </tr>  
  <tr>
    <td>Gender:</td>
    <td><label for="gender">
      <input name="gender" type="radio" value="Male" checked>
      Male
      <input type="radio" name="gender" value="Female">
      Female</label></td>
      <td></td>
  </tr>
  <tr>
    <td>
        <label for="from">Address:</label></td>
    <td><textarea name="from" cols="35"></textarea></td>
    <td><input name="address_err" type="text" disabled id="address_err" style="visibility:hidden; border:0; color:red;" size="100"></td>
  </tr>  

  <tr>
    <td>
        <label for="zipcode">Zip Code:</label></td>
    <td><input name="zipcode" size="6" maxlength="6" type="text"></td>
    <td><input name="zipcode_err" type="text" disabled id="zipcode_err" style="visibility:hidden; border:0; color:red;" size="100"></td>
  </tr>  

  <tr>
    <td><label for="phone">Mobile number:</label></td>
    <td><input name="phone" size="10" maxlength="10" type="text"></td>
    <td><input name="phone_err" type="text" disabled id="phone_err" style="visibility:hidden; border:0; color:red;" size="100"></td>
  </tr>  

  <tr>
    <td><label for="photo">Upload Photo:</label></td>
    <td><input name="photo" size="35" maxlength="25" type="file" accept="image/*"></td>
    <td><input name="photo_err" type="text" disabled id="photo_err" style="visibility:hidden; border:0; color:red;" size="100"></td>
  </tr>  

  <tr>
    <td><label for="info">Additional Information:</label></td>
    <td><textarea name="info" cols="35" maxlength="500" ></textarea></td>
    <td><input name="info_err" type="text" disabled id="info_err" style="visibility:hidden; border:0; color:red;" size="100"></td>
  </tr>  



  <tr>
    <td>&nbsp;</td>
    <td><input name="Submit" value="Send" type="submit" ></td>
   
  </tr>
  </tbody>
</table>
</form>
</body>
</html>




datetimepicker.js


//Javascript name: My Date Time Picker
//Date created: 16-Nov-2003 23:19
//Scripter: TengYong Ng
//Website: http://www.rainforestnet.com
//Copyright (c) 2003 TengYong Ng
//FileName: DateTimePicker.js
//Version: 0.8
//Contact: contact@rainforestnet.com
// Note: Permission given to use this script in ANY kind of applications if
//       header lines are left unchanged.


//Global variables
var winCal;
var dtToday=new Date();
var Cal;
var docCal;
var MonthName=["January", "February", "March", "April", "May", "June","July",
"August", "September", "October", "November", "December"];
var WeekDayName=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
var exDateTime;//Existing Date and Time


//Configurable parameters
var cnTop="200";//top coordinate of calendar window.
var cnLeft="500";//left coordinate of calendar window
var WindowTitle ="DateTime Picker";//Date Time Picker title.
var WeekChar=2;//number of character for week day. if 2 then Mo,Tu,We. if 3 then Mon,Tue,Wed.
var CellWidth=20;//Width of day cell.
var DateSeparator="-";//Date Separator, you can change it to "/" if you want.
var TimeMode=24;//default TimeMode value. 12 or 24


var ShowLongMonth=true;//Show long month name in Calendar header. example: "January".
var ShowMonthYear=true;//Show Month and Year in Calendar header.
var MonthYearColor="#cc0033";//Font Color of Month and Year in Calendar header.
var WeekHeadColor="#0099CC";//Background Color in Week header.
var SundayColor="#6699FF";//Background color of Sunday.
var SaturdayColor="#CCCCFF";//Background color of Saturday.
var WeekDayColor="white";//Background color of weekdays.
var FontColor="blue";//color of font in Calendar day cell.
var TodayColor="#FFFF33";//Background color of today.
var SelDateColor="#FFFF99";//Backgrond color of selected date in textbox.
var YrSelColor="#cc0033";//color of font of Year selector.
var ThemeBg="";//Background image of Calendar window.
//end Configurable parameters
//end Global variable


function NewCal(pCtrl,pFormat,pShowTime,pTimeMode)
{
Cal=new Calendar(dtToday);
if ((pShowTime!=null) && (pShowTime))
{
Cal.ShowTime=true;
if ((pTimeMode!=null) &&((pTimeMode=='12')||(pTimeMode=='24')))
{
TimeMode=pTimeMode;
}
}
if (pCtrl!=null)
Cal.Ctrl=pCtrl;
if (pFormat!=null)
Cal.Format=pFormat.toUpperCase();

exDateTime=document.getElementById(pCtrl).value;
if (exDateTime!="")//Parse Date String
{
var Sp1;//Index of Date Separator 1
var Sp2;//Index of Date Separator 2
var tSp1;//Index of Time Separator 1
var tSp1;//Index of Time Separator 2
var strMonth;
var strDate;
var strYear;
var intMonth;
var YearPattern;
var strHour;
var strMinute;
var strSecond;
//parse month
Sp1=exDateTime.indexOf(DateSeparator,0)
Sp2=exDateTime.indexOf(DateSeparator,(parseInt(Sp1)+1));

if ((Cal.Format.toUpperCase()=="DDMMYYYY") || (Cal.Format.toUpperCase()=="DDMMMYYYY"))
{
strMonth=exDateTime.substring(Sp1+1,Sp2);
strDate=exDateTime.substring(0,Sp1);
}
else if ((Cal.Format.toUpperCase()=="MMDDYYYY") || (Cal.Format.toUpperCase()=="MMMDDYYYY"))
{
strMonth=exDateTime.substring(0,Sp1);
strDate=exDateTime.substring(Sp1+1,Sp2);
}
if (isNaN(strMonth))
intMonth=Cal.GetMonthIndex(strMonth);
else
intMonth=parseInt(strMonth,10)-1;
if ((parseInt(intMonth,10)>=0) && (parseInt(intMonth,10)<12))
Cal.Month=intMonth;
//end parse month
//parse Date
if ((parseInt(strDate,10)<=Cal.GetMonDays()) && (parseInt(strDate,10)>=1))
Cal.Date=strDate;
//end parse Date
//parse year
strYear=exDateTime.substring(Sp2+1,Sp2+5);
YearPattern=/^\d{4}$/;
if (YearPattern.test(strYear))
Cal.Year=parseInt(strYear,10);
//end parse year
//parse time
if (Cal.ShowTime==true)
{
tSp1=exDateTime.indexOf(":",0)
tSp2=exDateTime.indexOf(":",(parseInt(tSp1)+1));
strHour=exDateTime.substring(tSp1,(tSp1)-2);
Cal.SetHour(strHour);
strMinute=exDateTime.substring(tSp1+1,tSp2);
Cal.SetMinute(strMinute);
strSecond=exDateTime.substring(tSp2+1,tSp2+3);
Cal.SetSecond(strSecond);
}
}
winCal=window.open("","DateTimePicker","toolbar=0,status=0,menubar=0,fullscreen=no,width=195,height=245,resizable=0,top="+cnTop+",left="+cnLeft);
docCal=winCal.document;
RenderCal();
}


function RenderCal()
{
var vCalHeader;
var vCalData;
var vCalTime;
var i;
var j;
var SelectStr;
var vDayCount=0;
var vFirstDay;


docCal.open();
docCal.writeln("<html><head><title>"+WindowTitle+"</title>");
docCal.writeln("<script>var winMain=window.opener;</script>");
docCal.writeln("</head><body background='"+ThemeBg+"' link="+FontColor+" vlink="+FontColor+"><form name='Calendar'>");


vCalHeader="<table border=1 cellpadding=1 cellspacing=1 width='100%' align=\"center\" valign=\"top\">\n";
//Month Selector
vCalHeader+="<tr>\n<td colspan='7'><table border=0 width='100%' cellpadding=0 cellspacing=0><tr><td align='left'>\n";
vCalHeader+="<select name=\"MonthSelector\" onChange=\"javascript:winMain.Cal.SwitchMth(this.selectedIndex);winMain.RenderCal();\">\n";
for (i=0;i<12;i++)
{
if (i==Cal.Month)
SelectStr="Selected";
else
SelectStr="";
vCalHeader+="<option "+SelectStr+" value >"+MonthName[i]+"\n";
}
vCalHeader+="</select></td>";
//Year selector
vCalHeader+="\n<td align='right'><a href=\"javascript:winMain.Cal.DecYear();winMain.RenderCal()\"><b><font color=\""+YrSelColor+"\"><</font></b></a><font face=\"Verdana\" color=\""+YrSelColor+"\" size=2><b> "+Cal.Year+" </b></font><a href=\"javascript:winMain.Cal.IncYear();winMain.RenderCal()\"><b><font color=\""+YrSelColor+"\">></font></b></a></td></tr></table></td>\n";
vCalHeader+="</tr>";
//Calendar header shows Month and Year
if (ShowMonthYear)
vCalHeader+="<tr><td colspan='7'><font face='Verdana' size='2' align='center' color='"+MonthYearColor+"'><b>"+Cal.GetMonthName(ShowLongMonth)+" "+Cal.Year+"</b></font></td></tr>\n";
//Week day header
vCalHeader+="<tr bgcolor="+WeekHeadColor+">";
for (i=0;i<7;i++)
{
vCalHeader+="<td align='center'><font face='Verdana' size='2'>"+WeekDayName[i].substr(0,WeekChar)+"</font></td>";
}
vCalHeader+="</tr>";
docCal.write(vCalHeader);

//Calendar detail
CalDate=new Date(Cal.Year,Cal.Month);
CalDate.setDate(1);
vFirstDay=CalDate.getDay();
vCalData="<tr>";
for (i=0;i<vFirstDay;i++)
{
vCalData=vCalData+GenCell();
vDayCount=vDayCount+1;
}
for (j=1;j<=Cal.GetMonDays();j++)
{
var strCell;
vDayCount=vDayCount+1;
if ((j==dtToday.getDate())&&(Cal.Month==dtToday.getMonth())&&(Cal.Year==dtToday.getFullYear()))
strCell=GenCell(j,true,TodayColor);//Highlight today's date
else
{
if (j==Cal.Date)
{
strCell=GenCell(j,true,SelDateColor);
}
else
{
if (vDayCount%7==0)
strCell=GenCell(j,false,SaturdayColor);
else if ((vDayCount+6)%7==0)
strCell=GenCell(j,false,SundayColor);
else
strCell=GenCell(j,null,WeekDayColor);
}
}
vCalData=vCalData+strCell;


if((vDayCount%7==0)&&(j<Cal.GetMonDays()))
{
vCalData=vCalData+"</tr>\n<tr>";
}
}
docCal.writeln(vCalData);
//Time picker
if (Cal.ShowTime)
{
var showHour;
showHour=Cal.getShowHour();
vCalTime="<tr>\n<td colspan='7' align='center'>";
vCalTime+="<input type='text' name='hour' maxlength=2 size=1 style=\"WIDTH: 22px\" value="+showHour+" onchange=\"javascript:winMain.Cal.SetHour(this.value)\">";
vCalTime+=" : ";
vCalTime+="<input type='text' name='minute' maxlength=2 size=1 style=\"WIDTH: 22px\" value="+Cal.Minutes+" onchange=\"javascript:winMain.Cal.SetMinute(this.value)\">";
vCalTime+=" : ";
vCalTime+="<input type='text' name='second' maxlength=2 size=1 style=\"WIDTH: 22px\" value="+Cal.Seconds+" onchange=\"javascript:winMain.Cal.SetSecond(this.value)\">";
if (TimeMode==12)
{
var SelectAm =(parseInt(Cal.Hours,10)<12)? "Selected":"";
var SelectPm =(parseInt(Cal.Hours,10)>=12)? "Selected":"";


vCalTime+="<select name=\"ampm\" onchange=\"javascript:winMain.Cal.SetAmPm(this.options[this.selectedIndex].value);\">";
vCalTime+="<option "+SelectAm+" value=\"AM\">AM</option>";
vCalTime+="<option "+SelectPm+" value=\"PM\">PM<option>";
vCalTime+="</select>";
}
vCalTime+="\n</td>\n</tr>";
docCal.write(vCalTime);
}
//end time picker
docCal.writeln("\n</table>");
docCal.writeln("</form></body></html>");
docCal.close();
}


function GenCell(pValue,pHighLight,pColor)//Generate table cell with value
{
var PValue;
var PCellStr;
var vColor;
var vHLstr1;//HighLight string
var vHlstr2;
var vTimeStr;

if (pValue==null)
PValue="";
else
PValue=pValue;

if (pColor!=null)
vColor="bgcolor=\""+pColor+"\"";
else
vColor="";
if ((pHighLight!=null)&&(pHighLight))
{vHLstr1="color='red'><b>";vHLstr2="</b>";}
else
{vHLstr1=">";vHLstr2="";}

if (Cal.ShowTime)
{
vTimeStr="winMain.document.getElementById('"+Cal.Ctrl+"').value+=' '+"+"winMain.Cal.getShowHour()"+"+':'+"+"winMain.Cal.Minutes"+"+':'+"+"winMain.Cal.Seconds";
if (TimeMode==12)
vTimeStr+="+' '+winMain.Cal.AMorPM";
}
else
vTimeStr="";
PCellStr="<td "+vColor+" width="+CellWidth+" align='center'><font face='verdana' size='2'"+vHLstr1+"<a href=\"javascript:winMain.document.getElementById('"+Cal.Ctrl+"').value='"+Cal.FormatDate(PValue)+"';"+vTimeStr+";window.close();\">"+PValue+"</a>"+vHLstr2+"</font></td>";
return PCellStr;
}


function Calendar(pDate,pCtrl)
{
//Properties
this.Date=pDate.getDate();//selected date
this.Month=pDate.getMonth();//selected month number
this.Year=pDate.getFullYear();//selected year in 4 digits
this.Hours=pDate.getHours();

if (pDate.getMinutes()<10)
this.Minutes="0"+pDate.getMinutes();
else
this.Minutes=pDate.getMinutes();

if (pDate.getSeconds()<10)
this.Seconds="0"+pDate.getSeconds();
else
this.Seconds=pDate.getSeconds();

this.MyWindow=winCal;
this.Ctrl=pCtrl;
this.Format="ddMMyyyy";
this.Separator=DateSeparator;
this.ShowTime=false;
if (pDate.getHours()<12)
this.AMorPM="AM";
else
this.AMorPM="PM";
}


function GetMonthIndex(shortMonthName)
{
for (i=0;i<12;i++)
{
if (MonthName[i].substring(0,3).toUpperCase()==shortMonthName.toUpperCase())
{ return i;}
}
}
Calendar.prototype.GetMonthIndex=GetMonthIndex;


function IncYear()
{ Cal.Year++;}
Calendar.prototype.IncYear=IncYear;


function DecYear()
{ Cal.Year--;}
Calendar.prototype.DecYear=DecYear;

function SwitchMth(intMth)
{ Cal.Month=intMth;}
Calendar.prototype.SwitchMth=SwitchMth;


function SetHour(intHour)
{
var MaxHour;
var MinHour;
if (TimeMode==24)
{ MaxHour=23;MinHour=0}
else if (TimeMode==12)
{ MaxHour=12;MinHour=1}
else
alert("TimeMode can only be 12 or 24");
var HourExp=new RegExp("^\\d\\d$");
if (HourExp.test(intHour) && (parseInt(intHour,10)<=MaxHour) && (parseInt(intHour,10)>=MinHour))
{
if ((TimeMode==12) && (Cal.AMorPM=="PM"))
{
if (parseInt(intHour,10)==12)
Cal.Hours=12;
else
Cal.Hours=parseInt(intHour,10)+12;
}
else if ((TimeMode==12) && (Cal.AMorPM=="AM"))
{
if (intHour==12)
intHour-=12;
Cal.Hours=parseInt(intHour,10);
}
else if (TimeMode==24)
Cal.Hours=parseInt(intHour,10);
}
}
Calendar.prototype.SetHour=SetHour;


function SetMinute(intMin)
{
var MinExp=new RegExp("^\\d\\d$");
if (MinExp.test(intMin) && (intMin<60))
Cal.Minutes=intMin;
}
Calendar.prototype.SetMinute=SetMinute;


function SetSecond(intSec)
{
var SecExp=new RegExp("^\\d\\d$");
if (SecExp.test(intSec) && (intSec<60))
Cal.Seconds=intSec;
}
Calendar.prototype.SetSecond=SetSecond;


function SetAmPm(pvalue)
{
this.AMorPM=pvalue;
if (pvalue=="PM")
{
this.Hours=(parseInt(this.Hours,10))+12;
if (this.Hours==24)
this.Hours=12;
}
else if (pvalue=="AM")
this.Hours-=12;
}
Calendar.prototype.SetAmPm=SetAmPm;


function getShowHour()
{
var finalHour;
    if (TimeMode==12)
    {
    if (parseInt(this.Hours,10)==0)
{
this.AMorPM="AM";
finalHour=parseInt(this.Hours,10)+12;
}
else if (parseInt(this.Hours,10)==12)
{
this.AMorPM="PM";
finalHour=12;
}
else if (this.Hours>12)
{
this.AMorPM="PM";
if ((this.Hours-12)<10)
finalHour="0"+((parseInt(this.Hours,10))-12);
else
finalHour=parseInt(this.Hours,10)-12;
}
else
{
this.AMorPM="AM";
if (this.Hours<10)
finalHour="0"+parseInt(this.Hours,10);
else
finalHour=this.Hours;
}
}
else if (TimeMode==24)
{
if (this.Hours<10)
finalHour="0"+parseInt(this.Hours,10);
else
finalHour=this.Hours;
}
return finalHour;
}
Calendar.prototype.getShowHour=getShowHour;


function GetMonthName(IsLong)
{
var Month=MonthName[this.Month];
if (IsLong)
return Month;
else
return Month.substr(0,3);
}
Calendar.prototype.GetMonthName=GetMonthName;


function GetMonDays()//Get number of days in a month
{
var DaysInMonth=[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
if (this.IsLeapYear())
{
DaysInMonth[1]=29;
}
return DaysInMonth[this.Month];
}
Calendar.prototype.GetMonDays=GetMonDays;


function IsLeapYear()
{
if ((this.Year%4)==0)
{
if ((this.Year%100==0) && (this.Year%400)!=0)
{
return false;
}
else
{
return true;
}
}
else
{
return false;
}
}
Calendar.prototype.IsLeapYear=IsLeapYear;


function FormatDate(pDate)
{
if (this.Format.toUpperCase()=="DDMMYYYY")
return (pDate+DateSeparator+(this.Month+1)+DateSeparator+this.Year);
else if (this.Format.toUpperCase()=="DDMMMYYYY")
return (pDate+DateSeparator+this.GetMonthName(false)+DateSeparator+this.Year);
else if (this.Format.toUpperCase()=="MMDDYYYY")
return ((this.Month+1)+DateSeparator+pDate+DateSeparator+this.Year);
else if (this.Format.toUpperCase()=="MMMDDYYYY")
return (this.GetMonthName(false)+DateSeparator+pDate+DateSeparator+this.Year);
}
Calendar.prototype.FormatDate=FormatDate;


 - download